Skip to content

Commit 9f10ae5

Browse files
authored
Merge pull request #3780 from AlchemyCMS/fix/auto-push-build-artifacts
2 parents 30b141a + 9e6aac2 commit 9f10ae5

2 files changed

Lines changed: 61 additions & 113 deletions

File tree

.github/workflows/build_test.yml

Lines changed: 61 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@ jobs:
2020
check_bot_commit:
2121
uses: ./.github/workflows/check-bot-commit.yml
2222

23-
check_package_json:
23+
check_assets_changes:
2424
permissions:
2525
contents: read
2626
runs-on: ubuntu-24.04
27-
name: Check package.json
27+
name: Check assets changes
2828
steps:
2929
- uses: actions/checkout@v6
3030
with:
3131
fetch-depth: 0 # Fetch all history
3232
- name: Get changed files
33-
id: changed-package-json
33+
id: changed-files
3434
run: |
3535
if [ "${{ github.event_name }}" = "pull_request" ]; then
3636
BASE_SHA="${{ github.event.pull_request.base.sha }}"
@@ -39,21 +39,21 @@ jobs:
3939
fi
4040
git diff --name-only "$BASE_SHA" ${{ github.sha }} > changed_files
4141
cat changed_files
42-
if grep -q package.json changed_files; then
42+
if grep -qE '(package\.json|^app/javascript/|^app/stylesheets/)' changed_files; then
4343
echo "any_changed=true" > $GITHUB_OUTPUT
4444
else
4545
echo "any_changed=false" > $GITHUB_OUTPUT
4646
fi
4747
outputs:
48-
package_json_changed: ${{ steps.changed-package-json.outputs.any_changed }}
48+
assets_changed: ${{ steps.changed-files.outputs.any_changed }}
4949

5050
build_javascript:
5151
permissions:
5252
contents: read
5353
runs-on: ubuntu-24.04
5454
name: Build JS packages
55-
needs: check_package_json
56-
if: needs.check_package_json.outputs.package_json_changed == 'true'
55+
needs: check_assets_changes
56+
if: needs.check_assets_changes.outputs.assets_changed == 'true'
5757
steps:
5858
- uses: actions/checkout@v6
5959
- name: Setup Bun
@@ -71,47 +71,20 @@ jobs:
7171
run: bun run --bun build
7272
- uses: actions/upload-artifact@v4
7373
with:
74-
name: javascript-bundles
75-
path: vendor/javascript
76-
- uses: actions/upload-artifact@v4
77-
with:
78-
name: bun-lock
79-
path: bun.lock
80-
81-
check_build_artifacts:
82-
permissions:
83-
contents: read
84-
runs-on: ubuntu-24.04
85-
name: Check build artifacts are up to date
86-
steps:
87-
- uses: actions/checkout@v6
88-
- name: Setup Bun
89-
uses: oven-sh/setup-bun@v2
90-
- name: Restore node_modules cache
91-
uses: actions/cache@v4
92-
with:
93-
path: node_modules
94-
key: ${{ runner.os }}-node-modules-${{ hashFiles('package.json', 'bun.lock') }}
95-
restore-keys: |
96-
${{ runner.os }}-node-modules
97-
- name: Install dependencies
98-
run: bun install
99-
- name: Build all artifacts
100-
run: bun run --bun build
101-
- name: Check for uncommitted changes
102-
run: |
103-
git diff --exit-code app/assets/builds/alchemy/alchemy_admin.min.js || (echo "ERROR: alchemy_admin.min.js is out of date. Run 'bun run build:admin' and commit the result." && exit 1)
104-
git diff --exit-code app/assets/builds/alchemy/admin.css || (echo "ERROR: admin.css is out of date. Run 'bun run build:css' and commit the result." && exit 1)
74+
name: build-artifacts
75+
path: |
76+
vendor/javascript
77+
app/assets/builds/alchemy/
78+
bun.lock
10579
10680
RSpec:
10781
permissions:
10882
contents: read
109-
needs: [check_package_json, build_javascript, check_bot_commit, check_build_artifacts]
83+
needs: [check_assets_changes, build_javascript, check_bot_commit]
11084
if: >
11185
always() &&
11286
needs.check_bot_commit.outputs.is_bot != 'true' &&
113-
(needs.build_javascript.result == 'success' || needs.build_javascript.result == 'skipped') &&
114-
needs.check_build_artifacts.result == 'success'
87+
(needs.build_javascript.result == 'success' || needs.build_javascript.result == 'skipped')
11588
runs-on: ubuntu-24.04
11689
strategy:
11790
fail-fast: false
@@ -225,10 +198,9 @@ jobs:
225198
sudo apt-get update -qq
226199
sudo apt-get install -qq --fix-missing imagemagick
227200
- uses: actions/download-artifact@v4
228-
if: needs.check_package_json.outputs.package_json_changed == 'true'
201+
if: needs.check_assets_changes.outputs.assets_changed == 'true'
229202
with:
230-
name: javascript-bundles
231-
path: vendor/javascript
203+
name: build-artifacts
232204
- name: Prepare database
233205
run: |
234206
bundle exec rake alchemy:spec:prepare
@@ -255,22 +227,21 @@ jobs:
255227
permissions:
256228
contents: read
257229
runs-on: ubuntu-24.04
258-
needs: [check_package_json, build_javascript, check_bot_commit, check_build_artifacts]
230+
needs: [check_assets_changes, build_javascript, check_bot_commit]
259231
if: >
260232
always() &&
261233
needs.check_bot_commit.outputs.is_bot != 'true' &&
262-
(needs.build_javascript.result == 'success' || needs.build_javascript.result == 'skipped') &&
263-
needs.check_build_artifacts.result == 'success'
234+
(needs.build_javascript.result == 'success' || needs.build_javascript.result == 'skipped')
264235
env:
265236
NODE_ENV: test
266237
steps:
267238
- uses: actions/checkout@v6
268239
- name: Setup Bun
269240
uses: oven-sh/setup-bun@v2
270241
- uses: actions/download-artifact@v4
271-
if: needs.check_package_json.outputs.package_json_changed == 'true'
242+
if: needs.check_assets_changes.outputs.assets_changed == 'true'
272243
with:
273-
name: bun-lock
244+
name: build-artifacts
274245
- name: Restore node modules cache
275246
uses: actions/cache@v4
276247
with:
@@ -286,16 +257,55 @@ jobs:
286257
build-test-success:
287258
name: "Build & Test Success"
288259
if: always()
289-
needs: [check_bot_commit, RSpec, Vitest, check_build_artifacts]
260+
needs: [check_bot_commit, RSpec, Vitest]
290261
runs-on: ubuntu-latest
291262
permissions:
292263
contents: read
293264
steps:
294265
- name: Check results
295266
run: |
296-
for result in "${{ needs.RSpec.result }}" "${{ needs.Vitest.result }}" "${{ needs.check_build_artifacts.result }}"; do
267+
for result in "${{ needs.RSpec.result }}" "${{ needs.Vitest.result }}"; do
297268
if [[ "$result" != "success" && "$result" != "skipped" ]]; then
298269
echo "Failed: $result"
299270
exit 1
300271
fi
301272
done
273+
274+
push_assets:
275+
name: Push build artifacts
276+
needs: [check_assets_changes, build_javascript, build-test-success]
277+
if: >
278+
needs.check_assets_changes.outputs.assets_changed == 'true' &&
279+
needs.build_javascript.result == 'success' &&
280+
needs.build-test-success.result == 'success' &&
281+
github.event_name == 'pull_request'
282+
permissions:
283+
contents: write
284+
runs-on: ubuntu-24.04
285+
steps:
286+
- name: Generate token
287+
id: generate_token
288+
uses: actions/create-github-app-token@v2
289+
with:
290+
app-id: ${{ vars.ALCHEMY_BOT_APP_ID }}
291+
private-key: ${{ secrets.ALCHEMY_BOT_APP_PRIVATE_KEY }}
292+
- uses: actions/checkout@v6
293+
with:
294+
token: ${{ steps.generate_token.outputs.token }}
295+
ref: ${{ github.head_ref }}
296+
persist-credentials: false
297+
fetch-depth: 0
298+
- uses: actions/download-artifact@v4
299+
with:
300+
name: build-artifacts
301+
- name: Check for changes
302+
id: git-status
303+
run: git diff --quiet vendor/javascript app/assets/builds/alchemy/ bun.lock || echo "changed=true" >> $GITHUB_OUTPUT
304+
- name: Commit and push
305+
if: steps.git-status.outputs.changed == 'true'
306+
run: |
307+
git config --local user.name 'AlchemyCMS - CI Bot'
308+
git config --local user.email 'alchemy@blish.cloud'
309+
git add vendor/javascript app/assets/builds/alchemy/ bun.lock
310+
git commit -m "Update build artifacts" -m "Rebuilt assets after source or dependency changes."
311+
git push https://x-access-token:${{ steps.generate_token.outputs.token }}@github.com/${{ github.repository }}.git HEAD:${{ github.head_ref }}

.github/workflows/push_javascript.yml

Lines changed: 0 additions & 62 deletions
This file was deleted.

0 commit comments

Comments
 (0)