# In TypeScript actions, `dist/` is a special directory. When you reference
# an action with the `uses:` property, `dist/index.js` is the code that will be
# run. For this project, the `dist/index.js` file is transpiled from other
# source files. This workflow ensures the `dist/` directory contains the
# expected transpiled code.
#
# If this workflow is run from a feature branch, it will act as an additional CI
# check and fail if the checked-in `dist/` directory does not match what is
# expected from the build.
name: Check Transpiled JavaScript

on:
  pull_request:
    branches:
      - main
  push:
    branches:
      - main

permissions:
  contents: read

jobs:
  check-dist:
    name: Check dist/
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        id: checkout
        uses: actions/checkout@v4

      - name: Install pnpm
        id: setup-pnpm
        uses: pnpm/action-setup@v4
        with:
          version: '9.9.0'

      - name: Set node version
        id: setup-node
        uses: actions/setup-node@v4
        with:
          node-version-file: .node-version
          cache: 'pnpm'

      - name: Build dist/ Directory
        id: build
        run: pnpm run preflight

      # This will fail the workflow if the `dist/` directory is different from
      # expected.
      - name: Compare Directories
        id: diff
        run: |
          if [ "$(git diff --ignore-space-at-eol --text dist/ | wc -l)" -gt "0" ]; then
            echo "Detected uncommitted changes after build. See status below:"
            git diff --ignore-space-at-eol --text dist/
            exit 1
          fi

      # If `dist/` was different from expected, upload the expected version as a
      # workflow artifact.
      - if: ${{ failure() && steps.diff.outcome == 'failure' }}
        name: Upload Artifact
        id: upload
        uses: actions/upload-artifact@v4
        with:
          name: dist
          path: dist/
