fix packaging workflow (#271) #68
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json | |
name: package | |
"on": | |
push: | |
paths: | |
- .github/actions/** | |
- .github/workflows/package.yml | |
- debian/** | |
pull_request: | |
paths: | |
- .github/actions/** | |
- .github/workflows/package.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: buildjet-16vcpu-ubuntu-2204${{ matrix.arch == 'arm64' && '-arm' || '' }} | |
container: "${{ matrix.distro }}:${{ matrix.release }}" | |
strategy: | |
matrix: | |
include: | |
- { distro: debian, release: bullseye, arch: x86_64 } | |
- { distro: debian, release: bullseye, arch: arm64 } | |
- { distro: debian, release: bookworm, arch: x86_64 } | |
- { distro: debian, release: bookworm, arch: arm64 } | |
- { distro: ubuntu, release: jammy, arch: x86_64 } # 22.04 | |
- { distro: ubuntu, release: jammy, arch: arm64 } # 22.04 | |
- { distro: ubuntu, release: noble, arch: x86_64 } # 24.04 | |
- { distro: ubuntu, release: noble, arch: arm64 } # 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: install buildsystem apt dependencies | |
run: | | |
apt-get update | |
apt-get install -y \ | |
build-essential \ | |
curl jq lsb-release unzip gpg pkg-config libzstd-dev | |
- name: install rust | |
run: | | |
curl -sSf https://sh.rustup.rs | sh /dev/stdin -y | |
echo "PATH=$HOME/.cargo/bin:$PATH" >> "$GITHUB_ENV" | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
shared-key: build-deb-${{ matrix.distro }}-${{ matrix.release }}-${{ matrix.arch }} | |
- 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 build dependencies | |
run: apt-get build-dep -y ../rpc-perf*.dsc | |
- name: build package | |
run: dpkg-buildpackage -b -us -uc | |
- 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 }}_${{ matrix.arch }} | |
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/* |