module: transfers (profilebased) #1984
Workflow file for this run
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@v3 | |
- 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-16 -i | |
- name: Check for differences | |
run: | | |
git config --global --add safe.directory `pwd` | |
git status --porcelain | |
git status --porcelain | xargs -I {} -0 test -z \"{}\" | |
rsl-ui-checks: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: ui/rsl | |
steps: | |
- uses: actions/checkout@v3 | |
- name: pnpm Cache | |
uses: actions/cache@v3 | |
with: | |
path: ~/.pnpm-store | |
key: pnpm-${{ runner.os }}-${{ hashFiles('ui/rsl/pnpm-lock.yaml') }} | |
restore-keys: | | |
pnpm-${{ runner.os }}- | |
- name: Install RSL Web Interface Dependencies | |
uses: pnpm/action-setup@v2 | |
with: | |
version: ^8.6.12 | |
run_install: | | |
- cwd: ui/rsl | |
- name: Formatting | |
run: pnpm run format-check | |
- name: ESLint | |
run: pnpm run lint | |
- name: TypeScript | |
run: pnpm run ts-check | |
api-docs: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: tools/protocol | |
steps: | |
- uses: actions/checkout@v3 | |
- name: pnpm Cache | |
uses: actions/cache@v3 | |
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@v2 | |
with: | |
version: ^8.6.12 | |
run_install: | | |
- cwd: tools/protocol | |
- name: Run Protocol Tool | |
run: pnpm start --skip rsl-ui | |
- name: Upload API Docs | |
uses: actions/upload-artifact@v3 | |
with: | |
name: api-docs | |
path: docs/generated/ | |
macos: | |
runs-on: macos-latest | |
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 | |
tests: On | |
- preset: macos-arm64 | |
cache: macos-arm64 | |
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 | |
UBSAN_OPTIONS: halt_on_error=1:abort_on_error=1 | |
ASAN_OPTIONS: alloc_dealloc_mismatch=0 | |
CLICOLOR_FORCE: 1 | |
steps: | |
- uses: actions/checkout@v3 | |
# ==== RESTORE CACHE ==== | |
- name: Restore buildcache Cache | |
uses: actions/cache/restore@v3 | |
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@v3 | |
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:base/loader/test_resources/hrd_schedules/single-ice \ | |
--dataset.begin 20151004 \ | |
--dataset.write_serialized false \ | |
--nigiri.no_cache true \ | |
--ris.db_max_size 1048576 \ | |
--exclude_modules address osrm parking path ppr tiles tripbased gbfs | |
- 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: pnpm Cache | |
uses: actions/cache@v3 | |
with: | |
path: ~/.pnpm-store | |
key: pnpm-${{ runner.os }}-${{ hashFiles('ui/rsl/pnpm-lock.yaml') }} | |
restore-keys: | | |
pnpm-${{ runner.os }}- | |
- name: Install RSL Web Interface Dependencies | |
uses: pnpm/action-setup@v2 | |
with: | |
version: ^8.6.12 | |
run_install: | | |
- cwd: ./ui/rsl | |
- name: Compile RSL Web Interface | |
run: pnpm run build | |
working-directory: ./ui/rsl | |
- name: Download API Docs | |
uses: actions/download-artifact@v3 | |
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 ui/rsl/dist motis/web/rsl | |
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@v1 | |
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@v3 | |
with: | |
path: ${{ github.workspace }}/.buildcache | |
key: ${{ steps.restore-buildcache.outputs.cache-primary-key }} | |
- name: Save Dependencies Cache | |
if: always() | |
uses: actions/cache/save@v3 | |
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-x86-release | |
artifact: linux-x86 | |
- preset: linux-arm-release | |
artifact: linux-arm | |
emulator: qemu-arm-static | |
- 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@v3 | |
- 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:base/loader/test_resources/hrd_schedules/single-ice \ | |
--dataset.begin 20151004 \ | |
--dataset.write_serialized false \ | |
--nigiri.no_cache true \ | |
--ris.db_max_size 1048576 \ | |
--exclude_modules address osrm parking path ppr tiles tripbased gbfs | |
- name: Run Tests | |
if: ${{ !matrix.config.skiptests }} | |
run: | | |
${{ matrix.config.emulator }} build/motis-test & \ | |
${{ 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: Install RSL Web Interface Dependencies | |
uses: pnpm/action-setup@v2 | |
if: ${{ !matrix.config.skipui }} | |
with: | |
version: ^8.6.12 | |
run_install: | | |
- cwd: ./ui/rsl | |
- name: Compile RSL Web Interface | |
if: ${{ !matrix.config.skipui }} | |
run: pnpm run build | |
working-directory: ./ui/rsl | |
- name: Download API Docs | |
if: matrix.config.artifact | |
uses: actions/download-artifact@v3 | |
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 ui/rsl/dist motis/web/rsl | |
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@v1 | |
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-x86_64-noavx2 | |
os: macos-latest | |
- artifact: linux-amd64 | |
os: ubuntu-20.04 | |
- artifact: linux-x86 | |
os: ubuntu-20.04 | |
- artifact: linux-arm | |
os: ubuntu-20.04 | |
emulator: qemu-arm-static -L /usr/arm-linux-gnueabihf | |
packages: bzip2 unzip qemu-user-static | |
- 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@v3 | |
with: | |
repository: motis-project/test-data | |
ref: aachen | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
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 routing lookup guesser ppr address intermodal osrm railviz tiles \ | |
--server.static_path motis/web \ | |
--import.data_dir data \ | |
--import.paths schedule:data/hrd osm:data/aachen.osm.pbf \ | |
--dataset.begin 20210809 \ | |
--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@v3 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
- name: Docker setup-buildx | |
uses: docker/setup-buildx-action@v2 | |
with: | |
install: true | |
- name: Docker Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v4 | |
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@v3 | |
with: | |
push: true | |
context: . | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
platforms: linux/amd64,linux/arm/v7,linux/arm64 |