From a5ea194931117e1bf18a48118a5e930f58b7ada6 Mon Sep 17 00:00:00 2001 From: Li Zhineng Date: Sat, 6 Jul 2024 15:29:39 +0800 Subject: Continuous Integration (#3) * ci * remove branch limits * publish workflow * specify working directory * install libssl-dev on ubuntu-latest * drop x86_64-unknown-linux-musl * fix tar * list files * prefix working directory * install openssl * use cross * fix section * remove openssl * use edge images * quoted * edge image for aarch64-unknown-linux-gnu * custom dockerfile * build-essential && remove CAMKE* * combine pre-build with target * fix package not found * install pkg-config * remove build-essential * install build-essential * $CROSS_DEB_ARCH * fix arch * remove openssl * remove file listing * remove prefixed path * use actions/upload-artifact@v4 * fix upload step * Revert "fix upload step" This reverts commit da9814e42ce568a1b0707f23df02696ad373dc22. * Revert "use actions/upload-artifact@v4" This reverts commit 0bcc2486c6a4bd4fc865eedb458098724ae6b88d. * Revert "remove prefixed path" This reverts commit 620b985b18e84cf97e40695c9852762c853434b6. * Revert "fix tar" This reverts commit a013b23161e0b9193161e57f9a878b04b2eba874. * remove -p for mkdir * add target: x86_64-apple-darwin --- .github/workflows/publish.yml | 92 +++++++++++++++++++++++++++++ .github/workflows/rust.yml | 24 ++++++++ decryptor/Cargo.toml | 11 ++++ docker/Dockerfile.aarch64-unknown-linux-gnu | 14 +++++ 4 files changed, 141 insertions(+) create mode 100644 .github/workflows/publish.yml create mode 100644 .github/workflows/rust.yml create mode 100644 docker/Dockerfile.aarch64-unknown-linux-gnu diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..be57329 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,92 @@ +name: Publish + +on: + push: + tags: + - 'v*' + +defaults: + run: + working-directory: ./decryptor + +jobs: + publish: + name: ${{ matrix.target }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + include: + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + use-cross: false + + - os: ubuntu-latest + target: aarch64-unknown-linux-gnu + use-cross: true + + - os: macos-latest + target: aarch64-apple-darwin + use-cross: false + + - os: macos-12 + target: x86_64-apple-darwin + use-cross: false + + steps: + - uses: actions/checkout@v4 + + - name: Set the version + shell: bash + run: | + echo "DECRYPTOR_VERSION=$GITHUB_REF_NAME" >> $GITHUB_ENV + echo "version is: ${{ env.DECRYPTOR_VERSION }}" + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + + - name: Setup native compilation + if: ${{ matrix.use-cross == false }} + shell: bash + run: | + if [[ "${{ matrix.os }}" == "ubuntu-latest" ]]; then + sudo apt-get update && sudo apt-get install -y libssl-dev + fi + echo "CARGO=cargo" >> $GITHUB_ENV + + - name: Setup cross compilation + if: ${{ matrix.use-cross == true }} + shell: bash + run: | + dir="$RUNNER_TEMP/cross-download" + mkdir "$dir" + echo "$dir" >> $GITHUB_PATH + cd "$dir" + curl -LO "https://github.com/cross-rs/cross/releases/download/v0.2.5/cross-x86_64-unknown-linux-musl.tar.gz" + tar xf cross-x86_64-unknown-linux-musl.tar.gz + echo "CARGO=cross" >> $GITHUB_ENV + + - name: Build + shell: bash + run: | + $CARGO --version + $CARGO build --release --locked --target ${{ matrix.target }} + + - name: Setup archive + shell: bash + run: | + staging="decryptor-${{ env.DECRYPTOR_VERSION }}-${{ matrix.target }}" + mkdir "$staging" + + cp "target/${{ matrix.target }}/release/decryptor" "$staging/" + tar czf "$staging.tar.gz" "$staging" + echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV + + - name: Upload the binaries + uses: svenstaro/upload-release-action@2.9.0 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ./decryptor/${{ env.ASSET }} + asset_name: ${{ env.ASSET }} + tag: ${{ github.ref }} diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 0000000..29fd6f7 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,24 @@ +name: Rust + +on: + push: + pull_request: + +env: + CARGO_TERM_COLOR: always + +defaults: + run: + working-directory: ./decryptor + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Build + run: cargo build --verbose + - name: Run tests + run: cargo test --verbose diff --git a/decryptor/Cargo.toml b/decryptor/Cargo.toml index 80d0338..df38d4d 100644 --- a/decryptor/Cargo.toml +++ b/decryptor/Cargo.toml @@ -6,3 +6,14 @@ edition = "2021" [dependencies] hex = "0.4.3" openssl = "0.10.64" + +[package.metadata.cross.target.aarch64-unknown-linux-gnu] +dockerfile = "../docker/Dockerfile.aarch64-unknown-linux-gnu" +pre-build = [ + "sed 's/^deb http/deb [arch=amd64] http/' -i '/etc/apt/sources.list'", + "echo 'deb [arch=arm64] http://au.archive.ubuntu.com/pub/ubuntu/ports jammy main restricted universe multiverse' >> /etc/apt/sources.list", + "echo 'deb [arch=arm64] http://au.archive.ubuntu.com/pub/ubuntu/ports jammy-updates main restricted universe multiverse' >> /etc/apt/sources.list", + "echo 'deb [arch=arm64] http://au.archive.ubuntu.com/pub/ubuntu/ports jammy-backports main restricted universe multiverse' >> /etc/apt/sources.list", + "dpkg --add-architecture $CROSS_DEB_ARCH", + "apt-get update && apt-get -y install build-essential pkg-config libssl-dev:$CROSS_DEB_ARCH" +] diff --git a/docker/Dockerfile.aarch64-unknown-linux-gnu b/docker/Dockerfile.aarch64-unknown-linux-gnu new file mode 100644 index 0000000..c2f9d50 --- /dev/null +++ b/docker/Dockerfile.aarch64-unknown-linux-gnu @@ -0,0 +1,14 @@ +FROM ubuntu:22.04 +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install --assume-yes --no-install-recommends \ + g++-aarch64-linux-gnu \ + libc6-dev-arm64-cross + +ENV CROSS_TOOLCHAIN_PREFIX=aarch64-linux-gnu- +ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \ + AR_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"ar \ + CC_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"gcc \ + CXX_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"g++ \ + RUST_TEST_THREADS=1 \ + PKG_CONFIG_PATH="/usr/lib/aarch64-linux-gnu/pkgconfig/:${PKG_CONFIG_PATH}" -- cgit v1.2.3