Skip to content

feat(dockerhub): add Docker Hub plugin - #482

Open
Mayank-saraswal wants to merge 21 commits into
corsairdev:mainfrom
Mayank-saraswal:feat/docker_hub-plugin
Open

feat(dockerhub): add Docker Hub plugin#482
Mayank-saraswal wants to merge 21 commits into
corsairdev:mainfrom
Mayank-saraswal:feat/docker_hub-plugin

Conversation

@Mayank-saraswal

@Mayank-saraswal Mayank-saraswal commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Description

Adds a first-class Docker Hub plugin (@corsair-dev/dockerhub, package folder dockerhub, OSS slug docker_hub) for Docker Hub API v2: repositories, tags, images, organizations, teams, and repository webhook REST surfaces claimed on the OSS dashboard.

Closes #481

What was built

  • Auth: API Key (Personal Access Token as Authorization: Bearer); optional username for JWT exchange on create-org
  • 26 operations across repositories, tags, images, organizations, teams, webhooks (REST)
  • Base: https://hub.docker.com/v2
  • Zod input schemas, error handlers (429 + AUTH + DEFAULT last), kebab-case layout
  • Offline tests: 43 schema + handler path fixtures; live demo for R4

Scope (R1)

  • packages/dockerhub/**
  • packages/corsair/core/constants.ts (registration + display name Docker Hub)
  • pnpm-lock.yaml

Checklist

  • I have run pnpm lint and all checks pass
  • I have run pnpm typecheck and there are no TypeScript errors
  • I have run pnpm build and all packages build successfully
  • I have run pnpm test and all tests pass
  • I have added or updated tests where applicable
  • I have added or updated necessary documentation

Screenshots / Demos (if applicable)

R4 Loom (offline tests + live public Hub demo):
https://www.loom.com/share/8321f25934ef45a2bf0bfd23dbd1f7f0

pnpm --filter @corsair-dev/dockerhub test
pnpm --filter @corsair-dev/dockerhub demo

Additional Notes

  • OSS claim: https://corsair.dev/oss/docker_hub
  • No inbound Corsair webhooks (0 on claim); repo webhook CRUD is REST only
  • Public library/* GETs work without a token; PAT for private/write/org ops
  • Safe logging: hook URLs / tokens redacted in event payloads

Summary by CodeRabbit

  • New Features
    • Added Docker Hub integration for repositories, tags, images, organizations, teams, and webhooks.
    • Added API-key and JWT authentication support with rate-limit and authorization error handling.
    • Added Docker Hub to the provider catalog.
  • Documentation
    • Added usage guidance, examples, and a runnable demo.
  • Tests
    • Added schema, endpoint, handler, and optional live API tests.
  • Chores
    • Added package build, testing, and configuration setup.

Implement @corsair-dev/dockerhub for Hub API v2: repositories, tags,
images, organizations, teams, and repository webhooks. Auth via Personal
Access Token (Bearer); optional JWT login for create org. Closes corsairdev#481
after Loom + PR.
@vercel

vercel Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

@Mayank-saraswal is attempting to deploy a commit to the corsair Team on Vercel.

A member of the Team first needs to authorize it.

@github-actions github-actions Bot added core Changes in packages/corsair docs Docs / Mintlify / markdown changes labels Jul 20, 2026
@greptile-apps

greptile-apps Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR introduces a complete Docker Hub plugin (@corsair-dev/dockerhub) covering 26 REST operations across repositories, tags, images, organizations, teams, and webhooks, backed by Docker Hub API v2. The implementation follows the established plugin structure with Zod input/output schemas, a dedicated error-handler chain (429 → AUTH → DEFAULT), and an optional JWT upgrade path for org creation.

  • 26 endpoints implemented and registered in constants.ts; all have corresponding handler-path tests in handlers.test.ts and schema-fixture tests in api.test.ts.
  • Two previously flagged bugs are fixed: imagesGet now always scans from page 1 (the page field was removed from its input schema), and webhooksCreate rolls back the orphaned pipeline entry if the hook-URL attachment step fails.
  • The scope is correctly confined to packages/dockerhub/**, packages/corsair/core/constants.ts, and pnpm-lock.yaml per R1.

Confidence Score: 5/5

Safe to merge. All 26 endpoints are implemented, tested, and scoped correctly within the plugin boundary.

The two substantive bugs caught in the prior review round have both been corrected. The implementation follows plugin conventions throughout — error handler chain, Zod validation, pagination on list endpoints, no hardcoded secrets, no boilerplate residue.

Files Needing Attention: handlers.test.ts — the organizations.create test assertion could be tightened; not a blocker.

Important Files Changed

Filename Overview
packages/dockerhub/endpoints/images.ts imagesGet now correctly scans from page 1 with pageSize-only control; imagesDelete guards against the library namespace.
packages/dockerhub/endpoints/webhooks.ts Two-step webhook create now has rollback on hook-URL attachment failure. All four webhook endpoints are correct.
packages/dockerhub/endpoints/types.ts All 26 input/output schemas defined; ImagesGetInputSchema correctly exposes pageSize only.
packages/dockerhub/client.ts HTTP helper correctly sets Bearer auth, handles okOn404 for idempotent deletes, and wraps non-ApiErrors.
packages/dockerhub/error-handlers.ts Three-handler chain (RATE_LIMIT_ERROR, AUTH_ERROR, DEFAULT) covers 429, 401/403, and default fallback.
packages/dockerhub/handlers.test.ts All 26 endpoints now have handler path tests; organizations.create assertion is weak.
packages/dockerhub/endpoints/organizations.ts JWT-to-PAT fallback for org create is correctly scoped and commented.
packages/dockerhub/index.ts Plugin registration complete with all 26 endpoints, riskLevel metadata, keyBuilder, and merged errorHandlers.
packages/corsair/core/constants.ts dockerhub correctly inserted into BaseProviders, ProviderDisplayNames, and AllProviders with display name Docker Hub.

Reviews (16): Last reviewed commit: "Merge branch 'main' into feat/docker_hub..." | Re-trigger Greptile

Comment thread packages/dockerhub/endpoints/types.ts
Comment thread packages/dockerhub/endpoints/images.ts Outdated
@github-actions

Copy link
Copy Markdown

Plugin PR scorecard — packages/dockerhub

Check Status Notes
R1 — Scope: plugin files only
R2 — Tests with assertions
R3 — Description complete
R3 — Linked issue / claim
R4 — Demo video / recording

Rules: PLUGIN_PR_RULES.md · re-runs on every push

@github-actions

Copy link
Copy Markdown

Hey @Mayank-saraswal, thanks for the contribution! 🏴‍☠️ Before a maintainer reviews, please fix the items below — the review re-runs automatically on your next push.

Must fix

  • P1 packages/dockerhub/endpoints/types.ts:91ImagesGetInputSchema inherits page from ...pageFields, but the implementation in images.ts uses `input.page ?? 1

const ImagesGetInputSchema = z.object({
namespace: z.string(),
name: z.string(),
digest: z.string(),
pageSize: z.number().int().positive().max(100).optional(),
});


**Rule Used:** Every endpoint must validate inputs and outputs wi... ([source](greptile.json))
- **P1** `packages/dockerhub/endpoints/images.ts:83` — **This line uses `input.page ?? 1` as the initial tag-page number for the scan. Because `page` is exposed in the input sch**
  ```suggestion
	const pageSize = input.pageSize ?? 100;
	let pageNum = 1;

Rule Used: Every endpoint must validate inputs and outputs wi... (source)

If anything remains after your next push, a bot commit will clean it up; a maintainer always does the final review and merge.

@github-actions github-actions Bot added the bot:round-1 Review bot posted consolidated findings label Jul 20, 2026
Greptile P1: ImagesGetInputSchema no longer exposes page (only pageSize).
Handler always starts the digest scan at page 1 so callers cannot skip
early tags. Also repair pnpm-lock importer snapshot after main merge.
@github-actions github-actions Bot added the bot:round-2 Review bot pushed an automated fix label Jul 20, 2026
@github-actions

Copy link
Copy Markdown

Remaining findings are being fixed by a bot commit — it will be re-reviewed automatically.

@github-actions

Copy link
Copy Markdown

Maintainer review needed

Automated rounds are exhausted. Remaining findings:

  • P1 packages/dockerhub/endpoints/types.ts:92ImagesGetInputSchema inherits page from ...pageFields, but the implementation in images.ts uses `input.page ?? 1

const ImagesGetInputSchema = z.object({
namespace: z.string(),
name: z.string(),
digest: z.string(),
pageSize: z.number().int().positive().max(100).optional(),
});


**Rule Used:** Every endpoint must validate inputs and outputs wi... ([source](greptile.json))
- **P1** `packages/dockerhub/endpoints/images.ts` — **This line uses `input.page ?? 1` as the initial tag-page number for the scan. Because `page` is exposed in the input sch**
  ```suggestion
	const pageSize = input.pageSize ?? 100;
	let pageNum = 1;

Rule Used: Every endpoint must validate inputs and outputs wi... (source)

@github-actions github-actions Bot added the needs-maintainer Automated rounds exhausted - human review needed label Jul 20, 2026
@Mayank-saraswal

Copy link
Copy Markdown
Contributor Author

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

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 first-class @corsair-dev/dockerhub plugin with Docker Hub API v2 support, 26 endpoint operations, authentication handling, schemas, retry policies, tests, documentation, and package build configuration. The provider catalog now includes Docker Hub.

Changes

Docker Hub integration

Layer / File(s) Summary
Contracts and package scaffold
packages/corsair/core/constants.ts, packages/dockerhub/endpoints/types.ts, packages/dockerhub/schema/*, packages/dockerhub/package.json, packages/dockerhub/tsconfig.json, packages/dockerhub/tsup.config.ts, packages/dockerhub/jest.config.cjs, packages/dockerhub/webhooks/*
Defines provider registration, endpoint schemas, schema metadata, package configuration, and webhook placeholder types.
Client and authentication foundation
packages/dockerhub/client.ts, packages/dockerhub/endpoints/helpers.ts, packages/dockerhub/error-handlers.ts
Adds typed requests, Bearer authentication, JWT login, redacted summaries, pagination conversion, and retry handlers.
Resource endpoint operations
packages/dockerhub/endpoints/{repositories,tags,images,organizations,teams}.ts, packages/dockerhub/endpoints/index.ts, packages/dockerhub/handlers.test.ts
Implements repository, tag, image, organization, and team operations with pagination, deletion handling, digest lookup, and request-path tests.
Webhook REST workflow
packages/dockerhub/endpoints/webhooks.ts, packages/dockerhub/handlers.test.ts
Implements webhook CRUD, two-step creation, rollback, and workflow tests.
Plugin wiring and distribution
packages/dockerhub/index.ts, packages/dockerhub/README.md, packages/dockerhub/scripts/demo.mjs, packages/dockerhub/api.test.ts
Wires endpoint schemas, metadata, authentication, error handlers, plugin factory behavior, documentation, demo requests, and schema/live API tests.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant WebhooksCreate
  participant req
  participant DockerHubAPI
  WebhooksCreate->>req: Register webhook pipeline
  req->>DockerHubAPI: POST pipeline
  DockerHubAPI-->>WebhooksCreate: Return pipeline id
  WebhooksCreate->>req: Attach hook URL
  req->>DockerHubAPI: POST hook URL
  DockerHubAPI-->>WebhooksCreate: Return webhook result
  WebhooksCreate->>req: Delete pipeline if attachment fails
Loading

Possibly related PRs

  • corsairdev/corsair#327: Adds another provider with the same provider-catalog registration pattern.
  • corsairdev/corsair#330: Adds a standalone provider package with analogous client, endpoint, schema, and packaging structure.
  • corsairdev/corsair#558: Adds a provider plugin with analogous endpoint, test, error-handler, and catalog integration.

Suggested labels: app

Suggested reviewers: devjain32

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% 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 title clearly identifies the main change: adding the Docker Hub plugin.
Linked Issues check ✅ Passed The changes implement the requested Docker Hub plugin, including 26 operations, authentication, schemas, tests, documentation, and core registration.
Out of Scope Changes check ✅ Passed The reviewed changes support the Docker Hub plugin objectives and contain no unrelated code changes.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (5)
packages/dockerhub/scripts/demo.mjs (1)

16-21: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Exercise the plugin rather than raw HTTP.

This demo can succeed while dockerhub() wiring, endpoint bindings, key building, or plugin error handling are broken. Instantiate Corsair with dockerhub() and call client.dockerhub.* so the documented demo validates the distributed package.

#!/bin/bash
# Find existing plugin demos and their Corsair authentication setup.
fd -t f -E node_modules 'demo\.(mjs|js|ts)' packages | while read -r file; do
  ast-grep outline "$file" --items all
done

rg -n -C 3 --glob '*.{mjs,js,ts,tsx}' '\bcorsair\s*\(' packages
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dockerhub/scripts/demo.mjs` around lines 16 - 21, Update the demo’s
request flow around get to instantiate Corsair with the dockerhub() plugin and
invoke the documented client.dockerhub.* methods instead of calling fetch
against raw URLs. Preserve the demo’s authentication setup and output while
ensuring endpoint bindings, key construction, and plugin error handling are
exercised through the distributed package.
packages/dockerhub/tsconfig.json (1)

17-18: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Exclude test files from the published declaration build.

Because include matches the entire package and tsc emits declarations into dist, root-level test files such as api.test.ts and handlers.test.ts will generate .d.ts files that are published via "files": ["dist"]. Exclude test files or narrow the include list.

Proposed fix
-  "exclude": ["dist", "node_modules"],
+  "exclude": ["dist", "node_modules", "**/*.test.ts"],
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dockerhub/tsconfig.json` around lines 17 - 18, Update the tsconfig
include/exclude configuration so root-level test files such as api.test.ts and
handlers.test.ts are omitted from the declaration build and cannot emit files
under dist. Preserve compilation of the package source while ensuring the
existing dist and node_modules exclusions remain effective.
packages/dockerhub/jest.config.cjs (1)

11-18: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Exclude test files from coverage collection.

**/*.ts also matches the package’s root-level *.test.ts files, so coverage metrics can include test code and become misleading. Add an explicit test-file exclusion.

Proposed fix
  collectCoverageFrom: [
    '**/*.ts',
+   '!**/*.test.ts',
    '!**/*.d.ts',
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dockerhub/jest.config.cjs` around lines 11 - 18, Update the
collectCoverageFrom configuration to explicitly exclude root-level and nested
test files matching the package’s *.test.ts naming pattern, while preserving the
existing source, declaration, dependency, build, and tests/** exclusions.
packages/dockerhub/endpoints/organizations.ts (1)

26-61: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Prefer spreading ctx instead of constructing a bare { key: token }.

Every other handler in this file (and across the plugin) passes the full ctx to req. Here, create substitutes a stripped-down object containing only key, discarding db, keys, authType, and options. If req (or anything it calls) ever needs those fields — e.g. for tenant-scoped rate-limit bookkeeping or richer error context — this silently breaks only for the JWT-fallback org-create path.

♻️ Proposed fix
-	const response = await req({ key: token }, '/orgs/', {
+	const response = await req({ ...ctx, key: token }, '/orgs/', {
 		method: 'POST',
 		body: {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dockerhub/endpoints/organizations.ts` around lines 26 - 61, Update
the req invocation in organizationsCreate to pass the full ctx while overriding
only its key with the selected token. Preserve the JWT/PAT token selection logic
and ensure db, keys, authType, options, and all other context fields remain
available to req.
packages/dockerhub/handlers.test.ts (1)

178-185: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Loose assertion doesn't verify the JWT-fallback flow.

The .some(p => p === '/orgs/' || p === '/users/login/') check passes as long as either path was called — it wouldn't catch a bug where create() calls /users/login/ but never reaches the actual /orgs/ POST (or vice versa). Consider asserting both the login call and the final /orgs/ POST with its body.

♻️ Proposed tightening
-		// may call login first when username set — last call is create
-		const paths = mockReq.mock.calls.map((c) => c[0]);
-		expect(paths.some((p) => p === '/orgs/' || p === '/users/login/')).toBe(
-			true,
-		);
+		const paths = mockReq.mock.calls.map((c) => c[0]);
+		expect(paths).toContain('/users/login/');
+		expect(lastCall()[0]).toBe('/orgs/');
+		expect(lastCall()[2]?.method).toBe('POST');
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dockerhub/handlers.test.ts` around lines 178 - 185, Strengthen the
organizations.create test by asserting that the request paths include both the
optional /users/login/ call and the final /orgs/ POST, rather than accepting
either one; also verify the /orgs/ request carries the expected organization
body for acme.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/dockerhub/jest.config.cjs`:
- Line 21: Make the dockerhub Jest setup self-contained by removing its
hard-coded references to packages/corsair, including the yaml transformer and
the related entries around the referenced configuration lines. Move or expose
the required test support through a package-local implementation or stable
workspace API, then update the Jest configuration to use that boundary while
preserving existing test behavior.

In `@packages/dockerhub/README.md`:
- Around line 57-60: Update the “Local test / demo (R4 Loom)” section to remove
the machine-specific cd path, replacing it with a generic repository-path
placeholder or omitting the cd command entirely.

---

Nitpick comments:
In `@packages/dockerhub/endpoints/organizations.ts`:
- Around line 26-61: Update the req invocation in organizationsCreate to pass
the full ctx while overriding only its key with the selected token. Preserve the
JWT/PAT token selection logic and ensure db, keys, authType, options, and all
other context fields remain available to req.

In `@packages/dockerhub/handlers.test.ts`:
- Around line 178-185: Strengthen the organizations.create test by asserting
that the request paths include both the optional /users/login/ call and the
final /orgs/ POST, rather than accepting either one; also verify the /orgs/
request carries the expected organization body for acme.

In `@packages/dockerhub/jest.config.cjs`:
- Around line 11-18: Update the collectCoverageFrom configuration to explicitly
exclude root-level and nested test files matching the package’s *.test.ts naming
pattern, while preserving the existing source, declaration, dependency, build,
and tests/** exclusions.

In `@packages/dockerhub/scripts/demo.mjs`:
- Around line 16-21: Update the demo’s request flow around get to instantiate
Corsair with the dockerhub() plugin and invoke the documented client.dockerhub.*
methods instead of calling fetch against raw URLs. Preserve the demo’s
authentication setup and output while ensuring endpoint bindings, key
construction, and plugin error handling are exercised through the distributed
package.

In `@packages/dockerhub/tsconfig.json`:
- Around line 17-18: Update the tsconfig include/exclude configuration so
root-level test files such as api.test.ts and handlers.test.ts are omitted from
the declaration build and cannot emit files under dist. Preserve compilation of
the package source while ensuring the existing dist and node_modules exclusions
remain effective.
🪄 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 Plus

Run ID: 793ecd1e-1b3d-49b6-a6b9-64a56010fbe9

📥 Commits

Reviewing files that changed from the base of the PR and between 3a81b5c and 303deb5.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (27)
  • packages/corsair/core/constants.ts
  • packages/dockerhub/README.md
  • packages/dockerhub/api.test.ts
  • packages/dockerhub/client.ts
  • packages/dockerhub/endpoints/helpers.ts
  • packages/dockerhub/endpoints/images.ts
  • packages/dockerhub/endpoints/index.ts
  • packages/dockerhub/endpoints/organizations.ts
  • packages/dockerhub/endpoints/repositories.ts
  • packages/dockerhub/endpoints/tags.ts
  • packages/dockerhub/endpoints/teams.ts
  • packages/dockerhub/endpoints/types.ts
  • packages/dockerhub/endpoints/webhooks.ts
  • packages/dockerhub/error-handlers.ts
  • packages/dockerhub/handlers.test.ts
  • packages/dockerhub/index.ts
  • packages/dockerhub/jest.config.cjs
  • packages/dockerhub/package.json
  • packages/dockerhub/schema/database.ts
  • packages/dockerhub/schema/index.ts
  • packages/dockerhub/scripts/demo.mjs
  • packages/dockerhub/tsconfig.json
  • packages/dockerhub/tsup.config.ts
  • packages/dockerhub/webhooks/index.ts
  • packages/dockerhub/webhooks/oauth-tenant-link.ts
  • packages/dockerhub/webhooks/tenant-matcher.ts
  • packages/dockerhub/webhooks/types.ts

],
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],
transform: {
'^.+\\.yaml$': '<rootDir>/../corsair/jest-yaml-transform.cjs',

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift

Keep the plugin’s test setup self-contained.

The Jest configuration hard-codes sibling packages/corsair source paths and an internal transformer. This couples the plugin to the monorepo layout and another package’s implementation details; move shared test support behind a stable package-local/workspace API instead.

As per path instructions: Each plugin should remain self-contained within its own packages/<plugin>/ package, except for its required registration in packages/corsair/core/constants.ts.

Also applies to: 46-48

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dockerhub/jest.config.cjs` at line 21, Make the dockerhub Jest setup
self-contained by removing its hard-coded references to packages/corsair,
including the yaml transformer and the related entries around the referenced
configuration lines. Move or expose the required test support through a
package-local implementation or stable workspace API, then update the Jest
configuration to use that boundary while preserving existing test behavior.

Source: Path instructions

Comment on lines +57 to +60
## Local test / demo (R4 Loom)

```powershell
cd D:\opensource\corsair

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the machine-specific checkout path.

D:\opensource\corsair only works on the author’s machine. Use a placeholder such as <path-to-corsair-repo> or omit the cd step.

Proposed fix
-cd D:\opensource\corsair
+cd <path-to-corsair-repo>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Local test / demo (R4 Loom)
```powershell
cd D:\opensource\corsair
## Local test / demo (R4 Loom)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dockerhub/README.md` around lines 57 - 60, Update the “Local test /
demo (R4 Loom)” section to remove the machine-specific cd path, replacing it
with a generic repository-path placeholder or omitting the cd command entirely.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bot:round-1 Review bot posted consolidated findings bot:round-2 Review bot pushed an automated fix core Changes in packages/corsair docs Docs / Mintlify / markdown changes needs-maintainer Automated rounds exhausted - human review needed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Integration Request: Docker Hub Plugin

1 participant