From f021869310dfb2c32c8a83b9e3cbd213562cc30d Mon Sep 17 00:00:00 2001 From: Chip Senkbeil Date: Wed, 13 Oct 2021 11:09:46 -0500 Subject: [PATCH] Switch release to use an alpine container to build musl --- .github/workflows/release.yml | 97 +++++++++++++++++++++-------------- 1 file changed, 59 insertions(+), 38 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ba703d5..b969789 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -135,22 +135,18 @@ jobs: ${{ env.X86_REL_LIB }} ${{ env.X86_REL_BIN }} - linux: - name: "Build release on Linux" + linux_gnu: + name: "Build release on Linux (gnu)" runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') env: - UPLOAD_NAME: linux64 + UPLOAD_NAME: linux64-gnu X86_GNU_ARCH: x86_64-unknown-linux-gnu X86_GNU_DIR: target/x86_64-unknown-linux-gnu/release - X86_MUSL_ARCH: x86_64-unknown-linux-musl - X86_MUSL_DIR: target/x86_64-unknown-linux-musl/release BUILD_BIN: distant BUILD_LIB: libdistant_lua.so X86_GNU_REL_BIN: distant-linux64-gnu - X86_MUSL_REL_BIN: distant-linux64-musl X86_GNU_REL_LIB: distant_lua-linux64-gnu.so - X86_MUSL_REL_LIB: distant_lua-linux64-musl.so steps: - uses: actions/checkout@v2 - name: Install Rust (GNU) @@ -159,16 +155,6 @@ jobs: profile: minimal toolchain: stable target: ${{ env.X86_GNU_ARCH }} - - name: Install Rust (MUSL) - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable - target: ${{ env.X86_MUSL_ARCH }} - - name: Install MUSL Tools - run: | - sudo apt-get update - sudo apt-get install -y --no-install-recommends musl-tools libgcc-s1 - uses: Swatinem/rust-cache@v1 - name: Build Lua ${{ env.LUA_VERSION }} library (GNU x86_64) run: | @@ -176,14 +162,6 @@ jobs: cargo build --release --no-default-features --features "${{ env.LUA_FEATURE }},vendored" --target ${{ env.X86_GNU_ARCH }} ls -l ../${{ env.X86_GNU_DIR }} mv ../${{ env.X86_GNU_DIR }}/${{ env.BUILD_LIB }} ../${{ env.X86_GNU_REL_LIB }} - - name: Build Lua ${{ env.LUA_VERSION }} library (MUSL x86_64) - run: | - cd distant-lua - cargo build --release --no-default-features --features "${{ env.LUA_FEATURE }},vendored" --target ${{ env.X86_MUSL_ARCH }} - ls -l ../${{ env.X86_MUSL_DIR }} - mv ../${{ env.X86_MUSL_DIR }}/${{ env.BUILD_LIB }} ../${{ env.X86_MUSL_REL_LIB }} - env: - RUSTFLAGS: -C target-feature=-crt-static -C linker=musl-gcc -L /lib/x86_64-linux-gnu - name: Build binary (GNU x86_64) run: | cargo build --release --all-features --target ${{ env.X86_GNU_ARCH }} @@ -191,8 +169,49 @@ jobs: strip ./${{ env.X86_GNU_DIR }}/${{ env.BUILD_BIN }} mv ./${{ env.X86_GNU_DIR }}/${{ env.BUILD_BIN }} ./${{ env.X86_GNU_REL_BIN }} chmod +x ./${{ env.X86_GNU_REL_BIN }} + - name: Upload + uses: actions/upload-artifact@v2 + with: + name: ${{ env.UPLOAD_NAME }} + path: | + ${{ env.X86_GNU_REL_LIB }} + ${{ env.X86_GNU_REL_BIN }} + + linux_musl: + name: "Build release on Linux (musl)" + runs-on: ubuntu-latest + container: + image: alpine:3.14 + if: startsWith(github.ref, 'refs/tags/') + env: + UPLOAD_NAME: linux64-musl + X86_MUSL_ARCH: x86_64-unknown-linux-musl + X86_MUSL_DIR: target/x86_64-unknown-linux-musl/release + BUILD_BIN: distant + BUILD_LIB: libdistant_lua.so + X86_MUSL_REL_BIN: distant-linux64-musl + X86_MUSL_REL_LIB: distant_lua-linux64-musl.so + steps: + - uses: actions/checkout@v2 + - name: Install base dependencies + run: | + apk add --update --no-cache build-base libc6-compat curl perl + - name: Install Rust (MUSL) + run: | + curl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal + - uses: Swatinem/rust-cache@v1 + - name: Build Lua ${{ env.LUA_VERSION }} library (MUSL x86_64) + run: | + cd distant-lua + source $HOME/.cargo/env + cargo build --release --no-default-features --features "${{ env.LUA_FEATURE }},vendored" --target ${{ env.X86_MUSL_ARCH }} + ls -l ../${{ env.X86_MUSL_DIR }} + mv ../${{ env.X86_MUSL_DIR }}/${{ env.BUILD_LIB }} ../${{ env.X86_MUSL_REL_LIB }} + env: + RUSTFLAGS: -C target-feature=-crt-static -C linker=x86_64-alpine-linux-musl-gcc - name: Build binary (MUSL x86_64) run: | + source $HOME/.cargo/env cargo build --release --all-features --target ${{ env.X86_MUSL_ARCH }} ls -l ./${{ env.X86_MUSL_DIR }} strip ./${{ env.X86_MUSL_DIR }}/${{ env.BUILD_BIN }} @@ -203,13 +222,11 @@ jobs: with: name: ${{ env.UPLOAD_NAME }} path: | - ${{ env.X86_GNU_REL_LIB }} ${{ env.X86_MUSL_REL_LIB }} - ${{ env.X86_GNU_REL_BIN }} ${{ env.X86_MUSL_REL_BIN }} publish: - needs: [macos, windows, linux] + needs: [macos, windows, linux_gnu, linux_musl] runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') permissions: @@ -223,10 +240,11 @@ jobs: WIN64: win64 WIN64_BIN: distant-win64.exe WIN64_LIB: distant_lua-win64.dll - LINUX64: linux64 + LINUX64_GNU: linux64-gnu LINUX64_GNU_BIN: distant-linux64-gnu - LINUX64_MUSL_BIN: distant-linux64-musl LINUX64_GNU_LIB: distant_lua-linux64-gnu.so + LINUX64_MUSL: linux64-musl + LINUX64_MUSL_BIN: distant-linux64-musl LINUX64_MUSL_LIB: distant_lua-linux64-musl.so steps: - uses: actions/download-artifact@v2 @@ -248,15 +266,18 @@ jobs: echo "SHA_WIN64_LUA_LIB=$(cat ${{ env.WIN64_LIB }}.sha256sum)" >> $GITHUB_ENV sha256sum ${{ env.WIN64_BIN }} > ${{ env.WIN64_BIN }}.sha256sum echo "SHA_WIN64_BIN=$(cat ${{ env.WIN64_BIN }}.sha256sum)" >> $GITHUB_ENV - - name: Generate Linux64 SHA256 checksums + - name: Generate Linux64 (gnu) SHA256 checksums run: | - cd ${{ env.LINUX64 }} + cd ${{ env.LINUX64_GNU }} sha256sum ${{ env.LINUX64_GNU_LIB }} > ${{ env.LINUX64_GNU_LIB }}.sha256sum echo "SHA_LINUX64_GNU_LUA_LIB=$(cat ${{ env.LINUX64_GNU_LIB }}.sha256sum)" >> $GITHUB_ENV - sha256sum ${{ env.LINUX64_MUSL_LIB }} > ${{ env.LINUX64_MUSL_LIB }}.sha256sum - echo "SHA_LINUX64_MUSL_LUA_LIB=$(cat ${{ env.LINUX64_MUSL_LIB }}.sha256sum)" >> $GITHUB_ENV sha256sum ${{ env.LINUX64_GNU_BIN }} > ${{ env.LINUX64_GNU_BIN }}.sha256sum echo "SHA_LINUX64_GNU_BIN=$(cat ${{ env.LINUX64_GNU_BIN }}.sha256sum)" >> $GITHUB_ENV + - name: Generate Linux64 (musl) SHA256 checksums + run: | + cd ${{ env.LINUX64_MUSL }} + sha256sum ${{ env.LINUX64_MUSL_LIB }} > ${{ env.LINUX64_MUSL_LIB }}.sha256sum + echo "SHA_LINUX64_MUSL_LUA_LIB=$(cat ${{ env.LINUX64_MUSL_LIB }}.sha256sum)" >> $GITHUB_ENV sha256sum ${{ env.LINUX64_MUSL_BIN }} > ${{ env.LINUX64_MUSL_BIN }}.sha256sum echo "SHA_LINUX64_MUSL_BIN=$(cat ${{ env.LINUX64_MUSL_BIN }}.sha256sum)" >> $GITHUB_ENV - name: Determine git tag @@ -291,10 +312,10 @@ jobs: ${{ env.MACOS }}/${{ env.MACOS_ARM_LIB }} ${{ env.WIN64 }}/${{ env.WIN64_BIN }} ${{ env.WIN64 }}/${{ env.WIN64_LIB }} - ${{ env.LINUX64 }}/${{ env.LINUX64_GNU_BIN }} - ${{ env.LINUX64 }}/${{ env.LINUX64_MUSL_BIN }} - ${{ env.LINUX64 }}/${{ env.LINUX64_GNU_LIB }} - ${{ env.LINUX64 }}/${{ env.LINUX64_MUSL_LIB }} + ${{ env.LINUX64_GNU }}/${{ env.LINUX64_GNU_BIN }} + ${{ env.LINUX64_GNU }}/${{ env.LINUX64_GNU_LIB }} + ${{ env.LINUX64_MUSL }}/${{ env.LINUX64_MUSL_BIN }} + ${{ env.LINUX64_MUSL }}/${{ env.LINUX64_MUSL_LIB }} **/*.sha256sum body: | ## Install Lua library