From 16b135b5ed21d52f20eb6760efdebb95e02004cb Mon Sep 17 00:00:00 2001 From: richardsondev Date: Sun, 10 May 2026 19:47:04 -0700 Subject: [PATCH 1/2] Add .deb package generation for Linux releases Adds debArch to Linux matrix entries and a dpkg-deb build step that creates .deb packages for each Linux architecture on release. Packages install the binary to /usr/local/bin/. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/workflows/release.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0cc928c..309ecfc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,22 +34,27 @@ jobs: # Linux - { displayName: 32-bit Linux, rustTarget: i686-unknown-linux-gnu, + debArch: i386, runner: 'ubuntu-latest' } - { displayName: 64-bit Linux, rustTarget: x86_64-unknown-linux-gnu, + debArch: amd64, runner: 'ubuntu-latest' } - { displayName: ARM32 ARMv6 Linux, rustTarget: arm-unknown-linux-gnueabi, + debArch: armel, runner: 'ubuntu-latest' } - { displayName: ARM32 ARMv7 Linux, rustTarget: armv7-unknown-linux-gnueabihf, + debArch: armhf, runner: 'ubuntu-latest' } - { displayName: ARM64 Linux, rustTarget: aarch64-unknown-linux-gnu, + debArch: arm64, runner: 'ubuntu-latest' } # macOS @@ -110,3 +115,30 @@ jobs: run: | cp ./target/${{ matrix.target.rustTarget }}/release/${{ env.APP_NAME }}${{ endsWith(matrix.target.rustTarget, '-windows-gnu') && '.exe' || '' }} ./${{ env.APP_NAME }}-${{ github.ref_name }}-${{ matrix.target.rustTarget }}${{ endsWith(matrix.target.rustTarget, '-windows-gnu') && '.exe' || '' }} && gh release upload ${{ github.event.release.tag_name }} ./${{ env.APP_NAME }}-${{ github.ref_name }}-${{ matrix.target.rustTarget }}${{ endsWith(matrix.target.rustTarget, '-windows-gnu') && '.exe' || '' }}#"${{ env.APP_NAME }}-${{ github.ref_name }}-${{ matrix.target.rustTarget }}${{ endsWith(matrix.target.rustTarget, '-windows-gnu') && '.exe' || '' }} (${{ matrix.target.displayName }})" + + - name: Build .deb package + if: ${{ github.event_name == 'release' && matrix.target.debArch != '' }} + run: | + mkdir -p dpkg/DEBIAN dpkg/usr/local/bin + cp ./target/${{ matrix.target.rustTarget }}/release/hello_world dpkg/usr/local/bin/ + chmod 755 dpkg/usr/local/bin/hello_world + VERSION="${{ github.ref_name }}" + VERSION="${VERSION#v}" + cat > dpkg/DEBIAN/control << EOF + Package: hello_world + Version: $VERSION + Architecture: ${{ matrix.target.debArch }} + Maintainer: richardsondev + Description: Rust application template + EOF + sed -i 's/^ //' dpkg/DEBIAN/control + dpkg-deb --build dpkg hello_world_${VERSION}_${{ matrix.target.debArch }}.deb + + - name: Upload .deb Release Asset + if: ${{ github.event_name == 'release' && matrix.target.debArch != '' }} + env: + GH_TOKEN: ${{ github.token }} + run: | + VERSION="${{ github.ref_name }}" + VERSION="${VERSION#v}" + gh release upload ${{ github.event.release.tag_name }} ./hello_world_${VERSION}_${{ matrix.target.debArch }}.deb From 2ee218b3a5b38b63004f45c6c456a0bd77692804 Mon Sep 17 00:00:00 2001 From: richardsondev Date: Sun, 10 May 2026 20:00:07 -0700 Subject: [PATCH 2/2] Address review feedback: /usr/bin, --clobber, env.APP_NAME - Install to /usr/bin instead of /usr/local/bin (Debian FHS policy) - Add --clobber to gh release upload for idempotent re-runs - Use env.APP_NAME where defined for consistency - Add missing debArch to matrix entries (http_trace) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/workflows/release.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 309ecfc..d233687 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -119,20 +119,20 @@ jobs: - name: Build .deb package if: ${{ github.event_name == 'release' && matrix.target.debArch != '' }} run: | - mkdir -p dpkg/DEBIAN dpkg/usr/local/bin - cp ./target/${{ matrix.target.rustTarget }}/release/hello_world dpkg/usr/local/bin/ - chmod 755 dpkg/usr/local/bin/hello_world + mkdir -p dpkg/DEBIAN dpkg/usr/bin + cp ./target/${{ matrix.target.rustTarget }}/release/${{ env.APP_NAME }} dpkg/usr/bin/ + chmod 755 dpkg/usr/bin/${{ env.APP_NAME }} VERSION="${{ github.ref_name }}" VERSION="${VERSION#v}" cat > dpkg/DEBIAN/control << EOF - Package: hello_world + Package: ${{ env.APP_NAME }} Version: $VERSION Architecture: ${{ matrix.target.debArch }} Maintainer: richardsondev Description: Rust application template EOF sed -i 's/^ //' dpkg/DEBIAN/control - dpkg-deb --build dpkg hello_world_${VERSION}_${{ matrix.target.debArch }}.deb + dpkg-deb --build dpkg ${{ env.APP_NAME }}_${VERSION}_${{ matrix.target.debArch }}.deb - name: Upload .deb Release Asset if: ${{ github.event_name == 'release' && matrix.target.debArch != '' }} @@ -141,4 +141,4 @@ jobs: run: | VERSION="${{ github.ref_name }}" VERSION="${VERSION#v}" - gh release upload ${{ github.event.release.tag_name }} ./hello_world_${VERSION}_${{ matrix.target.debArch }}.deb + gh release upload ${{ github.event.release.tag_name }} --clobber ./${{ env.APP_NAME }}_${VERSION}_${{ matrix.target.debArch }}.deb