Repository navigation
Conversation
The matrix job names (test (22.x, 11)) change with the Node.js versions and contain a comma: neither a ruleset nor renovate-automerge's required_checks can list them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mend-hosted Renovate replaces the Dependabot version updates, with the renovate-triage, auto-approve and automerge workflows of algoan/private-actions v2.3.0 (hotfix flow off). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pre-merge checks:
|
There was a problem hiding this comment.
🟡 Changes recommended
The required test gate can pass despite failing matrix jobs because job-level continue-on-error masks failures, allowing ordinary PRs to merge with failing tests.
1 open issue
What changed in this PR
Replaces Dependabot version updates with Mend-hosted Renovate and adds CVSS-based security routing through shared actions. Package publishing remains manual.
Changes:
- Configures weekly dependency updates and immediate security fixes at the lowest fixing version.
- Adds security triage, auto-approval, patch-only automerge, and a stable
Testscheck. - Documents routing, repository setup, and release behavior.
| File | Description |
|---|---|
renovate.json |
Configures update schedules, grouping, and security-fix behavior. |
docs/RENOVATE.md |
Documents security routing, required settings, and manual releases. |
CONTRIBUTING.md |
Links to the dependency-update guide. |
.github/workflows/test-and-publish.yaml |
Adds the stable Tests matrix aggregation check. |
.github/workflows/renovate-triage.yml |
Adds CVSS scoring, Notion ticketing, and automerge dispatch. |
.github/workflows/renovate-automerge.yml |
Integrates guarded automerging for patch security fixes. |
.github/workflows/renovate-auto-approve.yml |
Adds automatic approval of Renovate commits. |
.github/dependabot.yml |
Removes Dependabot version-update configuration. |
Review effort: Balanced
Addresses review feedback from Copilot: algoan#822 (comment) test has continue-on-error, so needs.test.result is success even when a test fails: Tests reads the conclusion of each matrix job instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🟡 Changes recommended
The attempt-scoped query can let the required Tests check pass despite an unresolved matrix failure or fail after a successful matrix, so it must evaluate the latest result for each matrix job across all attempts.
1 open issue
1 resolved since last review
Review effort: Balanced
Addresses review feedback from @copilot-pull-request-reviewer: algoan#822 (comment) The attempt-scoped query let a partial rerun pass with a failed slot that was not rerun, and failed a rerun of Tests alone. filter=latest returns the latest run of every job across attempts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🔵 Needs a closer look
Privileged approval and bypass merging depend on unavailable private-actions v2.3.0 code, requiring human verification of head/author/check validation, secret access, and required approval and ruleset configuration.
No open issues 🎉
1 resolved since last review
Review effort: Balanced

Description
Sets up the shared Renovate security flow of
algoan/private-actions(renovate-security, pinned to v2.3.0), with the Mend-hosted Renovate app, and replaces the Dependabot version updates.renovate.json: Mend Renovate config (npm + github-actions), routine updates grouped weekly (Monday before 6am, Europe/Paris), security fixes at once at the lowest fixing version, weekly lockfile maintenance, Renovate's own automerge off. Security fixes userangeStrategy: bump(notpinas in the apps):@algoan/pubsubis a published library, an exact pin in itsdependencieswould be forced on every consumer..github/workflows/renovate-triage.yml,renovate-auto-approve.yml,renovate-automerge.yml: hotfix flow off,ecosystems: npm, Notion sub-teamBack.test-and-publish.yaml: newTestsjob that waits for the Node.js matrix. The matrix check names (test (22.x, 11)) contain a comma, whichrequired_checks(comma-separated) can't hold, and change with every Node.js bump. It is also the check to require in the ruleset..github/dependabot.ymlremoved, with its oldignoreentries (y18n, pino-pretty, ini: obsolete versions). Dependabot alerts stay on, they are a repo setting.docs/RENOVATE.md, linked fromCONTRIBUTING.md.flowchart TD PR[Renovate PR] --> T[renovate-triage<br/>max CVSS of the advisories fixed in package-lock.json] T -->|no advisory| N[auto-approve + 1 human review] T -->|CVSS < 4.0| M[needs-review + Notion ticket] T -->|CVSS ≥ 4.0| A[automerge + Notion ticket<br/>critical / P1 from 9.0] A -->|patch only, Tests + Socket green| MM[squash-merged on master by algoan-merger] A -->|minor / major| R[1 human review] MM --> P[manual run of Algoan PubSub Test and Publish Workflow<br/>semantic-release]After an automerge nothing is published: a merge on master only runs the tests; the fix reaches npm at the next manual run of Algoan PubSub Test and Publish Workflow (semantic-release:
fix(deps)gives a patch release).REPO_GHA_PATis not available to this repository (public; onlyPUBLIC_REPO_GHA_PATis). Every workflow checks out the privatealgoan/private-actionswith it: until the org secret is shared with this repo (or another token with read access to private-actions is used), triage, auto-approve and automerge fail at checkout.pull_request_targetwith secrets is fine here, the triage only runs forrenovate[bot]PRs and reads the PR head as git objects; the automerge also ignoresworkflow_runs from forks (a fork can name its branchrenovate/*). Workflow logs are public, as are the triage comments.testjob hascontinue-on-error: true: the CI workflow stays green when a test fails. The newTestsjob does not rely on it: it reads the conclusion of the latest run of every matrix job (jobs?filter=latest, across attempts) and fails if one of them failed. The manualpublishjob (needs: test) still runs after failed tests: worth removingcontinue-on-errorin a separate PR.package-lock.json.examples/google-pubsub/package-lock.jsonis ignored by Renovate (examples/is in its defaultignorePaths; Dependabot didn't cover it either), so the example's dependencies are not updated. No Dockerfile.required_checksrelies on the newTestsjob; if the ruleset lists the matrix jobs instead, they will need updating at each Node.js bump.workflow_dispatch, semantic-release) and never triggered by a merge (push to master only runs the tests), so automerge can't publish blindly.Before merging
REPO_GHA_PATwith this repository (ALGOAN_MERGER_APP_ID,ALGOAN_MERGER_PRIVATE_KEY,NOTION_TOKENare already available)TestsandSocket Security: Pull Request Alertsalgoan-mergerapp installed (org-wide) and bypass actor in pull requests only mode (org ruleset enforce main branch)After merging
Types of changes
Repository tooling only (CI and dependency updates), no package change.
🤖 Generated with Claude Code
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com