Skip to content

Test and Build

Test and Build #65

Workflow file for this run

on: [push, pull_request]
defaults:
run:
shell: bash
env:
cratename: lonlat_bng
rustflags: -C rpath
name: Test and Build
jobs:
test:
if: github.event_name == 'push' && !contains(github.ref, 'refs/tags/')
name: Test on ${{ matrix.os }} (${{ matrix.target }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- build: linux
os: ubuntu-latest
rust: stable
target: x86_64-unknown-linux-gnu
use-cross: false
- build: macos
os: macos-latest
rust: stable
target: x86_64-apple-darwin
use-cross: false
deptarget: 10.9
- build: windows
os: windows-latest
rust: stable
target: x86_64-pc-windows-msvc
use-cross: false
steps:
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: ${{ matrix.target }}
- uses: actions-rs/cargo@v1
env:
MACOSX_DEPLOYMENT_TARGET: ${{ matrix.deptarget }}
with:
use-cross: ${{ matrix.use-cross }}
command: test
args: --target=${{ matrix.target }}
build:
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
name: Build and release on ${{ matrix.os }} (${{ matrix.target }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- build: linux
os: ubuntu-latest
rust: stable
target: x86_64-unknown-linux-gnu
use-cross: true
- build: linux
os: ubuntu-latest
rust: stable
target: aarch64-unknown-linux-gnu
use-cross: true
- build: macos
os: macos-latest
rust: stable
target: x86_64-apple-darwin
use-cross: false
deptarget: 10.9
- build: macos
os: macos-latest
rust: stable
target: aarch64-apple-darwin
use-cross: false
deptarget: 11.0
- build: windows
os: windows-latest
rust: stable
target: x86_64-pc-windows-msvc
use-cross: false
steps:
- name: Switch to macOS 14.x SDK
if: matrix.target == 'aarch64-apple-darwin'
run: |
xcodebuild -showsdks
SDKROOT=$(xcrun -sdk macosx14.0 --show-sdk-path)
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: ${{ matrix.target }}
- uses: actions-rs/cargo@v1
env:
MACOSX_DEPLOYMENT_TARGET: ${{ matrix.deptarget }}
with:
use-cross: ${{ matrix.use-cross }}
command: build
args: --release --target=${{ matrix.target }} --features headers
- name: Install aarch64 related packages
if: matrix.os == 'ubuntu-latest' && matrix.target == 'aarch64-unknown-linux-gnu'
run: sudo apt-get update && sudo apt-get install gcc-aarch64-linux-gnu qemu-system-arm
- name: Gather Assets
run: |
src=$(pwd)
stage=
case $RUNNER_OS in
Linux)
stage=$(mktemp -d)
;;
macOS)
stage=$(mktemp -d -t tmp)
;;
Windows)
stage=$(mktemp -d)
;;
esac
mkdir zipped
cp include/header.h $stage
RELEASE_VERSION=${GITHUB_REF#refs/tags/}
ASSET_NAME="${{ env.cratename }}-$RELEASE_VERSION-${{ matrix.target }}"
echo "Release name is $ASSET_NAME"
echo "STAGE=$stage" >> $GITHUB_ENV
echo "ASSET_NAME=$ASSET_NAME" >> $GITHUB_ENV
if [ "$RUNNER_OS" == "Linux" ]; then
echo "TYPE=tar" >> $GITHUB_ENV
echo "EXTENSION=tar.gz" >> $GITHUB_ENV
cp target/${{ matrix.target }}/release/*.so $stage/
fi
if [ "$RUNNER_OS" == "macOS" ]; then
echo "TYPE=tar" >> $GITHUB_ENV
echo "EXTENSION=tar.gz" >> $GITHUB_ENV
for lib in target/${{ matrix.target }}/release/*.dylib; do
install_name_tool -id "@rpath/lib${{ env.cratename }}.dylib" $lib
otool -L $lib
done
cp target/${{ matrix.target }}/release/*.dylib $stage/
fi
if [ "$RUNNER_OS" == "Windows" ]; then
echo "TYPE=tar" >> $GITHUB_ENV
echo "EXTENSION=tar.gz" >> $GITHUB_ENV
cp target/${{ matrix.target }}/release/deps/${{ env.cratename }}.dll.lib target/${{ matrix.target }}/release/deps/${{ env.cratename }}.lib
cp target/${{ matrix.target }}/release/${{ env.cratename }}* $stage/
cp target/${{ matrix.target }}/release/deps/${{ env.cratename }}* $stage/
fi
ls $stage
cd $src
- name: Create archive
run: |
pushd ${{ env.STAGE }}
tar -czf "${{ env.ASSET_NAME }}.${{ env.EXTENSION }}" *
popd
cp "${{ env.STAGE }}/${{ env.ASSET_NAME }}.${{ env.EXTENSION }}" zipped/
- name: Release
uses: softprops/action-gh-release@v2
with:
files: |
zipped/${{ env.ASSET_NAME }}.${{ env.EXTENSION }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}