diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index 8825c82..5b33ec8 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -211,11 +211,25 @@ jobs: # git's SIGPIPE (141) failed the step for any PR far enough behind # master to differ in more files; sed reads the whole stream. git status --short | sed -n '1,10p' + # A PR can change a package's directory without changing its version: + # an upstream hook, its tests, a README. edge already holds that + # version, so the planner builds nothing and there is nothing to pack. + # The same check publish.yml's rebuild job makes; without it the pack + # step failed on the empty output and the required result went red. - name: Build ${{ matrix.package }} (${{ matrix.arch }}, ships to ${{ matrix.channels }}) id: build env: CONTAINER_ENGINE: docker - run: bin/build --mirror edge --arch ${{ matrix.arch }} --package ${{ matrix.package }} + run: | + set -euo pipefail + plan=$(bin/build --dry-run --mirror edge --arch "${{ matrix.arch }}" --package "${{ matrix.package }}" 2>&1 | grep -E '^==> Plan complete' || true) + if [[ -n "$plan" && -z "$(sed -E 's/.*would build: *//' <<<"$plan" | tr -d '[:space:]')" ]]; then + echo "==> ${{ matrix.package }} (${{ matrix.arch }}): edge already holds this version, nothing to build" + echo "built=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + bin/build --mirror edge --arch "${{ matrix.arch }}" --package "${{ matrix.package }}" + echo "built=true" >> "$GITHUB_OUTPUT" # makepkg's check() leaves meson's per-test output in the build tree, # never on stdout, so a failing test shows only a summary line in this # job log. bin/build bind-mounts $SRC_DIR at /src, so those logs outlive @@ -243,12 +257,14 @@ jobs: # successful build uploads: the artifact's existence is what lets the # planner above and publish.yml skip rebuilding this exact tree. - name: Pack artifact + if: steps.build.outputs.built == 'true' id: pack run: | source helpers/artifact-helpers.sh pack_packages build-output/edge/${{ matrix.arch }} packages.tar tar -tvf packages.tar - name: Upload artifact + if: steps.build.outputs.built == 'true' uses: actions/upload-artifact@v4 with: name: ${{ matrix.package }}-${{ matrix.arch }}-${{ steps.tree.outputs.hash }}