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 @@ + + + + + + + + + + + Index of {{ .Root.URL.Path }} + + + + + + + +

+ Index of csunibo/{{ range $i,$p := .Parts }}{{ $p.Name }}/{{ end }} +

+
+
+ {{ range $i,$d := .Root.Directories }} + {{ $d.Name }} +

{{ $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 @@ +# \ + +Una raccolta di risorse per l'insegnamento di \ del Corso di +Laurea in Informatica. + +## Presentazione + +[Questo sito](https://csunibo.github.io/) elenca staticamente +i contenuti della raccolta. Qui, documenti e presentazioni con estensione +`.md`, `.tex`, `.doc`, `.docx`, `.ppt` o `.pptx` sono automaticamente +convertiti in formato PDF. + +## Contribuire + +Si può contribuire al progetto tramite una [_pull request_](https://docs.github.com/en/enterprise-server@3.1/pull-requests). +La seguente tabella elenca gli identificativi validi per le cartelle a livello +radice. Ciascun contenuto deve essere collocato nella cartella che meglio lo +descrive e avere un nome accettato dalla relativa espressione regolare, qualora +essa sia specificata. + +| Identificativo | Espressione regolare accettante i nomi dei contenuti | Esempi | +| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------- | +| `appunti` | `[a-z0-9]+(-[a-z0-9]+)*\.[a-zA-Z]+` | `notion-di-mario-modulo2.link`, `glossario.tex` | +| `dispense` | `\d+(-[a-z0-9]+)+\.[a-zA-Z]+` | `00-introduzione.pdf`, `01-fondamenti-del-calcolo.txt` | +| `esercizi` | `[a-z0-9]+(-[a-z0-9]+)*\.[a-zA-Z]+` | `eserciziario-del-tutor.pdf`, `esercitazione-2022-05-10.tex`, `esercizio-1-12.c` | +| `lavagne` | `\d{4}-\d{2}-\d{2}(-[a-z0-9]+)+\.[a-zA-Z]+` | `2022-02-21-presentazione.pdf`, `2022-02-22-modelli-di-calcolo.png` | +| `libri` | `[a-z0-9]+(-[a-z0-9]+)*\.[a-zA-Z]+` | `fioresi-morigi-introduzione-all-algebra-lineare.pdf` | +| `lucidi` | `\d+(-[a-z0-9]+)+\.[a-zA-Z]+` | `00-introduzione.pptx`, `01-fondamenti-del-calcolo.pdf` | +| `prove` | `(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]+` | `parziale2-testo-2022-05-24-b.pdf`, `totale-soluzione-2022-05-31-incompleto.pdf`, `orale-testo-2022-06-08.md` | +| `varie` | `[a-z0-9]+(-[a-z0-9]+)*\.[a-zA-Z]+` | `calcolatore-in-rete.link`, `utile-contenitore-docker.link`, `veloce-script.sh` | + +Non sono ammessi: + +1. collegamenti pubblicitari o che puntano a risorse esterne non gratuite; +1. programmi in formato binario; +1. contenuti duplicati; +1. risorse non rilevanti per l'insegnamento in questione. diff --git a/appunti/.gitkeep b/appunti/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/dispense/.gitkeep b/dispense/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/esercizi/.gitkeep b/esercizi/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/lavagne/.gitkeep b/lavagne/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/libri/.gitkeep b/libri/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/lucidi/.gitkeep b/lucidi/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/prove/.gitkeep b/prove/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/varie/.gitkeep b/varie/.gitkeep new file mode 100644 index 0000000..e69de29