@@ -11,10 +11,18 @@ permissions:
1111jobs :
1212 build-rpm :
1313 name : Build RPM Package (${{ matrix.arch }})
14- runs-on : ubuntu-latest
14+ # Use native runners for each architecture to avoid QEMU emulation issues
15+ # QEMU has known problems with tar operations that cause rpmbuild to fail
16+ runs-on : ${{ matrix.runner }}
1517 strategy :
1618 matrix :
17- arch : [x86_64, aarch64]
19+ include :
20+ - arch : x86_64
21+ runner : ubuntu-latest
22+ docker_platform : linux/amd64
23+ - arch : aarch64
24+ runner : ubuntu-24.04-arm
25+ docker_platform : linux/arm64
1826 fail-fast : false
1927
2028 steps :
2331 with :
2432 fetch-depth : 0 # Fetch all history for git describe
2533
26- - name : Set up QEMU
27- uses : docker/setup-qemu-action@v3
28- with :
29- platforms : arm64,amd64
30-
3134 - name : Set up Docker Buildx
3235 uses : docker/setup-buildx-action@v3
3336
@@ -38,37 +41,42 @@ jobs:
3841 echo "version=$VERSION" >> $GITHUB_OUTPUT
3942 echo "Building version: $VERSION for architecture: ${{ matrix.arch }}"
4043
41- - name : Set architecture-specific variables
42- id : arch
43- run : |
44- if [ "${{ matrix.arch }}" = "x86_64" ]; then
45- echo "docker_platform=linux/amd64" >> $GITHUB_OUTPUT
46- echo "docker_arch=amd64" >> $GITHUB_OUTPUT
47- else
48- echo "docker_platform=linux/arm64" >> $GITHUB_OUTPUT
49- echo "docker_arch=arm64" >> $GITHUB_OUTPUT
50- fi
51-
5244 - name : Build RPM builder Docker image
5345 run : |
5446 docker buildx build \
55- --platform ${{ steps.arch.outputs .docker_platform }} \
47+ --platform ${{ matrix .docker_platform }} \
5648 --load \
5749 --cache-from type=gha,scope=rpmbuild-${{ matrix.arch }} \
5850 --cache-to type=gha,mode=max,scope=rpmbuild-${{ matrix.arch }} \
5951 -f support/rpm/Dockerfile.rpmbuild \
6052 -t mygramdb-rpmbuild:${{ steps.version.outputs.version }}-${{ matrix.arch }} \
6153 .
6254
55+ - name : Create source tarball
56+ run : |
57+ VERSION="${{ steps.version.outputs.version }}"
58+ NAME="mygramdb"
59+ TARBALL="${NAME}-${VERSION}.tar.gz"
60+
61+ mkdir -p "$GITHUB_WORKSPACE/rpmsources"
62+
63+ # Create tarball using git archive for clean reproducible builds
64+ git archive --format=tar.gz --prefix="${NAME}-${VERSION}/" HEAD \
65+ > "$GITHUB_WORKSPACE/rpmsources/${TARBALL}"
66+
67+ echo "Created source tarball:"
68+ ls -lh "$GITHUB_WORKSPACE/rpmsources/${TARBALL}"
69+
6370 - name : Build RPM packages
6471 run : |
6572 # Create output directory in workspace
6673 mkdir -p "$GITHUB_WORKSPACE/dist/rpm"
6774
68- # Run RPM build with absolute paths
75+ # Run RPM build with pre-created tarball mounted
6976 docker run --rm \
70- --platform ${{ steps.arch.outputs .docker_platform }} \
77+ --platform ${{ matrix .docker_platform }} \
7178 -e MYGRAMDB_VERSION="${{ steps.version.outputs.version }}" \
79+ -v "$GITHUB_WORKSPACE/rpmsources:/rpmsources:ro" \
7280 -v "$GITHUB_WORKSPACE/dist:/workspace/dist" \
7381 mygramdb-rpmbuild:${{ steps.version.outputs.version }}-${{ matrix.arch }}
7482
99107 echo "Testing RPM: $MAIN_RPM"
100108
101109 docker run --rm \
102- --platform ${{ steps.arch.outputs .docker_platform }} \
110+ --platform ${{ matrix .docker_platform }} \
103111 -v "$GITHUB_WORKSPACE/dist:/dist" \
104112 almalinux:9 bash -c "
105113 set -e
0 commit comments