Skip to content

[foreign_testing] New project to support foreign testing in FORGE#24

Merged
kpouget merged 15 commits intomainfrom
fournos-testing
Apr 14, 2026
Merged

[foreign_testing] New project to support foreign testing in FORGE#24
kpouget merged 15 commits intomainfrom
fournos-testing

Conversation

@kpouget
Copy link
Copy Markdown
Contributor

@kpouget kpouget commented Apr 13, 2026

Summary by CodeRabbit

  • Documentation

    • Added a comprehensive Foreign Testing guide with quick-start, config examples, CI invocation, project layout, and error messages.
  • New Features

    • New CLI commands to prepare and submit foreign-testing workflows and to import external projects into the test harness.
  • Bug Fixes

    • Improved GitHub token validation with early exit on failure; /test directive now tolerates a missing project token.
  • Chores

    • Added orchestration config and adjusted CI startup to perform preparation and clearer CI script executable checks.
  • Behavior

    • Notification rules updated to gate or force notifications for foreign-testing and related workflows.

@openshift-ci
Copy link
Copy Markdown

openshift-ci bot commented Apr 13, 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 sjmonson 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 13, 2026

Warning

Rate limit exceeded

@kpouget has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 51 minutes and 13 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 51 minutes and 13 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 2e716a79-2076-4457-b2a8-ef712dbb5dfc

📥 Commits

Reviewing files that changed from the base of the PR and between 652a460 and 3b0ab9a.

📒 Files selected for processing (1)
  • projects/core/library/config.py
📝 Walkthrough

Walkthrough

Adds a new foreign_testing project (CLI, orchestration, config, README) that clones external repos and maps project dirs into FORGE_HOME, refactors core CI startup/prepare behavior, and tightens GitHub notification token handling with early-exit on failure.

Changes

Cohort / File(s) Summary
New foreign_testing project
projects/foreign_testing/orchestration/ci.py, projects/foreign_testing/orchestration/foreign_testing.py, projects/foreign_testing/orchestration/config.yaml, projects/foreign_testing/README.md, projects/foreign_testing/orchestration/cli.py
Adds Click CLIs (main, submit), init/prepare/submit orchestration that clones a foreign repo, validates config/env, copies mapped project directories into ${FORGE_HOME}/projects, and provides config + README.
CI entrypoint core changes
projects/core/ci_entrypoint/run_ci.py, projects/core/ci_entrypoint/prepare_ci.py
Introduces prepare() and changes startup flow, signal handling, package-install gating, do_prepare_ci flag on execute_project_operation(), stricter CI script discovery (must be executable), removed fourn os→launcher remap, and adjusted notification gating behavior for specific projects (including foreign_testing).
GitHub notification handling
projects/core/notifications/github/api.py, projects/core/notifications/send.py
Adds upfront validation for missing "id" in installation response and returns early with logged error when user token retrieval fails before attempting to send notifications.
CLI imports & safe wrappers
projects/fournos_launcher/orchestration/ci.py, projects/llm_d/orchestration/ci.py, projects/llm_d/orchestration/cli.py, projects/skeleton/orchestration/ci.py
Removed unused stdlib imports, reorganized imports; applied safe_cli_command decorators to llm_d CLI subcommands; no signature changes.
PR args parsing tweak
projects/core/ci_entrypoint/github/pr_args.py
/test <name> parsing no longer errors when project token omitted; uses "project_not_set" as default project token.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant CLI as "foreign_testing CLI"
    participant Orch as "foreign_testing module"
    participant Git as "Git (clone/fetch)"
    participant FS as "Filesystem (FORGE_HOME)"
    participant RunCI as "run_ci.execute_project_operation"

    User->>CLI: run `ci submit`
    CLI->>Orch: init() / prepare()
    Orch->>Git: git clone <owner>/<repo>
    Orch->>Git: fetch <PR_SHA> && reset FETCH_HEAD
    Git-->>Orch: repo at PR_SHA
    Orch->>FS: copy mapped dirs -> ${FORGE_HOME}/projects/<name>
    Orch->>RunCI: execute_project_operation("fournos_deploy","ci",["deploy"],do_prepare_ci=False,verbose=True)
    RunCI-->>CLI: result / exit code
    CLI-->>User: exit code
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Poem

🐇 I nibble branches, copy paths at night,
I fetch the SHA and set the tree just right,
Env-vars checked, the mappings clear and neat,
Submit the job — hop! — CI will greet,
A carrot for logs, and tests all pass light.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 62.50% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: introduction of a new 'foreign_testing' project to support foreign testing in FORGE, which is the primary focus of all file changes.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fournos-testing

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.

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: 2

🤖 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/foreign_testing/orchestration/run.py`:
- Around line 5-12: The file imports projects.core.run as run but then defines a
local function run(), shadowing the module and causing run.init() to fail;
rename the imported module on import (e.g., import as core_run or
core_run_module) and update the call sites (change run.init() to
core_run.init()) so the env.init(), core_run.init(), and
config.init(pathlib.Path(__file__).parent) calls reference the module rather
than the newly defined run() function.

In `@projects/foreign_testing/README.md`:
- Around line 1-42: Update the README examples so they reference the correct
project name and CLI commands: replace occurrences of "skeleton" with
"foreign_testing" and change the example subcommands (currently
"prepare/test/cleanup") to match the Click commands exported by the Click group
in projects/foreign_testing/orchestration/ci.py (inspect the click.Group or
`@click.command` names in that file and use those exact tokens in the Quick Start
shells and any repeated examples on lines ~266-289).
🪄 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: ec95ce86-7188-4b24-b6c0-64426d3f67c4

📥 Commits

Reviewing files that changed from the base of the PR and between 75ad5c2 and 455bfe3.

📒 Files selected for processing (4)
  • projects/foreign_testing/README.md
  • projects/foreign_testing/orchestration/ci.py
  • projects/foreign_testing/orchestration/run.py
  • projects/foreign_testing/orchestration/test_skeleton.py

Comment thread projects/foreign_testing/orchestration/foreign_testing.py Outdated
Comment thread projects/foreign_testing/README.md Outdated
@kpouget kpouget force-pushed the fournos-testing branch 5 times, most recently from d11d513 to 427ccc9 Compare April 14, 2026 07: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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
projects/core/notifications/github/api.py (1)

25-36: ⚠️ Potential issue | 🟠 Major

Move JSON parsing inside a try/except block to handle non-JSON responses gracefully.

Line 27 calls installation_resp.json() before any error handling. If GitHub returns a non-JSON response (e.g., 404, 500, or rate-limit error with HTML), this raises an uncaught exception instead of returning None as the caller expects. The caller at send.py:94 checks if not user_token: to handle failures gracefully, but the unprotected JSON parse breaks that contract. Parse the response once inside a try/except that catches JSON decode errors, return None on failure, and log the HTTP status and body for debugging.

🛠️ Proposed fix
-    if "id" not in installation_resp.json():
-        logging.error("NO ID")
-        return None
-
-    try:
-        installation_id = installation_resp.json()["id"]
-    except Exception as e:
-        msg = f"Failed to get the user token: {e}"
-        logging.error(msg)
-        raise e
+    try:
+        installation_data = installation_resp.json()
+    except ValueError:
+        logging.error(
+            "Failed to decode installation response (%s): %s",
+            installation_resp.status_code,
+            installation_resp.text,
+        )
+        return None
+
+    installation_id = installation_data.get("id")
+    if not installation_id:
+        logging.error(
+            "Failed to fetch GitHub installation id (%s): %s",
+            installation_resp.status_code,
+            installation_resp.text,
+        )
+        return None
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@projects/core/notifications/github/api.py` around lines 25 - 36, The code
currently calls installation_resp.json() twice outside error handling; move the
JSON parsing into a single try/except that catches JSON decode errors (e.g.,
ValueError/JSONDecodeError), assign the parsed body to a local variable (e.g.,
data), and then check for "id" in that variable; on JSON parse failure or
missing "id" log the response status_code and response.text for debugging and
return None so callers (like send.py) get the expected None on failure; replace
references to installation_resp.json() with the parsed local variable and
rethrow only for unexpected exceptions if needed.
♻️ Duplicate comments (3)
projects/foreign_testing/README.md (3)

13-13: ⚠️ Potential issue | 🟡 Minor

Hyphenate “AI-focused” for correct grammar.

Suggested fix
-- **AI Platform Specificity**: OpenShift AI focused testing patterns
+- **AI Platform Specificity**: OpenShift AI-focused testing patterns
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@projects/foreign_testing/README.md` at line 13, Update the README line
containing the phrase "AI Platform Specificity: OpenShift AI focused testing
patterns" to use the grammatically correct hyphenated form "AI-focused" (i.e.,
change "AI focused" to "AI-focused") so the line reads "AI Platform Specificity:
OpenShift AI-focused testing patterns"; locate the string in the README and make
that single-word hyphenation change.

1-3: ⚠️ Potential issue | 🟠 Major

README usage is out of sync with the actual foreign_testing CLI.

The guide still documents skeleton and prepare/test/cleanup, but this project’s CLI wiring is foreign_testing with the run command. Following current examples will fail.

Suggested doc updates
-# Skeleton Project
+# foreign_testing Project

-./run_ci skeleton ci prepare
-./run_ci skeleton ci test
-./run_ci skeleton ci cleanup
+./run_ci foreign_testing ci run

-./run_ci skeleton ci --verbose test
+./run_ci foreign_testing ci --verbose run

-./run_ci skeleton ci --help
+./run_ci foreign_testing ci --help

-Each project should implement these standard phases:
-- **prepare** ...
-- **test** ...
-- **cleanup** ...
+This project currently exposes a single `run` command via `orchestration/ci.py`.

-./run_ci skeleton ci prepare
-./run_ci skeleton ci test
-./run_ci skeleton ci cleanup
+./run_ci foreign_testing ci run

Also applies to: 17-42, 54-61, 149-157, 266-290

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@projects/foreign_testing/README.md` around lines 1 - 3, Update the README to
match the actual CLI and commands: replace references to the old `skeleton`
project and the `prepare`/`test`/`cleanup` commands with the real CLI name
`foreign_testing` and its `run` command, and update any example usages, command
snippets, and docs in the referenced sections (around the top, mid, and later
blocks) so examples, flags, and workflows reflect `foreign_testing run` and its
current options/arguments.

17-25: ⚠️ Potential issue | 🟡 Minor

Add a language tag to the directory-tree fenced block.

Use text for the tree block to satisfy markdown linting.

Suggested fix
-```
+```text
 skeleton/
 ├── orchestration/
 │   └── ci.py          # Main CI script with Click-based CLI
 ...
-```
+```
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@projects/foreign_testing/README.md` around lines 17 - 25, The fenced
directory-tree block containing "skeleton/" (showing entries like
"orchestration/ci.py" and "README.md") should include a language tag to satisfy
markdown linting: change the opening fence from ``` to ```text so the block
becomes a ```text fenced block while keeping the same contents and closing
fence.
🤖 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/notifications/send.py`:
- Line 42: The line with logging.info in projects/core/notifications/send.py has
an unterminated string literal; update the logging.info call (the
logging.info(...) statement in send.py) to use a properly quoted string and
balanced parentheses (e.g., add the missing closing quote and parenthesis) so
the module can be parsed and imports will succeed.

---

Outside diff comments:
In `@projects/core/notifications/github/api.py`:
- Around line 25-36: The code currently calls installation_resp.json() twice
outside error handling; move the JSON parsing into a single try/except that
catches JSON decode errors (e.g., ValueError/JSONDecodeError), assign the parsed
body to a local variable (e.g., data), and then check for "id" in that variable;
on JSON parse failure or missing "id" log the response status_code and
response.text for debugging and return None so callers (like send.py) get the
expected None on failure; replace references to installation_resp.json() with
the parsed local variable and rethrow only for unexpected exceptions if needed.

---

Duplicate comments:
In `@projects/foreign_testing/README.md`:
- Line 13: Update the README line containing the phrase "AI Platform
Specificity: OpenShift AI focused testing patterns" to use the grammatically
correct hyphenated form "AI-focused" (i.e., change "AI focused" to "AI-focused")
so the line reads "AI Platform Specificity: OpenShift AI-focused testing
patterns"; locate the string in the README and make that single-word hyphenation
change.
- Around line 1-3: Update the README to match the actual CLI and commands:
replace references to the old `skeleton` project and the
`prepare`/`test`/`cleanup` commands with the real CLI name `foreign_testing` and
its `run` command, and update any example usages, command snippets, and docs in
the referenced sections (around the top, mid, and later blocks) so examples,
flags, and workflows reflect `foreign_testing run` and its current
options/arguments.
- Around line 17-25: The fenced directory-tree block containing "skeleton/"
(showing entries like "orchestration/ci.py" and "README.md") should include a
language tag to satisfy markdown linting: change the opening fence from ``` to
```text so the block becomes a ```text fenced block while keeping the same
contents and closing fence.
🪄 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: eeeda460-286e-40c6-9761-a4c075599c20

📥 Commits

Reviewing files that changed from the base of the PR and between 455bfe3 and d11d513.

📒 Files selected for processing (6)
  • projects/core/notifications/github/api.py
  • projects/core/notifications/send.py
  • projects/foreign_testing/README.md
  • projects/foreign_testing/orchestration/ci.py
  • projects/foreign_testing/orchestration/config.yaml
  • projects/foreign_testing/orchestration/foreign_testing.py
✅ Files skipped from review due to trivial changes (1)
  • projects/foreign_testing/orchestration/config.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
  • projects/foreign_testing/orchestration/ci.py

Comment thread projects/core/notifications/send.py Outdated
@kpouget kpouget force-pushed the fournos-testing branch 12 times, most recently from 12fb768 to 2f109f4 Compare April 14, 2026 11:29
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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
projects/llm_d/orchestration/cli.py (1)

27-31: ⚠️ Potential issue | 🟠 Major

Replace sys.exit(exit_code) with return exit_code in all four command handlers.

The safe_cli_command decorator expects command functions to return an exit code, which it then handles via sys.exit(). Calling sys.exit() directly inside the command bypasses the decorator's wrapper entirely, preventing it from owning the exit path and applying consistent error handling.

Update prepare (lines 27-31), test (36-40), pre_cleanup (45-49), and post_cleanup (54-58) to return the exit code instead of calling sys.exit() directly.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@projects/llm_d/orchestration/cli.py` around lines 27 - 31, The four CLI
handlers decorated with safe_cli_command (prepare, test, pre_cleanup,
post_cleanup) currently call sys.exit(exit_code) directly; change each to return
exit_code instead so the safe_cli_command wrapper can manage exiting and
consistent error handling—locate the functions prepare, test, pre_cleanup, and
post_cleanup and replace their sys.exit(...) calls with return exit_code.
♻️ Duplicate comments (1)
projects/foreign_testing/README.md (1)

1-42: ⚠️ Potential issue | 🟡 Minor

README still documents the skeleton project and the wrong CLI.

This file lives under projects/foreign_testing/, but the guide still tells users to run skeleton with prepare/test/cleanup. The actual entrypoint in projects/foreign_testing/orchestration/ci.py exposes submit, so anyone following these examples will invoke the wrong project and non-existent commands.

Also applies to: 54-61, 149-157, 266-289

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@projects/foreign_testing/README.md` around lines 1 - 42, The README
references the wrong project name and CLI commands—update all examples that
mention running "./run_ci skeleton ci prepare/test/cleanup" to use the actual
project entrypoint and command exposed by the orchestration CLI (replace
"skeleton" with "foreign_testing" and the "ci prepare/test/cleanup" sequence
with the "submit" command as implemented in orchestration/ci.py); ensure every
occurrence (including the quick-start examples and the other noted blocks)
consistently documents "./run_ci foreign_testing submit" (and any required args)
so docs match the actual CLI symbol `submit`.
🧹 Nitpick comments (1)
projects/core/ci_entrypoint/run_ci.py (1)

204-225: Remove the duplicate find_ci_script() definition.

This second copy overwrites the earlier find_ci_script() on Lines 180-202. They’re identical now, but keeping both makes future edits easy to desynchronize and hides which implementation is actually live.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@projects/core/ci_entrypoint/run_ci.py` around lines 204 - 225, There are two
identical definitions of find_ci_script() in the file which causes the later one
to overwrite the earlier; remove the duplicate function block so only a single
canonical find_ci_script() remains, keeping the original implementation (the
function that checks project_dir / "orchestration" / f"{operation}.py" and tests
exists + os.access(..., os.X_OK)) and ensure no other references rely on the
removed duplicate; after deletion, run tests/lint to confirm no unresolved
references.
🤖 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/github/pr_args.py`:
- Around line 72-75: The code is masking a missing project by setting
project_name = "project_not_set"; instead, when parts is empty set project_name
to None (or omit the field) or raise a dedicated validation error where
project-less directives are not allowed so callers can distinguish "absent" from
a real literal name. Update the branch that currently reads parts and assigns
project_name (the parts variable and project_name identifier in pr_args.py) to
either assign None when parts is falsy or raise a clear ValidationError (or
similar) at parse time, and ensure downstream code that expects a required
project (e.g., jump-ci handling) checks for None/raises rather than relying on
the sentinel string.

In `@projects/foreign_testing/orchestration/ci.py`:
- Around line 2-8: Replace the generic skeleton/template module docstring at the
top of the file with a concise description of this module's purpose for the
foreign_testing project: update the module-level docstring in
projects/foreign_testing/orchestration/ci.py to state that it contains CI
orchestration helpers and entrypoint logic for the foreign_testing project
(mentioning "foreign_testing" by name and summarizing its role), so stack
traces, editor hovers, and maintenance reflect the correct project.

In `@projects/foreign_testing/orchestration/foreign_testing.py`:
- Around line 29-32: The current checkout uses a fixed tmp_dest (tmp_dest =
f"/tmp/{repo_name}") which causes collisions and stale clones; change the
checkout to create an isolated temp directory (use tempfile.mkdtemp() or
tempfile.TemporaryDirectory()) and assign that to tmp_dest, then use the same
run.run calls (git clone, git -C "{tmp_dest}" fetch, reset) against that
generated tmp_dest and ensure the temp directory is removed/cleaned up after use
(or use TemporaryDirectory as a context manager) so each run gets its own
workspace for repo_name and pull_pull_sha.

---

Outside diff comments:
In `@projects/llm_d/orchestration/cli.py`:
- Around line 27-31: The four CLI handlers decorated with safe_cli_command
(prepare, test, pre_cleanup, post_cleanup) currently call sys.exit(exit_code)
directly; change each to return exit_code instead so the safe_cli_command
wrapper can manage exiting and consistent error handling—locate the functions
prepare, test, pre_cleanup, and post_cleanup and replace their sys.exit(...)
calls with return exit_code.

---

Duplicate comments:
In `@projects/foreign_testing/README.md`:
- Around line 1-42: The README references the wrong project name and CLI
commands—update all examples that mention running "./run_ci skeleton ci
prepare/test/cleanup" to use the actual project entrypoint and command exposed
by the orchestration CLI (replace "skeleton" with "foreign_testing" and the "ci
prepare/test/cleanup" sequence with the "submit" command as implemented in
orchestration/ci.py); ensure every occurrence (including the quick-start
examples and the other noted blocks) consistently documents "./run_ci
foreign_testing submit" (and any required args) so docs match the actual CLI
symbol `submit`.

---

Nitpick comments:
In `@projects/core/ci_entrypoint/run_ci.py`:
- Around line 204-225: There are two identical definitions of find_ci_script()
in the file which causes the later one to overwrite the earlier; remove the
duplicate function block so only a single canonical find_ci_script() remains,
keeping the original implementation (the function that checks project_dir /
"orchestration" / f"{operation}.py" and tests exists + os.access(..., os.X_OK))
and ensure no other references rely on the removed duplicate; after deletion,
run tests/lint to confirm no unresolved references.
🪄 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: 42bf4de9-5304-40e4-a895-471b832d4718

📥 Commits

Reviewing files that changed from the base of the PR and between d11d513 and 2f109f4.

📒 Files selected for processing (12)
  • projects/core/ci_entrypoint/github/pr_args.py
  • projects/core/ci_entrypoint/run_ci.py
  • projects/core/notifications/github/api.py
  • projects/core/notifications/send.py
  • projects/foreign_testing/README.md
  • projects/foreign_testing/orchestration/ci.py
  • projects/foreign_testing/orchestration/config.yaml
  • projects/foreign_testing/orchestration/foreign_testing.py
  • projects/fournos_launcher/orchestration/ci.py
  • projects/llm_d/orchestration/ci.py
  • projects/llm_d/orchestration/cli.py
  • projects/skeleton/orchestration/ci.py
✅ Files skipped from review due to trivial changes (3)
  • projects/llm_d/orchestration/ci.py
  • projects/skeleton/orchestration/ci.py
  • projects/fournos_launcher/orchestration/ci.py
🚧 Files skipped from review as they are similar to previous changes (2)
  • projects/core/notifications/github/api.py
  • projects/foreign_testing/orchestration/config.yaml

Comment thread projects/core/ci_entrypoint/github/pr_args.py
Comment thread projects/foreign_testing/orchestration/ci.py
Comment thread projects/foreign_testing/orchestration/foreign_testing.py Outdated
@kpouget kpouget force-pushed the fournos-testing branch 3 times, most recently from 4b3c590 to 8316115 Compare April 14, 2026 11:58
@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 14, 2026

/test fournos llm_d cks
/cluster cluster-1
/var prepare.namespace.name: kpouget-dash

@topsail-bot
Copy link
Copy Markdown

topsail-bot bot commented Apr 14, 2026

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

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos llm_d cks
/cluster cluster-1
/var prepare.namespace.name: kpouget-dash

Execution logs

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 14, 2026

/test fournos skeleton
/cluster cluster-1

@topsail-bot
Copy link
Copy Markdown

topsail-bot bot commented Apr 14, 2026

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

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster cluster-1

Failure indicator:

## /logs/artifacts/FAILURE 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
~~ projects/fournos_launcher/toolbox/submit_and_wait/main.py:161
~~ 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
~~     owner: FORGE/fournos-launcher
~~     display_name: Forge Job
~~     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":"2044034232103211008","prowjobid":"b6512870-6925-475f-bc82-909e0f1bcb08","refs":{"org":"openshift-psap","repo":"forge","repo_link":"https://github.com/openshift-psap/forge","base_ref":"main","base_sha":"33b97e1d2c1515e4386faf5468185d2068864a8b","base_link":"https://github.com/openshift-psap/forge/commit/33b97e1d2c1515e4386faf5468185d2068864a8b","pulls":[{"number":24,"author":"kpouget","sha":"8316115e448f65196b6415b52d9da55ce956269d","title":"[foreign_testing]
~~         New project to support foreign testing in FORGE","head_ref":"fournos-testing","link":"https://github.com/openshift-psap/forge/pull/24","commit_link":"https://github.com/openshift-psap/forge/pull/24/commits/8316115e448f65196b6415b52d9da55ce956269d","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:v20260408-3bbc91829","initupload":"us-docker.pkg.dev/k8s-infra-prow/images/initupload:v20260408-3bbc91829","entrypoint":"us-docker.pkg.dev/k8s-infra-prow/images/entrypoint:v20260408-3bbc91829","sidecar":"us-docker.pkg.dev/k8s-infra-prow/images/sidecar:v20260408-3bbc91829"},"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: '2044034232103211008'
~~       PULL_PULL_SHA: 8316115e448f65196b6415b52d9da55ce956269d
~~       PULL_NUMBER: '24'
~~       PULL_BASE_REF: main
~~       REPO_NAME: forge
~~       REPO_OWNER: openshift-psap
~~       PULL_BASE_SHA: 33b97e1d2c1515e4386faf5468185d2068864a8b
~~       PULL_TITLE: '[foreign_testing] New project to support foreign testing in FORGE'
~~       PULL_REFS: main:33b97e1d2c1515e4386faf5468185d2068864a8b,24:8316115e448f65196b6415b52d9da55ce956269d
~~       PULL_HEAD_REF: fournos-testing
~~     status_dest: /logs/artifacts
~~     artifact_dir: /logs/artifacts/001__submit_and_wait
~~ CONTEXT:
~~     final_job_name: forge-skeleton-20260414-124633
~~     manifest_file: /logs/artifacts/001__submit_and_wait/src/forge-skeleton-20260414-124633-manifest.yaml
~~
~~ EXCEPTION: RuntimeError
~~     Job forge-skeleton-20260414-124633 failed: Tasks Completed: 1 (Failed: 1, Cancelled 0), Skipped: 0
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


[...]

Execution logs

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 14, 2026

/test fournos skeleton
/cluster cluster-1

@topsail-bot
Copy link
Copy Markdown

topsail-bot bot commented Apr 14, 2026

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

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster cluster-1

Failure indicator:

## /logs/artifacts/FAILURE 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
~~ projects/fournos_launcher/toolbox/submit_and_wait/main.py:161
~~ 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
~~     owner: FORGE/fournos-launcher
~~     display_name: Forge Job
~~     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":"2044034984758480896","prowjobid":"aa24460b-27b8-439d-8af3-5cc8945a48c7","refs":{"org":"openshift-psap","repo":"forge","repo_link":"https://github.com/openshift-psap/forge","base_ref":"main","base_sha":"33b97e1d2c1515e4386faf5468185d2068864a8b","base_link":"https://github.com/openshift-psap/forge/commit/33b97e1d2c1515e4386faf5468185d2068864a8b","pulls":[{"number":24,"author":"kpouget","sha":"8316115e448f65196b6415b52d9da55ce956269d","title":"[foreign_testing]
~~         New project to support foreign testing in FORGE","head_ref":"fournos-testing","link":"https://github.com/openshift-psap/forge/pull/24","commit_link":"https://github.com/openshift-psap/forge/pull/24/commits/8316115e448f65196b6415b52d9da55ce956269d","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:v20260408-3bbc91829","initupload":"us-docker.pkg.dev/k8s-infra-prow/images/initupload:v20260408-3bbc91829","entrypoint":"us-docker.pkg.dev/k8s-infra-prow/images/entrypoint:v20260408-3bbc91829","sidecar":"us-docker.pkg.dev/k8s-infra-prow/images/sidecar:v20260408-3bbc91829"},"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: '2044034984758480896'
~~       PULL_PULL_SHA: 8316115e448f65196b6415b52d9da55ce956269d
~~       PULL_NUMBER: '24'
~~       PULL_BASE_REF: main
~~       REPO_NAME: forge
~~       REPO_OWNER: openshift-psap
~~       PULL_BASE_SHA: 33b97e1d2c1515e4386faf5468185d2068864a8b
~~       PULL_TITLE: '[foreign_testing] New project to support foreign testing in FORGE'
~~       PULL_REFS: main:33b97e1d2c1515e4386faf5468185d2068864a8b,24:8316115e448f65196b6415b52d9da55ce956269d
~~       PULL_HEAD_REF: fournos-testing
~~     status_dest: /logs/artifacts
~~     artifact_dir: /logs/artifacts/001__submit_and_wait
~~ CONTEXT:
~~     final_job_name: forge-skeleton-20260414-124852
~~     manifest_file: /logs/artifacts/001__submit_and_wait/src/forge-skeleton-20260414-124852-manifest.yaml
~~
~~ EXCEPTION: RuntimeError
~~     Job forge-skeleton-20260414-124852 failed: Tasks Completed: 1 (Failed: 1, Cancelled 0), Skipped: 0
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


[...]

Execution logs

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 14, 2026

/test fournos skeleton
/cluster cluster-1

@topsail-bot
Copy link
Copy Markdown

topsail-bot bot commented Apr 14, 2026

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

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster cluster-1

Failure indicator:

## /logs/artifacts/FAILURE 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
~~ projects/fournos_launcher/toolbox/submit_and_wait/main.py:161
~~ 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
~~     owner: FORGE/fournos-launcher
~~     display_name: Forge Job
~~     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":"2044035800558997504","prowjobid":"162b1d9d-8006-4251-8541-32c852c98063","refs":{"org":"openshift-psap","repo":"forge","repo_link":"https://github.com/openshift-psap/forge","base_ref":"main","base_sha":"33b97e1d2c1515e4386faf5468185d2068864a8b","base_link":"https://github.com/openshift-psap/forge/commit/33b97e1d2c1515e4386faf5468185d2068864a8b","pulls":[{"number":24,"author":"kpouget","sha":"652a460e00aae764bf70a356e48a728a2870baa0","title":"[foreign_testing]
~~         New project to support foreign testing in FORGE","head_ref":"fournos-testing","link":"https://github.com/openshift-psap/forge/pull/24","commit_link":"https://github.com/openshift-psap/forge/pull/24/commits/652a460e00aae764bf70a356e48a728a2870baa0","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:v20260408-3bbc91829","initupload":"us-docker.pkg.dev/k8s-infra-prow/images/initupload:v20260408-3bbc91829","entrypoint":"us-docker.pkg.dev/k8s-infra-prow/images/entrypoint:v20260408-3bbc91829","sidecar":"us-docker.pkg.dev/k8s-infra-prow/images/sidecar:v20260408-3bbc91829"},"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: '2044035800558997504'
~~       PULL_PULL_SHA: 652a460e00aae764bf70a356e48a728a2870baa0
~~       PULL_NUMBER: '24'
~~       PULL_BASE_REF: main
~~       REPO_NAME: forge
~~       REPO_OWNER: openshift-psap
~~       PULL_BASE_SHA: 33b97e1d2c1515e4386faf5468185d2068864a8b
~~       PULL_TITLE: '[foreign_testing] New project to support foreign testing in FORGE'
~~       PULL_REFS: main:33b97e1d2c1515e4386faf5468185d2068864a8b,24:652a460e00aae764bf70a356e48a728a2870baa0
~~       PULL_HEAD_REF: fournos-testing
~~     status_dest: /logs/artifacts
~~     artifact_dir: /logs/artifacts/001__submit_and_wait
~~ CONTEXT:
~~     final_job_name: forge-skeleton-20260414-125205
~~     manifest_file: /logs/artifacts/001__submit_and_wait/src/forge-skeleton-20260414-125205-manifest.yaml
~~
~~ EXCEPTION: RuntimeError
~~     Job forge-skeleton-20260414-125205 failed: Tasks Completed: 1 (Failed: 1, Cancelled 0), Skipped: 0
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


[...]

Execution logs

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 14, 2026

/test fournos skeleton
/cluster cluster-1

@topsail-bot
Copy link
Copy Markdown

topsail-bot bot commented Apr 14, 2026

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

• Link to the test results.

• No reports index generated...

Test configuration:

/test fournos skeleton
/cluster cluster-1

Execution logs

@kpouget
Copy link
Copy Markdown
Contributor Author

kpouget commented Apr 14, 2026

I merge this, the foreign testing work will continue on FOURNOS side
openshift-psap/fournos#30

@kpouget kpouget merged commit 5bbc721 into main Apr 14, 2026
3 of 4 checks passed
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