Add ability to set mbtiles metadata value (#817) #1786
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: [ main ] | |
paths-ignore: | |
- '**.md' | |
- 'demo/**' | |
- 'docs/**' | |
- 'homebrew-formula/**' | |
pull_request: | |
branches: [ main ] | |
paths-ignore: | |
- '**.md' | |
- 'demo/**' | |
- 'docs/**' | |
- 'homebrew-formula/**' | |
release: | |
types: [ published ] | |
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: Rust Versions | |
shell: bash | |
run: | | |
rustc --version | |
cargo --version | |
- name: Lint | |
if: matrix.target == 'x86_64-unknown-linux-gnu' | |
shell: bash | |
run: | | |
set -x | |
cargo fmt --all -- --check | |
cargo clippy --package martin-tile-utils -- -D warnings | |
cargo clippy --package martin-mbtiles -- -D warnings | |
cargo clippy --package martin-mbtiles --no-default-features --features native-tls -- -D warnings | |
cargo clippy --package martin-mbtiles --no-default-features --features rustls -- -D warnings | |
cargo clippy --package martin -- -D warnings | |
cargo clippy --package martin --features vendored-openssl -- -D warnings | |
cargo clippy --package martin --features bless-tests -- -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: Install cargo-deb | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
sudo apt install -y dpkg dpkg-dev liblzma-dev | |
cargo install cargo-deb | |
- 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 --package martin | |
RUSTFLAGS='-C link-arg=-s' cargo build --release --target ${{ matrix.target }} --features=cli --package martin-mbtiles | |
else | |
cargo build --release --target ${{ matrix.target }} --features=ssl --package martin | |
cargo build --release --target ${{ matrix.target }} --features=cli --package martin-mbtiles | |
fi | |
mkdir target_releases | |
if [[ "${{ runner.os }}" == "Windows" ]]; then | |
mv target/${{ matrix.target }}/release/martin.exe target_releases | |
mv target/${{ matrix.target }}/release/mbtiles.exe target_releases | |
else | |
mv target/${{ matrix.target }}/release/martin target_releases | |
mv target/${{ matrix.target }}/release/mbtiles target_releases | |
fi | |
- name: Run build (debian package) | |
if: matrix.os == 'ubuntu-latest' | |
shell: bash | |
run: | | |
cargo deb -v -p martin --output target/debian/martin.deb | |
mv target/debian/martin.deb target_releases | |
- 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 | |
ext: '' | |
target: x86_64-unknown-linux-gnu | |
name: martin-Linux-x86_64.tar.gz | |
- os: windows-latest | |
ext: '.exe' | |
target: x86_64-pc-windows-msvc | |
name: martin-Windows-x86_64.zip | |
- os: macOS-latest | |
ext: '' | |
target: x86_64-apple-darwin | |
name: martin-Darwin-x86_64.tar.gz | |
- os: ubuntu-latest | |
ext: '' | |
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: Log DATABASE_URL string | |
shell: bash | |
run: | | |
echo "DATABASE_URL=$DATABASE_URL" | |
echo "And in base64 to bypass Github's obfuscation:" | |
echo "$DATABASE_URL" | base64 | |
env: | |
DATABASE_URL: ${{ steps.pg.outputs.connection-uri }} | |
- 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: | | |
set -x | |
cargo test --package martin-tile-utils | |
cargo test --package martin-mbtiles | |
cargo test --package martin-mbtiles --no-default-features --features rustls | |
cargo test --package martin --features vendored-openssl | |
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: Integration Tests | |
if: matrix.target != 'aarch64-apple-darwin' | |
shell: bash | |
run: | | |
if [[ "${{ runner.os }}" != "Windows" ]]; then | |
chmod +x target/martin${{ matrix.ext }} | |
chmod +x target/mbtiles${{ matrix.ext }} | |
fi | |
tests/test.sh | |
env: | |
DATABASE_URL: ${{ steps.pg.outputs.connection-uri }} | |
MARTIN_BUILD: "-" | |
MARTIN_BIN: target/martin${{ matrix.ext }} | |
MBTILES_BUILD: "-" | |
MBTILES_BIN: target/mbtiles${{ matrix.ext }} | |
- name: Integration Tests (with debian package) | |
if: matrix.target == 'x86_64-unknown-linux-gnu' | |
shell: bash | |
run: | | |
sudo dpkg -i target/martin.deb | |
tests/test.sh | |
env: | |
DATABASE_URL: ${{ steps.pg.outputs.connection-uri }} | |
MARTIN_BUILD: "-" | |
MARTIN_BIN: /usr/bin/martin | |
MBTILES_BUILD: "-" | |
MBTILES_BIN: target/mbtiles${{ matrix.ext }} | |
- name: Compare test output results (Linux) | |
if: matrix.target == 'x86_64-unknown-linux-gnu' | |
run: diff --brief --recursive --new-file tests/output tests/expected | |
- name: Save test output on failure (Linux) | |
if: failure() && matrix.target == 'x86_64-unknown-linux-gnu' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: failed-test-output | |
path: tests/output/* | |
retention-days: 5 | |
- name: Package | |
shell: bash | |
run: | | |
cd target/ | |
# Symbol stripping does not work cross-platform | |
if [[ "${{ matrix.target }}" != "aarch64-apple-darwin" ]]; then | |
strip martin${{ matrix.ext }} | |
strip mbtiles${{ matrix.ext }} | |
fi | |
if [[ "${{ runner.os }}" == "Windows" ]]; then | |
7z a ../${{ matrix.name }} martin${{ matrix.ext }} mbtiles${{ matrix.ext }} | |
else | |
tar czvf ../${{ matrix.name }} martin${{ matrix.ext }} mbtiles${{ matrix.ext }} | |
fi | |
cd - | |
- name: Package (debian) | |
if: matrix.target == 'x86_64-unknown-linux-gnu' | |
shell: bash | |
run: | | |
cd target/ | |
tar czvf ../martin-debian-x86_64.tar.gz martin.deb | |
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 }} | |
test-legacy: | |
# Don't change this name - it is used by the merge protection rules | |
name: Test Legacy DB | |
needs: [ build ] | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
# These must match the versions of postgres used in the docker-compose.yml | |
- image: postgis/postgis:11-3.0-alpine | |
args: postgres | |
sslmode: disable | |
- image: postgis/postgis:14-3.3-alpine | |
args: postgres | |
sslmode: disable | |
# alpine images don't support SSL, so for this we use the debian images | |
- image: postgis/postgis:15-3.3 | |
args: postgres -c ssl=on -c ssl_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem -c ssl_key_file=/etc/ssl/private/ssl-cert-snakeoil.key | |
sslmode: require | |
env: | |
# PG_* variables are used by psql | |
PGDATABASE: test | |
PGHOST: localhost | |
PGUSER: postgres | |
PGPASSWORD: postgres | |
services: | |
postgres: | |
image: ${{ matrix.image }} | |
ports: | |
# will assign a random free host port | |
- 5432/tcp | |
# Sadly there is currently no way to pass arguments to the service image other than this hack | |
# See also https://stackoverflow.com/a/62720566/177275 | |
options: >- | |
-e POSTGRES_DB=test | |
-e POSTGRES_USER=postgres | |
-e POSTGRES_PASSWORD=postgres | |
-e PGDATABASE=test | |
-e PGUSER=postgres | |
-e PGPASSWORD=postgres | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
--entrypoint sh | |
${{ matrix.image }} | |
-c "exec docker-entrypoint.sh ${{ matrix.args }}" | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
- name: Setup database | |
run: | | |
# sudo apt-get install postgresql-client | |
tests/fixtures/initdb.sh | |
env: | |
PGPORT: ${{ job.services.postgres.ports[5432] }} | |
- name: Unit Tests (Linux) | |
shell: bash | |
run: | | |
echo "Running unit tests, connecting to DATABASE_URL=$DATABASE_URL" | |
echo "Same but as base64 to prevent GitHub obfuscation (this is not a secret):" | |
echo "$DATABASE_URL" | base64 | |
set -x | |
cargo test --package martin-tile-utils | |
cargo test --package martin-mbtiles | |
cargo test --package martin-mbtiles --no-default-features --features rustls | |
cargo test --package martin --features vendored-openssl | |
cargo test --doc | |
rm -rf target | |
env: | |
DATABASE_URL: postgres://${{ env.PGUSER }}:${{ env.PGUSER }}@${{ env.PGHOST }}:${{ job.services.postgres.ports[5432] }}/${{ env.PGDATABASE }}?sslmode=${{ matrix.sslmode }} | |
- name: Save test output on failure | |
if: failure() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-output | |
path: tests/output/* | |
retention-days: 5 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: build-x86_64-unknown-linux-gnu | |
path: target/ | |
- name: Integration Tests | |
run: | | |
chmod +x target/martin target/mbtiles | |
tests/test.sh | |
env: | |
DATABASE_URL: postgres://${{ env.PGUSER }}:${{ env.PGUSER }}@${{ env.PGHOST }}:${{ job.services.postgres.ports[5432] }}/${{ env.PGDATABASE }}?sslmode=${{ matrix.sslmode }} | |
MARTIN_BUILD: "-" | |
MARTIN_BIN: target/martin | |
MBTILES_BUILD: "-" | |
MBTILES_BIN: target/mbtiles |