blob: 66d86677f4e3d9fb57a7a3af35eae31c9f600fb0 [file] [log] [blame]
name: build and release
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]*'
concurrency:
group: ${{ github.workflow }}-${{ github.event.after }}
cancel-in-progress: true
env:
# https://github.com/llvm/llvm-project/releases/tag/llvmorg-15.0.0
LLVM_URL_PREFIX: https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.0
LLVM_arm64: clang+llvm-15.0.0-aarch64-linux-gnu
LLVM_amd64: clang+llvm-15.0.0-x86_64-linux-gnu-rhel-8.4
jobs:
build:
name: Build static bpftool binary
runs-on: ubuntu-22.04
env:
TARGETARCH: ${{ matrix.arch }}
FILE_STRING_ARCH_amd64: x86-64
FILE_STRING_ARCH_arm64: aarch64
strategy:
matrix:
arch: [arm64, amd64]
steps:
# amd64 needs the dependencies to build bpftool
- name: Install dependencies (amd64)
if: matrix.arch == 'amd64'
run: |
sudo apt-get update
sudo apt-get install -y libelf-dev libcap-dev
- name: Download and extract compiled LLVM release
env:
LLVM: ${{ env[format('LLVM_{0}', matrix.arch)] }}
run: |
curl -L -O "${{ env.LLVM_URL_PREFIX}}/${{ env.LLVM }}.tar.xz"
tar -xvf "${{ env.LLVM }}.tar.xz"
- name: Checkout bpftool code
uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
with:
submodules: recursive
# Create a new directory to avoid wiping out LLVM on bpftool checkout
path: 'bpftool'
- name: Build static bpftool natively for amd64
if: matrix.arch == 'amd64'
working-directory: 'bpftool'
env:
LLVM_PATH: ${{ env[format('LLVM_{0}', matrix.arch)] }}
run: |
EXTRA_CFLAGS=--static \
LLVM_CONFIG="${GITHUB_WORKSPACE}/${{ env.LLVM_PATH }}/bin/llvm-config" \
LLVM_STRIP="${GITHUB_WORKSPACE}/${{ env.LLVM_PATH }}/bin/llvm-strip" \
HOSTAR="${GITHUB_WORKSPACE}/${{ env.LLVM_PATH }}/bin/llvm-ar" \
make -j -C src V=1
strip src/bpftool
- name: Set up QEMU
uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # v2.1.0
if: matrix.arch == 'arm64'
with:
platforms: arm64
# The emulated build leverages Docker and Ubuntu 22.04 container image
# distribution to have all the needed arm64 packages.
- name: Build static bpftool for arm64 with emulation
if: matrix.arch == 'arm64'
env:
LLVM_PATH: ${{ env[format('LLVM_{0}', matrix.arch)] }}
run: |
docker run --platform linux/arm64 --rm -v $(pwd):/build ubuntu:22.04 \
bash -c "apt-get update && \
apt-get install -y make pkg-config gcc \
libelf-dev libcap-dev libstdc++-11-dev zlib1g-dev && \
cd /build/bpftool && \
EXTRA_CFLAGS=--static \
LLVM_CONFIG='/build/${{ env.LLVM_PATH }}/bin/llvm-config' \
LLVM_STRIP='/build/${{ env.LLVM_PATH }}/bin/llvm-strip' \
CLANG='/build/${{ env.LLVM_PATH }}/bin/clang' \
make -j -C src V=1 && \
strip src/bpftool"
- name: Test bpftool binary
working-directory: 'bpftool/src'
env:
ARCH: ${{ env[format('FILE_STRING_ARCH_{0}', matrix.arch)] }}
run: |
file ./bpftool | \
tee /dev/stderr | \
grep -q "${{ env.ARCH }}"
./bpftool 2>&1 | grep -q Usage
./bpftool -p version | \
tee /dev/stderr | \
jq --exit-status ".features | .llvm and .skeletons"
ldd ./bpftool 2>&1 | \
tee /dev/stderr | \
grep -q 'not a dynamic executable'
- name: Upload Artifact
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
with:
name: ${{ format('bpftool_{0}', matrix.arch) }}
path: bpftool/src/bpftool
draft-release:
name: Create a draft release
runs-on: ubuntu-22.04
needs: build
permissions:
contents: write
steps:
- name: Download artifacts from build
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
- name: Rename binaries and compress
run: |
archive_amd64="bpftool-${{ github.ref_name }}-amd64.tar.gz"
archive_arm64="bpftool-${{ github.ref_name }}-arm64.tar.gz"
tar -C bpftool_amd64 -I 'gzip -9' -cvf "${archive_amd64}" bpftool
tar -C bpftool_arm64 -I 'gzip -9' -cvf "${archive_arm64}" bpftool
sha256sum "${archive_amd64}" > "${archive_amd64}.sha256sum"
sha256sum "${archive_arm64}" > "${archive_arm64}.sha256sum"
- name: Checkout bpftool and libbpf code
uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
with:
submodules: recursive
path: 'bpftool'
- name: Package source code including submodules
run: |
rm -rf -- bpftool/.git bpftool/libbpf/.git
tar -I 'gzip -9' -cvf "bpftool-libbpf-${{ github.ref_name }}-sources.tar.gz" bpftool
- name: Create draft release and add artifacts
uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # v0.1.15
with:
draft: true
files: bpftool*