name: "Publish Release"

on:
    release:
        types: [published]

defaults:
    run:
        working-directory: ./core

jobs:
    publish-release:
        runs-on: ubuntu-latest
        permissions:
            id-token: write
            contents: read
        steps:
            - name: Checkout
              uses: actions/checkout@v5

            - name: Install node
              uses: actions/setup-node@v5
              with:
                  node-version: 20.x

            - name: Python venv
              run: python -m venv env

            - name: Activate Python
              run: source env/bin/activate

            - name: Update pip
              run: pip install --upgrade pip

            - name: Install PyMinifier
              run: pip install --ignore-requires-python python-minifier

            - name: Install Setuptools
              run: pip install setuptools

            - name: Cache node modules
              uses: actions/cache@v4
              env:
                  cache-name: cache-node-modules
              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: npm install
              run: npm install && npx playwright install chromium

            - name: build
              run: npm run build

            - name: Generate index.html in snapshot
              working-directory: .
              run: sed -e 's#_PATH_#https://pyscript.net/releases/${{ github.ref_name }}/#' -e 's#_DOC_VERSION_#${{ github.ref_name }}#' -e 's#_TAG_VERSION_#/tag/${{ github.ref_name }}#' -e 's#_VERSION_#${{ github.ref_name }}#' ./public/index.html > ./core/dist/index.html

            - name: Generate release.tar from snapshot and put it in dist/
              working-directory: .
              run: tar -cvf ../release.tar * && mv ../release.tar .

            - name: Configure AWS credentials
              uses: aws-actions/configure-aws-credentials@v5
              with:
                  aws-region: ${{ secrets.AWS_REGION }}
                  role-to-assume: ${{ secrets.AWS_OIDC_RUNNER_ROLE }}

            - name: Sync to S3
              run:
                  | # Update /latest and create an explicitly versioned directory under releases/YYYY.MM.MICRO/
                  aws s3 sync --quiet ./dist/ s3://pyscript.net/latest/
                  aws s3 sync --quiet ./dist/ s3://pyscript.net/releases/${{ github.ref_name }}/
