From c6145204052a0ede75c57ac7e6f704e28fbdc5db Mon Sep 17 00:00:00 2001 From: Patrick Dung <38665827+patrickdung@users.noreply.github.com> Date: Sun, 10 Oct 2021 02:21:30 +0800 Subject: [PATCH] Cross build with action-rs --- .github/workflows/publish-crossbuild.yml | 111 +++++++++++++++++++++++ Cross.toml | 7 ++ 2 files changed, 118 insertions(+) create mode 100644 .github/workflows/publish-crossbuild.yml create mode 100644 Cross.toml diff --git a/.github/workflows/publish-crossbuild.yml b/.github/workflows/publish-crossbuild.yml new file mode 100644 index 000000000..09dba44a7 --- /dev/null +++ b/.github/workflows/publish-crossbuild.yml @@ -0,0 +1,111 @@ +name: Release using cross build + +on: + release: + types: [published] + +env: + CARGO_TERM_COLOR: always + +jobs: + publish-to-github: + name: Publish to Github + runs-on: ${{ matrix.os }} + continue-on-error: false + strategy: + fail-fast: false + matrix: + include: + - build: aarch64 + os: ubuntu-18.04 + target: aarch64-unknown-linux-gnu + linker: gcc-aarch64-linux-gnu + use-cross: true + asset_name: meilisearch-linux-aarch64 + - build: aarch64 + os: ubuntu-latest + target: aarch64-unknown-linux-musl + linker: gcc-aarch64-linux-gnu + use-cross: true + asset_name: meilisearch-linux-aarch64-musl + - build: linux + os: ubuntu-latest + target: x86_64-unknown-linux-musl + use-cross: true + asset_name: meilisearch-linux-amd64-musl + steps: + + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Installing Rust toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + profile: minimal + target: ${{ matrix.target }} + override: true + + - name: APT update + run: | + sudo apt update + + - name: Install target specific tools + if: matrix.use-cross + run: | + sudo apt-get install -y ${{ matrix.linker }} + + - name: Configure target aarch64 GNU + if: matrix.target == 'aarch64-unknown-linux-gnu' + # LD gold won't work with MUSL + env: + JEMALLOC_SYS_WITH_LG_PAGE: 16 + RUSTFLAGS: '-Clink-arg=-fuse-ld=gold' + run: | + echo '[target.aarch64-unknown-linux-gnu]' >> ~/.cargo/config + echo 'linker = "aarch64-linux-gnu-gcc"' >> ~/.cargo/config + + - name: Configure target aarch64 MUSL + if: matrix.target == 'aarch64-unknown-linux-musl' + env: + JEMALLOC_SYS_WITH_LG_PAGE: 16 + run: | + sudo apt-get install -y musl-tools + + - name: Configure target x86_64 MUSL + if: matrix.target == 'x86_64-unknown-linux-musl' + run: | + sudo apt-get install -y musl-tools + + - name: Cargo build + uses: actions-rs/cargo@v1 + with: + command: build + use-cross: ${{ matrix.use-cross }} + args: --release --target ${{ matrix.target }} + + # Strip debuginfo for target aarch64 GNU + # MUSL binary are static linked + - name: Strip debuginfo for target aarch64 GNU + if: matrix.target == 'aarch64-unknown-linux-gnu' + run: | + /usr/bin/aarch64-linux-gnu-strip --strip-debug --target=elf64-littleaarch64 target/${{ matrix.target }}/release/meilisearch -o target/${{ matrix.target }}/release/meilisearch-stripped + + - name: List target output files + run: ls -lR ./target + + - name: Upload the binary to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.PUBLISH_TOKEN }} + file: target/${{ matrix.target }}/release/meilisearch + asset_name: ${{ matrix.asset_name }} + tag: ${{ github.ref }} + - name: Upload stripped binary to release (aarch64 GNU only) + if: matrix.target == 'aarch64-unknown-linux-gnu' + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.PUBLISH_TOKEN }} + file: target/${{ matrix.target }}/release/meilisearch-stripped + asset_name: ${{ matrix.asset_name }}-stripped + tag: ${{ github.ref }} diff --git a/Cross.toml b/Cross.toml new file mode 100644 index 000000000..cd4309d8a --- /dev/null +++ b/Cross.toml @@ -0,0 +1,7 @@ +[build.env] +passthrough = [ + "RUST_BACKTRACE", + "CARGO_TERM_COLOR", + "RUSTFLAGS", + "JEMALLOC_SYS_WITH_LG_PAGE" +]