Generate dist files on main branch

This adapts an approach taken by the Gradle actions in order to
generate the dist files on the main branch rather than having
every contributor need to generate them. (In fact, people will no
longer be able to submit PRs with the dist files updated). This
change is important because the current approach means that
people encounter merge conflicts all the time and will need to
keep regenerating the dist files in order to land their change.
This commit is contained in:
Kevin Dangoor
2025-11-05 17:30:02 -05:00
parent 355d25e5a7
commit 75e65b4d81
2 changed files with 87 additions and 44 deletions
+27 -44
View File
@@ -1,57 +1,40 @@
# `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/
name: CI-check-no-dist-update
# Prohibit any change to 'dist/**' on a non-release branch
on:
push:
branches:
- main
paths-ignore:
- '**.md'
pull_request:
paths-ignore:
- '**.md'
workflow_dispatch:
pull_request:
paths:
- 'dist/**'
permissions:
contents: read
jobs:
check-dist:
fail-on-dist-update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set Node.js 20.x
uses: actions/setup-node@v4
- name: Checkout sources
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
node-version: 20.x
cache: npm
fetch-depth: 0
- name: Install dependencies
run: npm ci
- name: Rebuild the dist/ directory
run: |
npm run build
npm run package
- name: Compare the expected and actual dist/ directories
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
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' }}
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0
with:
name: dist
path: dist/
files: |
dist/**
- name: Print changes to dist directory
env:
ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
run: |
for file in ${ALL_CHANGED_FILES}; do
echo "$file was changed"
done
- run: |
echo "The 'dist' directory is automatically updated by the release process."
echo "It should not be updated manually in a non-release branch or a pull request."
exit 1
+60
View File
@@ -0,0 +1,60 @@
name: CI-update-dist
on:
workflow_dispatch:
push:
branches:
- 'main'
paths-ignore:
- 'dist/**'
permissions:
contents: read
jobs:
update-dist:
# Only run for the original DRA repository; otherwise when users create pull requests from their `main` branch
# it would erroneously update `dist` on their branch (and the pull request)
if: github.repository == 'actions/dependency-review-action'
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
token: ${{ secrets.BOT_GITHUB_TOKEN }}
- name: Set up Node.js
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: 20
cache: npm
cache-dependency-path: sources/package-lock.json
- name: Install npm dependencies
run: |
npm clean-install
working-directory: sources
- name: Build distribution
run: |
npm run build
npm run package
working-directory: sources
- name: Copy the generated sources/dist directory to the top-level dist
run: |
cp -r sources/dist .
# Commit and push changes; has no effect if the files did not change
# Important: The push event will not trigger any other workflows, see
# https://github.com/stefanzweifel/git-auto-commit-action?tab=readme-ov-file#commits-made-by-this-action-do-not-trigger-new-workflow-runs
- name: Commit & push changes
uses: stefanzweifel/git-auto-commit-action@28e16e81777b558cc906c8750092100bbb34c5e3 # v7.0.0
with:
commit_author: 'github-actions[bot] <github-actions[bot]@users.noreply.github.com>'
commit_user_name: 'github-actions[bot]'
commit_user_email: 'github-actions[bot]@users.noreply.github.com'
commit_message: '[bot] Update dist directory [skip ci]'
file_pattern: 'dist/'