Skip to content

[skeleton] orchestration: Implement a stub for resolve_fournos_config#45

Merged
kpouget merged 13 commits into
openshift-psap:mainfrom
kpouget:fournos
Apr 28, 2026
Merged

[skeleton] orchestration: Implement a stub for resolve_fournos_config#45
kpouget merged 13 commits into
openshift-psap:mainfrom
kpouget:fournos

Conversation

@kpouget
Copy link
Copy Markdown
Contributor

@kpouget kpouget commented Apr 27, 2026

Summary by CodeRabbit

  • New Features

    • CLI command to resolve, preview (dry-run) and apply Fournos job configs; automatic Fournos vault env setup.
    • GPU hardware fields (count/type) and an exclusivity flag for job submissions; submission flow validates all-or-none GPU settings.
    • Export support: additional AWS secret exported for S3/MLflow usage; new required aws_secret config field.
  • Bug Fixes

    • Stronger forced-process shutdown to avoid exception chaining leakage.
  • Documentation

    • Updated vault validation guidance and global strict-validation toggle.
  • Chores

    • Lint config updated to exclude extra subdirectories.

@openshift-ci
Copy link
Copy Markdown

openshift-ci Bot commented Apr 27, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign tosokin for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 27, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a Fournos config resolver CLI and runtime that fetches a FournosJob from the cluster, injects vault secret refs, optionally resolves hardware, writes a resolved YAML artifact, and optionally reapplies the object; plus related launcher, template, vault validation, and CI wiring changes.

Changes

Cohort / File(s) Summary
Fournos CI resolver
projects/core/ci_entrypoint/fournos_resolve.py
New module: fetches FournosJob via oc get fjob/<name> -o yaml, parses YAML, injects spec.secretRefs from vault list, optionally resolves spec.hardware, writes env.ARTIFACT_DIR/fjob.resolved.yaml, applies via oc apply (unless dry_run), and registers resolve-fournos-config Click command.
CI entrypoint wiring
projects/core/ci_entrypoint/run_ci.py, projects/skeleton/orchestration/ci.py
Register resolve-fournos-config subcommand; skip vault initialization when running that subcommand; adjust subcommand registration to provide vault-list and hardware resolver.
Skeleton / hardware resolver
projects/skeleton/orchestration/test_skeleton.py
init gains skip_vault_init; changes to global vault strict-validation handling; adds resolve_hardware_request(hardware_spec) stub that mutates/returns hardware spec.
Fournos launcher submit path
projects/fournos_launcher/orchestration/config.yaml, projects/fournos_launcher/orchestration/submit.py, projects/fournos_launcher/toolbox/submit_and_wait/main.py, projects/fournos_launcher/toolbox/submit_and_wait/templates/job.yaml.j2
Adds exclusive and hardware schema fields; propagate exclusive, gpu_count, gpu_type through submit APIs; validate both-or-none GPU params; template emits spec.exclusive and conditionally spec.hardware.
Vault library & usage
projects/core/library/vault.py, projects/llm_d_legacy/orchestration/ci.py, docs/orchestration/vaults.md
Introduce module-global _strict_validation_enabled, add disable_strict_validation(), remove strict parameter from init/call sites, and update docs/examples to use global strict-control pattern.
Fournos vault preparer
projects/core/ci_entrypoint/fournos.py
Add prepare_fournos_vault() to scan FOURNOS_SECRETS for vault directories, load vault definition YAMLs, set env vars pointing to vault dirs; parse_and_save_pr_arguments_fournos() now calls it and runs an oc pre-query for existing Fjob labels.
Caliper export changes
projects/caliper/orchestration/export.py, projects/caliper/orchestration/export_config.py
Export now resolves an additional aws_secret vault entry, validates its resolved file, sets AWS_SHARED_CREDENTIALS_FILE, and adds aws_secret field to export config model.
Misc utilities & config
projects/legacy/library/run.py, pyproject.toml, projects/core/ci_entrypoint/run_ci.py
Parallel.__exit__ now raises SystemExit(1) from None; Ruff excludes updated; CI prepare no longer installs pydantic extra.
Docs
docs/orchestration/vaults.md
Examples updated to show global strict-vault validation control (vault.disable_strict_validation()) and removal of per-call strict arguments.

Sequence Diagram(s)

sequenceDiagram
  participant CLI as "resolve-fournos-config CLI"
  participant VaultSvc as "Vault list provider"
  participant Hardware as "Hardware resolver (optional)"
  participant OC as "oc (cluster)"
  participant FS as "Filesystem (ARTIFACT_DIR)"

  CLI->>VaultSvc: vault_list_func() -> list[vaults]
  CLI->>OC: oc get fjob/<name> -o yaml
  OC-->>CLI: fjob YAML -> dict
  CLI->>CLI: inject spec.secretRefs from vaults
  CLI->>Hardware: hardware_resolver_func(spec.hardware)?
  alt hardware resolved
    Hardware-->>CLI: resolved hardware dict
    CLI->>CLI: set spec.hardware or null if empty
  end
  CLI->>FS: write fjob.resolved.yaml in ARTIFACT_DIR
  alt dry_run == false
    CLI->>OC: oc apply -f fjob.resolved.yaml
    OC-->>CLI: apply result
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Poem

I hopped in with a tiny resolve,
Fetched a job YAML, gave secrets a shove,
Tuned GPUs, set exclusive light,
Wrote the artifact and held it tight,
Then whispered "apply" and bounded off with glee 🐇✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 79.17% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title accurately describes the main change: implementing a stub for resolve_fournos_config in skeleton orchestration. Multiple files support this, particularly projects/skeleton/orchestration/test_skeleton.py which adds the resolve_hardware_request stub function and updates the init function signature.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@kpouget kpouget force-pushed the fournos branch 2 times, most recently from 42858d1 to b5ae596 Compare April 27, 2026 14:39
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
projects/legacy/library/run.py (1)

242-242: Preserve exception context instead of suppressing it.

At line 242, from None suppresses the exception context from the caught Exception as e. While the traceback is already printed, preserving the exception chain in the raised SystemExit ensures proper debugging if the process termination sequence does not complete immediately.

Proposed fix
-                raise SystemExit(1) from None
+                raise SystemExit(1) from e
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@projects/legacy/library/run.py` at line 242, The code currently suppresses
the original exception context by using "raise SystemExit(1) from None" inside
the except block that captures "Exception as e"; replace that with a plain
"raise SystemExit(1)" (or "raise SystemExit(1) from e" if you prefer explicit
chaining) so the original exception context is preserved for debugging while
still exiting the process; update the raise near the caught "Exception as e" and
keep existing traceback printing intact.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@projects/core/ci_entrypoint/fournos_resolve.py`:
- Around line 143-147: The code ignores the resolver's return value; change the
block using hardware_resolver_func so you capture updated_hardware and assign
fjob_obj["spec"]["hardware"] to the resolver's return when provided (falling
back to the original hardware_spec if the resolver returns None), i.e. call
hardware_resolver_func(hardware_spec), then set resolved = updated_hardware if
updated_hardware is not None else hardware_spec and assign that resolved value
back into fjob_obj["spec"]["hardware"]; keep the logger.info("Applied hardware
resolution configuration") as-is.

In `@projects/fournos_launcher/toolbox/submit_and_wait/main.py`:
- Around line 40-42: The new public run() kwargs (exclusive, gpu_count,
gpu_type) must be validated in validate_inputs(): ensure gpu_count and gpu_type
are either both absent/None or both present and valid (gpu_count is an integer >
0 and gpu_type is a non-empty string), reject falsey/partial combos (e.g. 0 or
"" or only one provided) by raising a clear ValueError so callers fail fast;
update validate_inputs() to perform these checks and mention
spec.hardware/job.yaml.j2 in the error message so it's obvious why both fields
are required.

In `@projects/skeleton/orchestration/test_skeleton.py`:
- Around line 36-45: The init signature in test_skeleton changed to
init(skip_vault_init=False) but orchestration.cli still calls
test_skeleton.init(strict_vault_validation=False), causing a TypeError; either
update the caller to use the new parameter (call
test_skeleton.init(skip_vault_init=not strict_vault_validation)) or add a small
compatibility shim in the test_skeleton module — e.g., change def
init(skip_vault_init=False, strict_vault_validation=None): and if
strict_vault_validation is not None set skip_vault_init = not
strict_vault_validation — then proceed with existing logic and preserve
behavior.

---

Nitpick comments:
In `@projects/legacy/library/run.py`:
- Line 242: The code currently suppresses the original exception context by
using "raise SystemExit(1) from None" inside the except block that captures
"Exception as e"; replace that with a plain "raise SystemExit(1)" (or "raise
SystemExit(1) from e" if you prefer explicit chaining) so the original exception
context is preserved for debugging while still exiting the process; update the
raise near the caught "Exception as e" and keep existing traceback printing
intact.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ad40e30f-b068-4683-bbda-dd8a2b79b482

📥 Commits

Reviewing files that changed from the base of the PR and between 6005234 and 42858d1.

📒 Files selected for processing (9)
  • projects/core/ci_entrypoint/fournos_resolve.py
  • projects/fournos_launcher/orchestration/config.yaml
  • projects/fournos_launcher/orchestration/submit.py
  • projects/fournos_launcher/toolbox/submit_and_wait/main.py
  • projects/fournos_launcher/toolbox/submit_and_wait/templates/job.yaml.j2
  • projects/legacy/library/run.py
  • projects/skeleton/orchestration/ci.py
  • projects/skeleton/orchestration/test_skeleton.py
  • pyproject.toml

Comment thread projects/core/ci_entrypoint/fournos_resolve.py Outdated
Comment thread projects/fournos_launcher/toolbox/submit_and_wait/main.py
Comment thread projects/skeleton/orchestration/test_skeleton.py Outdated
@kpouget kpouget force-pushed the fournos branch 2 times, most recently from d5d3898 to d8e6236 Compare April 27, 2026 14:48
@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 27, 2026

/test fournos skeleton
/cluster cluster-1
/var fournos.namespace: psap-automation-wip

@psap-forge-bot
Copy link
Copy Markdown

🔴 Test of 'fournos_launcher submit' failed after 00 hours 05 minutes 06 seconds 🔴

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster cluster-1
/var fournos.namespace: psap-automation-wip

Failure indicator:

## /logs/artifacts/FAILURE 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
~~ projects/fournos_launcher/toolbox/submit_and_wait/main.py:177
~~ TASK: wait_for_job_completion: Wait for FOURNOS job to complete
~~ ARTIFACT_DIR: /logs/artifacts/001__submit_and_wait
~~ LOG_FILE: /logs/artifacts/001__submit_and_wait/task.log
~~ ARGS:
~~     cluster_name: cluster-1
~~     project: skeleton
~~     args: []
~~     variables_overrides: {}
~~     job_name: ''
~~     namespace: psap-automation-wip
~~     owner: kpouget
~~     display_name: skeleton
~~     pipeline_name: forge-test-only
~~     env:
~~       JOB_TYPE: presubmit
~~       JOB_NAME: pull-ci-openshift-psap-forge-main-fournos
~~       JOB_SPEC: '{"type":"presubmit","job":"pull-ci-openshift-psap-forge-main-fournos","buildid":"2048780260530458624","prowjobid":"4165bbdb-ae63-479d-8462-203417b8e69a","refs":{"org":"openshift-psap","repo":"forge","repo_link":"https://github.com/openshift-psap/forge","base_ref":"main","base_sha":"600523429a8302b0c9c0616a19c0ebab4e267b33","base_link":"https://github.com/openshift-psap/forge/commit/600523429a8302b0c9c0616a19c0ebab4e267b33","pulls":[{"number":45,"author":"kpouget","sha":"d8e6236502bc566ced4e4d8c4ebdb540a9435f2f","title":"[skeleton]
~~         orchestration: Implement a stub for `resolve_fournos_config`","head_ref":"fournos","link":"https://github.com/openshift-psap/forge/pull/45","commit_link":"https://github.com/openshift-psap/forge/pull/45/commits/d8e6236502bc566ced4e4d8c4ebdb540a9435f2f","author_link":"https://github.com/kpouget"}]},"decoration_config":{"timeout":"23h0m0s","grace_period":"15s","utility_images":{"clonerefs":"us-docker.pkg.dev/k8s-infra-prow/images/clonerefs:v20260421-d25a17867","initupload":"us-docker.pkg.dev/k8s-infra-prow/images/initupload:v20260421-d25a17867","entrypoint":"us-docker.pkg.dev/k8s-infra-prow/images/entrypoint:v20260421-d25a17867","sidecar":"us-docker.pkg.dev/k8s-infra-prow/images/sidecar:v20260421-d25a17867"},"resources":{"clonerefs":{"limits":{"memory":"3Gi"},"requests":{"cpu":"100m","memory":"500Mi"}},"initupload":{"limits":{"memory":"200Mi"},"requests":{"cpu":"100m","memory":"50Mi"}},"place_entrypoint":{"limits":{"memory":"100Mi"},"requests":{"cpu":"100m","memory":"25Mi"}},"sidecar":{"limits":{"memory":"2Gi"},"requests":{"cpu":"100m","memory":"250Mi"}}},"gcs_configuration":{"bucket":"test-platform-results","path_strategy":"single","default_org":"openshift","default_repo":"origin","mediaTypes":{"log":"text/plain"},"compress_file_types":["txt","log","json","tar","html","yaml"]},"gcs_credentials_secret":"gce-sa-credentials-gcs-publisher","skip_cloning":true,"censor_secrets":true,"censoring_options":{"minimum_secret_length":6}}}'
~~       OPENSHIFT_CI: 'true'
~~       JOB_NAME_SAFE: fournos
~~       BUILD_ID: '2048780260530458624'
~~       PULL_PULL_SHA: d8e6236502bc566ced4e4d8c4ebdb540a9435f2f
~~       PULL_NUMBER: '45'
~~       PULL_BASE_REF: main
~~       REPO_NAME: forge
~~       REPO_OWNER: openshift-psap
~~       PULL_BASE_SHA: 600523429a8302b0c9c0616a19c0ebab4e267b33
~~       PULL_TITLE: '[skeleton] orchestration: Implement a stub for `resolve_fournos_config`'
~~       PULL_REFS: main:600523429a8302b0c9c0616a19c0ebab4e267b33,45:d8e6236502bc566ced4e4d8c4ebdb540a9435f2f
~~       PULL_HEAD_REF: fournos
~~     status_dest: /logs/artifacts
~~     ci_label: pr45_b2048780260530458624
~~     exclusive: true
~~     gpu_count: null
~~     gpu_type: null
~~     artifact_dir: /logs/artifacts/001__submit_and_wait
~~ CONTEXT:
~~     final_job_name: forge-skeleton-20260427-150753
~~     manifest_file: /logs/artifacts/001__submit_and_wait/src/forge-skeleton-20260427-150753-manifest.yaml
~~
~~ EXCEPTION: RuntimeError
~~     Job forge-skeleton-20260427-150753 failed: Forge resolution failed: Job has reached the specified backoff limit
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


[...]

Execution logs

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 27, 2026

/test fournos skeleton
/cluster cluster-1
/var fournos.namespace: psap-automation-wip

@psap-forge-bot
Copy link
Copy Markdown

🔴 Test of 'fournos_launcher submit' failed after 00 hours 00 minutes 22 seconds 🔴

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster cluster-1
/var fournos.namespace: psap-automation-wip

Failure indicator:

## /logs/artifacts/FAILURE 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
~~ projects/fournos_launcher/toolbox/submit_and_wait/main.py:177
~~ TASK: wait_for_job_completion: Wait for FOURNOS job to complete
~~ ARTIFACT_DIR: /logs/artifacts/001__submit_and_wait
~~ LOG_FILE: /logs/artifacts/001__submit_and_wait/task.log
~~ ARGS:
~~     cluster_name: cluster-1
~~     project: skeleton
~~     args: []
~~     variables_overrides: {}
~~     job_name: ''
~~     namespace: psap-automation-wip
~~     owner: kpouget
~~     display_name: skeleton
~~     pipeline_name: forge-test-only
~~     env:
~~       JOB_TYPE: presubmit
~~       JOB_NAME: pull-ci-openshift-psap-forge-main-fournos
~~       JOB_SPEC: '{"type":"presubmit","job":"pull-ci-openshift-psap-forge-main-fournos","buildid":"2048797873402810368","prowjobid":"400265d9-7f74-4e57-b828-3cd7a0ec8f7a","refs":{"org":"openshift-psap","repo":"forge","repo_link":"https://github.com/openshift-psap/forge","base_ref":"main","base_sha":"0b22c95687a2c9f14f4646b1e41a879e0dd574e4","base_link":"https://github.com/openshift-psap/forge/commit/0b22c95687a2c9f14f4646b1e41a879e0dd574e4","pulls":[{"number":45,"author":"kpouget","sha":"718f82a782e783b428083a8d27adb6f2a77f48b4","title":"[skeleton]
~~         orchestration: Implement a stub for `resolve_fournos_config`","head_ref":"fournos","link":"https://github.com/openshift-psap/forge/pull/45","commit_link":"https://github.com/openshift-psap/forge/pull/45/commits/718f82a782e783b428083a8d27adb6f2a77f48b4","author_link":"https://github.com/kpouget"}]},"decoration_config":{"timeout":"23h0m0s","grace_period":"15s","utility_images":{"clonerefs":"us-docker.pkg.dev/k8s-infra-prow/images/clonerefs:v20260421-d25a17867","initupload":"us-docker.pkg.dev/k8s-infra-prow/images/initupload:v20260421-d25a17867","entrypoint":"us-docker.pkg.dev/k8s-infra-prow/images/entrypoint:v20260421-d25a17867","sidecar":"us-docker.pkg.dev/k8s-infra-prow/images/sidecar:v20260421-d25a17867"},"resources":{"clonerefs":{"limits":{"memory":"3Gi"},"requests":{"cpu":"100m","memory":"500Mi"}},"initupload":{"limits":{"memory":"200Mi"},"requests":{"cpu":"100m","memory":"50Mi"}},"place_entrypoint":{"limits":{"memory":"100Mi"},"requests":{"cpu":"100m","memory":"25Mi"}},"sidecar":{"limits":{"memory":"2Gi"},"requests":{"cpu":"100m","memory":"250Mi"}}},"gcs_configuration":{"bucket":"test-platform-results","path_strategy":"single","default_org":"openshift","default_repo":"origin","mediaTypes":{"log":"text/plain"},"compress_file_types":["txt","log","json","tar","html","yaml"]},"gcs_credentials_secret":"gce-sa-credentials-gcs-publisher","skip_cloning":true,"censor_secrets":true,"censoring_options":{"minimum_secret_length":6}}}'
~~       OPENSHIFT_CI: 'true'
~~       JOB_NAME_SAFE: fournos
~~       BUILD_ID: '2048797873402810368'
~~       PULL_PULL_SHA: 718f82a782e783b428083a8d27adb6f2a77f48b4
~~       PULL_NUMBER: '45'
~~       PULL_BASE_REF: main
~~       REPO_NAME: forge
~~       REPO_OWNER: openshift-psap
~~       PULL_BASE_SHA: 0b22c95687a2c9f14f4646b1e41a879e0dd574e4
~~       PULL_TITLE: '[skeleton] orchestration: Implement a stub for `resolve_fournos_config`'
~~       PULL_REFS: main:0b22c95687a2c9f14f4646b1e41a879e0dd574e4,45:718f82a782e783b428083a8d27adb6f2a77f48b4
~~       PULL_HEAD_REF: fournos
~~     status_dest: /logs/artifacts
~~     ci_label: pr45_b2048797873402810368
~~     exclusive: true
~~     gpu_count: null
~~     gpu_type: null
~~     artifact_dir: /logs/artifacts/001__submit_and_wait
~~ CONTEXT:
~~     final_job_name: forge-skeleton-20260427-161526
~~     manifest_file: /logs/artifacts/001__submit_and_wait/src/forge-skeleton-20260427-161526-manifest.yaml
~~
~~ EXCEPTION: RuntimeError
~~     Job forge-skeleton-20260427-161526 failed: Forge resolution failed: Job has reached the specified backoff limit
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


[...]

Execution logs

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 27, 2026

/test fournos skeleton
/cluster cluster-1
/var fournos.namespace: psap-automation-wip

@psap-forge-bot
Copy link
Copy Markdown

🔴 Test of 'fournos_launcher submit' failed after 00 hours 01 minutes 16 seconds 🔴

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster cluster-1
/var fournos.namespace: psap-automation-wip

Failure indicator:

## /logs/artifacts/FAILURE 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
~~ projects/fournos_launcher/toolbox/submit_and_wait/main.py:177
~~ TASK: wait_for_job_completion: Wait for FOURNOS job to complete
~~ ARTIFACT_DIR: /logs/artifacts/001__submit_and_wait
~~ LOG_FILE: /logs/artifacts/001__submit_and_wait/task.log
~~ ARGS:
~~     cluster_name: cluster-1
~~     project: skeleton
~~     args: []
~~     variables_overrides: {}
~~     job_name: ''
~~     namespace: psap-automation-wip
~~     owner: kpouget
~~     display_name: skeleton
~~     pipeline_name: forge-test-only
~~     env:
~~       JOB_TYPE: presubmit
~~       JOB_NAME: pull-ci-openshift-psap-forge-main-fournos
~~       JOB_SPEC: '{"type":"presubmit","job":"pull-ci-openshift-psap-forge-main-fournos","buildid":"2048805917146746880","prowjobid":"dc02d896-83bc-46c0-912d-25031f0d1ab7","refs":{"org":"openshift-psap","repo":"forge","repo_link":"https://github.com/openshift-psap/forge","base_ref":"main","base_sha":"b4515754ebe61b82acbdd9a19aee3f3577494992","base_link":"https://github.com/openshift-psap/forge/commit/b4515754ebe61b82acbdd9a19aee3f3577494992","pulls":[{"number":45,"author":"kpouget","sha":"718f82a782e783b428083a8d27adb6f2a77f48b4","title":"[skeleton]
~~         orchestration: Implement a stub for `resolve_fournos_config`","head_ref":"fournos","link":"https://github.com/openshift-psap/forge/pull/45","commit_link":"https://github.com/openshift-psap/forge/pull/45/commits/718f82a782e783b428083a8d27adb6f2a77f48b4","author_link":"https://github.com/kpouget"}]},"decoration_config":{"timeout":"23h0m0s","grace_period":"15s","utility_images":{"clonerefs":"us-docker.pkg.dev/k8s-infra-prow/images/clonerefs:v20260421-d25a17867","initupload":"us-docker.pkg.dev/k8s-infra-prow/images/initupload:v20260421-d25a17867","entrypoint":"us-docker.pkg.dev/k8s-infra-prow/images/entrypoint:v20260421-d25a17867","sidecar":"us-docker.pkg.dev/k8s-infra-prow/images/sidecar:v20260421-d25a17867"},"resources":{"clonerefs":{"limits":{"memory":"3Gi"},"requests":{"cpu":"100m","memory":"500Mi"}},"initupload":{"limits":{"memory":"200Mi"},"requests":{"cpu":"100m","memory":"50Mi"}},"place_entrypoint":{"limits":{"memory":"100Mi"},"requests":{"cpu":"100m","memory":"25Mi"}},"sidecar":{"limits":{"memory":"2Gi"},"requests":{"cpu":"100m","memory":"250Mi"}}},"gcs_configuration":{"bucket":"test-platform-results","path_strategy":"single","default_org":"openshift","default_repo":"origin","mediaTypes":{"log":"text/plain"},"compress_file_types":["txt","log","json","tar","html","yaml"]},"gcs_credentials_secret":"gce-sa-credentials-gcs-publisher","skip_cloning":true,"censor_secrets":true,"censoring_options":{"minimum_secret_length":6}}}'
~~       OPENSHIFT_CI: 'true'
~~       JOB_NAME_SAFE: fournos
~~       BUILD_ID: '2048805917146746880'
~~       PULL_PULL_SHA: 718f82a782e783b428083a8d27adb6f2a77f48b4
~~       PULL_NUMBER: '45'
~~       PULL_BASE_REF: main
~~       REPO_NAME: forge
~~       REPO_OWNER: openshift-psap
~~       PULL_BASE_SHA: b4515754ebe61b82acbdd9a19aee3f3577494992
~~       PULL_TITLE: '[skeleton] orchestration: Implement a stub for `resolve_fournos_config`'
~~       PULL_REFS: main:b4515754ebe61b82acbdd9a19aee3f3577494992,45:718f82a782e783b428083a8d27adb6f2a77f48b4
~~       PULL_HEAD_REF: fournos
~~     status_dest: /logs/artifacts
~~     ci_label: pr45_b2048805917146746880
~~     exclusive: true
~~     gpu_count: null
~~     gpu_type: null
~~     artifact_dir: /logs/artifacts/001__submit_and_wait
~~ CONTEXT:
~~     final_job_name: forge-skeleton-20260427-164703
~~     manifest_file: /logs/artifacts/001__submit_and_wait/src/forge-skeleton-20260427-164703-manifest.yaml
~~
~~ EXCEPTION: RuntimeError
~~     Job forge-skeleton-20260427-164703 failed: Forge resolution failed: Job has reached the specified backoff limit
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


[...]

Execution logs

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 27, 2026

/test fournos skeleton
/cluster cluster-1
/var fournos.namespace: psap-automation-wip

@kpouget kpouget force-pushed the fournos branch 2 times, most recently from 947dcd8 to 7c5e551 Compare April 27, 2026 18:46
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

♻️ Duplicate comments (1)
projects/core/ci_entrypoint/fournos_resolve.py (1)

143-148: ⚠️ Potential issue | 🟠 Major

Honor hardware_resolver_func()'s return value.

Line 147 discards the callback result and always keeps spec.hardware bound to the original mapping. That only works for in-place mutation; any resolver that returns a replacement dict will silently lose its changes.

Proposed fix
-            fjob_obj["spec"]["hardware"] = hardware_spec = fjob_obj["spec"].get("hardware", {})
-            hardware_resolver_func(hardware_spec)
+            hardware_spec = fjob_obj["spec"].get("hardware", {})
+            updated_hardware = hardware_resolver_func(hardware_spec)
+            fjob_obj["spec"]["hardware"] = (
+                updated_hardware if updated_hardware is not None else hardware_spec
+            )
             logger.info("Applied hardware resolution configuration")
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@projects/core/ci_entrypoint/fournos_resolve.py` around lines 143 - 148, The
code currently calls hardware_resolver_func(hardware_spec) but ignores its
return value; change the call in the hardware resolution block so you capture
the resolver's return (e.g., result = hardware_resolver_func(hardware_spec)) and
if result is not None (or is a dict), assign fjob_obj["spec"]["hardware"] =
result, otherwise keep the original hardware_spec (to support both in-place
mutation and replacement returns); ensure you still initialize hardware_spec via
fjob_obj["spec"].get("hardware", {}) and keep the logger.info("Applied hardware
resolution configuration") after the assignment.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/orchestration/vaults.md`:
- Around line 132-149: The snippet calls get_vault_manager() before the vault
system is initialized, which causes an exception; initialize the vault first by
calling vault.init(...) with the project/config parameters required by your
codebase before calling get_vault_manager(), then you can optionally call
vault.disable_strict_validation() and proceed to use
vault_manager.validate_vault, vault_manager.validate_project_vaults, and
vault_manager.validate_all_vaults; ensure you call vault.init (the initializer)
prior to get_vault_manager to avoid the raise.

In `@projects/core/ci_entrypoint/run_ci.py`:
- Around line 438-445: The command line is wrongly built by inserting
`operation` before `args` and unconditionally indexing `args[0]`; in `run_ci.py`
adjust the `cmd` construction to use the already-selected script (`ci_script`)
plus the child argv built from `args` (not by prepending `operation`), and only
apply the "resolve_fournos_config" -> "resolve-fournos-config" alias when `args`
is non-empty (guard access to `args[0]`); ensure `cmd` becomes `[sys.executable,
str(ci_script)] + list(args)` (with the alias replacement performed on `args`
when present) so Click entrypoints receive the intended argv and zero-arg
invocations don't crash.

In `@projects/core/library/vault.py`:
- Around line 151-153: The current global _strict_validation_enabled is
irreversible and causes validate_vault() (and the other validate_* uses around
lines 377-412) to silently downgrade strict=True calls; change the design to
make strict state instance-scoped: add a boolean attribute (e.g.,
self._strict_validation_enabled) to VaultManager initialized True, update
disable_strict_validation() to be an instance method (and provide an enable or
reversible API/context-manager) that toggles that attribute, and modify
validate_vault() and the other validation functions to compute effective_strict
by AND-ing the local strict parameter with the VaultManager instance attribute
(not the module-global) so one caller cannot disable strictness for the whole
process.

In `@projects/fournos_launcher/orchestration/submit.py`:
- Around line 106-116: The GPU validation currently only checks for None and
allows falsy values like 0 or empty string; update the logic around gpu_count
and gpu_type to enforce types and non-empty values: ensure gpu_count is either
None or an int > 0 and gpu_type is either None or a non-empty str, and require
that both are provided together or both are None/omitted. Replace the current
presence check (gpu_config_present) with explicit checks using
isinstance(gpu_count, int) and gpu_count > 0, and isinstance(gpu_type, str) and
gpu_type.strip() != "", then raise a ValueError if one is valid and the other is
not (include the offending values in the error message). Ensure the validated
variables still match the expected function signature (gpu_count: int, gpu_type:
str) for downstream template usage.

---

Duplicate comments:
In `@projects/core/ci_entrypoint/fournos_resolve.py`:
- Around line 143-148: The code currently calls
hardware_resolver_func(hardware_spec) but ignores its return value; change the
call in the hardware resolution block so you capture the resolver's return
(e.g., result = hardware_resolver_func(hardware_spec)) and if result is not None
(or is a dict), assign fjob_obj["spec"]["hardware"] = result, otherwise keep the
original hardware_spec (to support both in-place mutation and replacement
returns); ensure you still initialize hardware_spec via
fjob_obj["spec"].get("hardware", {}) and keep the logger.info("Applied hardware
resolution configuration") after the assignment.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 2ba4ce29-244f-4e94-b0b4-f3b0cb372e27

📥 Commits

Reviewing files that changed from the base of the PR and between 42858d1 and 7c5e551.

📒 Files selected for processing (13)
  • docs/orchestration/vaults.md
  • projects/core/ci_entrypoint/fournos_resolve.py
  • projects/core/ci_entrypoint/run_ci.py
  • projects/core/library/vault.py
  • projects/fournos_launcher/orchestration/config.yaml
  • projects/fournos_launcher/orchestration/submit.py
  • projects/fournos_launcher/toolbox/submit_and_wait/main.py
  • projects/fournos_launcher/toolbox/submit_and_wait/templates/job.yaml.j2
  • projects/legacy/library/run.py
  • projects/llm_d_legacy/orchestration/ci.py
  • projects/skeleton/orchestration/ci.py
  • projects/skeleton/orchestration/test_skeleton.py
  • pyproject.toml
✅ Files skipped from review due to trivial changes (3)
  • pyproject.toml
  • projects/fournos_launcher/orchestration/config.yaml
  • projects/fournos_launcher/toolbox/submit_and_wait/main.py
🚧 Files skipped from review as they are similar to previous changes (4)
  • projects/legacy/library/run.py
  • projects/fournos_launcher/toolbox/submit_and_wait/templates/job.yaml.j2
  • projects/skeleton/orchestration/ci.py
  • projects/skeleton/orchestration/test_skeleton.py

Comment thread docs/orchestration/vaults.md
Comment thread projects/core/ci_entrypoint/run_ci.py Outdated
Comment thread projects/core/library/vault.py
Comment thread projects/fournos_launcher/orchestration/submit.py
@kpouget kpouget force-pushed the fournos branch 3 times, most recently from 36231f0 to 898f8c9 Compare April 27, 2026 18:57
@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 27, 2026

/test fournos skeleton
/cluster cluster-1
/var fournos.namespace: psap-automation-wip

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 27, 2026

/test fournos skeleton
/cluster cluster-1
/var fournos.namespace: psap-automation-wip

@psap-forge-bot
Copy link
Copy Markdown

🔴 Test of 'fournos_launcher submit' failed after 00 hours 00 minutes 20 seconds 🔴

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster cluster-1
/var fournos.namespace: psap-automation-wip

Failure indicator:

## /logs/artifacts/FAILURE 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
~~ projects/fournos_launcher/toolbox/submit_and_wait/main.py:177
~~ TASK: wait_for_job_completion: Wait for FOURNOS job to complete
~~ ARTIFACT_DIR: /logs/artifacts/001__submit_and_wait
~~ LOG_FILE: /logs/artifacts/001__submit_and_wait/task.log
~~ ARGS:
~~     cluster_name: cluster-1
~~     project: skeleton
~~     args: []
~~     variables_overrides: {}
~~     job_name: ''
~~     namespace: psap-automation-wip
~~     owner: kpouget
~~     display_name: skeleton
~~     pipeline_name: forge-test-only
~~     env:
~~       JOB_TYPE: presubmit
~~       JOB_NAME: pull-ci-openshift-psap-forge-main-fournos
~~       JOB_SPEC: '{"type":"presubmit","job":"pull-ci-openshift-psap-forge-main-fournos","buildid":"2048840506393235456","prowjobid":"ae8d0b2b-f089-483a-bf4e-ea7b00404c58","refs":{"org":"openshift-psap","repo":"forge","repo_link":"https://github.com/openshift-psap/forge","base_ref":"main","base_sha":"b4515754ebe61b82acbdd9a19aee3f3577494992","base_link":"https://github.com/openshift-psap/forge/commit/b4515754ebe61b82acbdd9a19aee3f3577494992","pulls":[{"number":45,"author":"kpouget","sha":"5fd184b207422274f55c8355ed3d24551747ab18","title":"[skeleton]
~~         orchestration: Implement a stub for `resolve_fournos_config`","head_ref":"fournos","link":"https://github.com/openshift-psap/forge/pull/45","commit_link":"https://github.com/openshift-psap/forge/pull/45/commits/5fd184b207422274f55c8355ed3d24551747ab18","author_link":"https://github.com/kpouget"}]},"decoration_config":{"timeout":"23h0m0s","grace_period":"15s","utility_images":{"clonerefs":"us-docker.pkg.dev/k8s-infra-prow/images/clonerefs:v20260421-d25a17867","initupload":"us-docker.pkg.dev/k8s-infra-prow/images/initupload:v20260421-d25a17867","entrypoint":"us-docker.pkg.dev/k8s-infra-prow/images/entrypoint:v20260421-d25a17867","sidecar":"us-docker.pkg.dev/k8s-infra-prow/images/sidecar:v20260421-d25a17867"},"resources":{"clonerefs":{"limits":{"memory":"3Gi"},"requests":{"cpu":"100m","memory":"500Mi"}},"initupload":{"limits":{"memory":"200Mi"},"requests":{"cpu":"100m","memory":"50Mi"}},"place_entrypoint":{"limits":{"memory":"100Mi"},"requests":{"cpu":"100m","memory":"25Mi"}},"sidecar":{"limits":{"memory":"2Gi"},"requests":{"cpu":"100m","memory":"250Mi"}}},"gcs_configuration":{"bucket":"test-platform-results","path_strategy":"single","default_org":"openshift","default_repo":"origin","mediaTypes":{"log":"text/plain"},"compress_file_types":["txt","log","json","tar","html","yaml"]},"gcs_credentials_secret":"gce-sa-credentials-gcs-publisher","skip_cloning":true,"censor_secrets":true,"censoring_options":{"minimum_secret_length":6}}}'
~~       OPENSHIFT_CI: 'true'
~~       JOB_NAME_SAFE: fournos
~~       BUILD_ID: '2048840506393235456'
~~       PULL_PULL_SHA: 5fd184b207422274f55c8355ed3d24551747ab18
~~       PULL_NUMBER: '45'
~~       PULL_BASE_REF: main
~~       REPO_NAME: forge
~~       REPO_OWNER: openshift-psap
~~       PULL_BASE_SHA: b4515754ebe61b82acbdd9a19aee3f3577494992
~~       PULL_TITLE: '[skeleton] orchestration: Implement a stub for `resolve_fournos_config`'
~~       PULL_REFS: main:b4515754ebe61b82acbdd9a19aee3f3577494992,45:5fd184b207422274f55c8355ed3d24551747ab18
~~       PULL_HEAD_REF: fournos
~~     status_dest: /logs/artifacts
~~     ci_label: pr45_b2048840506393235456
~~     exclusive: true
~~     gpu_count: null
~~     gpu_type: null
~~     artifact_dir: /logs/artifacts/001__submit_and_wait
~~ CONTEXT:
~~     final_job_name: forge-skeleton-20260427-190414
~~     manifest_file: /logs/artifacts/001__submit_and_wait/src/forge-skeleton-20260427-190414-manifest.yaml
~~
~~ EXCEPTION: RuntimeError
~~     Job forge-skeleton-20260427-190414 failed: No hardware requirements: spec.hardware not populated after Forge resolution
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


[...]

Execution logs

@psap-forge-bot
Copy link
Copy Markdown

🔴 Test of 'fournos_launcher submit' failed after 00 hours 00 minutes 21 seconds 🔴

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster psap-mgmt
/var fournos.namespace: psap-automation-wip

Failure indicator:

## /logs/artifacts/FAILURE 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
~~ projects/fournos_launcher/toolbox/submit_and_wait/main.py:177
~~ TASK: wait_for_job_completion: Wait for FOURNOS job to complete
~~ ARTIFACT_DIR: /logs/artifacts/001__submit_and_wait
~~ LOG_FILE: /logs/artifacts/001__submit_and_wait/task.log
~~ ARGS:
~~     cluster_name: psap-mgmt
~~     project: skeleton
~~     args: []
~~     variables_overrides: {}
~~     job_name: ''
~~     namespace: psap-automation-wip
~~     owner: kpouget
~~     display_name: skeleton
~~     pipeline_name: forge-test-only
~~     env:
~~       JOB_TYPE: presubmit
~~       JOB_NAME: pull-ci-openshift-psap-forge-main-fournos
~~       JOB_SPEC: '{"type":"presubmit","job":"pull-ci-openshift-psap-forge-main-fournos","buildid":"2049149140755025920","prowjobid":"96ddbc7f-5ffb-4135-ae22-b6c698a8a080","refs":{"org":"openshift-psap","repo":"forge","repo_link":"https://github.com/openshift-psap/forge","base_ref":"main","base_sha":"b4515754ebe61b82acbdd9a19aee3f3577494992","base_link":"https://github.com/openshift-psap/forge/commit/b4515754ebe61b82acbdd9a19aee3f3577494992","pulls":[{"number":45,"author":"kpouget","sha":"c93e9f10c7949a2f6a29d2c8a87994769f69cb97","title":"[skeleton]
~~         orchestration: Implement a stub for `resolve_fournos_config`","head_ref":"fournos","link":"https://github.com/openshift-psap/forge/pull/45","commit_link":"https://github.com/openshift-psap/forge/pull/45/commits/c93e9f10c7949a2f6a29d2c8a87994769f69cb97","author_link":"https://github.com/kpouget"}]},"decoration_config":{"timeout":"23h0m0s","grace_period":"15s","utility_images":{"clonerefs":"us-docker.pkg.dev/k8s-infra-prow/images/clonerefs:v20260421-d25a17867","initupload":"us-docker.pkg.dev/k8s-infra-prow/images/initupload:v20260421-d25a17867","entrypoint":"us-docker.pkg.dev/k8s-infra-prow/images/entrypoint:v20260421-d25a17867","sidecar":"us-docker.pkg.dev/k8s-infra-prow/images/sidecar:v20260421-d25a17867"},"resources":{"clonerefs":{"limits":{"memory":"3Gi"},"requests":{"cpu":"100m","memory":"500Mi"}},"initupload":{"limits":{"memory":"200Mi"},"requests":{"cpu":"100m","memory":"50Mi"}},"place_entrypoint":{"limits":{"memory":"100Mi"},"requests":{"cpu":"100m","memory":"25Mi"}},"sidecar":{"limits":{"memory":"2Gi"},"requests":{"cpu":"100m","memory":"250Mi"}}},"gcs_configuration":{"bucket":"test-platform-results","path_strategy":"single","default_org":"openshift","default_repo":"origin","mediaTypes":{"log":"text/plain"},"compress_file_types":["txt","log","json","tar","html","yaml"]},"gcs_credentials_secret":"gce-sa-credentials-gcs-publisher","skip_cloning":true,"censor_secrets":true,"censoring_options":{"minimum_secret_length":6}}}'
~~       OPENSHIFT_CI: 'true'
~~       JOB_NAME_SAFE: fournos
~~       BUILD_ID: '2049149140755025920'
~~       PULL_PULL_SHA: c93e9f10c7949a2f6a29d2c8a87994769f69cb97
~~       PULL_NUMBER: '45'
~~       PULL_BASE_REF: main
~~       REPO_NAME: forge
~~       REPO_OWNER: openshift-psap
~~       PULL_BASE_SHA: b4515754ebe61b82acbdd9a19aee3f3577494992
~~       PULL_TITLE: '[skeleton] orchestration: Implement a stub for `resolve_fournos_config`'
~~       PULL_REFS: main:b4515754ebe61b82acbdd9a19aee3f3577494992,45:c93e9f10c7949a2f6a29d2c8a87994769f69cb97
~~       PULL_HEAD_REF: fournos
~~     status_dest: /logs/artifacts
~~     ci_label: pr45_b2049149140755025920
~~     exclusive: true
~~     gpu_count: null
~~     gpu_type: null
~~     artifact_dir: /logs/artifacts/001__submit_and_wait
~~ CONTEXT:
~~     final_job_name: forge-skeleton-20260428-153825
~~     manifest_file: /logs/artifacts/001__submit_and_wait/src/forge-skeleton-20260428-153825-manifest.yaml
~~
~~ EXCEPTION: RuntimeError
~~     Job forge-skeleton-20260428-153825 failed: Forge resolution failed: Job has reached the specified backoff limit
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


[...]

Execution logs

@psap-forge-bot
Copy link
Copy Markdown

🟢 Test of 'skeleton test' succeeded after 00 hours 00 minutes 38 seconds 🟢

• Link to the test results.

• No reports index generated...

• No test configuration (variable_overrides.yaml) available.
Execution logs

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 28, 2026

/test fournos skeleton
/cluster psap-mgmt
/var fournos.namespace: psap-automation-wip

@psap-forge-bot
Copy link
Copy Markdown

🟢 Test of 'skeleton test' succeeded after 00 hours 00 minutes 38 seconds 🟢

• Link to the test results.

• No reports index generated...

• No test configuration (variable_overrides.yaml) available.
Execution logs

@psap-forge-bot
Copy link
Copy Markdown

🟢 Test of 'fournos_launcher submit' succeeded after 00 hours 01 minutes 28 seconds 🟢

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster psap-mgmt
/var fournos.namespace: psap-automation-wip

Execution logs

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 28, 2026

/test fournos skeleton
/cluster psap-mgmt
/var fournos.namespace: psap-automation-wip

@psap-forge-bot
Copy link
Copy Markdown

🟢 Test of 'skeleton test' succeeded after 00 hours 00 minutes 38 seconds 🟢

• Link to the test results.

• No reports index generated...

• No test configuration (variable_overrides.yaml) available.
Execution logs

@psap-forge-bot
Copy link
Copy Markdown

🟢 Test of 'fournos_launcher submit' succeeded after 00 hours 01 minutes 26 seconds 🟢

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster psap-mgmt
/var fournos.namespace: psap-automation-wip

Execution logs

@kpouget kpouget force-pushed the fournos branch 2 times, most recently from f0b92d7 to afb77e9 Compare April 28, 2026 18:52
@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 28, 2026

/test fournos skeleton
/cluster psap-mgmt
/var fournos.namespace: psap-automation-wip

@psap-forge-bot
Copy link
Copy Markdown

🟢 Test of 'skeleton test' succeeded after 00 hours 00 minutes 38 seconds 🟢

• Link to the test results.

• No reports index generated...

• No test configuration (variable_overrides.yaml) available.
Execution logs

@psap-forge-bot
Copy link
Copy Markdown

🟢 Test of 'fournos_launcher submit' succeeded after 00 hours 01 minutes 28 seconds 🟢

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster psap-mgmt
/var fournos.namespace: psap-automation-wip

Execution logs

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 28, 2026

/test fournos skeleton
/cluster psap-mgmt
/var fournos.namespace: psap-automation-wip

@psap-forge-bot
Copy link
Copy Markdown

🟢 Test of 'skeleton test' succeeded after 00 hours 00 minutes 38 seconds 🟢

• Link to the test results.

• No reports index generated...

• No test configuration (variable_overrides.yaml) available.
Execution logs

@psap-forge-bot
Copy link
Copy Markdown

🟢 Test of 'fournos_launcher submit' succeeded after 00 hours 01 minutes 28 seconds 🟢

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster psap-mgmt
/var fournos.namespace: psap-automation-wip

Execution logs

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 28, 2026

looks good, merging

@kpouget kpouget merged commit 22be6f9 into openshift-psap:main Apr 28, 2026
6 of 7 checks passed
@kpouget kpouget deleted the fournos branch April 28, 2026 19:20
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.

1 participant