sync: Pull latest bpftool changes from kernel #5
Workflow file for this run
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
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 | |
uses: qmonnet/git-archive-all-action@791fb850881cf58b1d1fcc9b06c01940080bba0a # v1.0.1 | |
with: | |
output-files: bpftool-libbpf-${{ github.ref_name }}-sources.tar.gz | |
base-repo: bpftool | |
- name: Create draft release and add artifacts | |
uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # v0.1.15 | |
with: | |
draft: true | |
files: bpftool* |