From 7f03f997b6a887fdcae25760166e79a5acab1260 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?oliver=20k=C3=B6nig?= Date: Thu, 16 Apr 2026 11:52:40 +0000 Subject: [PATCH 1/3] [ci] fix: retry apt-get installs to handle mirror sync failures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: oliver könig --- .github/actions/test-template/action.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/actions/test-template/action.yml b/.github/actions/test-template/action.yml index 891837d884..f42296e3fe 100644 --- a/.github/actions/test-template/action.yml +++ b/.github/actions/test-template/action.yml @@ -87,8 +87,11 @@ runs: shell: bash -x -e -u -o pipefail {0} if: ${{ contains(inputs.runner, 'gcp') }} run: | - apt-get update - apt-get install -y uuid-runtime + for i in 1 2 3; do + apt-get update && apt-get install -y uuid-runtime && break + echo "Attempt $i failed, retrying in 10s..." + sleep 10 + done - name: Docker system cleanup shell: bash From 95ccb87ef6669b0e9dd6433686322ae5e5af2658 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?oliver=20k=C3=B6nig?= Date: Thu, 16 Apr 2026 12:04:00 +0000 Subject: [PATCH 2/3] ci: add contributing skill documenting PR title convention MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: oliver könig --- .claude/skills/contributing/SKILL.md | 61 ++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .claude/skills/contributing/SKILL.md diff --git a/.claude/skills/contributing/SKILL.md b/.claude/skills/contributing/SKILL.md new file mode 100644 index 0000000000..89ab27a0a5 --- /dev/null +++ b/.claude/skills/contributing/SKILL.md @@ -0,0 +1,61 @@ +--- +name: contributing +description: Contribution conventions for NeMo-RL. Covers PR title format, commit sign-off, and CI triggering. Auto-invoked during code review. +--- + +# Contributing Conventions + +## PR Title Format + +PR titles **must** follow the [Conventional Commits](https://www.conventionalcommits.org/) spec. This is enforced by the `semantic-pull-request` CI check. + +``` +[optional scope]: +``` + +Allowed types: + +| Type | When to use | +|------|-------------| +| `feat` | New feature | +| `fix` | Bug fix | +| `ci` | CI/CD changes | +| `docs` | Documentation only | +| `refactor` | Code restructuring without behaviour change | +| `test` | Adding or fixing tests | +| `chore` | Maintenance (deps, configs, tooling) | +| `perf` | Performance improvement | +| `build` | Build system changes | +| `revert` | Reverts a previous commit | + +**Do:** +``` +ci: retry apt-get installs to handle mirror sync failures +feat(grpo): add dataclass config defaults infrastructure +fix: preserve RAY_EXPERIMENTAL_NOSET_CUDA_VISIBLE_DEVICES +``` + +**Don't:** +``` +[ci] fix: retry apt-get installs ← area tags are not part of this convention +Update stuff +Fix bug +``` + +## Commit Sign-off + +All commits must be signed off with `-s`: + +```bash +git commit -s -m "fix: correct reward normalization" +``` + +## CI Triggering + +After pushing, trigger CI with: + +``` +/ok to test +``` + +Use `git rev-parse HEAD` (not the short form) to get the full SHA. From 631d8a06739f65f738e87364de1beb3ea94e86ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?oliver=20k=C3=B6nig?= Date: Thu, 16 Apr 2026 12:09:03 +0000 Subject: [PATCH 3/3] ci: pass quality gate when test_level is none (lint-only PRs) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: oliver könig --- .github/workflows/cicd-main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cicd-main.yml b/.github/workflows/cicd-main.yml index dea32c9f3b..3e859a7dc1 100644 --- a/.github/workflows/cicd-main.yml +++ b/.github/workflows/cicd-main.yml @@ -459,10 +459,10 @@ jobs: needs.lint-check.result == 'success' && (needs.pr-branch-up-to-date-check.result == 'success' || needs.pr-branch-up-to-date-check.result == 'skipped') && ( - needs.pre-flight.outputs.test_level != 'none' && - needs.sphinx-build.result == 'success' && - (needs.build-container.result == 'success' || needs.build-container.result == 'skipped') && + needs.pre-flight.outputs.test_level == 'none' || ( + needs.sphinx-build.result == 'success' && + (needs.build-container.result == 'success' || needs.build-container.result == 'skipped') && ( (needs.cicd-doc-tests.result == 'success' || needs.cicd-doc-tests.result == 'skipped') && (needs.cicd-unit-tests.result == 'skipped' || needs.cicd-unit-tests.result == 'success') &&