From 5abd8963482e82331b755b5df2de6554b663ff50 Mon Sep 17 00:00:00 2001 From: Andres Cera Date: Fri, 30 Jan 2026 13:03:45 -0500 Subject: [PATCH] refactor(ci): use native ARM64 runners instead of Docker+QEMU --- .github/workflows/build-check.yml | 93 ++++++++++----------------- .github/workflows/publish-release.yml | 58 +++++++---------- 2 files changed, 57 insertions(+), 94 deletions(-) diff --git a/.github/workflows/build-check.yml b/.github/workflows/build-check.yml index b806451..f1d0f87 100644 --- a/.github/workflows/build-check.yml +++ b/.github/workflows/build-check.yml @@ -9,10 +9,14 @@ on: jobs: build: name: Build ${{ matrix.arch }} - runs-on: ubuntu-latest + runs-on: ${{ matrix.runner }} strategy: matrix: - arch: [arm64, amd64] + include: + - arch: amd64 + runner: ubuntu-latest + - arch: arm64 + runner: ubuntu-24.04-arm steps: - name: Checkout ceracoder uses: actions/checkout@v4 @@ -26,68 +30,41 @@ jobs: repository: CERALIVE/srt path: srt - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Build ceracoder for ${{ matrix.arch }} + - name: Install build dependencies run: | - PLATFORM="linux/${{ matrix.arch }}" - - # Create a combined context with both repos - mkdir -p build-context - cp -r srt build-context/ - cp -r ceracoder build-context/ + sudo apt-get update + sudo apt-get install -y \ + build-essential \ + cmake \ + git \ + libssl-dev \ + pkg-config \ + tclsh \ + libgstreamer1.0-dev \ + libgstreamer-plugins-base1.0-dev \ + gstreamer1.0-plugins-base - docker buildx build \ - --platform "$PLATFORM" \ - --load \ - -t ceracoder-builder:${{ matrix.arch }} \ - -f - build-context <<'DOCKERFILE' - FROM debian:bookworm-slim AS srt-builder - RUN apt-get update && apt-get install -y \ - build-essential \ - cmake \ - git \ - libssl-dev \ - pkg-config \ - tclsh \ - && rm -rf /var/lib/apt/lists/* - WORKDIR /srt - COPY srt/ . - RUN cmake -B build \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DENABLE_APPS=OFF \ - -DENABLE_BONDING=ON \ - -DENABLE_ENCRYPTION=ON \ - && cmake --build build -j$(nproc) \ - && cmake --install build + - name: Build SRT + run: | + cd srt + cmake -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DENABLE_APPS=OFF \ + -DENABLE_BONDING=ON \ + -DENABLE_ENCRYPTION=ON + cmake --build build -j$(nproc) + sudo cmake --install build - FROM debian:bookworm-slim - RUN apt-get update && apt-get install -y \ - build-essential \ - git \ - libgstreamer1.0-dev \ - libgstreamer-plugins-base1.0-dev \ - gstreamer1.0-plugins-base \ - libssl-dev \ - pkg-config \ - && rm -rf /var/lib/apt/lists/* - COPY --from=srt-builder /usr/include/srt /usr/include/srt - COPY --from=srt-builder /usr/lib/*-linux-gnu*/libsrt* /usr/lib/ - COPY --from=srt-builder /usr/lib/*-linux-gnu*/pkgconfig/srt.pc /usr/lib/pkgconfig/ - RUN ldconfig - WORKDIR /build - COPY ceracoder/ . - RUN make ceracoder - DOCKERFILE + - name: Build ceracoder + run: | + cd ceracoder + make ceracoder - name: Verify binary was built run: | - docker run --rm ceracoder-builder:${{ matrix.arch }} ls -la /build/ceracoder + ls -la ceracoder/ceracoder + file ceracoder/ceracoder - name: Build Summary run: | diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index 336837a..c317d14 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -66,51 +66,37 @@ jobs: build: name: Build (${{ matrix.arch }}) needs: calculate-version - runs-on: ubuntu-latest + runs-on: ${{ matrix.runner }} strategy: matrix: - arch: [arm64, amd64] + include: + - arch: amd64 + runner: ubuntu-latest + - arch: arm64 + runner: ubuntu-24.04-arm steps: - name: Checkout code uses: actions/checkout@v4 with: submodules: recursive - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build in Docker (${{ matrix.arch }}) + - name: Install build dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + build-essential \ + cmake \ + pkg-config \ + libgstreamer1.0-dev \ + libgstreamer-plugins-base1.0-dev \ + libsrt-dev + + - name: Build (${{ matrix.arch }}) run: | - mkdir -p build-output - - cat > Dockerfile.build << 'DOCKERFILE' - FROM debian:bookworm - - RUN apt-get update && apt-get install -y \ - build-essential \ - cmake \ - pkg-config \ - libgstreamer1.0-dev \ - libgstreamer-plugins-base1.0-dev \ - libsrt-dev \ - && rm -rf /var/lib/apt/lists/* - - WORKDIR /src - COPY . . - - RUN cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr - RUN cmake --build build -j$(nproc) - RUN DESTDIR=/output cmake --install build - DOCKERFILE - - docker buildx build \ - --platform linux/${{ matrix.arch }} \ - --output type=local,dest=build-output \ - -f Dockerfile.build \ - . + mkdir -p build-output/usr + cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr + cmake --build build -j$(nproc) + DESTDIR=$PWD/build-output cmake --install build - name: Install FPM run: |