name: Rust on: push: tags: - '*' env: CARGO_TERM_COLOR: always permissions: contents: write defaults: run: shell: bash jobs: build: strategy: fail-fast: false matrix: include: - TARGET: i686-unknown-linux-musl OS: ubuntu-latest FEATURES: ring-cipher,openssl-vendored,wss - TARGET: x86_64-unknown-linux-musl OS: ubuntu-latest FEATURES: ring-cipher,wss - TARGET: aarch64-unknown-linux-musl OS: ubuntu-latest FEATURES: ring-cipher,wss - TARGET: armv7-unknown-linux-musleabihf OS: ubuntu-latest FEATURES: ring-cipher,wss - TARGET: armv7-unknown-linux-musleabi OS: ubuntu-latest FEATURES: ring-cipher,wss - TARGET: arm-unknown-linux-musleabihf OS: ubuntu-latest FEATURES: ring-cipher,wss - TARGET: arm-unknown-linux-musleabi OS: ubuntu-latest FEATURES: ring-cipher,wss - TARGET: x86_64-apple-darwin OS: macos-latest FEATURES: ring-cipher,wss - TARGET: aarch64-apple-darwin OS: macos-latest FEATURES: ring-cipher,wss - TARGET: i686-pc-windows-msvc OS: windows-latest FEATURES: ring-cipher,wss - TARGET: x86_64-pc-windows-msvc OS: windows-latest FEATURES: ring-cipher,wss - TARGET: mipsel-unknown-linux-musl OS: ubuntu-latest FEATURES: ring-cipher,wss - TARGET: mips-unknown-linux-musl OS: ubuntu-latest FEATURES: ring-cipher,wss runs-on: ${{ matrix.OS }} env: NAME: vnt-cli TARGET: ${{ matrix.TARGET }} OS: ${{ matrix.OS }} FEATURES: ${{ matrix.FEATURES }} steps: - uses: actions/checkout@v4 - name: Init submodules run: git submodule update --init --recursive --remote && git submodule status - name: Cargo cache uses: actions/cache@v4 with: path: | ~/.cargo/registry ./target key: build-cargo-registry-${{matrix.TARGET}} - name: Use strawberry perl if: startsWith(matrix.OS, 'windows') run: echo OPENSSL_SRC_PERL=C:/Strawberry/perl/bin/perl >> $GITHUB_ENV - name: List run: find ./ - name: Install Rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: nightly profile: minimal override: true - name: Verify Rust version run: | rustc --version cargo --version - name: Install dependencies on Ubuntu if: startsWith(matrix.OS, 'ubuntu') run: | sudo apt-get update && sudo apt-get install -y clang llvm libc6-dev-i386 \ crossbuild-essential-arm64 crossbuild-essential-armhf musl-tools libboost-all-dev libc6-dev wget tar # Install musl cross toolchains if needed case $TARGET in mipsel-unknown-linux-musl) MUSL_URI=mipsel-linux-muslsf-cross URL=mipsel-linux-muslsf ;; aarch64-unknown-linux-musl) MUSL_URI=aarch64-linux-musl-cross ;; armv7-unknown-linux-musleabihf) MUSL_URI=armv7l-linux-musleabihf-cross ;; armv7-unknown-linux-musleabi) MUSL_URI=armv7m-linux-musleabi-cross ;; arm-unknown-linux-musleabihf) MUSL_URI=arm-linux-musleabihf-cross ;; arm-unknown-linux-musleabi) MUSL_URI=arm-linux-musleabi-cross ;; mips-unknown-linux-musl) MUSL_URI=mips-linux-muslsf-cross URL=mips-linux-muslsf ;; i686-unknown-linux-musl) MUSL_URI=i686-linux-musl-cross ;; esac if [ -n "$MUSL_URI" ]; then mkdir -p /opt/musl_gcc wget -c https://github.com/rustp2p/musl-cross/releases/download/0.0.1/$MUSL_URI.tgz -P /opt/musl_gcc/ tar zxf /opt/musl_gcc/$MUSL_URI.tgz -C /opt/musl_gcc/ sudo ln -s /opt/musl_gcc/$MUSL_URI/bin/*gcc /usr/bin/ fi if [[ $TARGET =~ ^mips.*$ ]]; then cd /opt/musl_gcc/${URL}-cross/lib/gcc/${URL}/11.2.1 cp libgcc_eh.a libunwind.a rustup toolchain install nightly-x86_64-unknown-linux-gnu rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu RUST_LIB_SRC=$HOME/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/ if [[ -f $RUST_LIB_SRC/library/Cargo.lock && ! -f $RUST_LIB_SRC/Cargo.lock ]]; then cp -f $RUST_LIB_SRC/library/Cargo.lock $RUST_LIB_SRC/Cargo.lock fi fi rustup -V - name: Configure cargo for cross-compilation run: | cat >>~/.cargo/config <