From 5a86f7cc16adfd2498d450c11000cba06803e4b6 Mon Sep 17 00:00:00 2001 From: rob thijssen Date: Thu, 16 Apr 2026 11:41:15 +0300 Subject: [PATCH] ci: dump COPR per-chroot build logs to CI output Previously the COPR publish steps only surfaced copr-cli's status updates (pending/importing/running). When a build failed, diagnosing required clicking through to the COPR web UI. Now we submit with --nowait, watch the build, then use copr-cli download-build to fetch each chroot's builder-live.log and cat them as collapsible ::group:: blocks in the CI output. Logic is factored into .gitea/scripts/copr-build.sh so cortex and neuron jobs share it. Both COPR jobs now check out the repo to access the script. Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitea/scripts/copr-build.sh | 61 ++++++++++++++++++++++++++++++++++++ .gitea/workflows/ci.yml | 8 +++-- 2 files changed, 67 insertions(+), 2 deletions(-) create mode 100755 .gitea/scripts/copr-build.sh diff --git a/.gitea/scripts/copr-build.sh b/.gitea/scripts/copr-build.sh new file mode 100755 index 0000000..2cc1fdc --- /dev/null +++ b/.gitea/scripts/copr-build.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# Submit an SRPM to COPR, watch the build, and dump per-chroot build logs +# to stdout so they are captured in CI output. +# +# Usage: copr-build.sh [srpm...] +# Example: copr-build.sh helexa/cortex ./cortex-0.1.2-1.fc43.src.rpm + +set -o pipefail + +PROJECT="$1" +shift + +if [ -z "$PROJECT" ] || [ "$#" -eq 0 ]; then + echo "usage: $0 [srpm...]" >&2 + exit 2 +fi + +# Submit without waiting; capture the build ID from stdout. +SUBMIT_OUT=$(copr-cli build --nowait "$PROJECT" "$@") +echo "$SUBMIT_OUT" +BUILD_ID=$(echo "$SUBMIT_OUT" | grep -oP 'Created builds: \K[0-9]+' | head -n1) + +if [ -z "$BUILD_ID" ]; then + echo "error: could not parse build ID from copr-cli output" >&2 + exit 1 +fi + +echo +echo "Build $BUILD_ID submitted to $PROJECT" +echo "Follow live: https://copr.fedorainfracloud.org/coprs/build/$BUILD_ID" +echo + +# Watch the build; captures status transitions to stdout. Exit non-zero +# on build failure, but defer propagating that until after we've fetched +# logs so the CI output contains diagnostics either way. +if copr-cli watch-build "$BUILD_ID"; then + STATUS=0 +else + STATUS=$? +fi + +# Fetch per-chroot results (logs + rpms). Anonymous download — no auth needed. +mkdir -p copr-logs +copr-cli download-build --dest copr-logs "$BUILD_ID" || { + echo "warning: failed to download build artifacts" >&2 +} + +# Dump each chroot's builder-live.log as a collapsible group. +for chroot_dir in copr-logs/*/; do + [ -d "$chroot_dir" ] || continue + chroot=$(basename "$chroot_dir") + log="${chroot_dir}builder-live.log" + if [ -f "$log" ]; then + echo + echo "::group::${chroot} builder-live.log" + cat "$log" + echo "::endgroup::" + fi +done + +exit "$STATUS" diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 7d1b0c8..1a03f72 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -168,6 +168,8 @@ jobs: runs-on: fedora needs: srpm-cortex steps: + - uses: actions/checkout@v4 + - name: Download SRPM uses: actions/download-artifact@v3 with: @@ -179,13 +181,15 @@ jobs: echo "${{ secrets.COPR_CONFIG }}" > ~/.config/copr - name: Submit build to COPR - run: copr-cli build helexa/cortex *.src.rpm + run: bash .gitea/scripts/copr-build.sh helexa/cortex *.src.rpm copr-neuron: name: Publish neuron to COPR runs-on: fedora needs: srpm-neuron steps: + - uses: actions/checkout@v4 + - name: Download SRPM uses: actions/download-artifact@v3 with: @@ -197,7 +201,7 @@ jobs: echo "${{ secrets.COPR_CONFIG }}" > ~/.config/copr - name: Submit build to COPR - run: copr-cli build helexa/neuron *.src.rpm + run: bash .gitea/scripts/copr-build.sh helexa/neuron *.src.rpm bump-version: name: Bump version in source