Skip to content

Feature: Health Endpoint #2715

Feature: Health Endpoint

Feature: Health Endpoint #2715

Workflow file for this run

name: CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
release:
types:
- published
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
openapi-validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- name: Install Dependencies
run: npm install @openapitools/openapi-generator-cli -g
- name: OpenAPI Lint
run: openapi-generator-cli validate -i openapi.yaml
ui:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- uses: pnpm/action-setup@v4
with:
version: 10
- name: Install Dependencies
working-directory: ui
run: pnpm install
- name: Build
working-directory: ui
run: pnpm -r build
- name: Code Lint
working-directory: ui
run: pnpm run lint
- name: Svelte Check
working-directory: ui
run: pnpm run check
formatting:
runs-on: ubuntu-latest
container: ghcr.io/motis-project/docker-cpp-build
steps:
- uses: actions/checkout@v4
- name: Format files
run: |
find include src test \
-type f -a \( -name "*.cc" -o -name "*.h" -o -name ".cuh" -o -name ".cu" \) \
-print0 | xargs -0 clang-format-21 -i
- name: Check for differences
run: |
git config --global --add safe.directory `pwd`
git status --porcelain
git status --porcelain | xargs -I {} -0 test -z \"{}\"
msvc:
runs-on: [ self-hosted, windows, x64 ]
strategy:
fail-fast: false
matrix:
config:
- mode: Debug
- mode: Release
env:
CXX: cl.exe
CC: cl.exe
BUILDCACHE_COMPRESS: true
BUILDCACHE_DIRECT_MODE: true
BUILDCACHE_ACCURACY: SLOPPY # not suitable for coverage/debugging
BUILDCACHE_DIR: ${{ github.workspace }}/.buildcache
BUILDCACHE_LUA_PATH: ${{ github.workspace }}/tools
BUILDCACHE_MAX_CACHE_SIZE: 1073741824
CLICOLOR_FORCE: 1
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- uses: pnpm/action-setup@v4
with:
version: 10
dest: "~/setup-pnpm-${{ matrix.config.mode }}"
- uses: ilammy/msvc-dev-cmd@v1
# ==== RESTORE CACHE ====
- name: Restore buildcache Cache
run: |
$buildcachePath = "${{ runner.tool_cache }}\${{ github.event.repository.name }}\buildcache-${{ matrix.config.mode }}"
New-Item -ItemType Directory -Force -Path $buildcachePath
New-Item -Path ${{ github.workspace }}/.buildcache -ItemType SymbolicLink -Value $buildcachePath
- name: Restore Dependencies Cache
run: |
$depsPath = "${{ runner.tool_cache }}\${{ github.event.repository.name }}\deps"
New-Item -ItemType Directory -Force -Path $depsPath
New-Item -Path ${{ github.workspace }}\deps\ -ItemType SymbolicLink -Value $depsPath
- name: Build
run: |
cmake `
-GNinja -S . -B build `
-DCMAKE_BUILD_TYPE=${{ matrix.config.mode }} `
-DMOTIS_MIMALLOC=ON
.\build\buildcache\bin\buildcache.exe -z
cmake --build build --target motis motis-test motis-web-ui
$CompilerExitCode = $LastExitCode
Copy-Item ${env:VCToolsRedistDir}x64\Microsoft.VC143.CRT\*.dll .\build\
.\build\buildcache\bin\buildcache.exe -s
exit $CompilerExitCode
# ==== TESTS ====
- name: Run Tests
run: .\build\motis-test.exe
# ==== DISTRIBUTION ====
- name: Move Profiles
if: matrix.config.mode == 'Release'
run: |
mkdir dist
Copy-Item .\deps\tiles\profile dist\tiles-profiles -Recurse
mv .\build\motis.exe dist
mv .\build\*.dll dist
mv .\ui\build dist\ui
cd dist
7z a motis-windows.zip *
mv motis-windows.zip ..
- name: Upload Distribution
if: matrix.config.mode == 'Release'
uses: actions/upload-artifact@v4
with:
name: motis-windows
path: dist
# ==== RELEASE ====
- name: Upload Release
if: github.event.action == 'published' && matrix.config.mode == 'Release'
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./motis-windows.zip
asset_name: motis-windows.zip
asset_content_type: application/zip
macos:
runs-on: macos-latest
env:
BUILDCACHE_COMPRESS: true
BUILDCACHE_DIRECT_MODE: true
BUILDCACHE_ACCURACY: SLOPPY
BUILDCACHE_LUA_PATH: ${{ github.workspace }}/tools
BUILDCACHE_DIR: ${{ github.workspace }}/.buildcache
UBSAN_OPTIONS: halt_on_error=1:abort_on_error=1
ASAN_OPTIONS: alloc_dealloc_mismatch=0
steps:
- uses: actions/checkout@v4
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 16.2
- uses: pnpm/action-setup@v4
with:
version: 10
- name: Install ninja
run: brew install ninja
# ==== RESTORE CACHE ====
- name: Restore buildcache Cache
uses: actions/cache/restore@v4
id: restore-buildcache
with:
path: ${{ github.workspace }}/.buildcache
key: buildcache-${{ hashFiles('.pkg') }}-${{ hashFiles('**/*.h') }}-${{ hashFiles('**/*.cc') }}
restore-keys: |
buildcache-${{ hashFiles('.pkg') }}-${{ hashFiles('**/*.h') }}-
buildcache-${{ hashFiles('.pkg') }}-
buildcache-
- name: Dependencies Cache
uses: actions/cache/restore@v4
id: restore-deps
with:
path: ${{ github.workspace }}/deps
key: deps-${{ hashFiles('.pkg') }}
restore-keys: deps-
# ==== BUILD ====
- name: CMake
run: cmake -G Ninja -S . -B build --preset=macos-arm64
- name: Build
run: |
./build/buildcache/bin/buildcache -z
cmake --build build --target motis motis-test motis-web-ui
./build/buildcache/bin/buildcache -s
# ==== TESTS ====
- name: Run Tests
if: matrix.config.tests == 'On'
run: build/motis-test
# ==== SAVE CACHE ====
- name: Save buildcache cache
if: always()
uses: actions/cache/save@v4
with:
path: ${{ github.workspace }}/.buildcache
key: ${{ steps.restore-buildcache.outputs.cache-primary-key }}
- name: Save deps cache
if: always()
uses: actions/cache/save@v4
with:
path: ${{ github.workspace }}/deps
key: ${{ steps.restore-deps.outputs.cache-primary-key }}
# ==== DISTRIBUTION ====
- name: Create Distribution
run: |
mkdir motis
mv build/motis motis/motis
mv ui/build motis/ui
cp -r deps/tiles/profile motis/tiles-profiles
tar -C ./motis -cjf motis-macos-arm64.tar.bz2 ./motis ./tiles-profiles ./ui
- name: Upload Distribution
uses: actions/upload-artifact@v4
with:
name: motis-macos-arm64
path: motis-macos-arm64.tar.bz2
# ==== RELEASE ====
- name: Upload Release
if: github.event.action == 'published'
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./motis-macos-arm64.tar.bz2
asset_name: motis-macos-arm64.tar.bz2
asset_content_type: application/x-tar
linux:
runs-on: [ self-hosted, linux, x64, '${{ matrix.config.preset }}' ]
container:
image: ghcr.io/motis-project/docker-cpp-build
volumes:
- ${{ github.event.repository.name }}-${{ matrix.config.preset }}-deps:/deps
- ${{ github.event.repository.name }}-${{ matrix.config.preset }}-buildcache:/buildcache
strategy:
fail-fast: false
matrix:
config:
- preset: linux-amd64-release
artifact: linux-amd64
- preset: linux-arm64-release
artifact: linux-arm64
- preset: linux-sanitizer
- preset: linux-debug
emulator: valgrind --suppressions=deps/osr/docs/tbb.supp --suppressions=deps/osr/docs/pthread.supp --suppressions=tools/suppress.txt --leak-check=full --gen-suppressions=all --error-exitcode=1
env:
BUILDCACHE_DIR: /buildcache
BUILDCACHE_DIRECT_MODE: true
BUILDCACHE_MAX_CACHE_SIZE: 26843545600
BUILDCACHE_LUA_PATH: ${{ github.workspace }}/tools
UBSAN_OPTIONS: halt_on_error=1:abort_on_error=1
ASAN_OPTIONS: alloc_dealloc_mismatch=0
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 10
- name: Get deps
run: ln -s /deps deps
- name: CMake
run: |
git config --global --add safe.directory `pwd`
cmake -G Ninja -S . -B build --preset=${{ matrix.config.preset }}
# ==== BUILD ====
- name: Build
run: |
buildcache -z
cmake --build build --target motis motis-test motis-web-ui
buildcache -s
# ==== TESTS ====
- name: Run Integration Tests
if: matrix.config.preset != 'linux-arm64-release'
run: ${{ matrix.config.emulator }} build/motis-test
# ==== FULL DATASET TEST ====
- name: Test Full Dataset
if: matrix.config.preset != 'linux-debug' && matrix.config.preset != 'linux-arm64-release'
run: |
ln -s deps/tiles/profile tiles-profiles
wget -N https://github.com/motis-project/test-data/raw/aachen/aachen.osm.pbf
wget -N https://github.com/motis-project/test-data/raw/aachen/AVV_GTFS_Masten_mit_SPNV.zip
${{ matrix.config.emulator }} ./build/motis config aachen.osm.pbf AVV_GTFS_Masten_mit_SPNV.zip
yq -Y -i '.timetable *= {
"route_shapes": {
"missing_shapes": true,
"replace_shapes": true,
"clasz": { "COACH": false }
}
}' config.yml
${{ matrix.config.emulator }} ./build/motis import
${{ matrix.config.emulator }} ./build/motis generate -n 10
${{ matrix.config.emulator }} ./build/motis batch
${{ matrix.config.emulator }} ./build/motis compare -q queries.txt -r responses.txt responses.txt
- name: Test bin_ver compatibility with previous release
if: matrix.config.preset == 'linux-amd64-release' && github.event.action != 'published'
run: |
wget -N https://github.com/motis-project/motis/releases/latest/download/motis-linux-amd64.tar.bz2
tar -xjf motis-linux-amd64.tar.bz2 ./motis
${{ matrix.config.emulator }} ./motis import
${{ matrix.config.emulator }} ./build/motis import
rm ./motis
# ==== DISTRIBUTION ====
- name: Create Distribution
if: matrix.config.artifact
run: |
mkdir motis
mv build/motis motis/motis
mv ui/build motis/ui
cp -r deps/tiles/profile motis/tiles-profiles
tar -C ./motis -cjf motis-${{ matrix.config.artifact }}.tar.bz2 ./motis ./tiles-profiles ./ui
- name: Upload Distribution
if: matrix.config.artifact
uses: actions/upload-artifact@v4
with:
name: motis-${{ matrix.config.artifact }}
path: motis-${{ matrix.config.artifact }}.tar.bz2
# ==== RELEASE ====
- name: Upload Release
if: github.event.action == 'published' && matrix.config.artifact
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./motis-${{ matrix.config.artifact }}.tar.bz2
asset_name: motis-${{ matrix.config.artifact }}.tar.bz2
asset_content_type: application/x-
docker:
if: ${{ github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }}
runs-on: ubuntu-latest
needs: linux
steps:
- uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
- name: Docker setup-buildx
uses: docker/setup-buildx-action@v3
with:
install: true
- name: Docker Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/${{ github.repository }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=edge
- name: Docker build and push
uses: docker/build-push-action@v5
with:
push: true
context: .
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64
publish-motis-client:
if: github.event.action == 'published'
runs-on: ubuntu-latest
needs: linux
permissions:
contents: read
packages: write
id-token: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- uses: pnpm/action-setup@v4
with:
version: 10
# for OIDC-based publishing to npm
- name: setup npm v11
run: npm install -g npm@11
# this will override version 2.0.0 from package.json to the current git tag version
- run: npm version from-git --no-git-tag-version
working-directory: ui/api
- run: npm ci
working-directory: ui/api
- run: pnpm run build
working-directory: ui/api
- run: npm publish --provenance --access public
working-directory: ui/api