Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
71f662b845 | ||
|
|
90246f1c86 | ||
|
|
7a6a7ab789 | ||
|
|
aa498321b7 | ||
|
|
3925047e11 | ||
|
|
174daa9e84 | ||
|
|
400f2fb3df | ||
|
|
53dd127965 | ||
|
|
e7097fb422 | ||
|
|
12c950fd7e |
@@ -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
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
FROM texlive/texlive@sha256:a7ae4dfa9d521b5db14446872fa488b839021d1f604d0a3c74461784895f2a67
|
||||||
|
|
||||||
|
USER root
|
||||||
|
|
||||||
|
# Install Node.js 20 for JavaScript-based Gitea Actions,
|
||||||
|
# along with Git and other required utilities.
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
git \
|
||||||
|
bash \
|
||||||
|
&& curl -fsSL https://deb.nodesource.com/setup_20.x \
|
||||||
|
-o /tmp/nodesource_setup.sh \
|
||||||
|
&& bash /tmp/nodesource_setup.sh \
|
||||||
|
&& apt-get install -y --no-install-recommends nodejs \
|
||||||
|
&& node --version \
|
||||||
|
&& git --version \
|
||||||
|
&& rm -rf /var/lib/apt/lists/* /tmp/nodesource_setup.sh
|
||||||
@@ -94,11 +94,11 @@
|
|||||||
\singlespacing
|
\singlespacing
|
||||||
\include{prologue}
|
\include{prologue}
|
||||||
\include{devopsIntroduction}
|
\include{devopsIntroduction}
|
||||||
|
\include{devopsExampleAssignment}
|
||||||
\include{linuxCommands}
|
\include{linuxCommands}
|
||||||
\include{digitalOceanDocker}
|
\include{digitalOceanDocker}
|
||||||
\include{latexDocker}
|
\include{latexDocker}
|
||||||
\include{projectProposal}
|
\include{projectProposal}
|
||||||
\include{giteaStartup}
|
|
||||||
|
|
||||||
\setcounter{page}{1}
|
\setcounter{page}{1}
|
||||||
\pagenumbering{arabic}
|
\pagenumbering{arabic}
|
||||||
|
|||||||
+133
@@ -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{linuxCommands}
|
||||||
|
\include{digitalOceanDocker}
|
||||||
|
\include{latexDocker}
|
||||||
|
\include{projectProposal}
|
||||||
|
\include{giteaStartup}
|
||||||
|
|
||||||
|
\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