mirror of
https://github.com/maplibre/martin.git
synced 2024-12-19 04:41:46 +03:00
0e0763a739
By default, Martin is now compiled without openssl, simplifying debugging and simple case usage, whereas the docker build and CI publishing would still use openssl
166 lines
5.3 KiB
YAML
166 lines
5.3 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
branches: [main]
|
|
release:
|
|
branches: [main]
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
build:
|
|
# Don't change this name - it is used by the merge protection rules
|
|
name: Build ${{ matrix.target }}
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-latest
|
|
target: x86_64-unknown-linux-gnu
|
|
- os: windows-latest
|
|
target: x86_64-pc-windows-msvc
|
|
- os: macOS-latest
|
|
target: x86_64-apple-darwin
|
|
- os: macOS-latest
|
|
target: aarch64-apple-darwin
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: Lint
|
|
if: matrix.target == 'x86_64-unknown-linux-gnu'
|
|
shell: bash
|
|
run: |
|
|
cargo fmt --all -- --check
|
|
cargo clippy --all-targets --all-features -- -D warnings
|
|
- name: Install OpenSSL (Windows)
|
|
if: runner.os == 'Windows'
|
|
run: |
|
|
echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append
|
|
vcpkg install openssl:x64-windows-static-md
|
|
- name: Run build
|
|
shell: bash
|
|
run: |
|
|
if [[ "${{ matrix.target }}" == "aarch64-apple-darwin" ]]; then
|
|
rustup target add aarch64-apple-darwin
|
|
# compile without debug symbols
|
|
RUSTFLAGS='-C link-arg=-s' cargo build --release --target ${{ matrix.target }} --features=vendored-openssl
|
|
else
|
|
cargo build --release --target ${{ matrix.target }} --features=ssl
|
|
fi
|
|
mkdir target_releases
|
|
if [[ "${{ runner.os }}" == "Windows" ]]; then
|
|
mv target/${{ matrix.target }}/release/martin.exe target_releases
|
|
else
|
|
mv target/${{ matrix.target }}/release/martin target_releases
|
|
fi
|
|
- name: Save build artifact build-${{ matrix.target }}
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: build-${{ matrix.target }}
|
|
path: target_releases/*
|
|
|
|
test:
|
|
# Don't change this name - it is used by the merge protection rules
|
|
name: Test & package ${{ matrix.target }}
|
|
needs: [build]
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-latest
|
|
bin: martin
|
|
target: x86_64-unknown-linux-gnu
|
|
name: martin-Linux-x86_64.tar.gz
|
|
- os: windows-latest
|
|
bin: martin.exe
|
|
target: x86_64-pc-windows-msvc
|
|
name: martin-Windows-x86_64.zip
|
|
- os: macOS-latest
|
|
bin: martin
|
|
target: x86_64-apple-darwin
|
|
name: martin-Darwin-x86_64.tar.gz
|
|
- os: ubuntu-latest
|
|
bin: martin
|
|
target: aarch64-apple-darwin
|
|
name: martin-Darwin-aarch64.tar.gz
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- name: Checkout sources
|
|
uses: actions/checkout@v3
|
|
- name: Start postgres
|
|
if: matrix.target != 'aarch64-apple-darwin'
|
|
uses: nyurik/action-setup-postgis@v1
|
|
id: pg
|
|
with:
|
|
username: test
|
|
password: test
|
|
database: test
|
|
rights: --superuser
|
|
- name: Init database
|
|
if: matrix.target != 'aarch64-apple-darwin'
|
|
shell: bash
|
|
run: tests/fixtures/initdb.sh
|
|
env:
|
|
DATABASE_URL: ${{ steps.pg.outputs.connection-uri }}
|
|
- name: Unit Tests (Linux)
|
|
if: matrix.target == 'x86_64-unknown-linux-gnu'
|
|
shell: bash
|
|
run: |
|
|
cargo test --all-targets --all-features
|
|
cargo test --doc
|
|
rm -rf target
|
|
env:
|
|
DATABASE_URL: ${{ steps.pg.outputs.connection-uri }}
|
|
- uses: actions/download-artifact@v3
|
|
with:
|
|
name: build-${{ matrix.target }}
|
|
path: target/
|
|
- name: Save test output on failure (Linux)
|
|
if: failure() && matrix.target == 'x86_64-unknown-linux-gnu'
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: test-output
|
|
path: tests/output/*
|
|
retention-days: 5
|
|
- name: Test
|
|
if: matrix.target != 'aarch64-apple-darwin'
|
|
shell: bash
|
|
run: |
|
|
if [[ "${{ runner.os }}" != "Windows" ]]; then
|
|
chmod +x target/${{ matrix.bin }}
|
|
fi
|
|
tests/test.sh
|
|
env:
|
|
DATABASE_URL: ${{ steps.pg.outputs.connection-uri }}
|
|
MARTIN_BUILD: "-"
|
|
MARTIN_BIN: target/${{ matrix.bin }}
|
|
- name: Package
|
|
shell: bash
|
|
run: |
|
|
cd target/
|
|
# Symbol stripping does not work cross-platform
|
|
if [[ "${{ matrix.target }}" != "aarch64-apple-darwin" ]]; then
|
|
strip ${{ matrix.bin }}
|
|
fi
|
|
if [[ "${{ runner.os }}" == "Windows" ]]; then
|
|
7z a ../${{ matrix.name }} ${{ matrix.bin }}
|
|
else
|
|
tar czvf ../${{ matrix.name }} ${{ matrix.bin }}
|
|
fi
|
|
cd -
|
|
- name: Generate SHA-256 (MacOS)
|
|
if: matrix.target == 'x86_64-apple-darwin' || matrix.target == 'aarch64-apple-darwin'
|
|
run: shasum -a 256 ${{ matrix.name }}
|
|
- name: Publish
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
uses: softprops/action-gh-release@v1
|
|
with:
|
|
draft: true
|
|
files: 'martin*'
|
|
body_path: CHANGELOG.md
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|