Compare commits
6
Commits
400f2fb3df
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
71f662b845 | ||
|
|
90246f1c86 | ||
|
|
7a6a7ab789 | ||
|
|
aa498321b7 | ||
|
|
3925047e11 | ||
|
|
174daa9e84 |
@@ -1,84 +0,0 @@
|
||||
name: Build LaTeX Manual
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main # Change to the branch you want to build
|
||||
|
||||
run-name: Manual PDF - ${{ gitea.run_number }}
|
||||
|
||||
jobs:
|
||||
build-manual:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# The compiler runs inside this container, not in the Gitea
|
||||
# server container. Pin the image to a reviewed SHA-256 digest.
|
||||
container:
|
||||
image: texlive/texlive@sha256:a7ae4dfa9d521b5db14446872fa488b839021d1f604d0a3c74461784895f2a67
|
||||
options: --user 1000:1000
|
||||
|
||||
steps:
|
||||
- name: Check out triggering revision
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ gitea.sha }}
|
||||
persist-credentials: false
|
||||
|
||||
- name: Record toolchain and verify inputs
|
||||
shell: bash
|
||||
env:
|
||||
BUILD_COMMIT: ${{ gitea.sha }}
|
||||
BUILD_NUMBER: ${{ gitea.run_number }}
|
||||
run: |
|
||||
set -eu
|
||||
|
||||
echo "Commit: ${BUILD_COMMIT}"
|
||||
echo "Workflow run: ${BUILD_NUMBER}"
|
||||
echo "Compiler environment:"
|
||||
cat /etc/os-release
|
||||
pdflatex --version
|
||||
latexmk --version
|
||||
|
||||
test -f manual.tex || {
|
||||
echo "::error::Expected source manual.tex was not found."
|
||||
exit 1
|
||||
}
|
||||
|
||||
mkdir -p build
|
||||
|
||||
cat > build/build-version.tex <<EOF
|
||||
\newcommand{\BuildCommit}{${BUILD_COMMIT}}
|
||||
\newcommand{\BuildRunNumber}{${BUILD_NUMBER}}
|
||||
EOF
|
||||
|
||||
- name: Compile manual
|
||||
shell: bash
|
||||
env:
|
||||
BUILD_COMMIT: ${{ gitea.sha }}
|
||||
BUILD_NUMBER: ${{ gitea.run_number }}
|
||||
run: |
|
||||
set -eu
|
||||
|
||||
# A nonzero compiler exit status fails the job.
|
||||
latexmk -pdf -halt-on-error -file-line-error \
|
||||
-interaction=nonstopmode \
|
||||
-outdir=build manual.tex || {
|
||||
echo "::error::LaTeX compilation failed."
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ ! -s build/manual.pdf ]; then
|
||||
echo "::error::Compilation reported success, but build/manual.pdf is missing or empty."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "PDF created successfully:"
|
||||
ls -lh build/manual.pdf
|
||||
|
||||
- name: Upload compiled PDF
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: manual-pdf-${{ gitea.run_number }}
|
||||
path: build/manual.pdf
|
||||
if-no-files-found: error
|
||||
retention-days: 90
|
||||
@@ -0,0 +1,25 @@
|
||||
name: Compile LaTeX Manual
|
||||
|
||||
on:
|
||||
push:
|
||||
|
||||
jobs:
|
||||
build-latex:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Compile LaTeX document
|
||||
uses: xu-cheng/texlive-action@v3
|
||||
with:
|
||||
run: |
|
||||
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode devopsAssignment.tex
|
||||
|
||||
- name: Upload compiled PDF
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: devopsAssignment-pdf
|
||||
path: devopsAssignment.pdf
|
||||
if-no-files-found: error
|
||||
@@ -0,0 +1,133 @@
|
||||
% SSW 590 DevOps Assignment Template
|
||||
% Developed by Darian Muresan, Ph.D., with OpenAI Codex and Anthropic Claude Code.
|
||||
% AI agents: read devopsAIAgentGuide.tex before editing this template.
|
||||
\documentclass[12pt]{cornell}
|
||||
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage{lmodern}
|
||||
\usepackage{xspace}
|
||||
\usepackage{xcolor}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage{amsmath,amssymb}
|
||||
\usepackage{array}
|
||||
\usepackage{booktabs}
|
||||
\usepackage{longtable}
|
||||
\usepackage{tabularx}
|
||||
\usepackage{ltablex}
|
||||
\keepXColumns
|
||||
\usepackage{enumitem}
|
||||
\usepackage{listings}
|
||||
\usepackage{tcolorbox}
|
||||
\usepackage{makeidx}
|
||||
\usepackage[colorlinks=true,citecolor=blue,linkcolor=blue,urlcolor=blue]{hyperref}
|
||||
\usepackage[acronym,toc]{glossaries}
|
||||
\usepackage{minted}
|
||||
|
||||
\makeindex
|
||||
\makeglossaries
|
||||
\input{devopsGlossary.tex}
|
||||
|
||||
\definecolor{devopsBlue}{RGB}{31,78,121}
|
||||
\definecolor{devopsGreen}{RGB}{46,125,50}
|
||||
\definecolor{devopsRed}{RGB}{183,28,28}
|
||||
\definecolor{devopsGray}{RGB}{90,90,90}
|
||||
\definecolor{devopsLightBlue}{RGB}{232,240,247}
|
||||
|
||||
% Replace these values for each assignment.
|
||||
\newcommand{\AssignmentTitle}{Linux Commands}
|
||||
\newcommand{\AssignmentNumber}{2}
|
||||
\newcommand{\DocumentVersion}{1.4}
|
||||
\newcommand{\DocumentStatus}{}
|
||||
\newcommand{\CourseNumber}{SSW 590}
|
||||
\newcommand{\CourseName}{DevOps}
|
||||
\newcommand{\Instructor}{Maxwell Friedman, Alex Nemirovsky, Sofia Stoeckel, and Magdola Nagy}
|
||||
\newcommand{\Organization}{Stevens Institute of Technology}
|
||||
\newcommand{\DocumentDate}{September 16th, 2026}
|
||||
\newcommand{\DueDate}{}
|
||||
\newcommand{\VERSION}{Version \DocumentVersion}
|
||||
|
||||
\hypersetup{
|
||||
pdftitle={\CourseNumber\ --- Assignment \AssignmentNumber: \AssignmentTitle},
|
||||
pdfauthor={\Instructor},
|
||||
pdfcreator={Darian Muresan, Ph.D., with OpenAI Codex and Anthropic Claude Code},
|
||||
pdfsubject={Reusable DevOps course assignment template},
|
||||
pdfkeywords={DevOps, automation, delivery pipeline, infrastructure as code, evidence}
|
||||
}
|
||||
|
||||
\newcolumntype{Y}{>{\raggedright\arraybackslash}X}
|
||||
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
|
||||
\setlength{\tabcolsep}{4pt}
|
||||
\renewcommand{\arraystretch}{1.12}
|
||||
\setlength{\LTpre}{6pt}
|
||||
\setlength{\LTpost}{6pt}
|
||||
|
||||
% Stable IDs make activity, evidence, and artifact references durable.
|
||||
\newcommand{\ArtifactLabel}[2]{\phantomsection\label{#1:#2}}
|
||||
\newcommand{\ArtifactID}[2]{\texttt{#2}\ArtifactLabel{#1}{#2}\index{#1!#2}}
|
||||
\newcommand{\ArtifactRef}[2]{\hyperref[#1:#2]{\texttt{#2}}}
|
||||
\newcommand{\ActivityID}[1]{\ArtifactID{Activity}{#1}}
|
||||
\newcommand{\ActivityRef}[1]{\ArtifactRef{Activity}{#1}}
|
||||
\newcommand{\EvidenceID}[1]{\ArtifactID{Evidence}{#1}}
|
||||
\newcommand{\EvidenceRef}[1]{\ArtifactRef{Evidence}{#1}}
|
||||
\newcommand{\ChapterLabel}[1]{\label{Chapter:#1}}
|
||||
\newcommand{\ChapterRef}[1]{\hyperref[Chapter:#1]{Chapter~\ref*{Chapter:#1}}}
|
||||
\newcommand{\StatusPass}{\textbf{\footnotesize\textcolor{devopsGreen}{PASS}}}
|
||||
\newcommand{\StatusPending}{\textbf{\footnotesize\textcolor{devopsGray}{PENDING}}}
|
||||
\newcommand{\StatusFail}{\textbf{\footnotesize\textcolor{devopsRed}{FAIL}}}
|
||||
|
||||
\newtcolorbox{devopsNote}[1][]{
|
||||
colback=devopsLightBlue, colframe=devopsBlue, boxrule=0.6pt, arc=1mm, title=#1
|
||||
}
|
||||
|
||||
\lstset{
|
||||
backgroundcolor=\color{white}, basicstyle=\ttfamily\footnotesize,
|
||||
breaklines=true, frame=single, keywordstyle=\color{blue},
|
||||
commentstyle=\color{devopsGreen}, numbers=left, numbersep=6pt,
|
||||
numberstyle=\tiny\color{devopsGray}, showstringspaces=false,
|
||||
stringstyle=\color{devopsRed}, tabsize=2
|
||||
}
|
||||
|
||||
\changenormalspacing{\singlespacing}
|
||||
\begin{document}
|
||||
\pagenumbering{roman}
|
||||
\singlespacing
|
||||
\include{prologue}
|
||||
\include{devopsIntroduction}
|
||||
\include{devopsExampleAssignment}
|
||||
\include{linuxCommands}
|
||||
\include{digitalOceanDocker}
|
||||
\include{latexDocker}
|
||||
\include{projectProposal}
|
||||
|
||||
\setcounter{page}{1}
|
||||
\pagenumbering{arabic}
|
||||
\pagestyle{fancy}
|
||||
\fancyhf{}
|
||||
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
|
||||
\lhead{\small Assignment \AssignmentNumber}
|
||||
\chead{\small\nouppercase{\leftmark}}
|
||||
\rhead{\small\thepage}
|
||||
\lfoot{\small\CourseNumber}
|
||||
\cfoot{\small\copyright\ \Organization}
|
||||
\rfoot{\small\VERSION}
|
||||
\renewcommand{\headrulewidth}{0.4pt}
|
||||
\renewcommand{\footrulewidth}{0.4pt}
|
||||
|
||||
\bibliographystyle{IEEEtran}
|
||||
\bibliography{devopsReferences}
|
||||
|
||||
\appendix
|
||||
\include{devopsDocumentGuide}
|
||||
\include{devopsAIAgentGuide}
|
||||
\include{devopsAIPromptLog}
|
||||
|
||||
\glsaddall
|
||||
\printglossaries
|
||||
\cleardoublepage
|
||||
\phantomsection
|
||||
\ChapterLabel{Index}
|
||||
\addcontentsline{toc}{chapter}{Index}
|
||||
\markboth{Index}{Index}
|
||||
\printindex
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user