Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 44 additions & 65 deletions .github/workflows/osrm-backend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ concurrency:
jobs:
vcpkg-smoke-prereq:
if: github.repository == 'Project-OSRM/osrm-backend'
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
steps:
- name: Configure DNS servers
if: runner.os == 'Linux'
Expand Down Expand Up @@ -74,7 +74,7 @@ jobs:
env:
VCPKG_DEFAULT_TRIPLET: x64-linux

vcpkg-windows-release-bindings:
windows-release-bindings:
needs: [format-taginfo-docs, vcpkg-smoke-prereq]
strategy:
matrix:
Expand Down Expand Up @@ -302,16 +302,26 @@ jobs:
- name: clang-20-release
continue-on-error: false
node: 24
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
BUILD_TYPE: Release
CCOMPILER: clang-20
CXXCOMPILER: clang++-20
ENABLE_LTO: ON

- name: clang-20-debug
continue-on-error: false
node: 24
runs-on: ubuntu-26.04
BUILD_TYPE: Debug
CCOMPILER: clang-20
CXXCOMPILER: clang++-20
ENABLE_ASSERTIONS: ON
ENABLE_LTO: OFF

- name: clang-19-release
continue-on-error: false
node: 24
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
BUILD_TYPE: Release
CCOMPILER: clang-19
CXXCOMPILER: clang++-19
Expand All @@ -320,100 +330,73 @@ jobs:
- name: clang-18-release
continue-on-error: false
node: 24
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
BUILD_TYPE: Release
CCOMPILER: clang-18
CXXCOMPILER: clang++-18
ENABLE_LTO: OFF

- name: clang-18-debug
continue-on-error: false
node: 24
runs-on: ubuntu-24.04
BUILD_TYPE: Debug
CCOMPILER: clang-18
CXXCOMPILER: clang++-18
ENABLE_LTO: OFF

- name: clang-18-debug-clang-tidy
- name: clang-20-debug-clang-tidy
continue-on-error: false
node: 24
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
BUILD_TYPE: Debug
CCOMPILER: clang-18
CXXCOMPILER: clang++-18
CCOMPILER: clang-20
CXXCOMPILER: clang++-20
ENABLE_CLANG_TIDY: ON
NODE_PACKAGE_TESTS_ONLY: ON
ENABLE_LTO: OFF

- name: clang-18-debug-asan-ubsan
- name: clang-20-debug-asan-ubsan
continue-on-error: false
node: 24
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
BUILD_TYPE: Debug
CCOMPILER: clang-18
CXXCOMPILER: clang++-18
CCOMPILER: clang-20
CXXCOMPILER: clang++-20
ENABLE_SANITIZER: ON
TARGET_ARCH: x86_64-asan-ubsan
OSRM_CONNECTION_RETRIES: 10
OSRM_CONNECTION_EXP_BACKOFF_COEF: 1.5

- name: clang-17-release
- name: clang-20-debug-cov
continue-on-error: false
node: 24
runs-on: ubuntu-24.04
BUILD_TYPE: Release
CCOMPILER: clang-17
CXXCOMPILER: clang++-17
ENABLE_LTO: OFF
runs-on: ubuntu-26.04
BUILD_TYPE: Debug
CCOMPILER: clang-20
CXXCOMPILER: clang++-20
ENABLE_COVERAGE: ON

- name: gcc-14-release
continue-on-error: false
node: 24
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
BUILD_TYPE: Release
CCOMPILER: gcc-14
CXXCOMPILER: g++-14
CXXFLAGS: '-Wno-array-bounds -Wno-uninitialized'

- name: gcc-13-release
- name: gcc-15-release
continue-on-error: false
node: 24
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
BUILD_TYPE: Release
CCOMPILER: gcc-13
CXXCOMPILER: g++-13
CCOMPILER: gcc-15
CXXCOMPILER: g++-15
CXXFLAGS: '-Wno-array-bounds -Wno-uninitialized'

- name: clang-20-debug-cov
continue-on-error: false
node: 24
runs-on: ubuntu-24.04
BUILD_TYPE: Debug
CCOMPILER: clang-20
CXXCOMPILER: clang++-20
ENABLE_COVERAGE: ON

- name: vcpkg-linux-release-bindings
- name: linux-release-bindings
build_bindings: true
continue-on-error: false
node: 24
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
BUILD_TYPE: Release
CCOMPILER: clang-17
CXXCOMPILER: clang++-17
NODE_PACKAGE_TESTS_ONLY: ON

- name: vcpkg-linux-debug
continue-on-error: false
node: 24
runs-on: ubuntu-24.04
BUILD_TYPE: Debug
CCOMPILER: clang-17
CXXCOMPILER: clang++-17
CCOMPILER: clang-18
CXXCOMPILER: clang++-18
NODE_PACKAGE_TESTS_ONLY: ON

- name: vcpkg-linux-arm64-release
- name: linux-arm64-release
continue-on-error: false
node: 24
runs-on: ubuntu-24.04-arm
Expand All @@ -422,47 +405,43 @@ jobs:
CXXCOMPILER: clang++-18
ENABLE_LTO: OFF

- name: vcpkg-macos-26-x64-release
- name: macos-26-x64-release
continue-on-error: true
node: 24
runs-on: macos-26-intel # x86_64
BUILD_TYPE: Release
CCOMPILER: clang
CXXCOMPILER: clang++
ENABLE_ASSERTIONS: ON
vcpkg_triplet: x64-osx

- name: vcpkg-macos-26-arm64-release
- name: macos-26-arm64-release
continue-on-error: true
node: 24
runs-on: macos-26 # arm64
BUILD_TYPE: Release
CCOMPILER: clang
CXXCOMPILER: clang++
ENABLE_ASSERTIONS: ON
vcpkg_triplet: arm64-osx

# python & nodeJS release bindings — macos-15 for broad binary compatibility
- name: vcpkg-macos-15-x64-release-bindings
- name: macos-15-x64-release-bindings
build_bindings: true
continue-on-error: true
node: 24
runs-on: macos-15-intel # x86_64
BUILD_TYPE: Release
CCOMPILER: clang
CXXCOMPILER: clang++
ENABLE_ASSERTIONS: ON
vcpkg_triplet: x64-osx

- name: vcpkg-macos-15-arm64-release-bindings
- name: macos-15-arm64-release-bindings
build_bindings: true
continue-on-error: true
node: 24
runs-on: macos-15 # arm64
BUILD_TYPE: Release
CCOMPILER: clang
CXXCOMPILER: clang++
ENABLE_ASSERTIONS: ON
vcpkg_triplet: arm64-osx

name: ${{ matrix.name}}
Expand Down Expand Up @@ -770,7 +749,7 @@ jobs:

ci-complete:
runs-on: ubuntu-latest
needs: [build-matrix, vcpkg-windows-release-bindings, docker-build-extract-test]
needs: [build-matrix, windows-release-bindings, docker-build-extract-test]
if: github.repository == 'Project-OSRM/osrm-backend'
steps:
- name: Configure DNS servers
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/stale.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ permissions:

jobs:
stale:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
steps:
- name: Configure DNS servers
if: runner.os == 'Linux'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/vcpkg-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
fail-fast: false
matrix:
include:
- { os: ubuntu-24.04, triplet: x64-linux }
- { os: ubuntu-26.04, triplet: x64-linux }
- { os: macos-26, triplet: arm64-osx }
- { os: macos-26-intel, triplet: x64-osx }
- { os: windows-2025, triplet: x64-windows-static-md }
Expand Down
5 changes: 0 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -395,11 +395,6 @@ endif()
# file exposes them via standard CMake find_package() / imported targets.
find_package(Boost 1.83 REQUIRED CONFIG COMPONENTS ${BOOST_COMPONENTS})
find_package(TBB CONFIG REQUIRED)
# Always link the release build of TBB, even in Debug/Coverage configurations.
# vcpkg's debug TBB enables internal debug assertions (e.g. intrusive_list
# invariants) that trip during osrm-extract's test-data generation on
# ubuntu-24.04 under gcc-13. The master branch never hit this because it
# linked the system's release-only TBB. Do the same here.
foreach(_tbb_target TBB::tbb TBB::tbbmalloc TBB::tbbmalloc_proxy)
if(TARGET ${_tbb_target})
set_target_properties(${_tbb_target} PROPERTIES
Expand Down
1 change: 1 addition & 0 deletions features/support/data_classes.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ export default {
// don't fail if bearings input and extected string is empty and actual result is undefined
if (want === '' && (got === '' || got === undefined)) return true;


const matchPercent = want.match(/(.*)\s+~(.+)%$/),
matchAbs = want.match(/(.*)\s+\+-(.+)$/),
matchRe = want.match(/^\/(.*)\/$/),
Expand Down
83 changes: 45 additions & 38 deletions include/engine/guidance/assemble_steps.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,25 +133,29 @@ inline std::vector<RouteStep> assembleSteps(const datafacade::BaseDataFacade &fa
const auto travel_mode = facade.GetTravelMode(path_point.from_edge_based_node);
BOOST_ASSERT(travel_mode > 0);

steps.push_back(RouteStep{path_point.from_edge_based_node,
step_name_id,
is_segregated,
std::string(name),
std::string(ref),
std::string(pronunciation),
std::string(destinations),
std::string(exits),
NO_ROTARY_NAME,
NO_ROTARY_NAME,
from_alias<double>(segment_duration) / 10.,
distance,
from_alias<double>(segment_weight) / weight_multiplier,
travel_mode,
maneuver,
leg_geometry.FrontIndex(segment_index),
leg_geometry.BackIndex(segment_index) + 1,
{intersection},
is_left_hand_driving});
{
const double step_seconds = from_alias<double>(segment_duration) / 10.;
steps.push_back(
RouteStep{path_point.from_edge_based_node,
step_name_id,
is_segregated,
std::string(name),
std::string(ref),
std::string(pronunciation),
std::string(destinations),
std::string(exits),
NO_ROTARY_NAME,
NO_ROTARY_NAME,
step_seconds,
distance,
from_alias<double>(segment_weight) / weight_multiplier,
travel_mode,
maneuver,
leg_geometry.FrontIndex(segment_index),
leg_geometry.BackIndex(segment_index) + 1,
{intersection},
is_left_hand_driving});
}

if (leg_data_index + 1 < leg_data.size())
{
Expand Down Expand Up @@ -235,25 +239,28 @@ inline std::vector<RouteStep> assembleSteps(const datafacade::BaseDataFacade &fa
// intersections contain the classes of exiting road
intersection.classes = facade.GetClasses(facade.GetClassData(target_node_id));
BOOST_ASSERT(duration >= EdgeDuration{0});
steps.push_back(RouteStep{leg_data[leg_data.size() - 1].from_edge_based_node,
step_name_id,
is_segregated,
std::string(facade.GetNameForID(step_name_id)),
std::string(facade.GetRefForID(step_name_id)),
std::string(facade.GetPronunciationForID(step_name_id)),
std::string(facade.GetDestinationsForID(step_name_id)),
std::string(facade.GetExitsForID(step_name_id)),
NO_ROTARY_NAME,
NO_ROTARY_NAME,
from_alias<double>(duration) / 10.,
distance,
from_alias<double>(weight) / weight_multiplier,
target_mode,
maneuver,
leg_geometry.FrontIndex(segment_index),
leg_geometry.BackIndex(segment_index) + 1,
{intersection},
facade.IsLeftHandDriving(target_node_id)});
{
const double step_seconds = from_alias<double>(duration) / 10.;
steps.push_back(RouteStep{leg_data[leg_data.size() - 1].from_edge_based_node,
step_name_id,
is_segregated,
std::string(facade.GetNameForID(step_name_id)),
std::string(facade.GetRefForID(step_name_id)),
std::string(facade.GetPronunciationForID(step_name_id)),
std::string(facade.GetDestinationsForID(step_name_id)),
std::string(facade.GetExitsForID(step_name_id)),
NO_ROTARY_NAME,
NO_ROTARY_NAME,
step_seconds,
distance,
from_alias<double>(weight) / weight_multiplier,
target_mode,
maneuver,
leg_geometry.FrontIndex(segment_index),
leg_geometry.BackIndex(segment_index) + 1,
{intersection},
facade.IsLeftHandDriving(target_node_id)});
}
}
// In this case the source + target are on the same edge segment
else
Expand Down
Loading
Loading