From 99f4ab29bc1dfe5d59575fd68337330a8c5c1f8f Mon Sep 17 00:00:00 2001 From: ValdikSS Date: Fri, 6 Sep 2024 01:33:26 +0300 Subject: [PATCH] Add Github Actions cross-builder for Linux Build ARM, MIPS, x86 and x86_64 static binaries for Linux using https://github.com/rust-cross/rust-musl-cross musl Docker images --- .github/Dockerfile_build | 40 ++++++++++++++++ .github/workflows/build-all.yml | 85 +++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 .github/Dockerfile_build create mode 100644 .github/workflows/build-all.yml diff --git a/.github/Dockerfile_build b/.github/Dockerfile_build new file mode 100644 index 0000000..8a86b5e --- /dev/null +++ b/.github/Dockerfile_build @@ -0,0 +1,40 @@ + +RUN <<'EOF' + export PKG_CONFIG_PATH=$TARGET_HOME/lib/pkgconfig/ + export CC=$TARGET_CC + + mkdir /root/extlibs + cd /root/extlibs + + apt update + apt install --no-install-recommends -y wget libtool pkg-config libcap-dev + + wget https://www.zlib.net/zlib-1.3.1.tar.gz + echo 9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23 zlib-1.3.1.tar.gz | sha256sum -c && tar axf zlib-1.3.1.tar.gz + + git clone -b libnfnetlink-1.0.2 --depth 1 git://git.netfilter.org/libnfnetlink + git clone -b libnetfilter_queue-1.0.5 --depth 1 git://git.netfilter.org/libnetfilter_queue + git clone -b libmnl-1.0.5 --depth 1 git://git.netfilter.org/libmnl + + ( + cd zlib-* + ./configure --static + make -j$(nproc) + make install + ) + + for i in libnfnetlink libmnl libnetfilter_queue; do + ( + echo COMPILING $i + cd $i + ./autogen.sh + ./configure --host=${TARGET_CC%-gcc} --prefix=$TARGET_HOME --enable-static + make -j$(nproc) + make install + ) + done + + cp /usr/include/sys/capability.h ${TARGET_HOME}/include/sys/ + cp /usr/include/x86_64-linux-gnu/sys/queue.h ${TARGET_HOME}/include/sys/ +EOF + diff --git a/.github/workflows/build-all.yml b/.github/workflows/build-all.yml new file mode 100644 index 0000000..36e8000 --- /dev/null +++ b/.github/workflows/build-all.yml @@ -0,0 +1,85 @@ +name: Build zapret +on: + push: + paths: + - 'ip2net/**' + - 'mdig/**' + - 'nfq/**' + - 'tpws/**' + pull_request: + paths: + - 'ip2net/**' + - 'mdig/**' + - 'nfq/**' + - 'tpws/**' + workflow_dispatch: + +env: + DOCKER_BUILD_SUMMARY: false + +jobs: + build: + name: Build for Linux + runs-on: ubuntu-22.04 + strategy: + matrix: + image: + - aarch64-musl + - arm-musleabi + - arm-musleabihf + - mipsel-musl + - i586-musl + - x86_64-musl + # container: + # image: messense/rust-musl-cross:${{ matrix.image }} + # options: --user root + steps: + - uses: actions/checkout@v4 + + - name: Docker in tmpfs + run: | + sudo systemctl stop docker + sudo mount -t tmpfs -o size=80% tmpfs /var/lib/docker + sudo systemctl start docker + + - name: Cache Docker images + id: docker-cache + uses: ScribeMD/docker-cache@0.5.0 + with: + key: docker-${{ runner.os }}-${{ matrix.image }} + + # - name: Set up Docker Buildx + # if: steps.docker-cache.outputs.cache-hit != 'true' + # uses: docker/setup-buildx-action@v3 + + - name: Patch source Docker image into Dockerfile + if: steps.docker-cache.outputs.cache-hit != 'true' + run: | + (echo 'FROM messense/rust-musl-cross:${{ matrix.image }}' && cat .github/Dockerfile_build) > Dockerfile + + - name: Build Docker image + if: steps.docker-cache.outputs.cache-hit != 'true' + uses: docker/build-push-action@v6 + with: + tags: zapret-musl-cross:${{ matrix.image }} + context: . + load: true + # cache-from: type=gha + # cache-to: type=gha,mode=max + + - name: Compile zapret + run: | + docker run --entrypoint=bash -v ${{ github.workspace }}:/work \ + zapret-musl-cross:${{ matrix.image }} \ + -c 'cd /work; CC=$TARGET_CC CFLAGS="-static" make -j$(nproc)' + + - name: Declare short commit variable + id: vars + run: | + git config --global --add safe.directory '*' && echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + - name: Upload output file + uses: actions/upload-artifact@v4 + with: + name: zapret_${{ steps.vars.outputs.sha_short }}_${{ matrix.image }} + path: binaries/my/