diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml index ae49e0d..83fc32a 100644 --- a/.github/workflows/check-dist.yml +++ b/.github/workflows/check-dist.yml @@ -1,9 +1,13 @@ -# `dist/index.js` is a special file in Actions. -# When you reference an action with `uses:` in a workflow, -# `index.js` is the code that will run. -# For our project, we generate this file through a build process from other source files. -# We need to make sure the checked-in `index.js` actually matches what we expect it to be. -name: Check dist/ +# 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: push: @@ -16,40 +20,57 @@ on: paths-ignore: - '**.md' workflow_dispatch: + permissions: contents: read jobs: check-dist: + name: Check dist/ runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout + id: checkout + uses: actions/checkout@v4 - - name: Set Node.js 20.x + - name: Setup Node.js + id: setup-node uses: actions/setup-node@v4 with: - node-version: 20.x + node-version-file: .node-version cache: npm - - name: Install dependencies + - name: Install Dependencies + id: install run: npm ci - - name: Rebuild the dist/ directory - run: npm run build + - name: Build dist/ Directory + id: build + run: npm run bundle - - name: Compare the expected and actual dist/ directories + # This will fail the workflow if the `dist/` directory is different than + # expected. + - name: Compare Directories + id: diff run: | - if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then - echo "Detected uncommitted changes after build. See status below:" - git diff + if [ ! -d dist/ ]; then + echo "Expected dist/ directory does not exist. See status below:" + ls -la ./ + exit 1 + fi + 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 - id: diff - # If index.js was different than expected, upload the expected version as an artifact - - uses: actions/upload-artifact@v4 - if: ${{ failure() && steps.diff.conclusion == 'failure' }} + # If `dist/` was different than 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/ diff --git a/.node-version b/.node-version new file mode 100644 index 0000000..43bff1f --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +20.9.0 \ No newline at end of file