Skip to content

build rpm in ci

build rpm in ci #41

Workflow file for this run

# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: package-deb
"on":
push:
paths:
- .github/actions/**
- .github/workflows/package-deb.yml
- debian/**
pull_request:
paths:
- .github/actions/**
- .github/workflows/package-deb.yml
- debian/**
release:
types: [published]
workflow_dispatch:
inputs:
release:
description: 'Debian package release number'
default: '1'
permissions: write-all
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
RUST_BACKTRACE: 1
# Most docker images seem to get this right but not ubuntu:focal
DEBIAN_FRONTEND: noninteractive
# Use zstd maximum compression for versions of dpkg which support it.
#
# Note that dpkg only checks these environment variables after version 1.21.10
DPKG_DEB_COMPRESSOR_TYPE: zstd
DPKG_DEB_COMPRESSOR_LEVEL: 22
PROTOC_VERSION: "23.4"
jobs:
build-deb:
name: "${{ matrix.distro }}:${{ matrix.release }}"
runs-on: ubuntu-24.04
container: "${{ matrix.distro }}:${{ matrix.release }}"
strategy:
matrix:
include:
# minimum kernel version is 5.5
# debian kernels supported from bullseye and up
- { distro: debian, release: bullseye }
- { distro: debian, release: bookworm }
# ubuntu kernels supported from 20.10 and up
- { distro: ubuntu, release: jammy } # 22.04
# - { distro: ubuntu, release: noble } # 24.04
fail-fast: false
env:
# dpkg-buildpackage issues a warning if we attempt to cross compile and
# tests are still enabled. Disabling the test step fixes this.
#
# Note that we don't run tests anyway so this doesn't really change
# anything for us.
DEB_BUILD_OPTS: nocheck
steps:
- uses: actions/checkout@v4
- name: modify /etc/apt/sources.list
if: ${{ matrix.distro == 'ubuntu' }}
run: |
cat /etc/apt/sources.list | \
sed 's/^deb /deb [arch=amd64] /g' | \
grep '^deb ' \
> amd64.list
cat /etc/apt/sources.list | \
sed 's/^deb /deb [arch=arm64] /g' | \
grep archive.ubuntu.com | \
grep '^deb ' | \
sed 's|archive.ubuntu.com/ubuntu|ports.ubuntu.com|g' \
> arm64.list
cat amd64.list arm64.list > /etc/apt/sources.list
rm amd64.list arm64.list
- name: enable arm64 dpkg architecture
run: dpkg --add-architecture arm64
- name: install buildsystem apt dependencies
run: |
apt-get update
apt-get install -y \
build-essential \
crossbuild-essential-arm64 \
curl jq lsb-release unzip gpg
- name: install rust
run: |
curl -sSf https://sh.rustup.rs | sh /dev/stdin -y
echo "PATH=$HOME/.cargo/bin:$PATH" >> "$GITHUB_ENV"
- name: enable additional rustup targets
run: rustup target add aarch64-unknown-linux-gnu
- uses: Swatinem/rust-cache@v2
with:
shared-key: build-deb-${{ matrix.distro }}-${{ matrix.release }}
- name: check cargo
shell: bash
run: |
echo "::group::rustc -vV"
rustc -vV
echo "::endgroup::"
echo "::group::cargo -vV"
cargo -vV
echo "::endgroup::"
- name: set release env var
if: ${{ github.event_name == 'workflow_dispatch' }}
shell: bash
run: |
echo 'RELEASE=${{ github.event.inputs.release }}' >> $GITHUB_ENV
# Changelogs with revisions cause dpkg-source to emit an error when
# building. We only use the source package to install the build deps
# so building it with an invalid version is ok.
- name: build source package
run: dpkg-source --build .
- name: generate changelog
shell: bash
run: ./debian/gen-changelog.sh > debian/changelog
- name: install arm64 build dependencies
run: apt-get build-dep -y -a arm64 ../rezolus*.dsc
- name: build arm64 package
run: dpkg-buildpackage -b -us -uc --host-arch arm64
- name: install x86_64 build dependencies
run: apt-get build-dep -y -a amd64 ../rezolus*.dsc
- name: build x86_64 package
run: dpkg-buildpackage -b -us -uc --host-arch amd64
- name: copy debs
shell: bash
run: |
shopt -s nullglob
mkdir -p target/debian
cp ../*.deb ../*.ddeb target/debian/
- uses: actions/upload-artifact@v4
with:
path: target/debian/*
name: ${{ matrix.distro }}_${{ matrix.release }}_all
upload-to-apt-repo:
if: ${{ github.event_name == 'release' || github.event_name == 'workflow_dispatch' }}
runs-on: ubuntu-latest
needs:
- build-deb
steps:
- uses: actions/checkout@v4
- uses: google-github-actions/auth@v1
id: auth
with:
credentials_json: "${{ secrets.GCP_CREDENTIALS }}"
- uses: google-github-actions/setup-gcloud@v1
- uses: actions/[email protected]
with:
path: target/debian/
- name: configure artifact registry
run: |
gcloud config set artifacts/repository systemslab
gcloud config set artifacts/location us
- name: upload package
run: |
for artifact in target/debian/*/*; do
name="$(basename "$artifact")"
distro="$(echo "$artifact" | cut -d _ -f 1)"
release="$(echo "$artifact" | cut -d _ -f 2)"
echo "::group::upload $release $name"
gcloud artifacts apt upload "$release" --source "$artifact"
echo "::endgroup::"
done
upload-release-artifacts:
if: ${{ github.event_name == 'release' }}
runs-on: ubuntu-latest
needs:
- build-deb
steps:
- uses: actions/checkout@v4
- uses: actions/[email protected]
with:
path: target/debian/
- name: upload packages
shell: bash
run: |
set -x
shopt -s nullglob
mkdir -p target/artifacts
for artifact in target/debian/**/*; do
name="$(basename "$artifact")"
directory="$(basename "$(dirname "$artifact")")"
distro="$(echo "$directory" | cut -d _ -f 1)"
release="$(echo "$directory" | cut -d _ -f 2)"
mv "$artifact" "target/artifacts/${distro}_${release}_${name}"
done
gh release upload "${{ github.event.release.tag_name }}" target/artifacts/*