-
Notifications
You must be signed in to change notification settings - Fork 17
171 lines (149 loc) · 6.66 KB
/
Copy pathci-linux-crossbuild.yml
File metadata and controls
171 lines (149 loc) · 6.66 KB
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
name: ci - linux binary cross build
on:
workflow_call:
outputs:
release_tags:
value: ${{ jobs.build.outputs.release_tags }}
inputs:
source_repo:
type: string
required: true
source_branch:
type: string
required: true
secrets:
VT_API_KEY:
required: false
env:
GH_TOKEN: "${{ github.TOKEN }}"
jobs:
build:
runs-on: ubuntu-24.04-arm
environment: production
outputs:
release_tags: ${{ steps.release_tags.outputs.release_tag }}
strategy:
fail-fast: false
matrix:
name: [iperf3]
os_id: [alpine]
os_version_id: [edge]
arch: [aarch64, arm, armhf, armv7, x86, x86_64, mips, mipsel, mips64, mips64el, powerpc, ppc64le, s390x, riscv64, loongarch64]
include:
- arch: aarch64
musl-cross-make: "aarch64-linux-musl"
release_name: arm64v8
- arch: arm
musl-cross-make: "arm-linux-musleabi"
release_name: arm32v5
- arch: armhf
musl-cross-make: "armv6-linux-musleabihf"
release_name: arm32v6
- arch: armv7
musl-cross-make: "armv7l-linux-musleabihf"
release_name: arm32v7
- arch: x86
musl-cross-make: "i686-linux-musl"
release_name: i386
- arch: x86_64
musl-cross-make: "x86_64-linux-musl"
release_name: amd64
- arch: mips
musl-cross-make: "mips-linux-musl"
release_name: mips
- arch: mipsel
musl-cross-make: "mipsel-linux-musl"
release_name: mipsel
- arch: mips64
musl-cross-make: "mips64-linux-musl"
release_name: mips64
- arch: mips64el
musl-cross-make: "mips64el-linux-musl"
release_name: mips64el
- arch: powerpc
musl-cross-make: "powerpc-linux-musl"
release_name: powerpc
- arch: ppc64le
musl-cross-make: "powerpc64le-linux-musl"
release_name: ppc64le
- arch: s390x
musl-cross-make: "s390x-linux-musl"
release_name: s390x
- arch: riscv64
musl-cross-make: "riscv64-linux-musl"
release_name: riscv64
- arch: loongarch64
musl-cross-make: "loongarch64-linux-musl"
release_name: loongarch64
name: ${{ matrix.name }} ${{ matrix.os_id }}:${{ matrix.os_version_id }} ${{ matrix.arch }}
env:
source_repo: ${{ inputs.source_repo }}
source_branch: ${{ inputs.source_branch }}
ws: ${{ github.workspace }}
arch: ${{ matrix.arch }}
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Host - Bootstrap qemu
uses: userdocs/actions/qemu@e8f57bd585c7bb6dcce011694d6772bab657abca # v1.0.7
with:
target_arch: ${{ matrix.arch }}
- name: Host - Bootstrap docker container
uses: userdocs/actions/qbt_docker@e8f57bd585c7bb6dcce011694d6772bab657abca # v1.0.7
with:
os_id: ghcr.io/userdocs/musl-cross-make
os_version_id: ${{ matrix.musl-cross-make }}
additional_apps: >
build-base pkgconf autoconf automake curl libtool git grep tar curl perl openssl-dev openssl-libs-static linux-headers
custom_docker_commands: |
-e CPPFLAGS=-isystem /usr/include/fortify -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3
-e CFLAGS=-flto -fno-fat-lto-objects
-e CXXFLAGS=-flto -fno-fat-lto-objects
-e LDFLAGS=-static --static -flto ${{ !startsWith(matrix.arch, 'mips') && '-fuse-ld=mold' || '' }} -Wl,-O1,--build-id,-z,noexecstack
- name: Iperf3 - Install openssl-static dependencies
run: |
curl -sLO "https://github.com/userdocs/openssl/releases/latest/download/${{ matrix.musl-cross-make }}.tar.xz"
docker exec "${container_name}" tar -xf "${wd}/${{ matrix.musl-cross-make }}.tar.xz" -C /usr/local
- name: Git clone ${{ matrix.name }}
run: docker exec "${container_name}" git clone --no-tags --single-branch --branch "${source_branch}" --shallow-submodules --recurse-submodules -j"$(nproc)" --depth 1 "${source_repo}" ${wd}/${{ matrix.name }}
- name: Configure ${{ matrix.name }}
run: docker exec -w "${wd}/${{ matrix.name }}" "${container_name}" ./configure --with-openssl="/usr/local" --disable-shared --enable-static-bin --prefix="${wd}/local"
- name: Configure ${{ matrix.name }}
if: failure()
run: docker exec -w "${wd}/${{ matrix.name }}" "${container_name}" cat ./config.log
- name: Make Build ${{ matrix.name }}
run: docker exec -w "${wd}/${{ matrix.name }}" "${container_name}" make -j$(nproc)
- name: Make Install Build ${{ matrix.name }}
run: docker exec -w "${wd}/${{ matrix.name }}" "${container_name}" make install
- name: Rename ${{ matrix.name }} to ${{ matrix.name }}-${{ matrix.release_name }}
run: docker exec "${container_name}" mv -f "${wd}/local/bin/${{ matrix.name }}" "${wd}/${{ matrix.name }}-${{ matrix.release_name }}"
- name: Create path to binary env
run: printf '%s\n' "binary_path=${{ github.workspace }}/${{ matrix.name }}-${{ matrix.release_name }}" >> $GITHUB_ENV
- name: VirusTotal Scan
id: virustotal
uses: crazy-max/ghaction-virustotal@936d8c5c00afe97d3d9a1af26d017cfdf26800a2 # v5.0.0
with:
vt_api_key: ${{ secrets.VT_API_KEY }}
files: ${{ env.binary_path }}
- name: sha256sum
run: |
printf '%s' https://www.virustotal.com/gui/file/$(sha256sum ${binary_path} | awk '{print $1}') > ${{ matrix.name }}-${{ matrix.release_name }}.url
cat ${{ matrix.name }}-${{ matrix.release_name }}.url
- name: Create tag env
run: printf '%s\n' "release_tag=$(sed -rn 's|(.*)\[(.*)],\[https://github.com/esnet/iperf],(.*)|\2|p' "${{ matrix.name }}/configure.ac")" >> $GITHUB_ENV
- name: Set tag env to output
id: release_tags
run: printf '%s\n' "release_tag=${release_tag}" >> $GITHUB_OUTPUT
- name: Generate artifact attestation
uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2
with:
subject-path: ${{ env.binary_path }}
- name: "Create artifact"
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ${{ matrix.name }}-${{ matrix.release_name }}
path: |
${{ env.binary_path }}
${{ matrix.name }}-${{ matrix.release_name }}.url