110 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| name: CI
 | |
| 
 | |
| on:
 | |
|   push:
 | |
|     branches:
 | |
|       - main
 | |
|   pull_request:
 | |
|   workflow_dispatch:
 | |
| 
 | |
| jobs:
 | |
|   typos:
 | |
|     name: "Typos"
 | |
|     runs-on: ubuntu-latest
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
|       - name: Check typos
 | |
|         uses: crate-ci/typos@master
 | |
|         with:
 | |
|           config: ./tools/typos.toml
 | |
| 
 | |
|   typstyle:
 | |
|     name: "Typst formatting"
 | |
|     runs-on: ubuntu-latest
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
| 
 | |
|       - name: "Download Typstyle"
 | |
|         run: |
 | |
|           wget -q "https://github.com/Enter-tainer/typstyle/releases/download/v0.13.17/typstyle-x86_64-unknown-linux-musl"
 | |
|           chmod +x typstyle-x86_64-unknown-linux-musl
 | |
| 
 | |
|       - name: Check typst formatting
 | |
|         run: |
 | |
|           find . -name "*.typ" -type f -print0 | xargs -0 \
 | |
|             ./typstyle-x86_64-unknown-linux-musl --check
 | |
| 
 | |
|   build:
 | |
|     needs:
 | |
|       - typos
 | |
|       - typstyle
 | |
| 
 | |
|     name: "Build"
 | |
|     runs-on: ubuntu-latest
 | |
|     permissions:
 | |
|       contents: write
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
| 
 | |
|       # Could instead install `texlive-full`, but that takes ~20 minutes.
 | |
|       # We'll specify the packages we need manually.
 | |
|       - name: "Install TeXLive"
 | |
|         run: |
 | |
|           sudo apt update
 | |
|           DEBIAN_FRONTEND=noninteractive \
 | |
|             sudo apt install --yes \
 | |
|             texlive texlive-xetex \
 | |
|             texlive-games texlive-fonts-extra texlive-latex-extra \
 | |
|             texlive-pictures texlive-pstricks \
 | |
|             python3-requests
 | |
| 
 | |
|       # Typst isn't packaged, and manual download gives us
 | |
|       # more control anyway.
 | |
|       - name: "Download Typst"
 | |
|         run: |
 | |
|           wget -q "https://github.com/typst/typst/releases/download/v0.13.1/typst-x86_64-unknown-linux-musl.tar.xz"
 | |
|           tar -xf "typst-x86_64-unknown-linux-musl.tar.xz"
 | |
|           mv "typst-x86_64-unknown-linux-musl/typst" .
 | |
|           rm "typst-x86_64-unknown-linux-musl.tar.xz"
 | |
|           rm -dr "typst-x86_64-unknown-linux-musl"
 | |
| 
 | |
|       # Builds all handouts, LaTeX and Typst
 | |
|       - name: "Build handouts"
 | |
|         run: TYPST_PATH="$(pwd)/typst" python tools/scripts/build.py
 | |
| 
 | |
|       # Upload logs, even if build fails.
 | |
|       # LaTeX stdout/stderr isn't always helpful.
 | |
|       - name: "Save LaTeX logs"
 | |
|         uses: actions/upload-artifact@v3
 | |
|         if: always()
 | |
|         with:
 | |
|           name: "LaTeX logs"
 | |
|           path: "**/*.log"
 | |
|           retention-days: 14
 | |
| 
 | |
|       # Upload build output
 | |
|       - name: "Save output"
 | |
|         uses: actions/upload-artifact@v3
 | |
|         with:
 | |
|           name: "Build output"
 | |
|           path: "output/*"
 | |
|           retention-days: 7
 | |
| 
 | |
|       - name: "Publish package (hash)"
 | |
|         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
 | |
|         run: |
 | |
|           PUBLISH_USER="${{ secrets.PUBLISH_USER }}" \
 | |
|           PUBLISH_KEY="${{ secrets.PUBLISH_KEY }}" \
 | |
|           VERSION="${{ github.sha }}" \
 | |
|           PACKAGE="${{ vars.PACKAGE }}" \
 | |
|             python tools/scripts/publish.py
 | |
| 
 | |
|       - name: "Publish package (latest)"
 | |
|         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
 | |
|         run: |
 | |
|           PUBLISH_USER="${{ secrets.PUBLISH_USER }}" \
 | |
|           PUBLISH_KEY="${{ secrets.PUBLISH_KEY }}" \
 | |
|           VERSION="latest" \
 | |
|           PACKAGE="${{ vars.PACKAGE }}" \
 | |
|             python tools/scripts/publish.py
 |