name: Build RPMs on: push: paths: - "**.spec" workflow_dispatch: jobs: build: runs-on: almalinux-10 strategy: fail-fast: false matrix: spec: - sonic-interface-libraries.spec - sonic-win.spec - sonic-workspace.spec steps: - name: Checkout uses: actions/checkout@v4 - 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 - 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: | FORGEJO_URL="${{ github.server_url }}" OWNER="${{ github.repository_owner }}" mock \ --root alma+epel-10-x86_64 \ --resultdir "${HOME}/mock-results" \ --config-opts="config_opts['dnf.conf'] += '[sonicde-rpm]\nname=SonicDE RPM\nbaseurl=${FORGEJO_URL}/api/packages/${OWNER}/rpm/el10\nenabled=1\ngpgcheck=0\npriority=90\n'" \ --rebuild "${{ env.SRPM_PATH }}" - name: Upload RPMs to Forgejo Package Registry 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 - name: Clean up build artifacts if: always() run: | rm -rf "${HOME}/mock-results" rm -rf "${HOME}/rpmbuild/SRPMS"