Note:
- this document describes both the historical state and the target contract
- the branch
feat/test-tag-hash-contractimplements the<test>-<hash>trigger flow and clearer step-by-step test logging - references below to the earlier selector-style contract are kept only to explain the transition
nuvolaris/openserverless-operatornuvolaris/openserverless-tasknuvolaris/openserverless-testing
The latest specification says the trigger should be:
<test>-<hash>
Where:
testalready includes the platform distinction- no extra platform or architecture field is needed
- examples given are:
k3sk3sarm
hashis the commit hash that generated the test
This is different from the earlier interpretation based on selectors like k3s-amd or kind-amd.
The key clarification is:
- platform is already part of the test name
- there is no independent platform or architecture dimension to reconstruct later
For PR-triggered flows:
- source repos use
pull_request_target pull_request_targetreads the workflow from the base branch of the PRrepository_dispatchworkflows inopenserverless-testingmust also exist on the branch GitHub uses for the target repo
Practical consequence:
- opening a PR against
maindoes not automatically use workflow logic that exists only in the PR branch - the new behavior becomes real only after the relevant workflow changes are available on
main
Feature branches added PR-trigger logic in:
openserverless-operator/.github/workflows/trigger-testing.yamlopenserverless-task/.github/workflows/trigger-testing.yaml
Those changes currently enable testing from PR labels and dispatch to openserverless-testing.
That behavior was enough to validate the PR-trigger pipeline, but its naming contract is still older than the final requirement.
Feature branches added or updated:
openserverless-testing/.github/workflows/operator-pr-test.yamlopenserverless-testing/.github/workflows/task-pr-test.yamlopenserverless-testing/.github/workflows/tests.yaml
Main improvements introduced:
- deterministic checkout by
PR_SHA - dedicated task PR workflow
- common test sequence extraction
- more consistent selector parsing than before
- explicit
OPS_BRANCH=mainin the shared GitHub test path
The implemented PR-trigger flow was built around label values like:
kind-amdk3s-amdk3s-arm
The latest specification instead says the tag should be:
<test>-<hash>
Examples:
k3s-<hash>k3sarm-<hash>
So the code currently merged on main improved the trigger pipeline, but it is not yet fully aligned with this final naming contract.
One important nuance:
- the older tag-driven task path in
platform-ci-tests.yamlis structurally closer to<test>-<hash> - the newer selector-based PR trigger improved orchestration and PR metadata handling, but uses the wrong external naming contract
Previous operator path:
openserverless-operator/.github/workflows/trigger-testing.yaml- trigger originally came from:
- issue comment
/testing <platform> - manual
workflow_dispatch
- issue comment
- workflow dispatched
repository_dispatchtoopenserverless-testing openserverless-testing/.github/workflows/operator-pr-test.yamlbuilt a temporary operator image and ran tests
Previous task path:
openserverless-testing/.github/workflows/platform-ci-tests.yamlacceptedrepository_dispatch- payload was converted into a git tag
openserverless-testing/.github/workflows/tests.yamlran tests on tag push
Original missing piece:
openserverless-taskdid not have a workflow producer for that dispatch
What was already aligned in spirit:
platform-ci-tests.yamlalready creates a tag from two partstests.yamlalready accepts any tag matching*-*- this means the historical task path was already closer to a canonical
<test>-<hash>trigger than the laterkind-amdstyle label naming
Even with the new <test>-<hash> specification, these pieces remain useful:
openserverless-testing/.github/workflows/operator-pr-test.yamlPurpose: checkout operator PR by SHA, build temporary image, run testsopenserverless-testing/.github/workflows/task-pr-test.yamlPurpose: checkout task PR by SHA and run tests from the requested PR contentsopenserverless-testing/.github/workflows/tests.yamlPurpose: generic tag-based test entry point for*-*openserverless-testing/tests/run-gh-suite.shPurpose: central GitHub test sequence
The system must treat the tag as:
<test>-<hash>
Not as:
<platform>-<architecture>
The system needs one stable list of accepted test names.
Examples currently mentioned by the latest clarification:
k3sk3sarm
That means the code should not rely on split forms like:
k3s-amdk3s-arm
unless those remain officially supported aliases.
Parsing should extract:
testhash
The earlier selector parser was built for names that embedded an extra -amd or -arm part.
Because platform is already encoded in the test name, the test runner should map:
k3s-> the corresponding infrastructure pathk3sarm-> the corresponding infrastructure path
instead of reconstructing platform and architecture as separate dimensions.
Even where behavior is already close, workflow fields should stop implying a separate platform dimension.
Examples of terminology that should be renamed in the next code alignment:
platform->test- selector -> tag or test selector only if it really means
<test>-<hash>
Current deploy logic is still based on names such as:
kindk3s-amdk3s-armk8s
This is one of the main remaining mismatches with the latest desired naming.
The current deploy logic therefore supports the infrastructure execution, but not yet the final canonical naming expected by the new contract.
File:
openserverless-testing/.github/workflows/operator-pr-test.yaml
What happens:
- testing workflow clones the operator PR
- checks out the requested
PR_SHA - builds an image from the PR source
- pushes it to GHCR as a temporary test image
- patches the task configuration to use that image during tests
Destination:
ghcr.io/<repository_owner>/openserverless-testing:pr-<PR_NUMBER>-<SHORT_SHA>
This is only the test image.
Files:
openserverless-operator/.github/workflows/image.ymlopenserverless-operator/TaskfileBuild.ymlopenserverless-operator/Dockerfile
Trigger:
push.tags: [0-9]*
Important conclusion:
- there is no automatic path today from “PR tests passed” to “publish official operator image”
- official publication still depends on pushing a release tag
Registry login in workflow:
vars.IMAGE_REGISTRY || 'registry.hub.docker.com'
Image name:
MY_OPERATOR_IMAGEif set- otherwise default from
Dockerfile
Dockerfile default:
registry.hub.docker.com/apache/openserverless-operator
Actual push implementation:
task buildx-and-push- which runs
docker buildx build ... --push
There is no workflow that automatically creates the release tag after tests or after merge.
Current tag creation remains manual or task-driven:
openserverless-operator/Taskfile.ymltasktagopenserverless-operator/Taskfile.ymltasktag-commit-push
So the current release path is:
- someone creates or pushes a numeric version tag
- tag push triggers
image.yml image.ymlbuilds and publishes the official image
Static checks executed during the implementation work:
bash -non updated shell scripts inopenserverless-testing- YAML parsing with Ruby for modified workflows in all three repositories
- a real trigger validation using:
- an operator PR
- label
kind-amd - successful dispatch into
openserverless-testing
That real validation confirmed:
- the PR-trigger pipeline works
repository_dispatchreachesopenserverless-testing- the operator PR test workflow starts correctly
But it validated the selector-style contract, not yet the final <test>-<hash> contract.
The latest requirement uses the word “tag” as:
<test>-<hash>
This should now become the canonical name everywhere in code and docs.
There are now two conceptual layers:
- trigger pipeline improvements already implemented and merged
- final naming contract
<test>-<hash>still to be aligned
To fully align the codebase, the next round should update:
- trigger parsing
- validation rules
- test-name allowlists
- deploy mapping
- workflow payload field names
- documentation
so everything consistently speaks in terms of:
testhash
and no longer in terms of:
- platform
- architecture