From 7cbd8b6f3d75a6885d70f70c2d657d143a9e70ce Mon Sep 17 00:00:00 2001 From: Anders da Silva Rytter Hansen Date: Wed, 27 May 2026 15:00:15 -0300 Subject: [PATCH] Build only spec files that were changed in the push Add a 'changed' job that determines which .spec files were modified using git diff between push before/after SHAs. The build job now uses a dynamic matrix (fromJSON) so only changed specs are built. For workflow_dispatch, all specs are still built. --- .forgejo/workflows/build-rpms.yml | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/.forgejo/workflows/build-rpms.yml b/.forgejo/workflows/build-rpms.yml index 2e20db4..a138e99 100644 --- a/.forgejo/workflows/build-rpms.yml +++ b/.forgejo/workflows/build-rpms.yml @@ -7,15 +7,32 @@ on: workflow_dispatch: jobs: + changed: + runs-on: almalinux-10 + outputs: + matrix: ${{ steps.set.outputs.matrix }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Determine changed specs + id: set + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + python3 -c "import json; print(json.dumps({'spec': ['sonic-interface-libraries.spec','sonic-win.spec','sonic-workspace.spec']}))" + else + CHANGED=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep '\.spec$' || true) + python3 -c "import json, sys; print(json.dumps({'spec': sys.argv[1].split()}))" "$CHANGED" + fi >> "$GITHUB_OUTPUT" + build: + needs: changed runs-on: almalinux-10 strategy: fail-fast: false - matrix: - spec: - - sonic-interface-libraries.spec - - sonic-win.spec - - sonic-workspace.spec + matrix: ${{ fromJSON(needs.changed.outputs.matrix) }} steps: - name: Checkout