Commit 5360f39e authored by Konstantinos Togias's avatar Konstantinos Togias
Browse files

test: keep missing candidate identities visibly unqualified

parent 8ffdd848
Loading
Loading
Loading
Loading
Loading
+2 −2
Changes for README.md: 2 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -97,8 +97,8 @@ Remove `controlPaths` from extra chart values. When using
`oop_platform_bootstrap`, also remove manually supplied `topology` and
`controlPathCredentials`; competing sources fail before deployment. Existing
empty defaults preserve health-only deployments. The paired chart provides
`/var/run/openop-tfsdk` for private execution files. Use matching SDK 2.0.0rc3,
SRM and chart revisions; upgrade or roll back the set together. Bootstrap
`/var/run/openop-tfsdk` for private execution files. Use the reviewed SDK, SRM and chart revisions recorded in the selected profile;
upgrade or roll back the set together. Bootstrap
generation is not a backend-health or credential-validity check.

Offline producer tests run in the existing Python CI job. The real-role check
+11 −0
Changes for ansible/tests/unit/test_feature_consolidation.py: 11 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -55,3 +55,14 @@ def test_local_consolidation_also_refuses_different_test_revisions(tmp_path):
    inputs(tmp_path,fault='source')
    report=consolidate(tmp_path,tmp_path/'out')
    assert not report['selected_acceptance_passed'] and not report['same_candidate']


def test_missing_artifact_identities_cannot_be_presented_as_the_same_candidate(tmp_path):
    inputs(tmp_path)
    for variant in ('container','helm','network'):
        path=tmp_path/variant/'feature-matrix.json'
        body=json.loads(path.read_text())
        body['artifact_selection']=None
        path.write_text(json.dumps(body))
    report=consolidate(tmp_path,tmp_path/'out')
    assert not report['selected_acceptance_passed'] and not report['same_candidate']
+4 −4
Changes for ci/lab/README.md: 4 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ in `candidate.json`; matching runtime contents never imply a final version has
already been integrated. Missing successful builds or moving heads fail selection;
there is no fallback to an older image. No new registry upload is needed.

The release branch/MR enables this mode automatically. With the flag omitted,
The develop/main branches and trusted MRs targeting them enable this mode automatically. With the flag omitted,
the profile is an exact snapshot for replay. `candidate.json` records the resolved
profile and all build/source coordinates. Copy its `resolved_profile` for an
exact replay without refreshing; compute an independent SDK fingerprint as
@@ -100,7 +100,7 @@ Final SDK publication and its integration into a normal SRM image precede
qualification of that final image.

Use the same profile path as `OOP_LAB_PROFILE` in the GitLab platform-lab job.
The application-checkpoint branch, its MR and integration pushes run container,
The develop/main branches and trusted MRs targeting them run container,
Helm and network variants of the same lab automatically
after lint checks, with this candidate profile selected. Its passing result is
required for that trial pipeline; no project settings or new runner are needed.
@@ -116,7 +116,7 @@ network outcomes distinct in GitLab's Tests tab. Their labels preserve failure,
skip and timing data. Raw pytest case identities remain unchanged for reruns;
phase-report counts and actual application-case counts are separate.

On the release branch/MR and integration pushes, the small
On develop/main and trusted MRs targeting them, the small
`release-feature-report` job consumes the actual container, Helm and network
artifacts after execution, including failed runs. Separate report directories
prevent artifact overwrites. It produces one Markdown/JSON feature table exposed
@@ -158,7 +158,7 @@ OOP_LAB_NETWORK_PROVIDER=EURECOM OOP_LAB_REFRESH_CANDIDATE=1 \
```

`platform-lab-network` runs this automatically beside the container and Helm
jobs on the release branch/MR and integration pushes. A protected ad hoc
jobs on develop/main and trusted MRs targeting them. A protected ad hoc
pipeline can select `RUN_PLATFORM_NETWORK_LAB=1` with the same profile.
The provider definition in [eurecom.json](providers/eurecom.json) owns its
immutable image digests and deployment commit. The controller reuses the
+2 −1
Changes for ci/merge_feature_reports.py: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -40,7 +40,8 @@ def consolidate(directory, output, *, source=None, pipeline=None):
        if not heads:
            problems.append(f'{variant}: missing resolved artifact provenance')
        identities.append((report.get('ansible_source'),heads,report.get('images'),report.get('chart_revision'),selection.get('sdk')))
    same_candidate=len(reports)==len(VARIANTS) and all(identity==identities[0] for identity in identities)
    same_candidate=(len(reports)==len(VARIANTS) and all(identity[1] for identity in identities)
                    and all(identity==identities[0] for identity in identities))
    if not same_candidate:
        problems.append('Reports do not establish one common artifact candidate')
    keys={row['feature'] for report in reports.values() for row in report['features']}