name: Build RPMs on: push: paths: - "**.spec" workflow_dispatch: jobs: build: runs-on: almalinux-10 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Determine changed specs id: changed run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then SPECS="sonic-interface-libraries.spec sonic-win.spec sonic-workspace.spec" else 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 usermod -aG mock $(whoami) || true - name: Setup RPM build tree run: rpmdev-setuptree - name: Build changed specs run: | FORGEJO_URL="${{ github.server_url }}" OWNER="${{ github.repository_owner }}" TOKEN="${{ secrets.PACKAGE_TOKEN }}" 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}" 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