name: Tests
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  tests:
    strategy:
      matrix:
        # add any other Typst versions that your package should support
        typst-version: ["0.12", "0.13"]
        # the docs don't need to build with all versions supported by the package;
        # the latest one is enough
        include:
          - typst-version: "0.13"
            doc: 1
    runs-on: ubuntu-22.04
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Probe runner package cache
        uses: awalsh128/cache-apt-pkgs-action@v1
        with:
          packages: imagemagick cargo
          version: 1.0

      - name: Install oxipng from crates.io
        uses: baptiste0928/cargo-install@v3
        with:
          crate: oxipng

      - name: Install just from crates.io
        uses: baptiste0928/cargo-install@v3
        with:
          crate: just

      - name: Install tytanic from github
        uses: baptiste0928/cargo-install@v3
        with:
          crate: tytanic

      - name: Setup typst
        uses: typst-community/setup-typst@v3
        with:
          typst-version: ${{ matrix.typst-version }}
    
      - name: Install fonts
        run: |
            sudo apt update
            sudo apt-get install fonts-roboto
            ./scripts/install-fontawesome
            ./scripts/install-source-sans
            typst fonts

      - name: Install locally
        run: just install

      - name: Run test suite
        run: just test

      - name: Archive diffs
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: diffs-typst-${{ matrix.typst-version }}
          path: |
            tests/**/diff/*.png
            tests/**/out/*.png
            tests/**/ref/*.png
          retention-days: 5

      - name: Build docs
        if: ${{ matrix.doc }}
        run: just doc
     
      - name: Upload docs
        uses: actions/upload-artifact@v4
        with:
          name: manual
          path: docs/manual.pdf
