Skip to content

Separate the deployed platform from the showcases that verify it - #401

Draft
antonkri wants to merge 10 commits into
mainfrom
refactor/deployment-layering
Draft

antonkri wants to merge 10 commits into
mainfrom
refactor/deployment-layering

Conversation

@antonkri

@antonkri antonkri commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Image content is now split into three layers: the image itself (//images/), the deployed S-CORE platform (//deploy) and the showcases that demonstrate and verify it (//showcases).

Before this change the two upper layers were mixed in both directions: the lifecycle showcase shipped the launch_manager and the standalone showcase shipped the config_daemon, while the persistency test scenarios binary was packaged with the platform applications. A showcase that ships the component it exercises verifies the binary it brought along instead of the one the distribution deployed, so a distribution failing to deploy an S-CORE module would still pass.

  • Add //deploy with one package per module that has something to deploy (lifecycle, logging, config_management, communication) and the aggregate :platform_bundle / :platform_tar that every image consumes, now including AutoSD.
  • Move launch_manager and config_daemon from the showcases into //deploy; the showcase manifests now drive the deployed binaries.
  • Move the persistency test scenarios binary from the platform packaging into //showcases.
  • Fold images/common/apps into //deploy and point all images at the single platform bundle.
  • Document the layering and the layer 2 / layer 3 contract in deploy/README.md and in the platform integration guide.

Communication and baselibs: platform heartbeat service

Communication and baselibs ship as libraries, so there was nothing a layer 3 check could exercise for them. //deploy/communication now deploys heartbeat_service, an mw::com service (score/platform/heartbeat) built on both:

  • heartbeat event: sequence number and payload sealed with a baselibs CRC32, every 100 ms.
  • platform_info field: the known_good.json timestamp and the version (or pinned commit) of every target_sw module, generated at build time.

The new showcase Communication Platform Heartbeat runs heartbeat_consumer, which brings no provider of its own. It passes only if it finds the deployed service via service discovery, the platform reports the S-CORE version the consumer was built for, and it receives 10 intact heartbeats. The reported version is self-declared: it catches a wrongly assembled platform but is no proof of origin. Details in deploy/communication/README.md.

Release downloads per layer

On a release, the Linux, AutoSD, QNX and EB corbos workflows attach two archives per target: score-platform-<target>.tar.gz (layer 2) and score-showcases-<target>.tar.gz (layer 3). An image that claims to ship S-CORE can be checked by copying only the showcases archive onto it. See "Release downloads" in deploy/README.md.

CI

  • QNX x86_64 now also runs the platform integration tests. Because the checks run via pull_request_target, this step and the release packaging only take effect after merge.

@github-actions

Copy link
Copy Markdown

The created documentation from the pull request is available at: docu-html

Image content is now split into three layers: the image itself
(//images/<variant>), the deployed S-CORE platform (//deploy) and the
showcases that demonstrate and verify it (//showcases).

Before this change the two upper layers were mixed in both directions:
the lifecycle showcase shipped the launch_manager and the standalone
showcase shipped the config_daemon, while the persistency test scenarios
binary was packaged with the platform applications. A showcase that
ships the component it exercises verifies the binary it brought along
instead of the one the distribution deployed, so a distribution failing
to deploy an S-CORE module would still pass.

- Add //deploy with one package per module (lifecycle, logging,
  communication, config_management) and the aggregate :platform_bundle /
  :platform_tar that every image consumes.
- Move launch_manager and config_daemon from the showcases into //deploy;
  the showcase manifests now drive the deployed binaries.
- Move the persistency test scenarios binary from the platform packaging
  into //showcases.
- Fold images/common/apps into //deploy and point all images at the
  single platform bundle.
- Document the layering and the layer 2 / layer 3 contract in
  deploy/README.md and in the platform integration guide.
The datarouter and mw::com configuration files lived under
feature_integration_tests/configs/ but were never read by the feature
integration tests. Their only consumers are the deployment packages and
the ebclfsa image, so they belong next to the module they configure.

Files move unchanged; the packaged paths stay /usr/bin/datarouter/etc/*
and /etc/*. What remains in feature_integration_tests/configs is the test
harness configuration (dlt_config_*, qemu_bridge_config).
Use score_pkg_bundle instead of a hand-written pkg_files. An alias keeps the
installed binary name bin/cpp_tests_persistency, since score_pkg_bundle names
binaries after their label.
@antonkri
antonkri force-pushed the refactor/deployment-layering branch from 6fcf940 to 35929a6 Compare October 15, 2026 13:41
The showcases are shipped in the QNX image, but only the ITF suite ran there,
so none of them was ever executed on QNX. Run //platform_integration_tests:pit
against the same QEMU image.
@antonkri
antonkri force-pushed the refactor/deployment-layering branch from 35929a6 to 6c7ff63 Compare October 15, 2026 14:07
@pawelrutkaq

Copy link
Copy Markdown
Contributor

What exact problme dow e solve since I am not sure before looking int oit

@antonkri

antonkri commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor Author

What exact problme dow e solve since I am not sure before looking int oit

Hello @pawelrutkaq ,

  • the idea is to separate packaging of s-core modules and show-cases/examples
  • that should allow us to have one stable set of S-Core modules, that we can call platform and exchange/extend package with test-cases and demos, that are running in the image, separately. Currently it is a mix of everything.
  • we can potentially use this separation for S-Core verified project.

@pawelrutkaq

Copy link
Copy Markdown
Contributor

ok i will look

antonkri and others added 6 commits October 29, 2026 09:26
deploy/communication shipped /etc/mw_com_config.json and /etc/logging.json, a
leftover of the scrample demo (service /score/MapApiLanesStamped, appId IPBR).
Nothing reads them: mw::com has no system-wide configuration (it reads
./etc/mw_com_config.json relative to the working directory or the file passed
with -s), mw::log's only system-wide file is /etc/ecu_logging_config.json, and
every showcase brings its own configuration. Communication ships as a library,
so it has nothing to deploy.

Drops the package from //deploy:platform_bundle and from the EB corbos image
genrule (where it was a dependency only, never passed to build_image.sh), and
corrects the layer 2 / layer 3 contract in deploy/README.md.
Communication and baselibs ship as libraries, so the platform had nothing a
layer 3 check could exercise for them. The platform now deploys a small
mw::com service built on both (//deploy/communication), and the communication
showcase gains a consumer that brings no provider of its own.

The service score/platform/heartbeat offers
- the heartbeat event: a sequence number and payload sealed with a baselibs
  CRC32, published every 100 ms, and
- the platform_info field: the known_good.json timestamp and the version (or
  pinned commit) of every target_sw module, generated at build time from
  //:known_good.json.

heartbeat_consumer exits 0 only if it finds the deployed service via service
discovery, receives platform_info with an intact CRC32, the platform reports
the S-CORE version the consumer was built for (differences are listed per
module), and it receives 10 intact heartbeats. The showcase CLI ignores app
exit codes, so the platform integration test checks the consumer's output.

The reported version is self-declared: it catches a wrongly assembled
platform but is no proof of origin. deploy/communication/README.md describes
the service, the consumer and these limitations.
Includes //deploy:platform_tar in the AutoSD image, which so far only took
the showcases. Since the launch manager, config daemon and heartbeat service
moved into //deploy, the AutoSD showcases could not find the binaries they
drive ("config_daemon: No such file or directory").

On a release, the Linux, QNX and EB corbos workflows now attach two archives
per target: score-platform-<target>.tar.gz (//deploy:platform_tar, layer 2)
and score-showcases-<target>.tar.gz (//showcases:showcases_pkg_tar,
layer 3). An image that claims to ship S-CORE can then be checked by copying
only the showcases archive onto it. deploy/README.md lists the assets and
how to use them.
Extends the release job from #413: the build job packages //deploy:platform_tar and //showcases:showcases_pkg_tar for AutoSD, and the release job uploads them next to the qcow2 image. GH_REPO is set because the release job has no checkout to infer the repository from.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants