Skip to content

Commit d9e9209

Browse files
committed
Parallelize GitHub Actions steps
1 parent ab33464 commit d9e9209

3 files changed

Lines changed: 38 additions & 127 deletions

File tree

.github/workflows/js-ci.yml

Lines changed: 21 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,9 @@ permissions:
2020

2121
jobs:
2222
setup:
23-
name: 'Setup / Install + Build + Generate'
23+
name: 'Build + Check'
2424
runs-on: ubuntu-latest
2525
timeout-minutes: 15
26-
outputs:
27-
cache-key: ${{ steps.cache-key.outputs.value }}
2826
steps:
2927
- name: Checkout code
3028
uses: actions/checkout@v4
@@ -65,15 +63,16 @@ jobs:
6563
resources/js/generated
6664
key: ${{ steps.cache-key.outputs.value }}
6765

68-
- name: Install Composer dependencies
69-
if: steps.cache.outputs.cache-hit != 'true'
70-
run: composer install --no-interaction --no-progress
66+
- parallel:
67+
- name: Install Composer dependencies
68+
if: steps.cache.outputs.cache-hit != 'true'
69+
run: composer install --no-interaction --no-progress
7170

72-
- name: Install frontend dependencies
73-
if: steps.cache.outputs.cache-hit != 'true'
74-
run: vp install --frozen-lockfile
75-
env:
76-
CRAFT_FONTAWESOME_TOKEN: ${{ secrets.CRAFT_FONTAWESOME_TOKEN }}
71+
- name: Install frontend dependencies
72+
if: steps.cache.outputs.cache-hit != 'true'
73+
run: vp install --frozen-lockfile
74+
env:
75+
CRAFT_FONTAWESOME_TOKEN: ${{ secrets.CRAFT_FONTAWESOME_TOKEN }}
7776

7877
# Build the garnish package so its `dist/*.d.ts` exist — `vue-tsc` resolves
7978
# `@craftcms/garnish` from `dist` (its `types`), and dist is gitignored.
@@ -101,108 +100,18 @@ jobs:
101100
if: steps.cache.outputs.cache-hit != 'true'
102101
run: vp run generate:wayfinder
103102

104-
eslint:
105-
name: 'Code Quality / Oxlint'
106-
runs-on: ubuntu-latest
107-
timeout-minutes: 5
108-
needs: setup
109-
steps:
110-
- name: Checkout code
111-
uses: actions/checkout@v4
112-
113-
- name: Setup Vite+
114-
uses: voidzero-dev/setup-vp@v1
115-
with:
116-
node-version: ${{ env.NODE_VERSION }}
117-
cache: true
118-
119-
- name: Restore install + build + generated cache
120-
uses: actions/cache@v4
121-
with:
122-
path: |
123-
node_modules
124-
packages/*/node_modules
125-
packages/craftcms-ui/dist
126-
packages/craftcms-garnish/dist
127-
vendor
128-
resources/js/actions
129-
resources/js/routes
130-
resources/js/wayfinder
131-
resources/js/generated
132-
key: ${{ needs.setup.outputs.cache-key }}
133-
134-
- name: Run Oxlint
135-
run: vp lint resources/js/
136-
137-
typecheck:
138-
name: 'Code Quality / TypeScript'
139-
runs-on: ubuntu-latest
140-
timeout-minutes: 5
141-
needs: setup
142-
steps:
143-
- name: Checkout code
144-
uses: actions/checkout@v4
145-
146-
- name: Setup Vite+
147-
uses: voidzero-dev/setup-vp@v1
148-
with:
149-
node-version: ${{ env.NODE_VERSION }}
150-
cache: true
151-
152-
- name: Restore install + build + generated cache
153-
uses: actions/cache@v4
154-
with:
155-
path: |
156-
node_modules
157-
packages/*/node_modules
158-
packages/craftcms-ui/dist
159-
packages/craftcms-garnish/dist
160-
vendor
161-
resources/js/actions
162-
resources/js/routes
163-
resources/js/wayfinder
164-
resources/js/generated
165-
key: ${{ needs.setup.outputs.cache-key }}
166-
167-
# Skip the `pretypecheck` hook (it would re-run generate:types +
168-
# generate:wayfinder, which need PHP/Composer that this job doesn't set
169-
# up — the setup job already produced and cached the output).
170-
- name: Run TypeScript type check
171-
run: vp run typecheck
172-
173-
test-ui:
174-
name: 'Tests / @craftcms/ui'
175-
runs-on: ubuntu-latest
176-
timeout-minutes: 10
177-
needs: setup
178-
steps:
179-
- name: Checkout code
180-
uses: actions/checkout@v4
181-
182-
- name: Setup Vite+
183-
uses: voidzero-dev/setup-vp@v1
184-
with:
185-
node-version: ${{ env.NODE_VERSION }}
186-
cache: true
187-
188-
- name: Restore install + build + generated cache
189-
uses: actions/cache@v4
190-
with:
191-
path: |
192-
node_modules
193-
packages/*/node_modules
194-
packages/craftcms-ui/dist
195-
packages/craftcms-garnish/dist
196-
vendor
197-
resources/js/actions
198-
resources/js/routes
199-
resources/js/wayfinder
200-
resources/js/generated
201-
key: ${{ needs.setup.outputs.cache-key }}
202-
103+
# `vp run` skips the npm pretypecheck hook, which would redundantly run
104+
# generate:types and generate:wayfinder.
203105
# The storybook tests run in real Chromium via @vitest/browser-playwright.
204106
- name: Install Playwright Chromium
205107
run: vp exec playwright install --with-deps chromium
206108

207-
- name: Run @craftcms/ui tests
208-
run: vp run test:ui
109+
- parallel:
110+
- name: Run Oxlint
111+
run: vp lint resources/js/
112+
113+
- name: Run TypeScript type check
114+
run: vp run typecheck
115+
116+
- name: Run @craftcms/ui tests
117+
run: vp run test:ui

.github/workflows/storybook.yml

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,16 @@ jobs:
7777
resources/js/generated
7878
key: ${{ steps.cache-key.outputs.value }}
7979

80-
- name: Install Composer dependencies
81-
if: steps.cache.outputs.cache-hit != 'true'
82-
run: composer install --no-interaction --no-progress
83-
84-
- name: Install frontend dependencies
85-
if: steps.cache.outputs.cache-hit != 'true'
86-
run: vp install --frozen-lockfile
87-
env:
88-
CRAFT_FONTAWESOME_TOKEN: ${{ secrets.CRAFT_FONTAWESOME_TOKEN }}
80+
- parallel:
81+
- name: Install Composer dependencies
82+
if: steps.cache.outputs.cache-hit != 'true'
83+
run: composer install --no-interaction --no-progress
84+
85+
- name: Install frontend dependencies
86+
if: steps.cache.outputs.cache-hit != 'true'
87+
run: vp install --frozen-lockfile
88+
env:
89+
CRAFT_FONTAWESOME_TOKEN: ${{ secrets.CRAFT_FONTAWESOME_TOKEN }}
8990

9091
# Build the garnish package so its `dist/*.d.ts` exist — `vue-tsc` resolves
9192
# `@craftcms/garnish` from `dist` (its `types`), and dist is gitignored.

.github/workflows/sync-cms-assets.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,14 @@ jobs:
3232
node-version: '24'
3333
cache: true
3434

35-
- name: Install frontend dependencies
36-
run: vp install --frozen-lockfile
37-
env:
38-
CRAFT_FONTAWESOME_TOKEN: ${{ secrets.CRAFT_FONTAWESOME_TOKEN }}
35+
- parallel:
36+
- name: Install frontend dependencies
37+
run: vp install --frozen-lockfile
38+
env:
39+
CRAFT_FONTAWESOME_TOKEN: ${{ secrets.CRAFT_FONTAWESOME_TOKEN }}
3940

40-
- name: Install Composer dependencies
41-
uses: ramsey/composer-install@v3
41+
- name: Install Composer dependencies
42+
uses: ramsey/composer-install@v3
4243

4344
- name: Copy icons
4445
run: php ./scripts/copyicons.php

0 commit comments

Comments
 (0)