diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 4de69bf..f68c4c4 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -2,34 +2,203 @@ name: Rust on: push: - branches: [ master ] - pull_request: - branches: [ master ] + tags: + - '*' env: CARGO_TERM_COLOR: always +permissions: + contents: write +defaults: + run: + shell: bash jobs: build: - runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - TARGET: i686-unknown-linux-musl + OS: ubuntu-latest + - TARGET: x86_64-unknown-linux-musl + OS: ubuntu-latest + - TARGET: aarch64-unknown-linux-musl + OS: ubuntu-latest + - TARGET: armv7-unknown-linux-musleabihf + OS: ubuntu-latest + - TARGET: armv7-unknown-linux-musleabi + OS: ubuntu-latest + - TARGET: arm-unknown-linux-musleabihf + OS: ubuntu-latest + - TARGET: arm-unknown-linux-musleabi + OS: ubuntu-latest + - TARGET: x86_64-apple-darwin + OS: macos-latest + - TARGET: aarch64-apple-darwin + OS: macos-latest + - TARGET: i686-pc-windows-msvc + OS: windows-latest + - TARGET: x86_64-pc-windows-msvc + OS: windows-latest + + runs-on: ${{ matrix.OS }} + env: + NAME: russ + TARGET: ${{ matrix.TARGET }} + OS: ${{ matrix.OS }} + FEATURES: ${{ matrix.FEATURES }} + + steps: + - uses: actions/checkout@v4 + + - 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 + 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 + ;; + 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 + + + rustup -V + + + - name: Configure cargo for cross-compilation + run: | + cat >>~/.cargo/config.toml <