diff --git a/.forgejo/workflows/build-rpms.yml b/.forgejo/workflows/build-rpms.yml index a138e99..7f8a693 100644 --- a/.forgejo/workflows/build-rpms.yml +++ b/.forgejo/workflows/build-rpms.yml @@ -7,112 +7,75 @@ on: workflow_dispatch: jobs: - changed: + build: runs-on: almalinux-10 - outputs: - matrix: ${{ steps.set.outputs.matrix }} steps: - - name: Checkout - uses: actions/checkout@v4 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Determine changed specs - id: set + id: changed 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']}))" + SPECS="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: ${{ fromJSON(needs.changed.outputs.matrix) }} - - steps: - - name: Checkout - uses: actions/checkout@v4 + SPECS=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep '\.spec$' || true) + fi + echo "specs=$SPECS" >> "$GITHUB_OUTPUT" - name: Install build tools run: | - dnf install -y \ - rpm-build \ - rpmdevtools \ - mock \ - curl - - - name: Add runner user to mock group - run: usermod -aG mock $(whoami) || true + dnf install -y rpm-build rpmdevtools mock curl + usermod -aG mock $(whoami) || true - name: Setup RPM build tree run: rpmdev-setuptree - - name: Download sources for ${{ matrix.spec }} - run: | - spectool -g -C ~/rpmbuild/SOURCES/ ${{ matrix.spec }} - - - name: Build SRPM from ${{ matrix.spec }} - run: | - rpmbuild -bs \ - --define "_topdir ${HOME}/rpmbuild" \ - --define "_disable_source_fetch 0" \ - ${{ matrix.spec }} - PKGNAME=$(rpmspec -q --srpm --queryformat "%{NAME}-%{VERSION}-%{RELEASE}.src.rpm" ${{ matrix.spec }}) - echo "SRPM_PATH=${HOME}/rpmbuild/SRPMS/${PKGNAME}" >> "$GITHUB_ENV" - - - name: Build RPM with mock - run: | - cat > /tmp/mock-custom.cfg <<'MOCKEOF' - include('/etc/mock/alma+epel-10-x86_64.cfg') - config_opts['root'] = 'custom' - config_opts['yum.conf'] += """ - [sonicde-rpm] - name=SonicDE RPM - baseurl=https://pc-rytteren.dk/forge/api/packages/anders/rpm - enabled=1 - gpgcheck=0 - - [xlibre-xserver] - name=Copr xlibre-xserver - baseurl=https://download.copr.fedorainfracloud.org/results/@xlibre/xlibre-xserver/rhel+epel-10-$basearch/ - type=rpm-md - skip_if_unavailable=True - gpgcheck=1 - gpgkey=https://download.copr.fedorainfracloud.org/results/@xlibre/xlibre-xserver/pubkey.gpg - repo_gpgcheck=0 - enabled=1 - """ - MOCKEOF - cp /tmp/mock-custom.cfg /etc/mock/custom.cfg - mock --root custom --scrub=chroot || true - mock \ - --root custom \ - --resultdir "${HOME}/mock-results" \ - --clean \ - --rebuild "${{ env.SRPM_PATH }}" - - - name: Upload RPMs to Forgejo Package Registry + - name: Build changed specs run: | FORGEJO_URL="${{ github.server_url }}" OWNER="${{ github.repository_owner }}" TOKEN="${{ secrets.PACKAGE_TOKEN }}" - find "${HOME}/mock-results" -name "*.rpm" ! -name "*.src.rpm" | while read rpm; do - FILENAME=$(basename "$rpm") - echo "Uploading $FILENAME ..." - curl --fail-with-body \ - --user "${OWNER}:${TOKEN}" \ - --upload-file "$rpm" \ - "${FORGEJO_URL}/api/packages/${OWNER}/rpm/upload" - done + for spec in ${{ steps.changed.outputs.specs }}; do + echo "=== Building $spec ===" + spectool -g -C ~/rpmbuild/SOURCES/ "$spec" + rpmbuild -bs --define "_topdir ${HOME}/rpmbuild" --define "_disable_source_fetch 0" "$spec" + PKGNAME=$(rpmspec -q --srpm --queryformat "%{NAME}-%{VERSION}-%{RELEASE}.src.rpm" "$spec") + SRPM="${HOME}/rpmbuild/SRPMS/${PKGNAME}" - - name: Clean up build artifacts - if: always() - run: | - rm -rf "${HOME}/mock-results" - rm -rf "${HOME}/rpmbuild/SRPMS" + cat > /tmp/mock-custom.cfg <<'MOCKEOF' + include('/etc/mock/alma+epel-10-x86_64.cfg') + config_opts['root'] = 'custom' + config_opts['yum.conf'] += """ + [sonicde-rpm] + name=SonicDE RPM + baseurl=https://pc-rytteren.dk/forge/api/packages/anders/rpm + enabled=1 + gpgcheck=0 + + [xlibre-xserver] + name=Copr xlibre-xserver + baseurl=https://download.copr.fedorainfracloud.org/results/@xlibre/xlibre-xserver/rhel+epel-10-$basearch/ + type=rpm-md + skip_if_unavailable=True + gpgcheck=1 + gpgkey=https://download.copr.fedorainfracloud.org/results/@xlibre/xlibre-xserver/pubkey.gpg + repo_gpgcheck=0 + enabled=1 + """ + MOCKEOF + cp /tmp/mock-custom.cfg /etc/mock/custom.cfg + mock --root custom --scrub=chroot || true + mock --root custom --resultdir "${HOME}/mock-results" --clean --rebuild "$SRPM" + + find "${HOME}/mock-results" -name "*.rpm" ! -name "*.src.rpm" | while read rpm; do + FILENAME=$(basename "$rpm") + echo "Uploading $FILENAME ..." + curl --fail-with-body --user "${OWNER}:${TOKEN}" --upload-file "$rpm" "${FORGEJO_URL}/api/packages/${OWNER}/rpm/upload" + done + + rm -rf "${HOME}/mock-results" + rm -rf "${HOME}/rpmbuild/SRPMS" + done