name: Package and push to registry repo
on:
  push:
    tags: [ '*' ]

env:
  # the repository to which to push the release version
  # usually a fork of typst/packages (https://github.com/typst/packages/)
  # that you have push privileges to
  REGISTRY_REPO: DeveloperPaul123/typst-packages
  # the path within that repo where the "<name>/<version>" directory should be put
  # for the Typst package registry, keep this as is
  PATH_PREFIX: packages/preview

jobs:
  release:
    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: cargo
          version: 1.0

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

      - name: Setup typst
        uses: typst-community/setup-typst@v3
        with:
          typst-version: latest

      - name: Determine and check package metadata
        run: |
          . scripts/setup
          echo "PKG_NAME=${PKG_PREFIX}" >> "${GITHUB_ENV}"
          echo "PKG_VERSION=${VERSION}" >> "${GITHUB_ENV}"

          if [[ "${GITHUB_REF_NAME}" != "${VERSION}" ]]; then
            echo "package version ${VERSION} does not match release tag ${GITHUB_REF_NAME}" >&2
            exit 1
          fi

      - name: Build package
        run: |
          just doc
          just package out

      - name: Checkout package registry
        uses: actions/checkout@v4
        with:
          repository: ${{ env.REGISTRY_REPO }}
          token: ${{ secrets.REGISTRY_TOKEN }}
          path: typst-packages

      - name: Release package
        run: |
          mkdir -p "typst-packages/${{ env.PATH_PREFIX }}/$PKG_NAME"
          mv "out/${PKG_NAME}/${PKG_VERSION}" "typst-packages/${{ env.PATH_PREFIX }}/${PKG_NAME}"
          rmdir "out/${PKG_NAME}"
          rmdir out

          GIT_USER_NAME="$(git log -1 --pretty=format:'%an')"
          GIT_USER_EMAIL="$(git log -1 --pretty=format:'%ae')"

          cd typst-packages
          git config user.name "${GIT_USER_NAME}"
          git config user.email "${GIT_USER_EMAIL}"
          git checkout -b "${PKG_NAME}-${PKG_VERSION}"
          git add .
          git commit -m "${PKG_NAME}:${PKG_VERSION}"
          git push --set-upstream origin "${PKG_NAME}-${PKG_VERSION}"
