-
Notifications
You must be signed in to change notification settings - Fork 71
147 lines (130 loc) · 5.35 KB
/
release.yaml
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*