diff --git a/.github/workflows/cross-release.yaml b/.github/workflows/cross-release.yaml new file mode 100644 index 0000000..36c194f --- /dev/null +++ b/.github/workflows/cross-release.yaml @@ -0,0 +1,110 @@ +jobs: + release: + name: Release - ${{ matrix.platform.os_name }} + if: startsWith( github.ref, 'refs/tags/v' ) || github.ref == 'refs/tags/test-release' + strategy: + matrix: + platform: + - os_name: FreeBSD-x86_64 + os: ubuntu-20.04 + target: x86_64-unknown-freebsd + bin: data2excel + name: data2excel-FreeBSD-x86_64.tar.gz + cross: true + cargo_command: ./cross + + - os_name: Linux-x86_64 + os: ubuntu-20.04 + target: x86_64-unknown-linux-musl + bin: data2excel + name: data2excel-Linux-x86_64-musl.tar.gz + cross: false + cargo_command: cargo + + - os_name: Windows-aarch64 + os: windows-latest + target: aarch64-pc-windows-msvc + bin: data2excel.exe + name: data2excel-Windows-aarch64.zip + cross: false + cargo_command: cargo + + - os_name: macOS-x86_64 + os: macOS-latest + target: x86_64-apple-darwin + bin: data2excel + name: data2excel-Darwin-x86_64.tar.gz + cross: false + cargo_command: cargo + + runs-on: ${{ matrix.platform.os }} + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Install toolchain if not cross-compiling + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.platform.target }} + if: ${{ !matrix.platform.cross }} + - name: Install musl-tools on Linux + run: sudo apt-get update --yes && sudo apt-get install --yes musl-tools + if: contains(matrix.platform.os, 'ubuntu') && !matrix.platform.cross + - name: Install cross if cross-compiling (*nix) + id: cross-nix + shell: bash + run: | + set -e + export TARGET="$HOME/bin" + mkdir -p "$TARGET" + ./bootstrap/bootstrap-ubi.sh + "$HOME/bin/ubi" --project cross-rs/cross --matching musl --in . + if: matrix.platform.cross && !contains(matrix.platform.os, 'windows') + - name: Install cross if cross-compiling (Windows) + id: cross-windows + shell: powershell + run: | + .\bootstrap\bootstrap-ubi.ps1 + .\ubi --project cross-rs/cross --in . + if: matrix.platform.cross && contains(matrix.platform.os, 'windows') + - name: Build binary (*nix) + shell: bash + run: | + ${{ matrix.platform.cargo_command }} build --locked --release --target ${{ matrix.platform.target }} + if: ${{ !contains(matrix.platform.os, 'windows') }} + - name: Build binary (Windows) + # We have to use the platform's native shell. If we use bash on + # Windows then OpenSSL complains that the Perl it finds doesn't use + # the platform's native paths and refuses to build. + shell: powershell + run: | + & ${{ matrix.platform.cargo_command }} build --locked --release --target ${{ matrix.platform.target }} + if: contains(matrix.platform.os, 'windows') + - name: Strip binary + shell: bash + run: | + strip target/${{ matrix.platform.target }}/release/${{ matrix.platform.bin }} + # strip doesn't work with cross-arch binaries on Linux or Windows. + if: ${{ !(matrix.platform.cross || matrix.platform.target == 'aarch64-pc-windows-msvc') }} + - name: Package as archive + shell: bash + run: | + cd target/${{ matrix.platform.target }}/release + if [[ "${{ matrix.platform.os }}" == "windows-latest" ]]; then + 7z a ../../../${{ matrix.platform.name }} ${{ matrix.platform.bin }} + else + tar czvf ../../../${{ matrix.platform.name }} ${{ matrix.platform.bin }} + fi + cd - + - name: Publish release artifacts + uses: actions/upload-artifact@v3 + with: + name: data2excel-${{ matrix.platform.os_name }} + path: "data2excel*" + if: github.ref == 'refs/tags/test-release' + - name: Publish GitHub release + uses: softprops/action-gh-release@v1 + with: + draft: true + files: "data2excel*" + body_path: Changes.md + if: startsWith( github.ref, 'refs/tags/v' ) \ No newline at end of file