Skip to content

Change node name from influxdb to influxdb_connector #1248

Change node name from influxdb to influxdb_connector

Change node name from influxdb to influxdb_connector #1248

Workflow file for this run

name: Test diagnostics
on:
pull_request:
push:
branches:
- ros2
schedule:
# Run every week at 20:00 on Sunday
- cron: "0 20 * * 0"
jobs:
ros_distro_from_branch_name:
name: What is the distro?
runs-on: ubuntu-latest
outputs:
distro: ${{ steps.set-distro.outputs.distro }}
steps:
- name: Set ROS distro from branch name
id: set-distro
run: |
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
echo "This is a PR. Getting branch name from base ref."
branch_name="${{ github.event.pull_request.base.ref }}"
else
echo "This is a push. Getting branch name from head ref."
branch_name="${GITHUB_REF}"
fi
echo "> Branch name is: ${branch_name}"
if [[ "${branch_name}" == *"ros2-humble"* ]]; then
distro="humble"
elif [[ "${branch_name}" == *"ros2-jazzy"* ]]; then
distro="jazzy"
elif [[ "${branch_name}" == *"ros2-kilted"* ]]; then
distro="kilted"
elif [[ "${branch_name}" == *"ros2"* ]]; then
distro="rolling"
else
echo "! Unknown branch for determining ROS distro: ${GITHUB_REF##*/}"
exit 1
fi
echo "> Determined ROS distro to be: ${distro}!"
echo "distro=$distro" >> $GITHUB_OUTPUT
build_and_test:
name: Build ${{ matrix.distro }} on ubuntu
needs: ros_distro_from_branch_name
strategy:
fail-fast: false
matrix:
include:
- distro: ${{ needs.ros_distro_from_branch_name.outputs.distro }}
os: 24.04
runs-on: ubuntu-latest
container: ubuntu:${{ matrix.os }}
steps:
- uses: ros-tooling/[email protected]
with:
required-ros-distributions: ${{ matrix.distro }}
- uses: ros-tooling/[email protected]
with:
target-ros2-distro: ${{ matrix.distro }}
package-name: |
diagnostic_aggregator
diagnostic_common_diagnostics
diagnostic_remote_logging
diagnostic_updater
self_test
build_win:
name: Build ${{ matrix.distro }} on windows
needs: ros_distro_from_branch_name
runs-on: windows-2022
# container: ${{ inputs.container }}
env:
ros_underlay_path: C:\dev
upstream_workspace: C:\upstream_ws
# this will be src/{repo-owner}/{repo-name}
repo_path: src/${{ github.repository }}
# INPUTS ...
# Space-separated list of additional pixi dependencies
pixi_dependencies: "rosinstall_generator typeguard jinja2 boost compilers"
# Path to a repos file with additional windows dependencies
windows_dependencies: ""
# Space-separated list of packages to skip from
skip_dependencies: "sdformat_urdf"
# Space-separated list of packages to skip from build
skip_packages: ""
# Space-separated list of packages to be built with Ninja generator (default is MSVC otherwise)
ninja_packages: ""
# Additional arguments to pass to CMake for upstream workspace, e.g. -DBUILD_TESTING=OFF
upstream_cmake_args: "-DBUILD_TESTING=OFF"
# Additional arguments to pass to CMake for target workspace, e.g. -DBUILD_TESTING=OFF
target_cmake_args: ""
strategy:
fail-fast: false
matrix:
include:
- distro: ${{ needs.ros_distro_from_branch_name.outputs.distro }}
steps:
- name: Restore pixi.lock
uses: actions/cache/restore@v4
id: cache
with:
path: pixi.lock
key: pixi|${{ matrix.distro }}
- name: Checkout source
uses: actions/checkout@v6
with:
path: ${{ env.repo_path }}
- name: Bootstrap pixi and patch manifest file
# https://docs.ros.org/en/rolling/Installation/Windows-Install-Binary.html
run: |
$manifest = "pixi.toml"
irm https://raw.githubusercontent.com/ros2/ros2/refs/heads/rolling/pixi.toml -OutFile $manifest
# patch pixi.toml to add extra dependencies
$deps = "${{ env.pixi_dependencies }}"
Write-Host "env.pixi_dependencies = $deps"
if (-not [string]::IsNullOrWhiteSpace($deps)) {
Write-Host "Extra dependencies specified: $deps"
# Read file into a string array
[string[]]$content = Get-Content $manifest
# Find [dependencies] section
$depIndex = $content.IndexOf("[dependencies]")
# If section not found, append it
if ($depIndex -eq -1) {
Add-Content $manifest "`n[dependencies]"
$content = Get-Content $manifest
$depIndex = $content.IndexOf("[dependencies]")
}
# Convert array to a List[string] explicitly
$contentList = New-Object 'System.Collections.Generic.List[string]'
$contentList.AddRange([string[]]$content)
# Insert each dependency after the [dependencies] section
$insertIndex = $depIndex + 1
foreach ($dep in $deps.Split(" ")) {
# Only insert if not already present
if (-not ($contentList -match "^\s*$dep\s*=")) {
$contentList.Insert($insertIndex, "$dep = `"*`"")
$insertIndex++
}
}
# Save updated manifest
$contentList | Set-Content $manifest
} else {
Write-Host "No additional dependencies specified."
}
- name: Install pixi
uses: prefix-dev/[email protected]
# Cache pixi environment only on default branch to save disk space
with:
cache: ${{ steps.cache.outputs.cache-hit == 'true' }} # only use cache if pixi.lock is present
cache-write: ${{ steps.cache.outputs.cache-hit == 'true' && github.event_name == 'push' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }} # only write cache on push to default branch to save disk space, caches from PRs can't be accessed anyways; only allowed if pixi.lock is present
locked: false
- name: Cache pixi.lock
uses: actions/cache/save@v4
# independent of the success of the following steps, but only on default branch
# cache independent of the cache hit of the restore step, because pixi.toml could have changed
if: ${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }}
with:
path: pixi.lock
key: pixi|${{ matrix.distro }}
- name: Upload pixi lock file
uses: actions/upload-artifact@v5
with:
name: pixi.lock
path: pixi.lock
- name: Install ROS
# Download and extract ROS 2 package
# https://docs.ros.org/en/rolling/Installation/Windows-Install-Binary.html
run: |
# TODO(christophfroehlich) remove with fix below
Invoke-Expression ((& pixi shell-hook -s powershell) -join "`n")
mkdir -p ${{ env.ros_underlay_path }}
Set-Location -Path ${{ env.ros_underlay_path }}
$url = "https://ci.ros2.org/view/packaging/job/packaging_windows/lastSuccessfulBuild/artifact/ws/ros2-package-windows-AMD64.zip"
$output = "ros2-package-windows-AMD64.zip"
Invoke-WebRequest -Uri $url -OutFile $output
Expand-Archive -Path $output -DestinationPath ros2_${{ matrix.distro }}
# python packages are broken: https://github.com/ros2/ros2/issues/1675
# TODO(christophfroehlich) remove once https://github.com/ros2/ci/pull/817 is released
cd ros2_${{ matrix.distro }}
irm https://gist.githubusercontent.com/knmcguire/fd5326de442289712539182f6257191c/raw/bcb4bf2a460af3a1d71bcfcdcefa065ebd5060d7/preinstall_setup_windows.py -OutFile preinstall_setup_windows.py
python preinstall_setup_windows.py
- name: Get package list
id: package_list_action
uses: ros-controls/ros2_control_ci/.github/actions/set-package-list-pixi@master
with:
path: ${{ env.repo_path }}
manifest-path: pixi.toml
- name: Clone dependencies
run: |
Invoke-Expression ((& pixi shell-hook -s powershell) -join "`n")
${{ env.ros_underlay_path }}\ros2_${{ matrix.distro }}\ros2-windows\setup.ps1
# Workaround .. --from-path: 'src/ros/diagnostics' is not an existing directory
mkdir -p ${{ env.upstream_workspace }}/${{ env.repo_path }}
# check for repos files, and pass them to vcstool
# mkdir -p ${{ env.upstream_workspace }}/src
$repo_file = "${{ env.repo_path }}\${{ steps.package_list_action.outputs.repo_name }}.${{ matrix.distro }}.repos"
if (Test-Path "$repo_file") {
Write-Output "Local repos file found"
vcs import --input $repo_file ${{ env.upstream_workspace }}/src
}
if (![string]::IsNullOrWhiteSpace("${{ env.windows_dependencies }}")) {
$repo_file_win = "${{ env.repo_path }}\${{ env.windows_dependencies }}"
if (Test-Path "$repo_file_win") {
Write-Output "Windows repos file found"
vcs import --input $repo_file_win ${{ env.upstream_workspace }}/src
}
}
# use rosinstall_generator to get all dependencies which are not yet installed
$underlay_ws_pkgs=$(ros2 pkg list)
Write-Host "underlay_ws_pkgs = $underlay_ws_pkgs"
rosinstall_generator --rosdistro ${{ matrix.distro }} --deps --deps-only --format repos --exclude $underlay_ws_pkgs ${{ env.skip_dependencies }} --from-path ${{ env.upstream_workspace }} ${{ env.repo_path }} > deps.repos
# rosinstall_generator skips excludes with are from a different repo (gbp instead of development repo)
vcs import --skip-existing --input deps.repos ${{ env.upstream_workspace }}/src
- name: Upload repos file
uses: actions/upload-artifact@v5
with:
name: windows.repos
path: deps.repos
- name: Build upstream workspace
# use Ninja generator optionally for selected packages.
# This is needed for RSL, but doesn't work for msg packages
# https://github.com/search?q=repo%3APickNikRobotics%2FRSL%20ninja&type=code
# https://github.com/colcon/colcon-ros/issues/84#issuecomment-1862881299
shell: cmd
run: |
call pixi shell-hook -s cmd > pixi_env.bat
call pixi_env.bat >nul 2>&1
call ${{ env.ros_underlay_path }}\ros2_${{ matrix.distro }}\ros2-windows\setup.bat
pushd ${{ env.upstream_workspace }}
@echo on
set skip_arg=
if not "${{ env.skip_packages }}"=="" (
set skip_arg=${{ env.skip_packages }}
)
if not "${{ env.ninja_packages }}"=="" (
colcon build --packages-up-to ${{ env.ninja_packages }} --cmake-args -G Ninja --event-handler console_cohesion+ --merge-install
set skip_arg=%skip_arg% ${{ env.ninja_packages }}
)
colcon build --packages-skip %skip_arg% --event-handler console_cohesion+ --cmake-args ${{ env.upstream_cmake_args }} --merge-install
- name: Build target workspace
shell: cmd
run: |
call pixi shell-hook -s cmd > pixi_env.bat
call pixi_env.bat >nul 2>&1
call ${{ env.ros_underlay_path }}\ros2_${{ matrix.distro }}\ros2-windows\setup.bat
call ${{ env.upstream_workspace }}\install\setup.bat
@echo on
set skip_arg=
if not "${{ env.skip_packages }}"=="" (
set skip_arg=--packages-skip ${{ env.skip_packages }}
)
colcon build %skip_arg% --event-handler console_cohesion+ --cmake-args ${{ env.target_cmake_args }} --merge-install