name: Build RPM Package on: push: tags: - 'v*' branches: - main - master paths: - 'go/**' - 'cmd/**' - 'internal/**' - 'api/**' - 'packaging/**' - 'Makefile' - 'go.mod' - 'go.sum' pull_request: branches: - main - master paths: - 'go/**' - 'cmd/**' - 'internal/**' - 'api/**' - 'packaging/**' - 'Makefile' - 'go.mod' - 'go.sum' workflow_dispatch: inputs: version: description: 'Version to build (e.g., 1.0.0)' required: false default: '1.0.0-dev' env: GO_VERSION: '1.24' PACKAGE_NAME: ja4sentinel TARGET_DIST: rockylinux:9 jobs: build-rpm: name: Build RPM Package (Rocky Linux) runs-on: ubuntu-latest permissions: contents: write packages: write steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Go uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} cache: true - name: Determine version id: version run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then VERSION="${{ github.event.inputs.version }}" elif [[ "${{ github.ref }}" == refs/tags/v* ]]; then VERSION="${{ github.ref_name#v }}" else VERSION="0.0.0-$(git rev-parse --short HEAD)" fi echo "version=${VERSION}" >> $GITHUB_OUTPUT echo "Building version: ${VERSION}" - name: Build RPM in Docker run: | docker build --no-cache \ -t ${PACKAGE_NAME}-packager-rpm \ --build-arg VERSION="${{ steps.version.outputs.version }}" \ --build-arg ARCH=x86_64 \ -f packaging/Dockerfile.rpm . # Extract RPM from image mkdir -p build/rpm docker run --rm ${PACKAGE_NAME}-packager-rpm sh -c 'cat /packages/*.rpm' > build/${PACKAGE_NAME}.rpm - name: List build artifacts run: | echo "=== Build Artifacts ===" ls -lah build/rpm/ sha256sum build/${PACKAGE_NAME}.rpm - name: Upload RPM artifact uses: actions/upload-artifact@v4 with: name: ${PACKAGE_NAME}-rpm-x86_64 path: build/*.rpm retention-days: 30 - name: Upload checksum artifact uses: actions/upload-artifact@v4 with: name: ${PACKAGE_NAME}-rpm-checksums path: build/*.rpm.sha256 retention-days: 30 - name: Create release and upload assets (on tag) if: startsWith(github.ref, 'refs/tags/v') uses: softprops/action-gh-release@v2 with: files: | build/*.rpm generate_release_notes: true make_latest: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}