diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml new file mode 100644 index 0000000..f8d392b --- /dev/null +++ b/.github/workflows/build-and-deploy.yml @@ -0,0 +1,115 @@ +name: Build and Deploy +on: + push: + branches: main + pull_request: + branches: main + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +env: + REGEX_INCLUDE: "\\.(pdf|link|txt)$" + +jobs: + build: + name: Build pdfs out of tex,md and various doc files + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + with: + fetch-depth: 1 + + - name: Install tex + run: | + sudo apt update + sudo apt install texlive-latex-extra texlive-lang-italian texlive-lang-english texlive-fonts-recommended texlive-bibtex-extra texlive-science texlive-xetex + + - name: Install format conversion tools + run: | + sudo apt install libreoffice + wget https://github.com/jgm/pandoc/releases/download/2.18/pandoc-2.18-linux-amd64.tar.gz -O /tmp/pandoc.tar.gz + tar xfz /tmp/pandoc.tar.gz -C /tmp + sudo mv /tmp/pandoc-*/bin/* /usr/bin + + - name: Recursively compile tex files + run: ./.github/workflows/rec "*\.tex$" "xelatex -pdf" + + - name: Recursively compile (doc|ppt)x? files + run: ./.github/workflows/rec "*\.(doc|ppt)x?$" "libreoffice --headless --convert-to pdf --outdir ." + + - name: Recursively compile md files + run: ./.github/workflows/rec "*\.md$" ${GITHUB_WORKSPACE}/.github/workflows/md2pdf + + - name: Generate build artifact + uses: actions/upload-artifact@v2 + with: + name: build-result + path: . + + statik: + name: Generate the static listing + runs-on: ubuntu-latest + needs: build + steps: + - name: Download compiled files + uses: actions/download-artifact@v2 + with: + name: build-result + + - name: Install go + uses: actions/setup-go@v3 + with: + go-version: ">=1.18.0" + + - name: Install statik + run: go install github.com/lucat1/statik@latest + + - name: Update packages and install rsync + run: sudo apt install rsync + + - name: Generate static directory listing + run: $(go env GOPATH)/bin/statik -page .github/workflows/page.gohtml -l -b "https://${{ github.event.repository.owner.name }}.github.io/${{ github.event.repository.name }}/" -i "$REGEX_INCLUDE" site + + - name: Generate site artifact + if: github.ref == 'refs/heads/main' + uses: actions/upload-artifact@v2 + with: + name: statik-build + path: ./site + + deploy: + name: Deploy to Github Pages + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: statik + if: github.ref == 'refs/heads/main' + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Download static site artifact + uses: actions/download-artifact@v2 + with: + name: statik-build + path: site + - name: Setup Pages + uses: actions/configure-pages@v1 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: site + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@main diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..0e35cc3 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,63 @@ +name: Lint file names +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + check: + name: Check file names + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + with: + fetch-depth: 1 + - uses: csunibo/lint-filenames@v1.3.2 + name: Lint file names under ./appunti + with: + path: "./appunti" + pattern: '^(\.gitkeep|([a-z0-9]+(-[a-z0-9]+)*\.[a-zA-Z]+))$' + recursive: "true" + - uses: csunibo/lint-filenames@v1.3.2 + name: Lint file names under ./dispense + with: + path: "./dispense" + pattern: '^(\.gitkeep|(\d+(-[a-z0-9]+)+\.[a-zA-Z]+))$' + recursive: "true" + - uses: csunibo/lint-filenames@v1.3.2 + name: Lint file names under ./esercizi + with: + path: "./esercizi" + pattern: '^(\.gitkeep|([a-z0-9]+(-[a-z0-9]+)*\.[a-zA-Z]+))$' + recursive: "true" + - uses: csunibo/lint-filenames@v1.3.2 + name: Lint file names under ./lavagne + with: + path: "./lavagne" + pattern: '^(\.gitkeep|(\d{4}-\d{2}-\d{2}(-[a-z0-9]+)+\.[a-zA-Z]+))$' + recursive: "true" + - uses: csunibo/lint-filenames@v1.3.2 + name: Lint file names under ./libri + with: + path: "./libri" + pattern: '^(\.gitkeep|([a-z0-9]+(-[a-z0-9]+)*\.[a-zA-Z]+))$' + recursive: "true" + - uses: csunibo/lint-filenames@v1.3.2 + name: Lint file names under ./lucidi + with: + path: "./lucidi" + pattern: '^(\.gitkeep|(\d+(-[a-z0-9]+)+\.[a-zA-Z]+))$' + recursive: "true" + - uses: csunibo/lint-filenames@v1.3.2 + name: Lint file names under ./prove + with: + path: "./prove" + pattern: '^(\.gitkeep)|((scritto|totale|parziale\d|orale(\d?)|progetto(\d?))-\d{4}(-\d{2}-\d{2})?(-[a-z0-9]+)?-(testo|soluzione)(-[a-z0-9]+)?\.[a-zA-Z0-9]+)$' + recursive: "true" + - uses: csunibo/lint-filenames@v1.3.2 + name: Lint file names under ./varie + with: + path: "./varie" + pattern: '^(\.gitkeep|([a-z0-9]+(-[a-z0-9]+)*\.[a-zA-Z]+))$' + recursive: "true" diff --git a/.github/workflows/md2pdf b/.github/workflows/md2pdf new file mode 100755 index 0000000..54f62a2 --- /dev/null +++ b/.github/workflows/md2pdf @@ -0,0 +1,3 @@ +#!/bin/bash -ex + +pandoc --pdf-engine=xelatex -t pdf $1 -o ${1%.md}.pdf diff --git a/.github/workflows/page.gohtml b/.github/workflows/page.gohtml new file mode 100644 index 0000000..b4cd5ef --- /dev/null +++ b/.github/workflows/page.gohtml @@ -0,0 +1,38 @@ + + +
+ + + + + + + +{{ $d.ModTime.Format "02 Jan 06 15:04 MST" }}
+{{ $d.Size }}
+ {{ end }} + {{ range $i,$f := .Root.Files }} + {{ $f.Name }} +{{ $f.ModTime.Format "02 Jan 06 15:04 MST" }}
+{{ $f.Size }}
+ {{ end }} +Generated by statik on {{ .Today.Format "02 Jan 06 15:04 MST" }}
+ + diff --git a/.github/workflows/rec b/.github/workflows/rec new file mode 100755 index 0000000..07d64b3 --- /dev/null +++ b/.github/workflows/rec @@ -0,0 +1,11 @@ +#!/bin/sh -ex + +# The chaining of find and grep was deemded necessary due to find's lack of a +# proper regex implementation in find. Also note that on linux find does not +# support -E like on BSDs. +for file in $(find . | grep -E "$1"); do + back=$PWD + cd $(dirname $file) + $2 $(basename $file) + cd $back +done diff --git a/README.md b/README.md new file mode 100644 index 0000000..f4e2e84 --- /dev/null +++ b/README.md @@ -0,0 +1,37 @@ +# \