Skip packing a PR build when edge already holds the version
A PR can change a package's directory without bumping its version: an upstream hook, its tests, a README. bin/build then plans nothing, and the pack step failed on the empty build output, turning the required result check red (seen on #769). Make the same dry-run check publish.yml's rebuild job already makes, and skip packing and uploading when nothing was built. publish.yml finds no artifact for such a merge and records the package as already published.
This commit is contained in:
1 parent
88c82f3f24
commit
5bd85a785f
1 file changed
+17
-1
@@ -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 }}
|
||||
|
||||
Reference in new issue
Block a user