From ff33867ee779b0e32a85ec59b8c3e8740a7da4c8 Mon Sep 17 00:00:00 2001 From: Francesco Gringl-Novy Date: Wed, 20 May 2026 16:29:58 +0200 Subject: [PATCH] ci: Only run Check lockfile when package.json or yarn.lock changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On PRs that don't touch any package.json or yarn.lock, the lockfile check is wasted work — it just re-runs `yarn install --frozen-lockfile` + dedupe-deps:check against an unchanged lockfile. Adds a `deps` dorny/paths-filter entry in ci-metadata.yml (matching `**/package.json` and `yarn.lock`), exposes it as `changed_deps`, and gates job_check_lockfile on it. Still runs on base-branch pushes and release branches so develop / release/* are always verified end-to-end. --- .github/workflows/build.yml | 4 ++++ .github/workflows/ci-metadata.yml | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 21c43b6e61f2..57755a2d9f13 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -340,6 +340,10 @@ jobs: needs: [job_get_metadata] timeout-minutes: 10 runs-on: ubuntu-24.04 + if: | + needs.job_get_metadata.outputs.changed_deps == 'true' || + needs.job_get_metadata.outputs.is_base_branch == 'true' || + needs.job_get_metadata.outputs.is_release == 'true' steps: - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) uses: actions/checkout@v6 diff --git a/.github/workflows/ci-metadata.yml b/.github/workflows/ci-metadata.yml index 0f39590bf167..8f9e8242aab0 100644 --- a/.github/workflows/ci-metadata.yml +++ b/.github/workflows/ci-metadata.yml @@ -22,6 +22,9 @@ on: changed_any_code: description: 'Whether any non-markdown files changed' value: ${{ jobs.get_metadata.outputs.changed_any_code }} + changed_deps: + description: 'Whether any package.json or yarn.lock changed' + value: ${{ jobs.get_metadata.outputs.changed_deps }} is_gitflow_sync: description: 'Whether this is a gitflow sync (master merge)' value: ${{ jobs.get_metadata.outputs.is_gitflow_sync }} @@ -69,6 +72,9 @@ jobs: - '.github/**' any_code: - '!**/*.md' + deps: + - '**/package.json' + - 'yarn.lock' outputs: commit_label: '${{ env.COMMIT_SHA }}: ${{ env.COMMIT_MESSAGE }}' @@ -78,6 +84,7 @@ jobs: is_release: ${{ startsWith(github.ref, 'refs/heads/release/') }} changed_ci: ${{ steps.changed.outputs.workflow == 'true' }} changed_any_code: ${{ steps.changed.outputs.any_code == 'true' }} + changed_deps: ${{ steps.changed.outputs.deps == 'true' }} # When merging into master, or from master is_gitflow_sync: ${{ github.head_ref == 'master' || github.ref == 'refs/heads/master' }}