Skip to content

Commit 2ef97df

Browse files
authored
QNX8 workflow with unit test execution (#267)
* Update qnx8 workflow * Update bazel_dep, adjust .bazelrc * set bazel version to 8.6.0 * Run "bazel mod deps --lockfile_mode=update" * Run formater * Add qnx8.yml
1 parent d8799bd commit 2ef97df

8 files changed

Lines changed: 516 additions & 216 deletions

File tree

.bazelrc

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ build:host --define config=host
4848
build:x86_64-linux --config=stub
4949
build:x86_64-linux --config=toolchain_common
5050
build:x86_64-linux --platforms=@score_bazel_platforms//:x86_64-linux-gcc_12.2.0-posix
51-
build:x86_64-linux --extra_toolchains=@score_gcc_x86_64_toolchain//:x86_64-linux-gcc_12.2.0-posix
51+
build:x86_64-linux --extra_toolchains=@score_gcc_x86_64_toolchain//:x86_64-linux-gcc_12.2.0
5252
build:x86_64-linux --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_x86_64_unknown_linux_gnu
5353
build:x86_64-linux --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_x86_64_unknown_linux_gnu_miri
5454
build:x86_64-linux --define config=x86_64-linux
@@ -57,7 +57,7 @@ build:x86_64-linux --define config=x86_64-linux
5757
build:arm64-linux --config=stub
5858
build:arm64-linux --config=toolchain_common
5959
build:arm64-linux --platforms=@score_bazel_platforms//:aarch64-linux-gcc_12.2.0-posix
60-
build:arm64-linux --extra_toolchains=@score_gcc_aarch64_toolchain//:aarch64-linux-gcc_12.2.0-posix
60+
build:arm64-linux --extra_toolchains=@score_gcc_aarch64_toolchain//:aarch64-linux-gcc_12.2.0
6161
build:arm64-linux --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_aarch64_unknown_linux_gnu
6262
build:arm64-linux --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_aarch64_unknown_linux_gnu_miri
6363
build:arm64-linux --copt=-mno-outline-atomics
@@ -67,16 +67,26 @@ build:arm64-linux --linkopt=-latomic
6767
build:x86_64-qnx --config=stub
6868
build:x86_64-qnx --config=toolchain_common
6969
build:x86_64-qnx --platforms=@score_bazel_platforms//:x86_64-qnx-sdp_8.0.0-posix
70-
build:x86_64-qnx --extra_toolchains=@score_qcc_x86_64_toolchain//:x86_64-qnx-sdp_8.0.0-posix
70+
build:x86_64-qnx --extra_toolchains=@score_qcc_x86_64_toolchain//:x86_64-qnx-sdp_8.0.0
7171
build:x86_64-qnx --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_x86_64_pc_nto_qnx800
72+
build:x86_64-qnx --extra_toolchains=@score_qnx_x86_64_ifs_toolchain//:ifs-x86_64-qnx-sdp_8.0.0
73+
test:x86_64-qnx --run_under=@score_qnx_unit_tests//src:run_under_qnx
74+
test:x86_64-qnx --test_tag_filters=-skip_local # see https://github.com/eclipse-score/lifecycle/issues/272
75+
test:x86_64-qnx --test_lang_filters=cc,rust
7276

7377
# Target configuration for CPU:AArch64|OS:QNX build (do not use it in case of system toolchains!)
7478
build:arm64-qnx --config=stub
7579
build:arm64-qnx --config=toolchain_common
7680
build:arm64-qnx --incompatible_strict_action_env
7781
build:arm64-qnx --platforms=@score_bazel_platforms//:aarch64-qnx-sdp_8.0.0-posix
78-
build:arm64-qnx --extra_toolchains=@score_qcc_aarch64_toolchain//:aarch64-qnx-sdp_8.0.0-posix
82+
build:arm64-qnx --extra_toolchains=@score_qcc_aarch64_toolchain//:aarch64-qnx-sdp_8.0.0
7983
build:arm64-qnx --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_aarch64_unknown_nto_qnx800
84+
build:arm64-qnx --extra_toolchains=@score_qnx_aarch64_ifs_toolchain//:ifs-aarch64-qnx-sdp_8.0.0
85+
test:arm64-qnx --run_under=@score_qnx_unit_tests//src:run_under_qnx
86+
test:arm64-qnx --test_tag_filters=-skip_local # see https://github.com/eclipse-score/lifecycle/issues/272
87+
test:arm64-qnx --test_timeout=300
88+
test:arm64-qnx --test_lang_filters=cc,rust
89+
8090

8191
# Ferrocene Rust coverage config
8292
build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Cinstrument-coverage

.bazelversion

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8.4.2
1+
8.6.0

.devcontainer/devcontainer.json

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,29 @@
1111
"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}
1212
},
1313

14-
// Initialize bazel cache on host
15-
"initializeCommand": "mkdir -p ${localEnv:HOME}/.cache/bazel",
14+
// customize VS Code settings and extensions
15+
"customizations": {
16+
"vscode": {
17+
"extensions": [
18+
"anthropic.claude-code"
19+
]
20+
}
21+
},
22+
23+
"containerEnv": {
24+
"ANTHROPIC_FOUNDRY_API_KEY": "${localEnv:ANTHROPIC_FOUNDRY_API_KEY}",
25+
"ANTHROPIC_FOUNDRY_RESOURCE": "${localEnv:ANTHROPIC_FOUNDRY_RESOURCE}",
26+
"CLAUDE_CODE_USE_FOUNDRY": "${localEnv:CLAUDE_CODE_USE_FOUNDRY}",
27+
"ANTHROPIC_DEFAULT_FABLE_MODEL": "${localEnv:ANTHROPIC_DEFAULT_FABLE_MODEL}",
28+
"ANTHROPIC_DEFAULT_OPUS_MODEL": "${localEnv:ANTHROPIC_DEFAULT_OPUS_MODEL}",
29+
"ANTHROPIC_DEFAULT_SONNET_MODEL": "${localEnv:ANTHROPIC_DEFAULT_SONNET_MODEL}",
30+
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "${localEnv:ANTHROPIC_DEFAULT_HAIKU_MODEL}"
31+
},
32+
33+
"initializeCommand": {
34+
"Initialize bazel cache on host": "mkdir -p ${localEnv:HOME}/.cache/bazel",
35+
"Make sure QNX licenses exists": "touch -a ~/.qnx/license/licenses",
36+
"Make sure .netrc exists": "touch -a ~/.netrc"},
1637

1738
// Mount ca-certificates from host
1839
"mounts": [
@@ -25,13 +46,21 @@
2546
"source": "${localEnv:HOME}/.qnx/license",
2647
"target": "/opt/score_qnx/license",
2748
"type": "bind"
49+
},
50+
{
51+
"source": "${localEnv:HOME}/.netrc",
52+
"target": "/home/vscode/.netrc",
53+
"type": "bind"
2854
}
2955
],
56+
3057
// Add your personal customizations
3158
"onCreateCommand": {
32-
"update certificates & install dependencies": "sudo apt update && sudo apt install -y --no-install-recommends ca-certificates-java openjdk-17-jre-headless libacl1-dev tmux fakechroot && sudo update-ca-certificates",
59+
"update certificates & install dependencies": "sudo apt update && sudo apt install -y --no-install-recommends ca-certificates-java openjdk-17-jre-headless libacl1-dev tmux fakechroot libvirt-daemon-system libvirt-clients bridge-utils virt-manager qemu-system-x86 qemu-system-arm && sudo update-ca-certificates",
3360
"bazel use system trust store": "echo 'startup --host_jvm_args=-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts --host_jvm_args=-Djavax.net.ssl.trustStorePassword=changeit' | sudo tee --append /etc/bazel.bazelrc"
3461
},
3562

36-
"runArgs": ["--network", "host"]
63+
64+
"runArgs": ["--device=/dev/kvm", "--network", "host"],
65+
"postCreateCommand": "sudo chmod 666 /dev/kvm && sudo usermod -aG kvm $USER"
3766
}

.github/workflows/qnx8.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# *******************************************************************************
2+
# Copyright (c) 2026 Contributors to the Eclipse Foundation
3+
#
4+
# See the NOTICE file(s) distributed with this work for additional
5+
# information regarding copyright ownership.
6+
#
7+
# This program and the accompanying materials are made available under the
8+
# terms of the Apache License Version 2.0 which is available at
9+
# https://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# SPDX-License-Identifier: Apache-2.0
12+
# *******************************************************************************
13+
14+
name: QNX8 Build & Test
15+
on:
16+
pull_request_target:
17+
types: [opened, reopened, synchronize]
18+
push:
19+
branches:
20+
- main
21+
merge_group:
22+
types: [checks_requested]
23+
workflow_call:
24+
jobs:
25+
qnx-build:
26+
name: Build and Test ${{ matrix.bazel-config }}
27+
strategy:
28+
fail-fast: false
29+
matrix:
30+
include:
31+
- bazel-config: x86_64-qnx
32+
bazel-test-target: >-
33+
//score/...
34+
- bazel-config: arm64-qnx
35+
bazel-test-target: >-
36+
//score/...
37+
extra-bazel-test-flags: "--test_timeout=120,600,1800,7200" # Increase test timeout due to QEMU emulation
38+
uses: eclipse-score/cicd-workflows/.github/workflows/qnx-build.yml@af347722c7ae3ed85518895c11268d96ac728f62
39+
permissions:
40+
contents: read
41+
pull-requests: read
42+
with:
43+
bazel-target: "//score/... //examples/..."
44+
bazel-config: ${{ matrix.bazel-config }}
45+
bazel-test-target: ${{ matrix.bazel-test-target }}
46+
credential-helper: "scripts/internal/qnx_creds.py"
47+
bazel-disk-cache: ${{ matrix.bazel-config }}
48+
secrets:
49+
score-qnx-license: ${{ secrets.SCORE_QNX_LICENSE }}
50+
score-qnx-user: ${{ secrets.SCORE_QNX_USER }}
51+
score-qnx-password: ${{ secrets.SCORE_QNX_PASSWORD }}
52+

MODULE.bazel

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ module(
1717

1818
# Bazel global rules
1919
bazel_dep(name = "bazel_skylib", version = "1.9.0")
20-
bazel_dep(name = "rules_pkg", version = "1.1.0")
20+
bazel_dep(name = "rules_pkg", version = "1.2.0")
2121
bazel_dep(name = "rules_python", version = "1.8.5")
2222
bazel_dep(name = "rules_rust", version = "0.68.2-score")
2323
bazel_dep(name = "rules_cc", version = "0.2.17")
2424
bazel_dep(name = "rules_oci", version = "2.3.0")
25-
bazel_dep(name = "aspect_rules_lint", version = "2.0.0")
26-
bazel_dep(name = "buildifier_prebuilt", version = "8.2.0.2")
25+
bazel_dep(name = "aspect_rules_lint", version = "2.3.0")
26+
bazel_dep(name = "buildifier_prebuilt", version = "8.5.1")
2727
bazel_dep(name = "platforms", version = "1.0.0")
2828
bazel_dep(name = "flatbuffers", version = "25.12.19")
2929
bazel_dep(name = "download_utils", version = "1.2.2")
@@ -40,7 +40,7 @@ bazel_dep(name = "score_process", version = "1.5.4", dev_dependency = True)
4040
bazel_dep(name = "score_platform", version = "0.5.5", dev_dependency = True)
4141

4242
## Configure the C++ toolchain
43-
bazel_dep(name = "score_bazel_cpp_toolchains", version = "0.2.2", dev_dependency = True)
43+
bazel_dep(name = "score_bazel_cpp_toolchains", version = "0.5.4", dev_dependency = True)
4444

4545
gcc = use_extension("@score_bazel_cpp_toolchains//extensions:gcc.bzl", "gcc", dev_dependency = True)
4646
gcc.toolchain(
@@ -59,15 +59,15 @@ gcc.toolchain(
5959
)
6060
gcc.toolchain(
6161
name = "score_qcc_x86_64_toolchain",
62-
sdp_version = "8.0.0",
62+
sdp_version = "8.0.4",
6363
target_cpu = "x86_64",
6464
target_os = "qnx",
6565
use_default_package = True,
6666
version = "12.2.0",
6767
)
6868
gcc.toolchain(
6969
name = "score_qcc_aarch64_toolchain",
70-
sdp_version = "8.0.0",
70+
sdp_version = "8.0.4",
7171
target_cpu = "aarch64",
7272
target_os = "qnx",
7373
use_default_package = True,
@@ -78,8 +78,33 @@ use_repo(
7878
"score_gcc_aarch64_toolchain",
7979
"score_gcc_x86_64_toolchain",
8080
"score_qcc_aarch64_toolchain",
81+
"score_qcc_aarch64_toolchain_pkg",
8182
"score_qcc_x86_64_toolchain",
83+
"score_qcc_x86_64_toolchain_pkg",
84+
)
85+
86+
# UTs on QNX
87+
bazel_dep(name = "score_qnx_unit_tests", version = "0.2.0", dev_dependency = True)
88+
bazel_dep(name = "score_rules_imagefs", version = "0.0.3", dev_dependency = True)
89+
90+
imagefs = use_extension("@score_rules_imagefs//extensions:imagefs.bzl", "imagefs", dev_dependency = True)
91+
imagefs.toolchain(
92+
name = "score_qnx_x86_64_ifs_toolchain",
93+
sdp_to_import = "@score_qcc_x86_64_toolchain_pkg",
94+
sdp_version = "8.0.0",
95+
target_cpu = "x86_64",
96+
target_os = "qnx",
97+
type = "ifs",
98+
)
99+
imagefs.toolchain(
100+
name = "score_qnx_aarch64_ifs_toolchain",
101+
sdp_to_import = "@score_qcc_aarch64_toolchain_pkg",
102+
sdp_version = "8.0.0",
103+
target_cpu = "aarch64",
104+
target_os = "qnx",
105+
type = "ifs",
82106
)
107+
use_repo(imagefs, "score_qnx_aarch64_ifs_toolchain", "score_qnx_x86_64_ifs_toolchain")
83108

84109
## Rust Toolchain
85110
bazel_dep(name = "score_toolchains_rust", version = "0.9.1", dev_dependency = True)

0 commit comments

Comments
 (0)