Skip to content

Add MR approval rules automation from group.yml mr_approvers#2691

Merged
openshift-merge-bot[bot] merged 5 commits intoopenshift-eng:mainfrom
ashwindasr:add-mr-approvers-support
Apr 1, 2026
Merged

Add MR approval rules automation from group.yml mr_approvers#2691
openshift-merge-bot[bot] merged 5 commits intoopenshift-eng:mainfrom
ashwindasr:add-mr-approvers-support

Conversation

@ashwindasr
Copy link
Copy Markdown
Contributor

@ashwindasr ashwindasr commented Apr 1, 2026

Summary

  • Adds set_mr_approval_rules() method to GitLabClient that configures MR-level approval rules using the python-gitlab library
  • Adds _load_mr_approvers_from_group_config() to release_from_fbc.py to read the new mr_approvers field from group.yml via doozer
  • Hooks approval rule setup into create_shipment_mr() — after MR creation, it keeps the ART group, removes all other inherited groups, and creates new ones from config
  • Adds mr_approvers to the assembly_group_config.schema.json allowed properties

How it works

  1. group.yml in ocp-build-data defines mr_approvers with group names mapping to GitLab usernames
  2. After a shipment MR is created, the pipeline reads this config via doozer config:read-group mr_approvers
  3. The pipeline removes all non-ART approval rules and creates new ones per the config
  4. Each username is resolved to a GitLab user ID before creating the rule

Example group.yml config

mr_approvers:
  QE:
    - user1
    - user2

Test run works: https://gitlab.cee.redhat.com/hybrid-platforms/art/ocp-shipment-data/-/merge_requests/454

Test plan

  • All 18 test_release_from_fbc.py tests pass
  • All 74 ocp-build-data-validator tests pass
  • Lint and format checks pass
  • Test with logging-6.5 group (companion ocp-build-data PR)

Made with Cursor

After creating shipment MRs in release-from-fbc, configure MR-level
approval rules based on the new mr_approvers field in group.yml.
Keeps the ART approval group, removes all other inherited groups,
and creates new groups from the config (e.g. QE with specified users).

- Add set_mr_approval_rules() to GitLabClient
- Add _load_mr_approvers_from_group_config() to release_from_fbc
- Allow mr_approvers in group.yml JSON schema

Made-with: Cursor
Entire-Checkpoint: 294324b32f50

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 1, 2026

Important

Review skipped

Auto reviews are limited based on label configuration.

🚫 Review skipped — only excluded labels are configured. (1)
  • do-not-merge/work-in-progress

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 05745b97-92cc-46c1-9841-de86e5cc4c10

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

Adds GitLab MR approval-rule management: new username-to-ID resolution and MR-approval-rule setter on the GitLab client; schema accepts mr_approvers; release pipeline reads group mr_approvers and invokes approval-rule setup after MR creation (errors are logged and ignored).

Changes

Cohort / File(s) Summary
GitLab Client Approval Rules
artcommon/artcommonlib/gitlab.py
Added _resolve_user_ids(usernames: list[str]) -> list[int] and set_mr_approval_rules(mr_url: str, approvers_config: dict[str, list[str]]). Handles dry-run, preserves "ART" rule, deletes other rules, resolves usernames to IDs, and creates approval rules with approvals_required: 1.
Assembly Group Config Schema
ocp-build-data-validator/validator/json_schemas/assembly_group_config.schema.json
Added top-level mr_approvers property: an object whose keys map to arrays of strings. Top-level additionalProperties: false remains.
Release Pipeline Integration
pyartcd/pyartcd/pipelines/release_from_fbc.py
Added _load_mr_approvers_from_group_config() to read/parse mr_approvers via doozer. create_shipment_mr() loads approvers and, unless dry_run, calls set_mr_approval_rules() inside a try/except so failures only warn and do not stop MR creation.
Tests (async GitLab behavior)
pyartcd/tests/pipelines/test_release_from_fbc.py
Added async tests for loading mr_approvers, for create_shipment_mr() behavior around calling set_mr_approval_rules() (dry-run and non-dry-run), and for GitLabClient.set_mr_approval_rules() (deletion/creation paths and resolver edge cases). Mocks updated to use AsyncMock/asyncio patterns.

Sequence Diagram

sequenceDiagram
    participant Pipeline as ReleaseFromFbcPipeline
    participant Doozer as Doozer Config
    participant Client as GitLabClient
    participant GitLabAPI as GitLab API

    Pipeline->>Doozer: read-group mr_approvers for group
    Doozer-->>Pipeline: approvers_config (YAML/dict)

    Pipeline->>Client: set_mr_approval_rules(mr_url, approvers_config)
    Client->>GitLabAPI: GET MR details (including approval_rules)
    GitLabAPI-->>Client: MR + approval_rules

    Client->>Client: identify non-"ART" rules
    Client->>GitLabAPI: DELETE approval rules (non-ART)
    GitLabAPI-->>Client: deletion responses

    loop resolve usernames
      Client->>GitLabAPI: GET user by username
      GitLabAPI-->>Client: user info / ID
    end

    Client->>GitLabAPI: POST create approval rules with user_ids
    GitLabAPI-->>Client: creation responses
    Client-->>Pipeline: completion / status
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

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

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

Copy link
Copy Markdown
Contributor

@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)
ocp-build-data-validator/validator/json_schemas/assembly_group_config.schema.json (1)

562-562: Consider adding schema constraints for mr_approvers structure.

The mr_approvers property is defined as a bare object type without constraining its structure. According to the PR objectives, this should be a mapping from approval group names to arrays of GitLab usernames (e.g., {"QE": ["user1", "user2"]}).

A more precise schema would help catch configuration errors at validation time rather than at runtime.

♻️ Proposed schema enhancement
-    "mr_approvers": {"type": "object"}
+    "mr_approvers": {
+      "type": "object",
+      "additionalProperties": {
+        "type": "array",
+        "items": {"type": "string"}
+      }
+    }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@ocp-build-data-validator/validator/json_schemas/assembly_group_config.schema.json`
at line 562, The mr_approvers property is currently an unconstrained object;
change its schema so mr_approvers is an object mapping approval group names to
arrays of GitLab usernames by replacing the bare {"type": "object"} with an
object schema that uses patternProperties (or properties) to allow string keys
(e.g., "^[A-Za-z0-9_ -]+$") whose values are arrays of strings, enforce items as
{"type":"string"}, and set additionalProperties appropriately (false or the same
schema) so only that mapping is allowed; update the mr_approvers schema entry
and any references to ensure validation will require arrays of usernames for
each group name.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@artcommon/artcommonlib/gitlab.py`:
- Around line 139-154: The dry-run branch currently calls
get_mr_from_url(mr_url) before checking self.dry_run, causing unnecessary API
calls and failures with placeholder URLs; move the self.dry_run check up so that
if self.dry_run is true you log the planned deletions/creations and return
without calling get_mr_from_url or accessing mr.approval_rules; specifically,
check self.dry_run immediately after validating mr_url and approvers_config (or
even before) and keep the existing dry-run logging that iterates
approvers_config and counts existing_rules (you may need to retrieve
existing_rules only when not in dry-run).

In `@pyartcd/pyartcd/pipelines/release_from_fbc.py`:
- Around line 621-628: The dry-run fails because set_mr_approval_rules(mr_url,
approvers_config) resolves the MR from mr_url before honoring dry_run; change
the logic in the block that gets approvers_config (using
_load_mr_approvers_from_group_config) to first check self.dry_run and, if true,
skip calling self._gitlab.set_mr_approval_rules and instead log the
approvers_config (or intended rule changes) for dry-run output; when not
dry_run, call self._gitlab.set_mr_approval_rules(mr_url, approvers_config)
inside the try/except as before to preserve error handling.
- Around line 252-266: The parsed YAML from stdlib_yaml.safe_load in
_load_mr_approvers_from_group_config may not be a dict; after loading, validate
that the result is an instance of dict (and its keys/values are the expected
types if needed), and if it isn't, log a warning via self.logger.warning
mentioning the unexpected type and return an empty dict so callers like
set_mr_approval_rules() always receive a dict; keep the existing exception
handling but ensure non-dict safe_load results are handled explicitly before
returning.

---

Nitpick comments:
In
`@ocp-build-data-validator/validator/json_schemas/assembly_group_config.schema.json`:
- Line 562: The mr_approvers property is currently an unconstrained object;
change its schema so mr_approvers is an object mapping approval group names to
arrays of GitLab usernames by replacing the bare {"type": "object"} with an
object schema that uses patternProperties (or properties) to allow string keys
(e.g., "^[A-Za-z0-9_ -]+$") whose values are arrays of strings, enforce items as
{"type":"string"}, and set additionalProperties appropriately (false or the same
schema) so only that mapping is allowed; update the mr_approvers schema entry
and any references to ensure validation will require arrays of usernames for
each group name.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 55f9ab7e-f5f2-4666-9e35-c921cfeeb6c2

📥 Commits

Reviewing files that changed from the base of the PR and between f5608b1 and 668abd1.

📒 Files selected for processing (3)
  • artcommon/artcommonlib/gitlab.py
  • ocp-build-data-validator/validator/json_schemas/assembly_group_config.schema.json
  • pyartcd/pyartcd/pipelines/release_from_fbc.py

…config type

Made-with: Cursor
Entire-Checkpoint: 8bd955d7c36e

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
@fbladilo
Copy link
Copy Markdown
Contributor

fbladilo commented Apr 1, 2026

@ashwindasr Can we add some unit testing ?

Made-with: Cursor
Entire-Checkpoint: d25ca434a58e

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
…raints

Made-with: Cursor
Entire-Checkpoint: f1c325f6c2ec

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
Copy link
Copy Markdown
Contributor

@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.

Caution

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

⚠️ Outside diff range comments (1)
pyartcd/tests/pipelines/test_release_from_fbc.py (1)

1-524: ⚠️ Potential issue | 🟡 Minor

Run ruff format on this file before merging.

unit-tests is currently red because ruff format --check wants to rewrite pyartcd/tests/pipelines/test_release_from_fbc.py.

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

In `@pyartcd/tests/pipelines/test_release_from_fbc.py` around lines 1 - 524, The
file pyartcd.tests.pipelines.test_release_from_fbc has formatting issues flagged
by ruff; run "ruff format" (or your project's formatting step) on that file and
commit the changes so tests and CI pass. Specifically, format the test file
containing classes TestReleaseFromFbcPipeline, TestNormalizeReleaseDate,
TestTargetReleaseDate, TestLoadMrApproversFromGroupConfig,
TestCreateShipmentMrApprovalRules, and TestSetMrApprovalRules, then re-run
ruff/CI to ensure the formatter complaints are resolved. Ensure only formatting
changes are committed (no logic edits) and push the updated file.
🧹 Nitpick comments (3)
pyartcd/tests/pipelines/test_release_from_fbc.py (3)

502-523: Verify the created approval-rule payloads, not just the count.

call_count == 2 still passes if both calls use the wrong group name or wrong user_ids. Pinning the exact payloads makes this test much better at catching regressions.

📌 Example tightening
-from unittest.mock import AsyncMock, MagicMock, patch
+from unittest.mock import AsyncMock, MagicMock, call, patch
...
-        self.assertEqual(mock_mr.approval_rules.create.call_count, 2)
+        mock_mr.approval_rules.create.assert_has_calls(
+            [
+                call({"name": "QE", "approvals_required": 1, "user_ids": [1, 2]}),
+                call({"name": "Dev", "approvals_required": 1, "user_ids": [3]}),
+            ],
+            any_order=True,
+        )
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pyartcd/tests/pipelines/test_release_from_fbc.py` around lines 502 - 523, The
test currently only checks mock_mr.approval_rules.create.call_count; instead
assert the actual payloads passed to approval_rules.create from
client.set_mr_approval_rules by inspecting
mock_mr.approval_rules.create.call_args_list (or using
unittest.mock.assert_has_calls) and verify one call contains group_name "QE"
with user_ids [1, 2] and another contains group_name "Dev" with user_ids [3];
allow either call order (any_order=True) so the test fails if wrong group names
or wrong user_ids are sent.

274-281: Add a malformed-YAML case here too.

This only covers cmd_gather_async() raising. The production helper also catches YAML parse failures, so a bad mr_approvers value in group.yml would still miss coverage.

🧪 Example addition
+    `@patch`("pyartcd.pipelines.release_from_fbc.stdlib_yaml.safe_load")
     `@patch`("pyartcd.pipelines.release_from_fbc.exectools.cmd_gather_async")
-    def test_exception_returns_empty(self, mock_cmd):
+    def test_yaml_parse_error_returns_empty(self, mock_cmd, mock_safe_load):
+        mock_cmd.return_value = (0, "QE: [", "")
+        mock_safe_load.side_effect = ValueError("invalid yaml")
+        pipeline = self._make_pipeline()
+        result = asyncio.get_event_loop().run_until_complete(
+            pipeline._load_mr_approvers_from_group_config()
+        )
+        self.assertEqual(result, {})
+
+    `@patch`("pyartcd.pipelines.release_from_fbc.exectools.cmd_gather_async")
+    def test_exception_returns_empty(self, mock_cmd):
         mock_cmd.side_effect = RuntimeError("doozer failed")
         pipeline = self._make_pipeline()
         result = asyncio.get_event_loop().run_until_complete(
             pipeline._load_mr_approvers_from_group_config()
         )
         self.assertEqual(result, {})
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pyartcd/tests/pipelines/test_release_from_fbc.py` around lines 274 - 281, Add
a second unit test alongside test_exception_returns_empty that exercises the
YAML-parse failure path of pipeline._load_mr_approvers_from_group_config: patch
pyartcd.pipelines.release_from_fbc.exectools.cmd_gather_async to return output
that simulates a group.yml containing malformed YAML (or set mock_cmd to raise
yaml.YAMLError) and assert the method returns {}. Reference the existing test
method name test_exception_returns_empty and the target method
_load_mr_approvers_from_group_config when adding the new test so the coverage
covers both cmd_gather_async exceptions and YAML parse errors.

380-401: Assert the warning side effect as well.

Right now this only proves the exception is swallowed. If the warning disappears, the test still passes even though create_shipment_mr() is supposed to log that failure path.

🪵 Example tightening
         mock_gitlab = MagicMock()
         mock_gitlab.set_mr_approval_rules = AsyncMock(side_effect=RuntimeError("API error"))
         pipeline.__dict__["_gitlab"] = mock_gitlab
+        pipeline.logger.warning = MagicMock()

         mr_url = asyncio.get_event_loop().run_until_complete(
             pipeline.create_shipment_mr({}, env="prod")
         )

         self.assertEqual(mr_url, mock_mr.web_url)
+        pipeline.logger.warning.assert_called_once()
+        self.assertIn(
+            "Failed to set MR approval rules",
+            pipeline.logger.warning.call_args.args[0],
+        )
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pyartcd/tests/pipelines/test_release_from_fbc.py` around lines 380 - 401,
Update the test_approval_rules_exception_logged_not_raised to also assert that
the failure is logged: mock or spy on the pipeline logger (e.g.,
pipeline.logger.warning or the specific logging method used by
create_shipment_mr) before calling create_shipment_mr, trigger the RuntimeError
via pipeline.__dict__['_gitlab'].set_mr_approval_rules as already done, then
assert the logger.warning (or the exact logging method) was called with a
message indicating the approval-rules setting failed; keep the existing MR URL
assertion intact so the test verifies both that the exception is swallowed and
that a warning was emitted.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@pyartcd/tests/pipelines/test_release_from_fbc.py`:
- Around line 1-524: The file pyartcd.tests.pipelines.test_release_from_fbc has
formatting issues flagged by ruff; run "ruff format" (or your project's
formatting step) on that file and commit the changes so tests and CI pass.
Specifically, format the test file containing classes
TestReleaseFromFbcPipeline, TestNormalizeReleaseDate, TestTargetReleaseDate,
TestLoadMrApproversFromGroupConfig, TestCreateShipmentMrApprovalRules, and
TestSetMrApprovalRules, then re-run ruff/CI to ensure the formatter complaints
are resolved. Ensure only formatting changes are committed (no logic edits) and
push the updated file.

---

Nitpick comments:
In `@pyartcd/tests/pipelines/test_release_from_fbc.py`:
- Around line 502-523: The test currently only checks
mock_mr.approval_rules.create.call_count; instead assert the actual payloads
passed to approval_rules.create from client.set_mr_approval_rules by inspecting
mock_mr.approval_rules.create.call_args_list (or using
unittest.mock.assert_has_calls) and verify one call contains group_name "QE"
with user_ids [1, 2] and another contains group_name "Dev" with user_ids [3];
allow either call order (any_order=True) so the test fails if wrong group names
or wrong user_ids are sent.
- Around line 274-281: Add a second unit test alongside
test_exception_returns_empty that exercises the YAML-parse failure path of
pipeline._load_mr_approvers_from_group_config: patch
pyartcd.pipelines.release_from_fbc.exectools.cmd_gather_async to return output
that simulates a group.yml containing malformed YAML (or set mock_cmd to raise
yaml.YAMLError) and assert the method returns {}. Reference the existing test
method name test_exception_returns_empty and the target method
_load_mr_approvers_from_group_config when adding the new test so the coverage
covers both cmd_gather_async exceptions and YAML parse errors.
- Around line 380-401: Update the
test_approval_rules_exception_logged_not_raised to also assert that the failure
is logged: mock or spy on the pipeline logger (e.g., pipeline.logger.warning or
the specific logging method used by create_shipment_mr) before calling
create_shipment_mr, trigger the RuntimeError via
pipeline.__dict__['_gitlab'].set_mr_approval_rules as already done, then assert
the logger.warning (or the exact logging method) was called with a message
indicating the approval-rules setting failed; keep the existing MR URL assertion
intact so the test verifies both that the exception is swallowed and that a
warning was emitted.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 30059c89-ac8f-4b74-9245-f4a930d1cb30

📥 Commits

Reviewing files that changed from the base of the PR and between a4076b7 and 07b9768.

📒 Files selected for processing (1)
  • pyartcd/tests/pipelines/test_release_from_fbc.py

Made-with: Cursor
Entire-Checkpoint: c13ead862949

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
Copy link
Copy Markdown
Contributor

@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.

🧹 Nitpick comments (1)
pyartcd/pyartcd/pipelines/release_from_fbc.py (1)

258-263: Consider adding --yaml flag for more robust parsing.

The config:read-group command without --yaml outputs print(str(value)), which for a dict produces Python repr syntax (e.g., {'QE': ['user1']}). While this happens to be valid YAML flow syntax, it's fragile. The utility function in pyartcd/util.py (lines 88-120) uses --yaml for the same command pattern.

♻️ Proposed fix to add --yaml flag for consistency
     async def _load_mr_approvers_from_group_config(self) -> dict[str, list[str]]:
         """
         Load the mr_approvers field from group configuration using doozer command.
         Returns a dict mapping approval group names to lists of GitLab usernames,
         e.g. {"QE": ["user1", "user2"]}. Returns empty dict if not configured.
         """
         try:
-            cmd = ['doozer', f'--group={self.group}', 'config:read-group', 'mr_approvers']
+            cmd = ['doozer', f'--group={self.group}', 'config:read-group', '--yaml', 'mr_approvers']
             _, output, _ = await exectools.cmd_gather_async(cmd)
             output = output.strip()
             if output and output not in ('None', 'null'):
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pyartcd/pyartcd/pipelines/release_from_fbc.py` around lines 258 - 263, The
code calls doozer without YAML output which can produce fragile Python repr;
update the command construction where cmd is built (the list containing
'doozer', f'--group={self.group}', 'config:read-group', 'mr_approvers') to
include the '--yaml' flag so exectools.cmd_gather_async returns proper YAML for
stdlib_yaml.safe_load; keep the rest of the logic (output.strip(), check for
'None'/'null', parsed = stdlib_yaml.safe_load(output)) unchanged and ensure this
change is made in the release_from_fbc pipeline code that uses self.group,
exectools.cmd_gather_async, and stdlib_yaml.safe_load.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@pyartcd/pyartcd/pipelines/release_from_fbc.py`:
- Around line 258-263: The code calls doozer without YAML output which can
produce fragile Python repr; update the command construction where cmd is built
(the list containing 'doozer', f'--group={self.group}', 'config:read-group',
'mr_approvers') to include the '--yaml' flag so exectools.cmd_gather_async
returns proper YAML for stdlib_yaml.safe_load; keep the rest of the logic
(output.strip(), check for 'None'/'null', parsed =
stdlib_yaml.safe_load(output)) unchanged and ensure this change is made in the
release_from_fbc pipeline code that uses self.group, exectools.cmd_gather_async,
and stdlib_yaml.safe_load.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1483a986-d604-45ed-b850-925b8eacdd82

📥 Commits

Reviewing files that changed from the base of the PR and between 07b9768 and 3eaaeee.

📒 Files selected for processing (4)
  • artcommon/artcommonlib/gitlab.py
  • ocp-build-data-validator/validator/json_schemas/assembly_group_config.schema.json
  • pyartcd/pyartcd/pipelines/release_from_fbc.py
  • pyartcd/tests/pipelines/test_release_from_fbc.py
✅ Files skipped from review due to trivial changes (1)
  • pyartcd/tests/pipelines/test_release_from_fbc.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • ocp-build-data-validator/validator/json_schemas/assembly_group_config.schema.json

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci bot commented Apr 1, 2026

@ashwindasr: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/security 5727840 link false /test security

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@fbladilo
Copy link
Copy Markdown
Contributor

fbladilo commented Apr 1, 2026

/approve

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci bot commented Apr 1, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: fbladilo

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

The pull request process is described 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

@openshift-ci openshift-ci bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Apr 1, 2026
@fbladilo
Copy link
Copy Markdown
Contributor

fbladilo commented Apr 1, 2026

/lgtm

@openshift-ci openshift-ci bot added the lgtm Indicates that a PR is ready to be merged. label Apr 1, 2026
@openshift-merge-bot openshift-merge-bot bot merged commit cacb810 into openshift-eng:main Apr 1, 2026
4 of 5 checks passed
fbladilo added a commit to fbladilo/ocp-build-data that referenced this pull request Apr 1, 2026
- QE: sshveta, istein, dymurray
- DOCS: anarnold

This enables automated GitLab MR approval rules for shipment MRs.
Related: openshift-eng/art-tools#2691

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
fbladilo added a commit to fbladilo/ocp-build-data that referenced this pull request Apr 1, 2026
- QE: sshveta, istein, dymurray
- DOCS: anarnold

This enables automated GitLab MR approval rules for shipment MRs.
Related: openshift-eng/art-tools#2691

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
fbladilo added a commit to fbladilo/ocp-build-data that referenced this pull request Apr 1, 2026
- QE: akarol
- DOCS: prajoshi

This enables automated GitLab MR approval rules for shipment MRs.
Related: openshift-eng/art-tools#2691

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
fbladilo added a commit to fbladilo/ocp-build-data that referenced this pull request Apr 1, 2026
- QE: akarol
- DOCS: prajoshi

This enables automated GitLab MR approval rules for shipment MRs.
Related: openshift-eng/art-tools#2691

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
fbladilo added a commit to fbladilo/ocp-build-data that referenced this pull request Apr 1, 2026
- QE: akarol
- DOCS: prajoshi

This enables automated GitLab MR approval rules for shipment MRs.
Related: openshift-eng/art-tools#2691

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
fbladilo added a commit to fbladilo/ocp-build-data that referenced this pull request Apr 1, 2026
- QE: istein, midays
- DOCS: anarnold

This enables automated GitLab MR approval rules for shipment MRs.
Related: openshift-eng/art-tools#2691

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
fbladilo added a commit to fbladilo/ocp-build-data that referenced this pull request Apr 1, 2026
- QE: akarol, prajoshi
- DOCS: anarnold

This enables automated GitLab MR approval rules for shipment MRs.
Related: openshift-eng/art-tools#2691

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
fbladilo added a commit to fbladilo/ocp-build-data that referenced this pull request Apr 1, 2026
- QE: akarol, prajoshi
- DOCS: anarnold

This enables automated GitLab MR approval rules for shipment MRs.
Related: openshift-eng/art-tools#2691

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
fbladilo added a commit to fbladilo/ocp-build-data that referenced this pull request Apr 1, 2026
- QE: akarol, prajoshi
- DOCS: anarnold

This enables automated GitLab MR approval rules for shipment MRs.
Related: openshift-eng/art-tools#2691

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
fbladilo added a commit to fbladilo/ocp-build-data that referenced this pull request Apr 1, 2026
- QE: akarol, prajoshi
- DOCS: anarnold

This enables automated GitLab MR approval rules for shipment MRs.
Related: openshift-eng/art-tools#2691

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. lgtm Indicates that a PR is ready to be merged.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants