diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..beb596d --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,5 @@ +[target.aarch64-unknown-linux-gnu] +linker = "aarch64-linux-gnu-gcc" + +[target.armv7-unknown-linux-gnueabihf] +linker = "arm-linux-gnueabihf-gcc" diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 3d47e6d..0fb9753 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -2,60 +2,131 @@ name: Build on: [ push, pull_request ] +env: + CARGO_BIN_NAME: cwdemangle + CARGO_TARGET_DIR: target + jobs: check: name: Check runs-on: ubuntu-latest - strategy: - matrix: - toolchain: [ stable, 1.51.0, nightly ] - fail-fast: false env: RUSTFLAGS: -D warnings steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Rust toolchain + uses: dtolnay/rust-toolchain@stable with: - profile: minimal - toolchain: ${{ matrix.toolchain }} - override: true components: rustfmt, clippy + - name: Cargo check + run: cargo check --all-features + - name: Cargo clippy + run: cargo clippy --all-features + + deny: + name: Deny + runs-on: ubuntu-latest + strategy: + matrix: + checks: + - advisories + - bans licenses sources + # Prevent new advisories from failing CI + continue-on-error: ${{ matrix.checks == 'advisories' }} + steps: + - uses: actions/checkout@v3 - uses: EmbarkStudios/cargo-deny-action@v1 - - uses: actions-rs/cargo@v1 with: - command: check - args: --all-features - - uses: actions-rs/cargo@v1 - with: - command: clippy - args: --all-features + command: check ${{ matrix.checks }} + + test: + name: Test + strategy: + matrix: + platform: [ ubuntu-latest, windows-latest, macos-latest ] + fail-fast: false + runs-on: ${{ matrix.platform }} + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Rust toolchain + uses: dtolnay/rust-toolchain@stable + - name: Cargo test + run: cargo test --release --all-features build: name: Build strategy: matrix: - platform: [ ubuntu-latest, macos-latest, windows-latest ] - toolchain: [ stable, 1.51.0, nightly ] + include: + - platform: ubuntu-latest + target: x86_64-unknown-linux-gnu + name: linux-x86_64 + - platform: ubuntu-latest + target: aarch64-unknown-linux-gnu + name: linux-aarch64 + packages: gcc-aarch64-linux-gnu + - platform: ubuntu-latest + target: armv7-unknown-linux-gnueabihf + name: linux-armv7l + packages: gcc-arm-linux-gnueabihf + - platform: windows-latest + target: x86_64-pc-windows-msvc + name: windows-x86_64 + - platform: windows-latest + target: aarch64-pc-windows-msvc + name: windows-arm64 + - platform: macos-latest + target: x86_64-apple-darwin + name: macos-x86_64 + - platform: macos-latest + target: aarch64-apple-darwin + name: macos-arm64 fail-fast: false runs-on: ${{ matrix.platform }} steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 + - name: Checkout + uses: actions/checkout@v3 + - name: Install dependencies + if: matrix.packages != '' + run: sudo apt-get -y install ${{ matrix.packages }} + - name: Setup Rust toolchain + uses: dtolnay/rust-toolchain@stable with: - profile: minimal - toolchain: ${{ matrix.toolchain }} - override: true - - uses: actions-rs/cargo@v1 + targets: ${{ matrix.target }} + - name: Cargo build + run: cargo build --release --all-features --target ${{ matrix.target }} --bin ${{ env.CARGO_BIN_NAME }} + - name: Upload artifacts + uses: actions/upload-artifact@v3 with: - command: test - args: --release --all-features - - uses: actions-rs/cargo@v1 - with: - command: build - args: --release --all-features - - uses: actions/upload-artifact@v2 - with: - name: ${{ matrix.platform }}-${{ matrix.toolchain }} + name: ${{ matrix.name }} path: | - target/release/cwdemangle - target/release/cwdemangle.exe + ${{ env.CARGO_TARGET_DIR }}/release/${{ env.CARGO_BIN_NAME }} + ${{ env.CARGO_TARGET_DIR }}/release/${{ env.CARGO_BIN_NAME }}.exe + ${{ env.CARGO_TARGET_DIR }}/${{ matrix.target }}/release/${{ env.CARGO_BIN_NAME }} + ${{ env.CARGO_TARGET_DIR }}/${{ matrix.target }}/release/${{ env.CARGO_BIN_NAME }}.exe + if-no-files-found: error + + release: + name: Release + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + needs: [ build ] + steps: + - name: Download artifacts + uses: actions/download-artifact@v3 + with: + path: artifacts + - name: Rename artifacts + working-directory: artifacts + run: | + mkdir ../out + for i in */*/release/$CARGO_BIN_NAME*; do + mv "$i" "../out/$(sed -E "s/([^/]+)\/[^/]+\/release\/($CARGO_BIN_NAME)/\2-\1/" <<< "$i")" + done + ls -R ../out + - name: Release + uses: softprops/action-gh-release@v1 + with: + files: out/*