Skip to content

module: transfers (profilebased) #1974

module: transfers (profilebased)

module: transfers (profilebased) #1974

Workflow file for this run

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/[email protected]
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/[email protected]
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