Merge pull request #12 from momentohq/makefile #14
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/** | |
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-latest | |
container: "${{ matrix.distro }}:${{ matrix.release }}" | |
strategy: | |
matrix: | |
include: | |
- { distro: debian, release: buster } | |
- { distro: debian, release: bullseye } | |
- { distro: debian, release: bookworm } | |
# trusty and xenial are too old to properly support cross compiling | |
# (or a compiler that supports C++17). | |
# - { distro: ubuntu, release: trusty } # LTS until Apr 2024 | |
# - { distro: ubuntu, release: xenial } # LTS until Apr 2026 | |
# - { distro: ubuntu, release: bionic } # LTS until Apr 2028 | |
- { distro: ubuntu, release: focal } # LTS until Apr 2030 | |
- { distro: ubuntu, release: jammy } # LTS until Apr 2032 | |
- { distro: ubuntu, release: lunar } # Current release | |
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@v3 | |
- 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 | |
# Newer clang versions need a newer version of libstdc++ then bionic provides. | |
- name: install a newer libstc++ version needed for clang | |
if: ${{ matrix.release == 'bionic' }} | |
run: | | |
apt-get -q install -y software-properties-common | |
add-apt-repository -y ppa:ubuntu-toolchain-r/test | |
# bpf-rs needs a newer version of clang than is available in older distro releases | |
- name: install a newer clang version | |
run: | | |
curl -sSL https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - | |
cat > /etc/apt/sources.list.d/llvm.list <<EOM | |
deb http://apt.llvm.org/$(lsb_release -sc)/ llvm-toolchain-$(lsb_release -sc) main | |
EOM | |
apt-get -q update | |
- 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@v3 | |
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@v3 | |
- uses: google-github-actions/auth@v1 | |
id: auth | |
with: | |
credentials_json: "${{ secrets.GCP_CREDENTIALS }}" | |
- uses: google-github-actions/setup-gcloud@v1 | |
- uses: actions/download-artifact@v3 | |
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@v3 | |
- uses: actions/download-artifact@v3 | |
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")")" | |
release="$(echo "$directory" | cut -d _ -f 2)" | |
mv "$artifact" "target/artifacts/${release}_${name}" | |
done | |
gh release upload "${{ github.event.release.tag_name }}" target/artifacts/* |