Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: Unify workflows into singular pipeline #4520

Merged
merged 14 commits into from
Oct 7, 2024
19 changes: 2 additions & 17 deletions .github/workflows/benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,12 @@ name: Benchmarks

on:
workflow_dispatch:
pull_request:
branches:
- '**'
paths:
- '**/src/**.js'
push:
branches:
- main
- v11
paths:
- '**/src/**.js'
workflow_call:

jobs:
build_test:
name: Build & Test
uses: ./.github/workflows/ci.yml

prepare:
name: Prepare environment
runs-on: ubuntu-latest
needs: build_test
timeout-minutes: 5
steps:
- name: Download locally built preact package
Expand All @@ -34,7 +19,7 @@ jobs:
uses: andrewiggins/download-base-artifact@v3
with:
artifact: npm-package
workflow: ci.yml
workflow: build-test.yml
required: false
- run: mv preact.tgz preact-main.tgz
- name: Upload locally build & base preact package
Expand Down
55 changes: 55 additions & 0 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Build & Test

on:
workflow_dispatch:
workflow_call:
inputs:
ref:
description: 'Branch or tag ref to check out'
type: string
required: false
default: ''
artifact_name:
description: 'Name of the artifact to upload'
type: string
required: false
default: 'npm-package'

jobs:
build_test:
name: Build & Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref || '' }}
- uses: actions/setup-node@v4
with:
node-version-file: 'package.json'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- run: npm ci
- name: test
env:
CI: true
COVERAGE: true
FLAKEY: false
# Not using `npm test` since it rebuilds source which npm ci has already done
run: |
npm run lint
npm run test:unit
- name: Coveralls GitHub Action
uses: coverallsapp/[email protected]
timeout-minutes: 2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Package
# Use --ignore-scripts here to avoid re-building again before pack
run: |
npm pack --ignore-scripts
mv preact-*.tgz preact.tgz
- name: Upload npm package
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.artifact_name || 'npm-package' }}
path: preact.tgz
72 changes: 26 additions & 46 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,61 +2,41 @@ name: CI

on:
workflow_dispatch:
workflow_call:
inputs:
ref:
description: 'Branch or tag ref to check out'
type: string
required: false
default: ''
artifact_name:
description: 'Name of the artifact to upload'
type: string
required: false
default: 'npm-package'
pull_request:
branches:
- '**'
push:
branches:
- main
- restructure
- v11

jobs:
build_test:
name: Build & Test
filter_jobs:
name: Filter jobs
runs-on: ubuntu-latest
outputs:
jsChanged: ${{ steps.filter.outputs.jsChanged }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref || '' }}
- uses: actions/setup-node@v4
with:
node-version-file: 'package.json'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- run: npm ci
- name: test
env:
CI: true
COVERAGE: true
FLAKEY: false
# Not using `npm test` since it rebuilds source which npm ci has already done
run: |
npm run lint
npm run test:unit
- name: Coveralls GitHub Action
uses: coverallsapp/[email protected]
timeout-minutes: 2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Package
# Use --ignore-scripts here to avoid re-building again before pack
run: |
npm pack --ignore-scripts
mv preact-*.tgz preact.tgz
- name: Upload npm package
uses: actions/upload-artifact@v4
- uses: dorny/paths-filter@v3
id: filter
with:
name: ${{ inputs.artifact_name || 'npm-package' }}
path: preact.tgz
filters: |
jsChanged: '**/src/**.js'

compressed_size:
name: Compressed Size
needs: filter_jobs
if: ${{ needs.filter_jobs.outputs.jsChanged == 'true' }}
uses: ./.github/workflows/size.yml

build_test:
name: Build & Test
needs: filter_jobs
uses: ./.github/workflows/build-test.yml

benchmarks:
name: Benchmarks
needs: build_test
if: ${{ needs.filter_jobs.outputs.jsChanged == 'true' }}
uses: ./.github/workflows/benchmarks.yml
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on: create
jobs:
build:
if: github.ref_type == 'tag'
uses: preactjs/preact/.github/workflows/ci.yml@main
uses: preactjs/preact/.github/workflows/build-test.yml@main

release:
runs-on: ubuntu-latest
Expand Down
8 changes: 2 additions & 6 deletions .github/workflows/size.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
name: Compressed Size

on:
pull_request:
branches:
- '**'
paths:
- '**/src/**.js'
workflow_call:

jobs:
build:
Expand All @@ -22,4 +18,4 @@ jobs:
repo-token: '${{ secrets.GITHUB_TOKEN }}'
# Our `prepare` script already builds the app post-install,
# building it again would be redundant
build-script: 'npm run --if-present noop'
build-script: 'npm run --if-present noop'