From 5f3246e127ac83e4057af64681efe11915a73e5b Mon Sep 17 00:00:00 2001 From: Javier Cortejoso Date: Mon, 5 Jan 2026 15:31:16 +0100 Subject: [PATCH] Enhance CI workflow for QR code SDK by adding conditional job execution. Introduced a check to determine if relevant files have changed before running build and quality checks, improving efficiency for dev branch deployments. --- .github/workflows/qrcode-sdk-ci.yml | 47 ++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/.github/workflows/qrcode-sdk-ci.yml b/.github/workflows/qrcode-sdk-ci.yml index 10202c07e..22b16fcb0 100644 --- a/.github/workflows/qrcode-sdk-ci.yml +++ b/.github/workflows/qrcode-sdk-ci.yml @@ -14,15 +14,43 @@ on: - dev - staging - main - paths: - - "sdk/qrcode/**" - - "common/**" - - ".github/workflows/qrcode-sdk-ci.yml" - - ".github/actions/**" jobs: + check_changes: + runs-on: ubuntu-slim + outputs: + should_run: ${{ steps.filter.outputs.should_run }} + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Check if should run + id: filter + run: | + set -e + if [[ "${{ github.base_ref }}" == "main" ]] || [[ "${{ github.base_ref }}" == "staging" ]]; then + echo "should_run=true" >> $GITHUB_OUTPUT + echo "Running for ${{ github.base_ref }} - no path filter" + else + # For dev branch, check if relevant files changed + CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD) || { + echo "Error: Failed to diff against base branch" + exit 1 + } + if echo "$CHANGED_FILES" | grep -qE "^(sdk/qrcode/|common/|\.github/workflows/qrcode-sdk-ci\.yml|\.github/actions/)"; then + echo "should_run=true" >> $GITHUB_OUTPUT + echo "Running for dev - relevant files changed" + else + echo "should_run=false" >> $GITHUB_OUTPUT + echo "Skipping for dev - no relevant files changed" + fi + fi + # Build dependencies once and cache for other jobs build: + needs: check_changes + if: github.event.pull_request.draft == false && needs.check_changes.outputs.should_run == 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 @@ -83,7 +111,8 @@ jobs: # Quality checks job quality-checks: runs-on: ubuntu-latest - needs: build + needs: [check_changes, build] + if: github.event.pull_request.draft == false && needs.check_changes.outputs.should_run == 'true' steps: - uses: actions/checkout@v6 - name: Read and sanitize Node.js version @@ -151,7 +180,8 @@ jobs: # Build verification job build-verification: runs-on: ubuntu-latest - needs: build + needs: [check_changes, build] + if: github.event.pull_request.draft == false && needs.check_changes.outputs.should_run == 'true' steps: - uses: actions/checkout@v6 - name: Read and sanitize Node.js version @@ -213,7 +243,8 @@ jobs: # Integration test job integration-test: runs-on: ubuntu-latest - needs: build + needs: [check_changes, build] + if: github.event.pull_request.draft == false && needs.check_changes.outputs.should_run == 'true' steps: - uses: actions/checkout@v6 - name: Read and sanitize Node.js version