From f92ff73a3c9cadf5f226166568c62360f2286576 Mon Sep 17 00:00:00 2001 From: "Sijie.Sun" Date: Wed, 31 Jan 2024 08:24:29 +0800 Subject: [PATCH] Update rust.yml (#7) * Update rust.yml support multi platform build --- .github/workflows/rust.yml | 82 +++++++++++++++++++++++++++++++++++--- 1 file changed, 77 insertions(+), 5 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 4167e62..0735320 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -9,11 +9,78 @@ on: env: CARGO_TERM_COLOR: always +defaults: + run: + # necessary for windows + shell: bash + jobs: build: - - runs-on: ubuntu-latest - + strategy: + fail-fast: false + matrix: + # a list of all the targets + # 选择使用openssl或者ring,并不是所有平台都支持 + include: + - TARGET: i686-unknown-linux-musl # test in an alpine container on a mac + OS: ubuntu-latest + - TARGET: x86_64-unknown-linux-musl # test in an alpine container on a mac + OS: ubuntu-latest + - TARGET: x86_64-apple-darwin # tested on a mac, is not properly signed so there are security warnings + OS: macos-latest + - TARGET: aarch64-apple-darwin # tested on a mac, is not properly signed so there are security warnings + OS: macos-latest + - TARGET: x86_64-pc-windows-msvc # tested on a windows machine + OS: windows-latest + runs-on: ${{ matrix.OS }} + env: + NAME: easytier # change with the name of your project + TARGET: ${{ matrix.TARGET }} + OS: ${{ matrix.OS }} + steps: + - uses: actions/checkout@v3 + - name: Setup protoc + uses: arduino/setup-protoc@v2 + with: + # GitHub repo token to use to avoid rate limiter + repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Cargo cache + uses: actions/cache@v4.0.0 + with: + path: | + ~/.cargo/registry + ./target + key: build-cargo-registry-${{matrix.TARGET}} + - name: Install rust target + run: | + rustup install 1.75 + rustup default 1.75 + rustup target add $TARGET + - name: Run build + run: cargo build --release --verbose --target $TARGET + - name: Compress + run: | + mkdir -p ./artifacts + # windows is the only OS using a different convention for executable file name + if [[ $OS =~ ^windows.*$ ]]; then + SUFFIX=.exe + fi + if [[ $GITHUB_REF_TYPE =~ ^tag$ ]]; then + TAG=$GITHUB_REF_NAME + else + TAG=$GITHUB_SHA + fi + mv ./target/$TARGET/release/easytier-core"$SUFFIX" ./artifacts/ + mv ./target/$TARGET/release/easytier-cli"$SUFFIX" ./artifacts/ + tar -cvf ./artifacts/$NAME-$TARGET-$TAG.tar -C ./artifacts easytier-core"$SUFFIX" easytier-cli"$SUFFIX" + - name: Archive artifact + uses: actions/upload-artifact@v4 + with: + name: easytier-${{ matrix.OS }}-${{ matrix.TARGET }} + path: | + ./artifacts/$NAME-$TARGET-$TAG.tar + test: + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup protoc @@ -21,13 +88,18 @@ jobs: with: # GitHub repo token to use to avoid rate limiter repo-token: ${{ secrets.GITHUB_TOKEN }} - - name: Build - run: sudo -E env "PATH=$PATH" cargo build --verbose - name: Setup tools for test run: sudo apt install bridge-utils - name: Setup system for test run: | sudo sysctl net.bridge.bridge-nf-call-iptables=0 sudo sysctl net.bridge.bridge-nf-call-ip6tables=0 + - name: Cargo cache + uses: actions/cache@v4.0.0 + with: + path: | + ~/.cargo/registry + ./target + key: build-cargo-registry-test - name: Run tests run: sudo -E env "PATH=$PATH" cargo test --verbose