From ee1a3beff37cd16ba16e7165dd623bac0cd8294b Mon Sep 17 00:00:00 2001 From: Paul Zinselmeyer Date: Mon, 27 May 2024 11:10:14 +0200 Subject: [PATCH] [CI] add latex CI --- .gitea/workflows/build-latex.yaml | 22 ++ .gitignore | 9 + .../.gitignore | 220 ------------------ flake.lock | 27 +++ flake.nix | 62 +++++ 5 files changed, 120 insertions(+), 220 deletions(-) create mode 100644 .gitea/workflows/build-latex.yaml delete mode 100644 Assignment 4 - Protokollsicherheit (Praxis)/.gitignore create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.gitea/workflows/build-latex.yaml b/.gitea/workflows/build-latex.yaml new file mode 100644 index 0000000..0ea7e73 --- /dev/null +++ b/.gitea/workflows/build-latex.yaml @@ -0,0 +1,22 @@ +name: "Latex Build" +on: + pull_request: + push: + workflow_dispatch: +jobs: + build-latex: + runs-on: debian-latest + strategy: + matrix: + assignment: [ + "Assignment 4 - Protokollsicherheit (Praxis)" + ] + steps: + - uses: actions/checkout@v3 + - uses: DeterminateSystems/nix-installer-action@main + - uses: DeterminateSystems/magic-nix-cache-action@main + - run: "nix build .#\"${{ matrix.assignment }}\"" + - uses: actions/upload-artifact@v3 + with: + name: "${{ matrix.assignment }}" + path: result/abgabe.pdf diff --git a/.gitignore b/.gitignore index 1122fd4..9dff248 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,12 @@ +# Nix +result + +# Latex +*.pdf +*.log +*.synctex.gz + + # ---> Python # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/Assignment 4 - Protokollsicherheit (Praxis)/.gitignore b/Assignment 4 - Protokollsicherheit (Praxis)/.gitignore deleted file mode 100644 index 76f8498..0000000 --- a/Assignment 4 - Protokollsicherheit (Praxis)/.gitignore +++ /dev/null @@ -1,220 +0,0 @@ -# latex -*.synctex.gz -*.log - -# ---> Python -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control -#poetry.lock - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -#pdm.lock -# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it -# in version control. -# https://pdm.fming.dev/#use-with-ide -.pdm.toml - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ - -# ---> C -# Prerequisites -*.d - -# Object files -*.o -*.ko -*.obj -*.elf - -# Linker output -*.ilk -*.map -*.exp - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb -*.pdb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf - diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..c7dced2 --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1716542732, + "narHash": "sha256-0Y9fRr0CUqWT4KgBITmaGwlnNIGMYuydu2L8iLTfHU4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d12251ef6e8e6a46e05689eeccd595bdbd3c9e60", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..122c318 --- /dev/null +++ b/flake.nix @@ -0,0 +1,62 @@ +{ + description = "LaTeX Documents for Systemsicherheit"; + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05"; + }; + outputs = { self, nixpkgs }: let + assignments = [ + "Assignment 4 - Protokollsicherheit (Praxis)" + ]; + + forAllSystems = function: + nixpkgs.lib.genAttrs [ + "x86_64-linux" + "aarch64-linux" + ] (system: function { + inherit system; + pkgs = nixpkgs.legacyPackages.${system}; + }); + + forAllAssignments = function: + nixpkgs.lib.genAttrs assignments (assignment: function assignment); + + texPackages = pkgs: pkgs.texlive.combine { + inherit (pkgs.texlive) scheme-full latex-bin latexmk; + }; + in rec { + packages = forAllSystems({system, pkgs}: forAllAssignments(assignment: let + tex = texPackages pkgs; + document = pkgs.stdenvNoCC.mkDerivation rec { + name = assignment; + src = self; + buildInputs = [ pkgs.coreutils tex ]; + phases = [ "unpackPhase" "buildPhase" "installPhase" ]; + buildPhase = '' + export PATH="${pkgs.lib.makeBinPath buildInputs}"; + mkdir -p .cache/texmf-var + cd "./${assignment}" + env TEXMFHOME=.cache TEXMFVAR=.cache/texmf-var \ + latexmk -interaction=nonstopmode -pdf -lualatex \ + "./abgabe.tex" + ''; + installPhase = '' + mkdir -p $out + cp *.pdf $out/ + ''; + }; + in document) // { + default = packages.${system}.${pkgs.lib.last assignments}; + }); + + devShells = forAllSystems({pkgs, ...}: let + tex = texPackages pkgs; + in { + default = pkgs.mkShell { + packages = [ pkgs.coreutils tex ]; + }; + }); + + hydraJobs = packages; + }; +} +