name: CI

on:
    push:
        branches:
            - main
    pull_request:
    release:
        types: [published]

jobs:
    build:
        runs-on: ubuntu-latest
        env:
            RELEASE: ${{ github.event.release.name }}
            RELEASE_ZIP: zoo-diff-viewer-extension_${{ github.event.release.name || github.sha }}.zip

        steps:
            - uses: actions/checkout@v4.1.1

            - uses: actions/setup-node@v4
              with:
                  node-version-file: '.nvmrc'
                  cache: 'yarn'

            - run: yarn install

            - run: yarn build

            - run: yarn test

            - name: Run playwright e2e tests
              env:
                  GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }}
                  KITTYCAD_TOKEN: ${{ secrets.KITTYCAD_TOKEN }}
              run: |
                  yarn playwright install chromium --with-deps
                  yarn playwright test --retries 1

            - name: Create release zip
              run: |
                  cd build
                  zip -r ../$RELEASE_ZIP *
                  cd ..
                  unzip -l $RELEASE_ZIP

            - uses: actions/upload-artifact@v4
              with:
                  path: ${{ env.RELEASE_ZIP }}
                  name: ${{ env.RELEASE_ZIP }}

            - name: Upload zip to release
              if: github.event_name == 'release'
              uses: svenstaro/upload-release-action@v2
              with:
                  file: ${{ env.RELEASE_ZIP }}

            - name: Upload zip to Chrome Web Store
              if: github.event_name == 'release'
              uses: mobilefirstllc/cws-publish@latest
              with:
                  action: publish
                  client_id: ${{ secrets.CHROME_WEBSTORE_CLIENT_ID }}
                  client_secret: ${{ secrets.CHROME_WEBSTORE_CLIENT_SECRET }}
                  refresh_token: ${{ secrets.CHROME_WEBSTORE_REFRESH_TOKEN }}
                  extension_id: gccpihmphokfjpohkmkbimnhhnlpmegp
                  zip_file: ${{ env.RELEASE_ZIP }}
