1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
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*
|