From dc72ebf76cfbb1411be432a1446ac41b8b2e427c Mon Sep 17 00:00:00 2001 From: Paul Zinselmeyer Date: Mon, 27 May 2024 11:10:14 +0200 Subject: [PATCH] add ci latex --- .gitea/workflows/build-latex.yaml | 23 ++ .gitignore | 9 + .../.gitignore | 220 ------------------ .../abgabe.pdf | Bin 42229 -> 0 bytes flake.lock | 27 +++ flake.nix | 62 +++++ 6 files changed, 121 insertions(+), 220 deletions(-) create mode 100644 .gitea/workflows/build-latex.yaml delete mode 100644 Assignment 4 - Protokollsicherheit (Praxis)/.gitignore delete mode 100644 Assignment 4 - Protokollsicherheit (Praxis)/abgabe.pdf 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..3865430 --- /dev/null +++ b/.gitea/workflows/build-latex.yaml @@ -0,0 +1,23 @@ +name: "Latex Build" +on: + pull_request: + push: + workflow_dispatch: +jobs: + build-latex: + runs-on: debian-latest + strategy: + matrix: + assignment: [ + "Assignment 4 - Protokollsicherheit (Praxis)" + ] + steps: + - run: apt update && apt install sudo -y + - 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 }}.pdf" + 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/Assignment 4 - Protokollsicherheit (Praxis)/abgabe.pdf b/Assignment 4 - Protokollsicherheit (Praxis)/abgabe.pdf deleted file mode 100644 index d809a48dfe3d2d190f97892d3e2d96b17d1d6eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42229 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 D(jPJx 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; + }; +} +