Skip to content

🚀 release: sync dev/v1.6 → main for v1.6.0-rc.13 - #685

Merged
scttbnsn merged 1 commit into
mainfrom
release/sync-v1.6.0-rc.13
Aug 9, 2026
Merged

🚀 release: sync dev/v1.6 → main for v1.6.0-rc.13#685
scttbnsn merged 1 commit into
mainfrom
release/sync-v1.6.0-rc.13

Conversation

@scttbnsn

@scttbnsn scttbnsn commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Wholesale-tree sync ahead of the v1.6.0-rc.13 cut (same pattern as #667). The single commit carries the exact tree of dev/v1.6 at b98808e onto main — after merge, git diff --quiet origin/main origin/dev/v1.6 holds.

Content on dev since rc.12:

Changelog

  • ✨ Added repository-aware Docker digest selection and multi-anchor comparison.
  • ✨ Added self-hosted, theme-aware Star History SVG API with pagination, caching, deadlines, and fallback rendering.
  • ✨ Added icon alias resolution and bundle coverage tests.
  • ✨ Added required icon bundle entries and updated icon mappings.
  • 🔧 Updated Node and Trivy image digests.
  • 🔒 Pinned nanoid to 3.3.18 across workspaces.
  • 🔒 Added a digest-pinned Node 24 Alpine base-image guard test.
  • 🔧 Updated js-yaml override to 3.15.1.
  • 🔧 Updated release documentation, examples, mocks, badges, and tests to 1.6.0-rc.13.
  • 🔧 Removed the external Star History CSP allowlist and embed.

Concerns

  • Verify the Star History route stays within GitHub API rate limits under concurrent requests.
  • Verify cache headers do not serve incomplete or repository-specific fallback responses incorrectly.
  • Verify Docker digest re-anchoring preserves legacy behavior for stored containers without repoDigests.
  • Verify icon aliases with rotation or flipping have acceptable fallback behavior.
  • Run the Docker, Star History, icon-bundle, release-identity, and workspace dependency tests.

Wholesale-tree sync: this commit carries the exact tree of dev/v1.6 at b98808e onto main ahead of the v1.6.0-rc.13 cut. Content since rc.12: #669/#670 digest re-anchoring, #672 Star History self-host, #673, #681 dep ordering, #682 CVE base-image bumps, #683 icon-bundle alias fix, #684 rc.13 identity roll-forward.
@vercel

vercel Bot commented Aug 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
drydock-website Ready Ready Preview Aug 9, 2026 3:17am
drydockdemo-website Ready Ready Preview Aug 9, 2026 3:17am

@biggest-littlest biggest-littlest left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM — tree matches dev/v1.6 @ b98808e, all content previously reviewed on the dev PRs

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The release candidate updates Docker digest anchoring, image pins, self-hosted Star History rendering, icon alias resolution, dependency overrides, release metadata, documentation, and demo fixtures. Docker image state now stores and compares ordered repository digests. The web application serves themed Star History SVGs with pagination, caching, and fallback behavior. Icon extraction resolves aliases and validates bundle completeness.

Possibly related issues

Possibly related PRs

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/sync-v1.6.0-rc.13

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.

@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: 3

🤖 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 `@apps/web/src/app/api/star-history/route.ts`:
- Around line 38-68: Update the pagination flow after MAX_PAGES in the stargazer
history loader to fetch one lookahead page and return starredAt only when that
page is empty; return undefined when it contains records. Preserve existing
short-page completion and error handling, and add coverage in the
marketing-performance tests for the empty lookahead-page case.

In `@apps/web/src/components/star-history-chart.tsx`:
- Around line 7-11: Update the link label associated with CHART_HREF in the star
history chart component so it accurately describes the GitHub stargazers
destination rather than the self-hosted chart. Keep the existing CHART_HREF
target unchanged.

In `@Dockerfile`:
- Around line 4-7: Synchronize the Trivy image digest used by
DEFAULT_TRIVY_WORKER_IMAGE, .github/workflows/release-cut.yml, and the
corresponding tests with the Dockerfile’s aquasec/trivy pin when they represent
the same release image; otherwise document the intentional independence between
release and runtime pins with a comment.
🪄 Autofix

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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: f0b8e76e-440d-41ef-9c59-18c09fe1efce

📥 Commits

Reviewing files that changed from the base of the PR and between 4c2c7ed and fd09519.

⛔ Files ignored due to path filters (7)
  • CHANGELOG.md is excluded by !CHANGELOG.md
  • app/package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
  • apps/demo/package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
  • apps/web/package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
  • e2e/package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
  • package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
  • ui/package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
📒 Files selected for processing (41)
  • Dockerfile
  • README.md
  • app/configuration/dockerfile-defaults.test.ts
  • app/model/container.ts
  • app/package.json
  • app/watchers/providers/docker/docker-helpers.test.ts
  • app/watchers/providers/docker/docker-helpers.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.test.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.ts
  • app/watchers/providers/docker/image-comparison.test.ts
  • app/watchers/providers/docker/image-comparison.ts
  • apps/demo/package.json
  • apps/demo/src/mocks/data/agents.ts
  • apps/demo/src/mocks/data/audit.ts
  • apps/demo/src/mocks/data/containers.ts
  • apps/demo/src/mocks/data/server.ts
  • apps/demo/src/mocks/handlers/app.ts
  • apps/web/package.json
  • apps/web/scripts/marketing-performance.test.mjs
  • apps/web/scripts/star-history-svg.test.mjs
  • apps/web/src/app/api/star-history/route.ts
  • apps/web/src/components/star-history-chart.tsx
  • apps/web/src/lib/content-security-policy.mjs
  • apps/web/src/lib/site-config.ts
  • apps/web/src/lib/site-content.ts
  • apps/web/src/lib/star-history-svg.mjs
  • content/docs/current/api/agent.mdx
  • content/docs/current/api/app.mdx
  • content/docs/current/api/portwing.mdx
  • content/docs/current/quickstart/index.mdx
  • content/docs/current/updates/index.mdx
  • e2e/package.json
  • package.json
  • scripts/changelog-links.test.mjs
  • scripts/release-docs-identity.test.mjs
  • scripts/release-identity.test.mjs
  • ui/package.json
  • ui/scripts/extract-icons.mjs
  • ui/src/boot/icon-bundle.json
  • ui/src/icons.ts
  • ui/tests/boot/icon-bundle.spec.ts

Comment on lines +38 to +68
for (let page = 1; page <= MAX_PAGES; page += 1) {
let batch: unknown;
try {
const response = await fetch(
`https://api.github.com/repos/${REPO_SLUG}/stargazers?per_page=${PER_PAGE}&page=${page}`,
{ headers, signal, next: { revalidate: 21600 } },
);
if (!response.ok) {
return undefined;
}
batch = await response.json();
} catch {
return undefined;
}
if (!Array.isArray(batch)) {
return undefined;
}
for (const entry of batch) {
const value = (entry as { starred_at?: unknown })?.starred_at;
if (typeof value === "string") {
starredAt.push(value);
}
}
if (batch.length < PER_PAGE) {
// A short page is the end of the history — the only complete outcome.
return starredAt;
}
}
// MAX_PAGES exhausted with a full final page: history may continue, so the
// series is incomplete. Fall back instead of caching a truncated total.
return undefined;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Accept the exact page-limit boundary.

If the repository has exactly 3,000 stargazers, all 30 pages are full. The route then returns undefined and serves the fallback SVG for a complete history.

Fetch one lookahead page. Return starredAt only if that page is empty. Return undefined if it contains records.

Proposed fix
-  for (let page = 1; page <= MAX_PAGES; page += 1) {
+  for (let page = 1; page <= MAX_PAGES + 1; page += 1) {
     // fetch batch
     if (!Array.isArray(batch)) {
       return undefined;
     }
+    if (page > MAX_PAGES) {
+      return batch.length === 0 ? starredAt : undefined;
+    }
     for (const entry of batch) {

Update apps/web/scripts/marketing-performance.test.mjs to cover the empty lookahead-page case.

🤖 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 `@apps/web/src/app/api/star-history/route.ts` around lines 38 - 68, Update the
pagination flow after MAX_PAGES in the stargazer history loader to fetch one
lookahead page and return starredAt only when that page is empty; return
undefined when it contains records. Preserve existing short-page completion and
error handling, and add coverage in the marketing-performance tests for the
empty lookahead-page case.

Comment on lines +7 to +11
// Self-hosted chart (#671) — rendered by /api/star-history from our own
// origin after the upstream chart service's outage broke the embed.
const DARK_SRC = "/api/star-history?theme=dark";
const LIGHT_SRC = "/api/star-history?theme=light";
const CHART_HREF = `https://github.com/${REPO_SLUG}/stargazers`;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Align the link label with the destination.

CHART_HREF opens the GitHub stargazers page, not the self-hosted chart. Update the link label.

Proposed fix
- aria-label="Open the Star History chart"
+ aria-label="Open the GitHub stargazers page"
🤖 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 `@apps/web/src/components/star-history-chart.tsx` around lines 7 - 11, Update
the link label associated with CHART_HREF in the star history chart component so
it accurately describes the GitHub stargazers destination rather than the
self-hosted chart. Keep the existing CHART_HREF target unchanged.

Comment thread Dockerfile
Comment on lines +4 to +7
FROM aquasec/trivy@sha256:7cced7cae583819fc7806d4cbc0dbbc7cad18b99f7d3e235192e6da8c091045c AS trivy-bin

# Common Stage
FROM node:24-alpine@sha256:a0b9bf06e4e6193cf7a0f58816cc935ff8c2a908f81e6f1a95432d679c54fbfd AS base
FROM node:24-alpine@sha256:d32cdf619f63fe0471182d08996dd516c6275bb5fd31ae06e55a570bd9e1ad43 AS base

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
rg -n -C 2 'aquasec/trivy@sha256:' Dockerfile app/configuration

Repository: CodesWhat/drydock

Length of output: 2149


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== configuration symbol usages =="
rg -n -C 2 'DEFAULT_TRIVY_WORKER_IMAGE|DEFAULT_SECURITY_\w+WORKER|trivyWorker|trivy.*worker|workerImage' app packages .github Dockerfile 2>/dev/null || true

echo "== files mentioning trivy =="
rg -n -i 'trivy' app .github Dockerfile package.json 2>/dev/null || true

Repository: CodesWhat/drydock

Length of output: 50374


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== git status/stat =="
git status --short
git diff --stat

echo "== Dockerfile relevant lines =="
sed -n '1,20p' Dockerfile

echo "== app/configuration relevant lines =="
sed -n '1,120p' app/configuration/index.ts
sed -n '680,820p' app/configuration/index.test.ts
sed -n '1,35p' app/configuration/dockerfile-defaults.test.ts

Repository: CodesWhat/drydock

Length of output: 12478


🌐 Web query:

aquasec trivy image Dockerfile pin SHA 7cced7cae583819fc7806d4cbc0dbbc7cad18b99f7d3e235192e6da8c091045c sha256 cffe3f5161a47a6823fbd23d985795b3ed72a4c806da4c4df16266c02accdd6f

💡 Result:

The SHA-256 digests you provided correspond to specific versions of the official Aquasec Trivy container image: - The digest 7cced7cae583819fc7806d4cbc0dbbc7cad18b99f7d3e235192e6da8c091045c is the index digest for Trivy version 0.73.0 [1][2]. - The digest cffe3f5161a47a6823fbd23d985795b3ed72a4c806da4c4df16266c02accdd6f is the index digest for Trivy version 0.72.0 [3]. To pin a container image in a Dockerfile by its SHA-256 digest, you must use the @ symbol followed by the full digest instead of a tag [4][5]. This ensures the build always uses the exact same image version [6]. For example, to pin your Dockerfile to Trivy v0.73.0, use the following syntax: FROM aquasec/trivy@sha256:7cced7cae583819fc7806d4cbc0dbbc7cad18b99f7d3e235192e6da8c091045c Trivy itself supports referencing images by digest in its CLI commands as well, using the same syntax [4][5]. For example: trivy image aquasec/trivy@sha256:7cced7cae583819fc7806d4cbc0dbbc7cad18b99f7d3e235192e6da8c091045c

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== release-cut workflow Trivy image context =="
sed -n '680,715p' .github/workflows/release-cut.yml

echo "== release-cut retry test context =="
sed -n '265,290p' .github/tests/release-cut-retry-workflow.test.ts

echo "== exact pinned Trivy occurrences in tracked files =="
python3 - <<'PY'
from pathlib import Path
pins = [
    "aquasec/trivy@sha256:7cced7cae583819fc7806d4cbc0dbbc7cad18b99f7d3e235192e6da8c091045c",
    "aquasec/trivy@sha256:cffe3f5161a47a6823fbd23d985795b3ed72a4c806da4c4df16266c02accdd6f",
]
for path in Path('.').rglob('*'):
    if path.is_file() and not path.startswith(('.git', 'node_modules', 'dist', 'build')):
        try:
            text = path.read_text(errors='ignore')
        except Exception:
            continue
        for pin in pins:
            if pin in text:
                print(f"{path}: {pin}")
PY

Repository: CodesWhat/drydock

Length of output: 2980


Synchronize the Trivy image pin across config, release, and tests.

The Dockerfile now builds from aquasec/trivy@sha256:7cced7cae583819fc7806d4cbc0dbbc7cad18b99f7d3e235192e6da8c091045c, while DEFAULT_TRIVY_WORKER_IMAGE, .github/workflows/release-cut.yml, and matching tests still use aquasec/trivy@sha256:cffe3f5161a47a6823fbd23d985795b3ed72a4c806da4c4df16266c02accdd6f. Update those references if the new digest is the intended release pin. If the release and runtime images are intentionally independent, add a comment documenting that contract.

🤖 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 `@Dockerfile` around lines 4 - 7, Synchronize the Trivy image digest used by
DEFAULT_TRIVY_WORKER_IMAGE, .github/workflows/release-cut.yml, and the
corresponding tests with the Dockerfile’s aquasec/trivy pin when they represent
the same release image; otherwise document the intentional independence between
release and runtime pins with a comment.

@ALARGECOMPANY ALARGECOMPANY left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@scttbnsn
scttbnsn merged commit 103bfdc into main Aug 9, 2026
29 checks passed
@scttbnsn
scttbnsn deleted the release/sync-v1.6.0-rc.13 branch August 9, 2026 03:42
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.

3 participants