Skip to content

Commit 67900ed

Browse files
CI: Add GitHub Actions
1 parent 44e4ea0 commit 67900ed

File tree

3 files changed

+277
-0
lines changed

3 files changed

+277
-0
lines changed

.github/workflows/ci.yml

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
pull_request:
6+
workflow_dispatch:
7+
workflow_call:
8+
9+
jobs:
10+
Lint:
11+
name: Lint
12+
runs-on: ubuntu-latest
13+
steps:
14+
- name: Checkout
15+
uses: actions/checkout@v4
16+
with:
17+
fetch-depth: 1
18+
- name: Install clang-format
19+
run: |
20+
sudo apt-get update
21+
sudo apt-get install -y clang-format
22+
- name: Run clang-format
23+
run: |
24+
clang-format --dry-run --Werror src/*.c
25+
26+
Build:
27+
name: Build
28+
runs-on: ubuntu-latest
29+
env:
30+
cross_dir: /opt/x-tools
31+
strategy:
32+
matrix:
33+
include:
34+
- name: arm64
35+
triplet: aarch64-unknown-linux-musl
36+
sha256: 76f0d71893f3864e91ad09feff71a719cdf94cccd4f14cc25d7deed395968b5b
37+
- name: arm32
38+
triplet: arm-unknown-linux-musleabi
39+
sha256: 1242b2a965480415ce90a710ab7600730a8de114f5bc5452ed7382e64839b5de
40+
- name: arm32hf
41+
triplet: arm-unknown-linux-musleabihf
42+
sha256: 6e6f20cebd75ca5319c5dfb00fdd50a4ceb22af2df9073a75cafbdd3204eebad
43+
- name: arm32v7
44+
triplet: armv7-unknown-linux-musleabi
45+
sha256: 158d8fd651d8c501d8dea4bb82a152208732cb10a5f72e7e8e4ce9f551e8d165
46+
- name: arm32v7hf
47+
triplet: armv7-unknown-linux-musleabihf
48+
sha256: 7643420285f038545997d3234bee9c854900fa9060388769442ed20a72aeac23
49+
- name: i586
50+
triplet: i586-unknown-linux-musl
51+
sha256: 37d494c1fe60ac07ab8b83871a77a63ab885e5b06cceaa0777537db7767c464f
52+
- name: i686
53+
triplet: i686-unknown-linux-musl
54+
sha256: 0b1baac45c94b499791b65bbc63d0486aa557c6576142eddce3dee55e2fd022b
55+
- name: loong64
56+
triplet: loongarch64-unknown-linux-musl
57+
sha256: 2b8cddf9e082f8c8527a459520037ebcedae7262950e429d96184622ae74b8cf
58+
- name: m68k
59+
triplet: m68k-unknown-linux-musl
60+
sha256: 72f6427a1c97c1bd151ebcbd98eab6c39d46090bb89ff2e40c639be012dd2855
61+
- name: microblazeel
62+
triplet: microblazeel-xilinx-linux-musl
63+
sha256: ce892fe2c799bfd963de06632f5d02ea3e78d8abf2bfd361d673d4ce28fb6f69
64+
- name: microblaze
65+
triplet: microblaze-xilinx-linux-musl
66+
sha256: 03852d0ba1a5d6cd3efe1ee5b1cb7506fcc2b5b3026966fe1d7d916d621f5b4b
67+
- name: mips64el
68+
triplet: mips64el-unknown-linux-musl
69+
sha256: 01f821f8c476ec6e9618c4272a2e7e6fa3d664491f5ede4296d33af2e423a5ca
70+
- name: mips64
71+
triplet: mips64-unknown-linux-musl
72+
sha256: 9a99beb2e08584373451321d4580ff9c6fe3e1899daab511d2822d547e1a78be
73+
- name: mips32el
74+
triplet: mipsel-unknown-linux-musl
75+
sha256: 2698fea97c0c8bfdbcfa5db3fead20f779411ab1222e571b966a823a9f27356d
76+
- name: mips32elsf
77+
triplet: mipsel-unknown-linux-muslsf
78+
sha256: 36d8b864b3f6d27558d3f19695a4a39b79a873086edc60bebf733777df2b8359
79+
- name: mips32
80+
triplet: mips-unknown-linux-musl
81+
sha256: b74b51d0f61a837f235ec2cecc7b112c1ed53ad8046c88b907a63b4fdf93d4f3
82+
- name: mips32sf
83+
triplet: mips-unknown-linux-muslsf
84+
sha256: cc87dcaeed29f970bddb4b572c40a4074b9ac3997ba254725e8a89e05485538a
85+
- name: powerpc64
86+
triplet: powerpc64-unknown-linux-musl
87+
sha256: d3cce7238b4e2bfaf0ae5a47d4390b84616ad8ae848a07809fe293f436444ee8
88+
- name: powerpc
89+
triplet: powerpc-unknown-linux-musl
90+
sha256: aa50fe4bd9de4e1616400086ec5a29eded5bfbbb9b974b44e990ede3554ffc9e
91+
- name: riscv32
92+
triplet: riscv32-unknown-linux-musl
93+
sha256: ebac6326d6a0cd77c03a9813e6cf63ce70d3d46381149a82cafb60563d9c4732
94+
- name: riscv64
95+
triplet: riscv64-unknown-linux-musl
96+
sha256: 552361f25eaef471d88032eab89e7c1642ddfee466556f1f2e0f6eb68453b7a1
97+
- name: s390x
98+
triplet: s390x-ibm-linux-musl
99+
sha256: d48e0465117ecdba93db01feffd7133bdc975b5dd859e388a8bf7937a9b68d36
100+
- name: sh4
101+
triplet: sh4-multilib-linux-musl
102+
sha256: 6d1cb6c64e71773c4fe68b4a5d774e596ac3d58813b5c1365529b34be08ff309
103+
- name: x86_64
104+
triplet: x86_64-unknown-linux-musl
105+
sha256: a896bad67a4dae7cd7baece62d537fda07f8c74e65fee1b450a691b83e151a9c
106+
steps:
107+
- name: Checkout
108+
uses: actions/checkout@v4
109+
with:
110+
fetch-depth: 1
111+
- name: Set up toolchain for ${{ matrix.name }}
112+
run: |
113+
CROSS_TOOLCHAIN_URL="https://github.com/cross-tools/musl-cross/releases/download/20250520/${{ matrix.triplet }}.tar.xz"
114+
PKG_CONFIG_PATH="${{ env.cross_dir }}/${{ matrix.triplet }}/${{ matrix.triplet }}/sysroot/usr/lib/pkgconfig"
115+
116+
sudo mkdir -m 777 -p "${{ env.cross_dir }}"
117+
env \
118+
CROSS_TRIPLET="${{ matrix.triplet }}" \
119+
CROSS_TOOLCHAIN_URL="$CROSS_TOOLCHAIN_URL" \
120+
CROSS_TOOLCHAIN_SHA256="${{ matrix.sha256 }}" \
121+
CROSS_DIR="${{ env.cross_dir }}" \
122+
PKG_CONFIG_PATH="$PKG_CONFIG_PATH" \
123+
.github/workflows/scripts/cross-setup.sh
124+
- name: Build for ${{ matrix.name }}
125+
run: |
126+
CROSS_PREFIX="${{ env.cross_dir }}/${{ matrix.triplet }}/bin/${{ matrix.triplet }}-"
127+
make STATIC=1 CROSS_PREFIX="$CROSS_PREFIX"
128+
- name: Upload ${{ matrix.name }}
129+
uses: actions/upload-artifact@v4
130+
with:
131+
name: fakehttp-linux-${{ matrix.name }}
132+
path: build
133+
if-no-files-found: error

.github/workflows/release.yml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
name: Release
2+
run-name: Release ${{ github.event.inputs.version }}
3+
4+
on:
5+
workflow_dispatch:
6+
inputs:
7+
version:
8+
description: 'Version Number'
9+
required: true
10+
11+
jobs:
12+
Build:
13+
uses: ./.github/workflows/ci.yml
14+
15+
Release:
16+
permissions:
17+
contents: write
18+
runs-on: ubuntu-latest
19+
needs: Build
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@v4
23+
with:
24+
fetch-depth: 1
25+
- name: Download Artifact
26+
uses: actions/download-artifact@v4
27+
with:
28+
path: ${{ github.workspace }}/artifacts
29+
- name: Reorganize files
30+
run: |
31+
mkdir release
32+
cd artifacts
33+
chmod a+x */fakehttp*
34+
for triplet in *; do
35+
tar czvf "../release/$triplet.tar.gz" "$triplet"
36+
done
37+
- name: Make a tag
38+
run: |
39+
git config user.name 'GitHub Actions'
40+
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
41+
git tag -a '${{ github.event.inputs.version }}' -m '${{ github.event.inputs.version }}'
42+
git push origin '${{ github.event.inputs.version }}'
43+
- name: Make a release
44+
env:
45+
GITHUB_TOKEN: ${{ github.token }}
46+
run: |
47+
gh release create --title 'v${{ github.event.inputs.version }}' --generate-notes --verify-tag '${{ github.event.inputs.version }}' release/*.tar.gz
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#!/bin/sh
2+
set -eux
3+
4+
: "------"
5+
: "CROSS_TRIPLET=$CROSS_TRIPLET"
6+
: "CROSS_TOOLCHAIN_URL=$CROSS_TOOLCHAIN_URL"
7+
: "CROSS_TOOLCHAIN_SHA256=$CROSS_TOOLCHAIN_SHA256"
8+
: "CROSS_DIR=$CROSS_DIR"
9+
: "------"
10+
11+
CROSS_BASE="$CROSS_DIR/$CROSS_TRIPLET"
12+
CROSS_SRC="$CROSS_BASE/src"
13+
CROSS_USR="$CROSS_BASE/$CROSS_TRIPLET/sysroot/usr"
14+
PATH="$CROSS_BASE/bin:$PATH"
15+
export PATH
16+
17+
libmnl_name=libmnl-1.0.5
18+
libmnl_tar=$libmnl_name.tar.bz2
19+
libmnl_sha256=274b9b919ef3152bfb3da3a13c950dd60d6e2bcd54230ffeca298d03b40d0525
20+
libmnl_url="https://www.netfilter.org/projects/libmnl/files/$libmnl_tar"
21+
22+
libnfnetlink_name=libnfnetlink-1.0.2
23+
libnfnetlink_tar=$libnfnetlink_name.tar.bz2
24+
libnfnetlink_sha256=b064c7c3d426efb4786e60a8e6859b82ee2f2c5e49ffeea640cfe4fe33cbc376
25+
libnfnetlink_url="https://www.netfilter.org/projects/libnfnetlink/files/$libnfnetlink_tar"
26+
27+
libnetfilter_queue_name=libnetfilter_queue-1.0.5
28+
libnetfilter_queue_tar=$libnetfilter_queue_name.tar.bz2
29+
libnetfilter_queue_sha256=f9ff3c11305d6e03d81405957bdc11aea18e0d315c3e3f48da53a24ba251b9f5
30+
libnetfilter_queue_url="https://www.netfilter.org/projects/libnetfilter_queue/files/$libnetfilter_queue_tar"
31+
32+
33+
: "Downloading toolchain..."
34+
cd "$CROSS_DIR"
35+
curl -Lfo "$CROSS_TRIPLET.tar.xz" "$CROSS_TOOLCHAIN_URL"
36+
echo "$CROSS_TOOLCHAIN_SHA256 *$CROSS_TRIPLET.tar.xz" | sha256sum -c
37+
sha256sum "$CROSS_TRIPLET.tar.xz"
38+
39+
40+
: "Extracting toolchain..."
41+
cd "$CROSS_DIR"
42+
rm -rf "$CROSS_BASE"
43+
tar xf "$CROSS_TRIPLET.tar.xz"
44+
chmod -R u+w "$CROSS_BASE"
45+
mkdir -p "$CROSS_SRC"
46+
47+
48+
: "Downloading dependencies..."
49+
cd "$CROSS_SRC"
50+
curl -Lfo "$libmnl_tar" "$libmnl_url"
51+
echo "$libmnl_sha256 *$libmnl_tar" | sha256sum -c
52+
curl -Lfo "$libnfnetlink_tar" "$libnfnetlink_url"
53+
echo "$libnfnetlink_sha256 *$libnfnetlink_tar" | sha256sum -c
54+
curl -Lfo "$libnetfilter_queue_tar" "$libnetfilter_queue_url"
55+
echo "$libnetfilter_queue_sha256 *$libnetfilter_queue_tar" | sha256sum -c
56+
57+
58+
: "Building libmnl..."
59+
cd "$CROSS_SRC"
60+
rm -rf "$libmnl_name"
61+
tar xf "$libmnl_tar"
62+
mkdir "$libmnl_name/builddir"
63+
cd "$libmnl_name/builddir"
64+
../configure \
65+
--enable-static \
66+
--host="$CROSS_TRIPLET" \
67+
--prefix="$CROSS_USR"
68+
make
69+
make install
70+
71+
72+
: "Building libnfnetlink..."
73+
cd "$CROSS_SRC"
74+
rm -rf "$libnfnetlink_name"
75+
tar xf "$libnfnetlink_tar"
76+
mkdir "$libnfnetlink_name/builddir"
77+
cd "$libnfnetlink_name/builddir"
78+
../configure \
79+
--enable-static \
80+
--host="$CROSS_TRIPLET" \
81+
--prefix="$CROSS_USR"
82+
make
83+
make install
84+
85+
86+
: "Building libnetfilter_queue..."
87+
cd "$CROSS_SRC"
88+
rm -rf "$libnetfilter_queue_name"
89+
tar xf "$libnetfilter_queue_tar"
90+
mkdir "$libnetfilter_queue_name/builddir"
91+
cd "$libnetfilter_queue_name/builddir"
92+
../configure \
93+
--enable-static \
94+
--host="$CROSS_TRIPLET" \
95+
--prefix="$CROSS_USR"
96+
make
97+
make install

0 commit comments

Comments
 (0)