Fix get station (#508) #2313
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: Linux+MacOS Build | |
on: | |
push: | |
branches: [ master ] | |
pull_request: | |
branches: [ master ] | |
release: | |
types: | |
- published | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
formatting: | |
runs-on: ubuntu-latest | |
container: ghcr.io/motis-project/docker-cpp-build | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Format files | |
run: | | |
find base libs modules test \ | |
-type f -a \( -name "*.cc" -o -name "*.h" -o -name ".cuh" -o -name ".cu" \) \ | |
-print0 | xargs -0 clang-format-17 -i | |
- name: Check for differences | |
run: | | |
git config --global --add safe.directory `pwd` | |
git status --porcelain | |
git status --porcelain | xargs -I {} -0 test -z \"{}\" | |
api-docs: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: tools/protocol | |
steps: | |
- uses: actions/checkout@v4 | |
- name: pnpm Cache | |
uses: actions/cache@v4 | |
with: | |
path: ~/.pnpm-store | |
key: pnpm-${{ runner.os }}-${{ hashFiles('tools/protocol/pnpm-lock.yaml') }} | |
restore-keys: | | |
pnpm-${{ runner.os }}- | |
- name: Install Protocol Tool Dependencies | |
uses: pnpm/action-setup@v3 | |
with: | |
version: ^8.15.4 | |
run_install: | | |
- cwd: tools/protocol | |
- name: Run Protocol Tool | |
run: pnpm start | |
- name: Upload API Docs | |
uses: actions/upload-artifact@v4 | |
with: | |
name: api-docs | |
path: docs/generated/ | |
macos: | |
runs-on: macos-14 | |
needs: api-docs | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- preset: macos-x86_64 | |
cache: macos-x86_64-avx | |
- preset: macos-x86_64-noavx2 | |
cache: macos-x86_64-noavx | |
- preset: macos-arm64 | |
cache: macos-arm64 | |
tests: On | |
env: | |
BUILDCACHE_COMPRESS: true | |
BUILDCACHE_DIRECT_MODE: true | |
BUILDCACHE_ACCURACY: SLOPPY | |
BUILDCACHE_LUA_PATH: ${{ github.workspace }}/tools | |
BUILDCACHE_DIR: ${{ github.workspace }}/.buildcache | |
BUILDCACHE_MAX_CACHE_SIZE: 1073741824 | |
BUILDCACHE_DEBUG: 0 | |
UBSAN_OPTIONS: halt_on_error=1:abort_on_error=1 | |
ASAN_OPTIONS: alloc_dealloc_mismatch=0 | |
CLICOLOR_FORCE: 1 | |
steps: | |
- uses: actions/checkout@v4 | |
# ==== RESTORE CACHE ==== | |
- name: Restore buildcache Cache | |
uses: actions/cache/restore@v4 | |
id: restore-buildcache | |
with: | |
path: ${{ github.workspace }}/.buildcache | |
key: buildcache-${{ matrix.config.cache }}-${{ hashFiles('.pkg') }}-${{ hashFiles('**/*.h') }}-${{ hashFiles('**/*.cc') }} | |
restore-keys: | | |
buildcache-${{ matrix.config.cache }}-${{ hashFiles('.pkg') }}-${{ hashFiles('**/*.h') }}- | |
buildcache-${{ matrix.config.cache }}-${{ hashFiles('.pkg') }}- | |
buildcache-${{ matrix.config.cache }}- | |
- name: Restore Dependencies Cache | |
uses: actions/cache/restore@v4 | |
id: restore-deps-cache | |
with: | |
path: ${{ github.workspace }}/deps | |
enableCrossOsArchive: true | |
key: deps-${{ hashFiles('.pkg') }} | |
restore-keys: | | |
deps- | |
- name: Install Ninja | |
run: brew install ninja | |
# ==== BUILD ==== | |
- name: CMake | |
run: cmake -G Ninja -S . -B build --preset=${{ matrix.config.preset }} | |
- name: Build | |
run: | | |
./build/buildcache/bin/buildcache -z | |
cmake --build build --target motis motis-test motis-itest | |
./build/buildcache/bin/buildcache -s | |
# ==== TESTS ==== | |
- name: Run Test Mode | |
if: matrix.config.tests == 'On' | |
run: | | |
./build/motis --mode test \ | |
--import.paths schedule-x:base/loader/test_resources/hrd_schedules/single-ice \ | |
--nigiri.first_day 2015-10-04 \ | |
--nigiri.no_cache true \ | |
--modules nigiri | |
- name: Run Tests | |
if: matrix.config.tests == 'On' | |
run: build/motis-test | |
- name: Run Integration Tests | |
if: matrix.config.tests == 'On' | |
run: build/motis-itest | |
# ==== WEB INTERFACE ==== | |
- name: Compile Web Interface | |
run: cmake --build build --target motis-web-ui || (sleep 10 && cmake --build build --target motis-web-ui) | |
- name: Download API Docs | |
uses: actions/download-artifact@v4 | |
with: | |
name: api-docs | |
path: docs/generated | |
# ==== DISTRIBUTION ==== | |
- name: Create Distribution | |
run: | | |
mkdir motis | |
mkdir motis/web | |
mv ui/web/{external_lib,img,js,style} motis/web/ | |
mv ui/web/{*.html,*.js,*.ico} motis/web/ | |
mv ui/web/openapi motis/web/ | |
mv build/motis motis/ | |
cp -r deps/osrm-backend/profiles motis/osrm-profiles | |
cp -r deps/ppr/profiles motis/ppr-profiles | |
cp -r deps/tiles/profile motis/tiles-profiles | |
cp docs/generated/openapi-3.1/openapi.yaml motis/web/openapi/openapi.yaml | |
cp docs/generated/openapi-3.0/openapi.yaml motis/web/openapi/openapi-3.0.yaml | |
tar cjf motis-${{ matrix.config.preset }}.tar.bz2 motis | |
- name: Upload Distribution | |
uses: actions/upload-artifact@v4 | |
with: | |
name: motis-${{ matrix.config.preset }} | |
path: motis-${{ matrix.config.preset }}.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-${{ matrix.config.preset }}.tar.bz2 | |
asset_name: motis-${{ matrix.config.preset }}.tar.bz2 | |
asset_content_type: application/x-tar | |
# ==== 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 Dependencies Cache | |
if: always() | |
uses: actions/cache/save@v4 | |
with: | |
path: ${{ github.workspace }}/deps | |
key: ${{ steps.restore-deps-cache.outputs.cache-primary-key }} | |
enableCrossOsArchive: true | |
linux: | |
runs-on: [ self-hosted, linux, x64, "${{ matrix.config.preset }}" ] | |
needs: api-docs | |
container: | |
image: ghcr.io/motis-project/docker-cpp-build | |
volumes: | |
- ${{ matrix.config.preset }}-deps:/deps | |
- ${{ matrix.config.preset }}-buildcache:/buildcache | |
- ${{ matrix.config.preset }}-pnpstore:/root/.pnpm-store | |
- ${{ matrix.config.preset }}-elm:/elm | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- preset: linux-amd64-avx2-release | |
artifact: linux-amd64 | |
- preset: linux-amd64-noavx-release | |
artifact: linux-amd64-noavx | |
- preset: linux-arm64-release | |
artifact: linux-arm64 | |
emulator: qemu-aarch64-static | |
- preset: clang-tidy | |
skipui: true | |
skiptests: true | |
- preset: linux-sanitizer | |
skipui: true | |
- preset: linux-debug | |
skipui: true | |
emulator: valgrind --leak-check=full --error-exitcode=1 | |
env: | |
BUILDCACHE_DIR: /buildcache | |
BUILDCACHE_DIRECT_MODE: true | |
BUILDCACHE_MAX_CACHE_SIZE: 2147483648 | |
BUILDCACHE_LUA_PATH: ${{ github.workspace }}/tools | |
steps: | |
- uses: actions/checkout@v4 | |
- 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-itest | |
buildcache -s | |
# ==== TESTS ==== | |
- name: Run Test Mode | |
if: ${{ !matrix.config.skiptests }} | |
run: | | |
${{ matrix.config.emulator }} ./build/motis --mode test \ | |
--import.paths schedule-x:base/loader/test_resources/hrd_schedules/single-ice \ | |
--nigiri.first_day 2015-10-04 \ | |
--nigiri.no_cache true \ | |
--modules nigiri | |
- name: Run Tests | |
if: ${{ !matrix.config.skiptests }} | |
run: ${{ matrix.config.emulator }} build/motis-test | |
- name: Run Integration Tests | |
if: ${{ !matrix.config.skiptests }} | |
run: ${{ matrix.config.emulator }} build/motis-itest | |
# ==== WEB INTERFACE ==== | |
- name: Compile Web Interface | |
if: ${{ !matrix.config.skipui }} | |
run: | | |
ln -s /elm ui/web/elm-stuff | |
cmake --build build --target motis-web-ui || (sleep 10 && cmake --build build --target motis-web-ui) | |
- name: Download API Docs | |
if: matrix.config.artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: api-docs | |
path: docs/generated | |
# ==== DISTRIBUTION ==== | |
- name: Create Distribution | |
if: matrix.config.artifact | |
run: | | |
mkdir -p motis/web | |
mv ui/web/external_lib motis/web/ | |
mv ui/web/img motis/web/ | |
mv ui/web/js motis/web/ | |
mv ui/web/style motis/web/ | |
mv ui/web/*.html motis/web/ | |
mv ui/web/*.js motis/web/ | |
mv ui/web/*.ico motis/web/ | |
mv ui/web/openapi motis/web/ | |
mv build/motis motis/motis | |
cp -r deps/osrm-backend/profiles motis/osrm-profiles | |
cp -r deps/ppr/profiles motis/ppr-profiles | |
cp -r deps/tiles/profile motis/tiles-profiles | |
cp docs/generated/openapi-3.1/openapi.yaml motis/web/openapi/openapi.yaml | |
cp docs/generated/openapi-3.0/openapi.yaml motis/web/openapi/openapi-3.0.yaml | |
tar cjf motis-${{ matrix.config.artifact }}.tar.bz2 motis | |
- 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-tar | |
full-data-set-test: | |
runs-on: ${{ matrix.config.os }} | |
needs: [ linux, macos ] | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- artifact: macos-arm64 | |
os: macos-14 | |
- artifact: macos-x86_64-noavx2 | |
os: macos-13 | |
- artifact: linux-amd64 | |
os: ubuntu-20.04 | |
- artifact: linux-arm64 | |
os: ubuntu-20.04 | |
emulator: qemu-aarch64-static -L /usr/aarch64-linux-gnu | |
packages: bzip2 unzip qemu-user-static | |
steps: | |
- name: Install packages | |
if: matrix.config.packages != '' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y --no-install-recommends ${{ matrix.config.packages }} | |
- name: Download timetable and OSM dataset | |
uses: actions/checkout@v4 | |
with: | |
repository: motis-project/test-data | |
ref: aachen | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: motis-${{ matrix.config.artifact }} | |
- name: Unpack distribution and data | |
run: | | |
mkdir -p data/hrd | |
unzip AVV_HAFAS_520.zip -d data/hrd | |
mv zeitvs data/hrd | |
mv aachen.osm.pbf data | |
tar xf motis-${{ matrix.config.artifact }}.tar.bz2 | |
- name: Start MOTIS | |
run: | | |
${{ matrix.config.emulator }} ./motis/motis \ | |
--mode test \ | |
--modules nigiri osr adr tiles intermodal \ | |
--server.static_path motis/web \ | |
--import.data_dir data \ | |
--import.paths schedule-x:data/hrd osm:data/aachen.osm.pbf \ | |
--nigiri.first_day 2015-10-04 \ | |
--nigiri.no_cache true \ | |
--osrm.profiles motis/osrm-profiles/car.lua \ | |
--osrm.profiles motis/osrm-profiles/bike.lua \ | |
--ppr.profile motis/ppr-profiles/default.json \ | |
--tiles.profile motis/tiles-profiles/background.lua \ | |
--tiles.import.flush_threshold 100000 \ | |
--tiles.db_size 268435456 | |
docker: | |
runs-on: ubuntu-20.04 | |
needs: full-data-set-test | |
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 |