on:
  workflow_call:
    inputs:
      ref:
        type: "string"
        required: true
        description: "The ref (branch or tag) to build"

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: "write"
  pages: "write"
  id-token: "write"

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:

  rebuild: # Makes sure all artifacts are updated and use the new version
    uses: "./.github/workflows/build.yml"
    with:
      ref: "${{ inputs.ref }}"

  deploy-frontend:
    needs: "rebuild"
    runs-on: "ubuntu-latest"
    environment:
      name: "github-pages"
      url: "${{ steps.deployment.outputs.page_url }}"
    steps:
      - uses: "actions/download-artifact@v4"
        with: # Downloads all artifacts from the build job
          path: "./public"
      - run: |  # Merge the subdirectories of public into a single directory
          for dir in public/*; do
            mv "$dir/"* public/
            rmdir "$dir"
          done
      - uses: "actions/configure-pages@v5"
      - uses: "actions/upload-pages-artifact@v3"
        with:
          path: 'public'
      - id: "deployment"
        uses: "actions/deploy-pages@v4"
      - run: 'zip -r frontend.zip public'
      - uses: "svenstaro/upload-release-action@v2"
        with:
          repo_token: "${{ secrets.GITHUB_TOKEN }}"
          file: "frontend.zip"
          tag: "${{ github.ref }}"
          overwrite: true

  deploy-backend:
    needs: "rebuild"
    runs-on: "ubuntu-latest"
    steps:
      - uses: "actions/checkout@v4"
        with:
          ref: "${{ inputs.ref }}"
      - uses: "actions/setup-node@v4"
        with:
          cache: "yarn"
      - run: "pipx install poetry"
      - uses: "actions/setup-python@v5"
        with:
          python-version: "3.12"
          cache: "poetry"
      - run: "poetry install"
      - run: "poetry config pypi-token.pypi ${{ secrets.PYPI_TOKEN }}"
      - run: "poetry publish --build"

