Skip to content

DEMO: SQL Diagram Automation with PNG Previews#25

Open
ebembi-crdb wants to merge 25 commits into
masterfrom
feature/diagram-preview-in-pr-v2
Open

DEMO: SQL Diagram Automation with PNG Previews#25
ebembi-crdb wants to merge 25 commits into
masterfrom
feature/diagram-preview-in-pr-v2

Conversation

@ebembi-crdb
Copy link
Copy Markdown
Owner

@ebembi-crdb ebembi-crdb commented Jan 13, 2026

Demo: SQL Diagram Automation Pipeline

This PR demonstrates the complete SQL diagram automation system for CockroachDB documentation.

What This PR Shows

  1. Automatic Diagram Generation - CI generates BNF and SVG diagrams from diagrams.go
  2. PNG Previews in PR Comments - Writers can see rendered diagrams directly in the PR
  3. Validation - CI validates diagrams for broken links, naming conflicts, etc.
  4. Bot Sync - Changes are automatically synced to generated-diagrams repo via PR
  5. Collapsible SKIP DOC Warnings - Verbose warnings are hidden by default

How It Works

  1. Writer modifies pkg/cmd/docgen/diagrams.go
  2. CI workflow triggers and:
    • Generates BNF files from sql.y
    • Builds HTML/SVG diagrams
    • Converts to PNG for preview
    • Validates all diagrams
    • Posts comment with preview images
    • Syncs to generated-diagrams repo

See the PR Comment Below

The workflow posted a comment showing:

  • ✅ Validation status
  • 📊 PNG diagram previews (first 5 diagrams)
  • 🔗 Link to sync PR in generated-diagrams
  • 📋 Collapsible SKIP DOC warnings

Writer Workflow (New)

Writers only need to:

  1. Edit pkg/cmd/docgen/diagrams.go
  2. Open a PR
  3. See diagram previews in the PR comment
  4. Add remote_include only for new diagrams

No Bazel commands. No local generation. No engineering coordination required.

ebembi-crdb and others added 17 commits December 10, 2025 14:41
This commit introduces an automated pipeline for SQL diagram generation
that simplifies the workflow for technical writers.

Changes:
- Add CI workflow (.github/workflows/docgen-diagrams-ci.yml) that:
  - Triggers on changes to diagrams.go, sql.y, or the docgen-diagram label
  - Generates BNF files from sql.y
  - Builds SVG diagrams via Railroad Diagram Generator
  - Runs comprehensive validation tests
  - Packages and uploads artifacts
  - Triggers bot to sync diagrams to generated-diagrams repo
  - Comments on PRs with validation status

- Add validation test suite (pkg/cmd/docgen/tests/):
  - TestMissingBNFFiles: Detects missing BNF files
  - TestMissingHTMLDiagrams: Detects missing HTML output
  - TestStmtNamingConflicts: Detects _stmt naming conflicts
  - TestReplaceUnlinkMismatch: Warns about potential broken links
  - TestBrokenGrammarLinks: Finds invalid grammar references
  - TestUnusedDiagrams: Reports diagrams not used in docs
  - TestSKIPDOCSuppressions: Reports SKIP DOC annotations

- Add bot sync script (build/scripts/sync-diagrams-to-generated-repo.sh):
  - Clones generated-diagrams repository
  - Updates BNF and SVG files
  - Creates PR with validation summary (no auto-merge)
  - Assigns PR to docs-infra-prs team

- Add writer documentation (docs/generated/sql/bnf/README.md):
  - Instructions for adding/modifying diagrams
  - Explains what writers don't need to do (no Bazel commands)
  - Troubleshooting guide

- Add technical documentation (docs/tech-notes/sql-diagram-automation.md):
  - Architecture overview with diagram
  - CI workflow details
  - Bot service specification
  - Secret configuration
  - Troubleshooting and rollback procedures

New writer workflow:
1. Edit pkg/cmd/docgen/diagrams.go only
2. Open PR with label docgen-diagram
3. Add remote_include manually only for new diagrams

Release Notes: None

Epic: None
…t repo

This commit improves the SQL diagram automation CI workflow:

1. Added changed_files output to track which diagrams changed
2. Updated manifest.json to include changed files as a JSON array
3. Made target repository configurable via DIAGRAM_TARGET_REPO variable
   (defaults to cockroachdb/generated-diagrams)
4. Enhanced PR comment to show list of changed diagrams
5. Updated TestUnusedDiagrams stub to clarify it's a placeholder for
   future functionality

Epic: None
Release note: None
This commit removes the pull_request_target event trigger from the
SQL diagram generation workflow to address a security vulnerability.

The issue was that pull_request_target grants access to secrets and
runs with write permissions. When combined with checking out untrusted
PR code and executing scripts from it (./dev, ./build/github/*.sh),
this created a vector for secret exfiltration and runner compromise.

Changes:
- Remove pull_request_target trigger (used for docgen-diagram label)
- Remove label check from should_run logic
- Add comment explaining the security rationale
- workflow_dispatch remains available for manual triggering by maintainers

The pull_request trigger (for path changes) remains safe since it does
not have access to secrets.

Epic: None
Release note: None
docgen: Implement complete SQL diagram automation pipeline
This test change adds 'opt_collate' to the inline list for the add_column
diagram to demonstrate the SQL diagram automation workflow.

Epic: None
Release note: None
This commit is FORK-SPECIFIC and should NOT be upstreamed.

Changes for running on forks without CockroachDB infrastructure:
- Use ubuntu-latest instead of self-hosted runners
- Add Bazel installation
- Skip EngFlow keys (internal to CockroachDB)

Epic: None
Release note: None
Testing the automated SQL diagram generation workflow with GitHub-hosted runners.

Epic: None
Release note: None
- Add Java 11 setup (required for Railroad JAR)
- Download and configure Railroad Diagram Generator JAR
- Set COCKROACH_REQUIRE_RAILROAD environment variable
- Add fallback build command with explicit JAR location

This should enable HTML/SVG diagram generation on GitHub-hosted runners.

Epic: None
Release note: None
The unzip was conflicting with existing LICENSE file in the repo.
Now extracting in a temporary directory to avoid conflicts.

Epic: None
Release note: None
Adding diagnostic output to understand why HTML files aren't being generated.

Epic: None
Release note: None
Testing the workflow with debug output to see why HTML files aren't generated.

Epic: None
Release note: None
The dev wrapper requires initialization which doesn't work well on
GitHub-hosted runners. Using bazel directly for:
- BNF generation
- SVG diagram building
- Validation tests

This should fix the HTML generation issue.

Epic: None
Release note: None
Previously, writers had no way to see rendered railroad diagrams directly
in the PR. They had to either download artifacts, run locally, or wait
for the generated-diagrams PR to be merged.

This change modifies the docgen-diagrams-ci workflow to embed diagram
SVGs directly in the PR comment with inline CSS styling. The workflow now:

- Downloads diagram artifacts in the comment-on-pr job
- Extracts SVG content from changed HTML files
- Adds inline CSS for proper rendering (terminal/nonterminal boxes, lines)
- Embeds up to 5 diagrams (under 40KB each) in the PR comment
- Shows a note for large diagrams and remaining diagrams

Release note: None
Epic: None

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

SQL Diagram Generation Report

Validation Passed

✔️ No diagram changes detected

SKIP DOC Warnings

The following grammar rules are suppressed from documentation:

The following grammar rules are suppressed with SKIP DOC:
1977:| alter_virtual_cluster_stmt   /* SKIP DOC */
2570:    /* SKIP DOC */
2582:    /* SKIP DOC */
2707:    /* SKIP DOC */
2724:    /* SKIP DOC */
3035:    /* SKIP DOC */
3041:    /* SKIP DOC */
3093:    /* SKIP DOC */
3205:  SET CYCLE                        { /* SKIP DOC */
3591:    /* SKIP DOC */
3612:  INCLUDE_ALL_SECONDARY_TENANTS { /* SKIP DOC */ }
4197:  TENANT  { /* SKIP DOC */ }
4201:  TENANT_NAME { /* SKIP DOC */ }
4792:    /* SKIP DOC */
4935:  /* SKIP DOC */
4974:    /* SKIP DOC */
4981:    /* SKIP DOC */
4989:    /* SKIP DOC */
4999:    /* SKIP DOC */
5011:  TENANT { /* SKIP DOC */ }
6203:    /* SKIP DOC */
6241:    /* SKIP DOC */
6318:    /* SKIP DOC */
6441:    /* SKIP DOC */
6727:   /* SKIP DOC */
6736:    /* SKIP DOC */
7158:    /* SKIP DOC */
7169:    /* SKIP DOC */
7174:    /* SKIP DOC */
7179:    /* SKIP DOC */
7198:    /* SKIP DOC */
7203:    /* SKIP DOC */
7210:    /* SKIP DOC */
7215:    /* SKIP DOC */
7220:    /* SKIP DOC */
7225:    /* SKIP DOC */
7232:    /* SKIP DOC */
7239:    /* SKIP DOC */
7254:		/* SKIP DOC */
7264:    /* SKIP DOC */
7269:    /* SKIP DOC */
7276:    /* SKIP DOC */
7295:    /* SKIP DOC */
7328:    /* SKIP DOC */
7786:| set_exprs_internal   { /* SKIP DOC */ }
8091:    /* SKIP DOC */
8120:    /* SKIP DOC */
8221:    /* SKIP DOC */
8230:    /* SKIP DOC */
8239:    /* SKIP DOC */
8299:    /* SKIP DOC */
8306:    /* SKIP DOC */
8316:    /* SKIP DOC */
8321:    /* SKIP DOC */
8346:    /* SKIP DOC */
8352:    /* SKIP DOC */
8429:    /* SKIP DOC */
8437:    /* SKIP DOC */
8442:		/* SKIP DOC */
8451:    /* SKIP DOC */
8472:    /* SKIP DOC */
8477:    /* SKIP DOC */
8885:    /* SKIP DOC */
8890:    /* SKIP DOC */
8895:    /* SKIP DOC */
8900:    /* SKIP DOC */
8905:    /* SKIP DOC */
8936:| TRACING { /* SKIP DOC */ }
8939:    /* SKIP DOC */
8981:    /* SKIP DOC */
9002:    /* SKIP DOC */
9054:    /* SKIP DOC */
9060:    /* SKIP DOC */
9066:		/* SKIP DOC */
9072:		/* SKIP DOC */
9089:    /* SKIP DOC */
9094:    /* SKIP DOC */
9099:    /* SKIP DOC */
9177: /* SKIP DOC */
9239:    /* SKIP DOC */
9244:    /* SKIP DOC */
9743:    /* SKIP DOC */
9908:    /* SKIP DOC */
9916:    /* SKIP DOC */
9929:    /* SKIP DOC */
9939:   /* SKIP DOC */
9972:    /* SKIP DOC */
9977:    /* SKIP DOC */
9982:    /* SKIP DOC */
10022:    /* SKIP DOC */
10031:    /* SKIP DOC */
10040:    /* SKIP DOC */
10045:    /* SKIP DOC */
10050:    /* SKIP DOC */
10055:    /* SKIP DOC */
10060:    /* SKIP DOC */
10069:    /* SKIP DOC */
10079:    /* SKIP DOC */
10255:| for_with_lookahead_variants { /* SKIP DOC */ }
10262:| FOR_JOB { /* SKIP DOC */ }
10457:    /* SKIP DOC */
10466:    /* SKIP DOC */
10775:    /* SKIP DOC */
10784:    /* SKIP DOC */
11093:    /* SKIP DOC */
11109:    /* SKIP DOC */
11199:| WITH DATA    { /* SKIP DOC */ /* This is the default */ }
11590:    /* SKIP DOC */
12097:| CYCLE                        { /* SKIP DOC */
12153:    /* SKIP DOC */
12234:    /* SKIP DOC */
12257:    /* SKIP DOC */
12535:    /* SKIP DOC */
12541:    /* SKIP DOC */
12546:    /* SKIP DOC */
12551:    /* SKIP DOC */
13575:| abort_stmt               /* SKIP DOC */
13905:    /* SKIP DOC */
13920:    /* SKIP DOC */
14066:    /* SKIP DOC */
14567:    /* SKIP DOC */
14990:    /* SKIP DOC */
14995:    /* SKIP DOC */
15000:    /* SKIP DOC */
15022:    /* SKIP DOC */
15027:    /* SKIP DOC */
15040:    /* SKIP DOC */
15045:    /* SKIP DOC */
15120:    /* SKIP DOC */
15206:    /* SKIP DOC */
15535:    /* SKIP DOC */
15607:    /* SKIP DOC */
15636:    /* SKIP DOC */

This comment was generated by the SQL Diagram CI workflow.

@ebembi-crdb
Copy link
Copy Markdown
Owner Author

Test: SVG Diagram Rendering

Testing if GitHub renders inline SVG with CSS styling:

<style>.terminal{fill:#FFFFCC;stroke:#000;stroke-width:1}.nonterminal{fill:#FFCCCC;stroke:#000;stroke-width:1}.line{stroke:#000;stroke-width:1;fill:none}text{font-family:monospace;font-size:12px;fill:#000}polygon{fill:#000}</style> ABORT opt_abort_mod

If you see a railroad diagram with yellow and pink boxes above, SVG rendering works!

ebembi-crdb added 2 commits January 19, 2026 16:49
GitHub sanitizes inline SVG in comments, so the previous approach of
embedding SVG directly didn't work. This change switches to PNG images:

- Added Setup Node.js step in generate-diagrams job
- Added Generate PNG previews step using sharp library (300 DPI)
- Updated sync-to-generated-diagrams to copy PNGs to grammar_png/
- Rewrote comment-on-pr to use image markdown with raw.githubusercontent.com URLs

The PNG images are pushed to the generated-diagrams repo and referenced
via raw.githubusercontent.com URLs, which GitHub renders correctly.

Release note: None
Epic: None
This minor change triggers the CI workflow to test the PNG preview
feature in PR comments.

Release note: None
Epic: None
@github-actions
Copy link
Copy Markdown

SQL Diagram Generation Report

✔️ No diagram changes detected


This comment was generated by the SQL Diagram CI workflow.

@github-actions
Copy link
Copy Markdown

SQL Diagram Generation Report

Validation Passed

✔️ No diagram changes detected

SKIP DOC Warnings

The following grammar rules are suppressed from documentation:

The following grammar rules are suppressed with SKIP DOC:
1977:| alter_virtual_cluster_stmt   /* SKIP DOC */
2570:    /* SKIP DOC */
2582:    /* SKIP DOC */
2707:    /* SKIP DOC */
2724:    /* SKIP DOC */
3035:    /* SKIP DOC */
3041:    /* SKIP DOC */
3093:    /* SKIP DOC */
3205:  SET CYCLE                        { /* SKIP DOC */
3591:    /* SKIP DOC */
3612:  INCLUDE_ALL_SECONDARY_TENANTS { /* SKIP DOC */ }
4197:  TENANT  { /* SKIP DOC */ }
4201:  TENANT_NAME { /* SKIP DOC */ }
4792:    /* SKIP DOC */
4935:  /* SKIP DOC */
4974:    /* SKIP DOC */
4981:    /* SKIP DOC */
4989:    /* SKIP DOC */
4999:    /* SKIP DOC */
5011:  TENANT { /* SKIP DOC */ }
6203:    /* SKIP DOC */
6241:    /* SKIP DOC */
6318:    /* SKIP DOC */
6441:    /* SKIP DOC */
6727:   /* SKIP DOC */
6736:    /* SKIP DOC */
7158:    /* SKIP DOC */
7169:    /* SKIP DOC */
7174:    /* SKIP DOC */
7179:    /* SKIP DOC */
7198:    /* SKIP DOC */
7203:    /* SKIP DOC */
7210:    /* SKIP DOC */
7215:    /* SKIP DOC */
7220:    /* SKIP DOC */
7225:    /* SKIP DOC */
7232:    /* SKIP DOC */
7239:    /* SKIP DOC */
7254:		/* SKIP DOC */
7264:    /* SKIP DOC */
7269:    /* SKIP DOC */
7276:    /* SKIP DOC */
7295:    /* SKIP DOC */
7328:    /* SKIP DOC */
7786:| set_exprs_internal   { /* SKIP DOC */ }
8091:    /* SKIP DOC */
8120:    /* SKIP DOC */
8221:    /* SKIP DOC */
8230:    /* SKIP DOC */
8239:    /* SKIP DOC */
8299:    /* SKIP DOC */
8306:    /* SKIP DOC */
8316:    /* SKIP DOC */
8321:    /* SKIP DOC */
8346:    /* SKIP DOC */
8352:    /* SKIP DOC */
8429:    /* SKIP DOC */
8437:    /* SKIP DOC */
8442:		/* SKIP DOC */
8451:    /* SKIP DOC */
8472:    /* SKIP DOC */
8477:    /* SKIP DOC */
8885:    /* SKIP DOC */
8890:    /* SKIP DOC */
8895:    /* SKIP DOC */
8900:    /* SKIP DOC */
8905:    /* SKIP DOC */
8936:| TRACING { /* SKIP DOC */ }
8939:    /* SKIP DOC */
8981:    /* SKIP DOC */
9002:    /* SKIP DOC */
9054:    /* SKIP DOC */
9060:    /* SKIP DOC */
9066:		/* SKIP DOC */
9072:		/* SKIP DOC */
9089:    /* SKIP DOC */
9094:    /* SKIP DOC */
9099:    /* SKIP DOC */
9177: /* SKIP DOC */
9239:    /* SKIP DOC */
9244:    /* SKIP DOC */
9743:    /* SKIP DOC */
9908:    /* SKIP DOC */
9916:    /* SKIP DOC */
9929:    /* SKIP DOC */
9939:   /* SKIP DOC */
9972:    /* SKIP DOC */
9977:    /* SKIP DOC */
9982:    /* SKIP DOC */
10022:    /* SKIP DOC */
10031:    /* SKIP DOC */
10040:    /* SKIP DOC */
10045:    /* SKIP DOC */
10050:    /* SKIP DOC */
10055:    /* SKIP DOC */
10060:    /* SKIP DOC */
10069:    /* SKIP DOC */
10079:    /* SKIP DOC */
10255:| for_with_lookahead_variants { /* SKIP DOC */ }
10262:| FOR_JOB { /* SKIP DOC */ }
10457:    /* SKIP DOC */
10466:    /* SKIP DOC */
10775:    /* SKIP DOC */
10784:    /* SKIP DOC */
11093:    /* SKIP DOC */
11109:    /* SKIP DOC */
11199:| WITH DATA    { /* SKIP DOC */ /* This is the default */ }
11590:    /* SKIP DOC */
12097:| CYCLE                        { /* SKIP DOC */
12153:    /* SKIP DOC */
12234:    /* SKIP DOC */
12257:    /* SKIP DOC */
12535:    /* SKIP DOC */
12541:    /* SKIP DOC */
12546:    /* SKIP DOC */
12551:    /* SKIP DOC */
13575:| abort_stmt               /* SKIP DOC */
13905:    /* SKIP DOC */
13920:    /* SKIP DOC */
14066:    /* SKIP DOC */
14567:    /* SKIP DOC */
14990:    /* SKIP DOC */
14995:    /* SKIP DOC */
15000:    /* SKIP DOC */
15022:    /* SKIP DOC */
15027:    /* SKIP DOC */
15040:    /* SKIP DOC */
15045:    /* SKIP DOC */
15120:    /* SKIP DOC */
15206:    /* SKIP DOC */
15535:    /* SKIP DOC */
15607:    /* SKIP DOC */
15636:    /* SKIP DOC */

This comment was generated by the SQL Diagram CI workflow.

1 similar comment
@github-actions
Copy link
Copy Markdown

SQL Diagram Generation Report

Validation Passed

✔️ No diagram changes detected

SKIP DOC Warnings

The following grammar rules are suppressed from documentation:

The following grammar rules are suppressed with SKIP DOC:
1977:| alter_virtual_cluster_stmt   /* SKIP DOC */
2570:    /* SKIP DOC */
2582:    /* SKIP DOC */
2707:    /* SKIP DOC */
2724:    /* SKIP DOC */
3035:    /* SKIP DOC */
3041:    /* SKIP DOC */
3093:    /* SKIP DOC */
3205:  SET CYCLE                        { /* SKIP DOC */
3591:    /* SKIP DOC */
3612:  INCLUDE_ALL_SECONDARY_TENANTS { /* SKIP DOC */ }
4197:  TENANT  { /* SKIP DOC */ }
4201:  TENANT_NAME { /* SKIP DOC */ }
4792:    /* SKIP DOC */
4935:  /* SKIP DOC */
4974:    /* SKIP DOC */
4981:    /* SKIP DOC */
4989:    /* SKIP DOC */
4999:    /* SKIP DOC */
5011:  TENANT { /* SKIP DOC */ }
6203:    /* SKIP DOC */
6241:    /* SKIP DOC */
6318:    /* SKIP DOC */
6441:    /* SKIP DOC */
6727:   /* SKIP DOC */
6736:    /* SKIP DOC */
7158:    /* SKIP DOC */
7169:    /* SKIP DOC */
7174:    /* SKIP DOC */
7179:    /* SKIP DOC */
7198:    /* SKIP DOC */
7203:    /* SKIP DOC */
7210:    /* SKIP DOC */
7215:    /* SKIP DOC */
7220:    /* SKIP DOC */
7225:    /* SKIP DOC */
7232:    /* SKIP DOC */
7239:    /* SKIP DOC */
7254:		/* SKIP DOC */
7264:    /* SKIP DOC */
7269:    /* SKIP DOC */
7276:    /* SKIP DOC */
7295:    /* SKIP DOC */
7328:    /* SKIP DOC */
7786:| set_exprs_internal   { /* SKIP DOC */ }
8091:    /* SKIP DOC */
8120:    /* SKIP DOC */
8221:    /* SKIP DOC */
8230:    /* SKIP DOC */
8239:    /* SKIP DOC */
8299:    /* SKIP DOC */
8306:    /* SKIP DOC */
8316:    /* SKIP DOC */
8321:    /* SKIP DOC */
8346:    /* SKIP DOC */
8352:    /* SKIP DOC */
8429:    /* SKIP DOC */
8437:    /* SKIP DOC */
8442:		/* SKIP DOC */
8451:    /* SKIP DOC */
8472:    /* SKIP DOC */
8477:    /* SKIP DOC */
8885:    /* SKIP DOC */
8890:    /* SKIP DOC */
8895:    /* SKIP DOC */
8900:    /* SKIP DOC */
8905:    /* SKIP DOC */
8936:| TRACING { /* SKIP DOC */ }
8939:    /* SKIP DOC */
8981:    /* SKIP DOC */
9002:    /* SKIP DOC */
9054:    /* SKIP DOC */
9060:    /* SKIP DOC */
9066:		/* SKIP DOC */
9072:		/* SKIP DOC */
9089:    /* SKIP DOC */
9094:    /* SKIP DOC */
9099:    /* SKIP DOC */
9177: /* SKIP DOC */
9239:    /* SKIP DOC */
9244:    /* SKIP DOC */
9743:    /* SKIP DOC */
9908:    /* SKIP DOC */
9916:    /* SKIP DOC */
9929:    /* SKIP DOC */
9939:   /* SKIP DOC */
9972:    /* SKIP DOC */
9977:    /* SKIP DOC */
9982:    /* SKIP DOC */
10022:    /* SKIP DOC */
10031:    /* SKIP DOC */
10040:    /* SKIP DOC */
10045:    /* SKIP DOC */
10050:    /* SKIP DOC */
10055:    /* SKIP DOC */
10060:    /* SKIP DOC */
10069:    /* SKIP DOC */
10079:    /* SKIP DOC */
10255:| for_with_lookahead_variants { /* SKIP DOC */ }
10262:| FOR_JOB { /* SKIP DOC */ }
10457:    /* SKIP DOC */
10466:    /* SKIP DOC */
10775:    /* SKIP DOC */
10784:    /* SKIP DOC */
11093:    /* SKIP DOC */
11109:    /* SKIP DOC */
11199:| WITH DATA    { /* SKIP DOC */ /* This is the default */ }
11590:    /* SKIP DOC */
12097:| CYCLE                        { /* SKIP DOC */
12153:    /* SKIP DOC */
12234:    /* SKIP DOC */
12257:    /* SKIP DOC */
12535:    /* SKIP DOC */
12541:    /* SKIP DOC */
12546:    /* SKIP DOC */
12551:    /* SKIP DOC */
13575:| abort_stmt               /* SKIP DOC */
13905:    /* SKIP DOC */
13920:    /* SKIP DOC */
14066:    /* SKIP DOC */
14567:    /* SKIP DOC */
14990:    /* SKIP DOC */
14995:    /* SKIP DOC */
15000:    /* SKIP DOC */
15022:    /* SKIP DOC */
15027:    /* SKIP DOC */
15040:    /* SKIP DOC */
15045:    /* SKIP DOC */
15120:    /* SKIP DOC */
15206:    /* SKIP DOC */
15535:    /* SKIP DOC */
15607:    /* SKIP DOC */
15636:    /* SKIP DOC */

This comment was generated by the SQL Diagram CI workflow.

Add the 'region' element to the unlink list for the
alter_database_drop_region diagram to test the PNG preview feature.

Release note: None
Epic: None
@ebembi-crdb ebembi-crdb force-pushed the feature/diagram-preview-in-pr-v2 branch from 2826d21 to d927e38 Compare January 19, 2026 12:59
The previous change detection only looked at BNF file differences.
This update also checks if diagrams.go was modified compared to the
base branch, which catches rendering changes like unlink, replace,
or nosplit that don't affect BNF output but do change the diagrams.

Release note: None
Epic: None
@github-actions
Copy link
Copy Markdown

SQL Diagram Generation Report

✔️ No diagram changes detected


This comment was generated by the SQL Diagram CI workflow.

@github-actions
Copy link
Copy Markdown

SQL Diagram Generation Report

Validation Passed

🔄 Diagram changes detected
A PR will be automatically opened in generated-diagrams to sync these changes.

SKIP DOC Warnings

The following grammar rules are suppressed from documentation:

The following grammar rules are suppressed with SKIP DOC:
1977:| alter_virtual_cluster_stmt   /* SKIP DOC */
2570:    /* SKIP DOC */
2582:    /* SKIP DOC */
2707:    /* SKIP DOC */
2724:    /* SKIP DOC */
3035:    /* SKIP DOC */
3041:    /* SKIP DOC */
3093:    /* SKIP DOC */
3205:  SET CYCLE                        { /* SKIP DOC */
3591:    /* SKIP DOC */
3612:  INCLUDE_ALL_SECONDARY_TENANTS { /* SKIP DOC */ }
4197:  TENANT  { /* SKIP DOC */ }
4201:  TENANT_NAME { /* SKIP DOC */ }
4792:    /* SKIP DOC */
4935:  /* SKIP DOC */
4974:    /* SKIP DOC */
4981:    /* SKIP DOC */
4989:    /* SKIP DOC */
4999:    /* SKIP DOC */
5011:  TENANT { /* SKIP DOC */ }
6203:    /* SKIP DOC */
6241:    /* SKIP DOC */
6318:    /* SKIP DOC */
6441:    /* SKIP DOC */
6727:   /* SKIP DOC */
6736:    /* SKIP DOC */
7158:    /* SKIP DOC */
7169:    /* SKIP DOC */
7174:    /* SKIP DOC */
7179:    /* SKIP DOC */
7198:    /* SKIP DOC */
7203:    /* SKIP DOC */
7210:    /* SKIP DOC */
7215:    /* SKIP DOC */
7220:    /* SKIP DOC */
7225:    /* SKIP DOC */
7232:    /* SKIP DOC */
7239:    /* SKIP DOC */
7254:		/* SKIP DOC */
7264:    /* SKIP DOC */
7269:    /* SKIP DOC */
7276:    /* SKIP DOC */
7295:    /* SKIP DOC */
7328:    /* SKIP DOC */
7786:| set_exprs_internal   { /* SKIP DOC */ }
8091:    /* SKIP DOC */
8120:    /* SKIP DOC */
8221:    /* SKIP DOC */
8230:    /* SKIP DOC */
8239:    /* SKIP DOC */
8299:    /* SKIP DOC */
8306:    /* SKIP DOC */
8316:    /* SKIP DOC */
8321:    /* SKIP DOC */
8346:    /* SKIP DOC */
8352:    /* SKIP DOC */
8429:    /* SKIP DOC */
8437:    /* SKIP DOC */
8442:		/* SKIP DOC */
8451:    /* SKIP DOC */
8472:    /* SKIP DOC */
8477:    /* SKIP DOC */
8885:    /* SKIP DOC */
8890:    /* SKIP DOC */
8895:    /* SKIP DOC */
8900:    /* SKIP DOC */
8905:    /* SKIP DOC */
8936:| TRACING { /* SKIP DOC */ }
8939:    /* SKIP DOC */
8981:    /* SKIP DOC */
9002:    /* SKIP DOC */
9054:    /* SKIP DOC */
9060:    /* SKIP DOC */
9066:		/* SKIP DOC */
9072:		/* SKIP DOC */
9089:    /* SKIP DOC */
9094:    /* SKIP DOC */
9099:    /* SKIP DOC */
9177: /* SKIP DOC */
9239:    /* SKIP DOC */
9244:    /* SKIP DOC */
9743:    /* SKIP DOC */
9908:    /* SKIP DOC */
9916:    /* SKIP DOC */
9929:    /* SKIP DOC */
9939:   /* SKIP DOC */
9972:    /* SKIP DOC */
9977:    /* SKIP DOC */
9982:    /* SKIP DOC */
10022:    /* SKIP DOC */
10031:    /* SKIP DOC */
10040:    /* SKIP DOC */
10045:    /* SKIP DOC */
10050:    /* SKIP DOC */
10055:    /* SKIP DOC */
10060:    /* SKIP DOC */
10069:    /* SKIP DOC */
10079:    /* SKIP DOC */
10255:| for_with_lookahead_variants { /* SKIP DOC */ }
10262:| FOR_JOB { /* SKIP DOC */ }
10457:    /* SKIP DOC */
10466:    /* SKIP DOC */
10775:    /* SKIP DOC */
10784:    /* SKIP DOC */
11093:    /* SKIP DOC */
11109:    /* SKIP DOC */
11199:| WITH DATA    { /* SKIP DOC */ /* This is the default */ }
11590:    /* SKIP DOC */
12097:| CYCLE                        { /* SKIP DOC */
12153:    /* SKIP DOC */
12234:    /* SKIP DOC */
12257:    /* SKIP DOC */
12535:    /* SKIP DOC */
12541:    /* SKIP DOC */
12546:    /* SKIP DOC */
12551:    /* SKIP DOC */
13575:| abort_stmt               /* SKIP DOC */
13905:    /* SKIP DOC */
13920:    /* SKIP DOC */
14066:    /* SKIP DOC */
14567:    /* SKIP DOC */
14990:    /* SKIP DOC */
14995:    /* SKIP DOC */
15000:    /* SKIP DOC */
15022:    /* SKIP DOC */
15027:    /* SKIP DOC */
15040:    /* SKIP DOC */
15045:    /* SKIP DOC */
15120:    /* SKIP DOC */
15206:    /* SKIP DOC */
15535:    /* SKIP DOC */
15607:    /* SKIP DOC */
15636:    /* SKIP DOC */

This comment was generated by the SQL Diagram CI workflow.

The script was created in /tmp but node_modules was installed in the
workspace directory. Changed to create the script in the workspace
where the require() call can find the sharp module.

Release note: None
Epic: None
@ebembi-crdb ebembi-crdb force-pushed the feature/diagram-preview-in-pr-v2 branch from 7d02d79 to 5ea9dd7 Compare January 19, 2026 17:25
The heredoc content starting at column 1 was breaking YAML parsing.
Replaced with node -e inline script which keeps everything in the
YAML string context.

Release note: None
Epic: None
@github-actions
Copy link
Copy Markdown

SQL Diagram Generation Report

Validation Passed

🔄 Diagram changes detected
A PR will be automatically opened in generated-diagrams to sync these changes.

SKIP DOC Warnings

The following grammar rules are suppressed from documentation:

The following grammar rules are suppressed with SKIP DOC:
1977:| alter_virtual_cluster_stmt   /* SKIP DOC */
2570:    /* SKIP DOC */
2582:    /* SKIP DOC */
2707:    /* SKIP DOC */
2724:    /* SKIP DOC */
3035:    /* SKIP DOC */
3041:    /* SKIP DOC */
3093:    /* SKIP DOC */
3205:  SET CYCLE                        { /* SKIP DOC */
3591:    /* SKIP DOC */
3612:  INCLUDE_ALL_SECONDARY_TENANTS { /* SKIP DOC */ }
4197:  TENANT  { /* SKIP DOC */ }
4201:  TENANT_NAME { /* SKIP DOC */ }
4792:    /* SKIP DOC */
4935:  /* SKIP DOC */
4974:    /* SKIP DOC */
4981:    /* SKIP DOC */
4989:    /* SKIP DOC */
4999:    /* SKIP DOC */
5011:  TENANT { /* SKIP DOC */ }
6203:    /* SKIP DOC */
6241:    /* SKIP DOC */
6318:    /* SKIP DOC */
6441:    /* SKIP DOC */
6727:   /* SKIP DOC */
6736:    /* SKIP DOC */
7158:    /* SKIP DOC */
7169:    /* SKIP DOC */
7174:    /* SKIP DOC */
7179:    /* SKIP DOC */
7198:    /* SKIP DOC */
7203:    /* SKIP DOC */
7210:    /* SKIP DOC */
7215:    /* SKIP DOC */
7220:    /* SKIP DOC */
7225:    /* SKIP DOC */
7232:    /* SKIP DOC */
7239:    /* SKIP DOC */
7254:		/* SKIP DOC */
7264:    /* SKIP DOC */
7269:    /* SKIP DOC */
7276:    /* SKIP DOC */
7295:    /* SKIP DOC */
7328:    /* SKIP DOC */
7786:| set_exprs_internal   { /* SKIP DOC */ }
8091:    /* SKIP DOC */
8120:    /* SKIP DOC */
8221:    /* SKIP DOC */
8230:    /* SKIP DOC */
8239:    /* SKIP DOC */
8299:    /* SKIP DOC */
8306:    /* SKIP DOC */
8316:    /* SKIP DOC */
8321:    /* SKIP DOC */
8346:    /* SKIP DOC */
8352:    /* SKIP DOC */
8429:    /* SKIP DOC */
8437:    /* SKIP DOC */
8442:		/* SKIP DOC */
8451:    /* SKIP DOC */
8472:    /* SKIP DOC */
8477:    /* SKIP DOC */
8885:    /* SKIP DOC */
8890:    /* SKIP DOC */
8895:    /* SKIP DOC */
8900:    /* SKIP DOC */
8905:    /* SKIP DOC */
8936:| TRACING { /* SKIP DOC */ }
8939:    /* SKIP DOC */
8981:    /* SKIP DOC */
9002:    /* SKIP DOC */
9054:    /* SKIP DOC */
9060:    /* SKIP DOC */
9066:		/* SKIP DOC */
9072:		/* SKIP DOC */
9089:    /* SKIP DOC */
9094:    /* SKIP DOC */
9099:    /* SKIP DOC */
9177: /* SKIP DOC */
9239:    /* SKIP DOC */
9244:    /* SKIP DOC */
9743:    /* SKIP DOC */
9908:    /* SKIP DOC */
9916:    /* SKIP DOC */
9929:    /* SKIP DOC */
9939:   /* SKIP DOC */
9972:    /* SKIP DOC */
9977:    /* SKIP DOC */
9982:    /* SKIP DOC */
10022:    /* SKIP DOC */
10031:    /* SKIP DOC */
10040:    /* SKIP DOC */
10045:    /* SKIP DOC */
10050:    /* SKIP DOC */
10055:    /* SKIP DOC */
10060:    /* SKIP DOC */
10069:    /* SKIP DOC */
10079:    /* SKIP DOC */
10255:| for_with_lookahead_variants { /* SKIP DOC */ }
10262:| FOR_JOB { /* SKIP DOC */ }
10457:    /* SKIP DOC */
10466:    /* SKIP DOC */
10775:    /* SKIP DOC */
10784:    /* SKIP DOC */
11093:    /* SKIP DOC */
11109:    /* SKIP DOC */
11199:| WITH DATA    { /* SKIP DOC */ /* This is the default */ }
11590:    /* SKIP DOC */
12097:| CYCLE                        { /* SKIP DOC */
12153:    /* SKIP DOC */
12234:    /* SKIP DOC */
12257:    /* SKIP DOC */
12535:    /* SKIP DOC */
12541:    /* SKIP DOC */
12546:    /* SKIP DOC */
12551:    /* SKIP DOC */
13575:| abort_stmt               /* SKIP DOC */
13905:    /* SKIP DOC */
13920:    /* SKIP DOC */
14066:    /* SKIP DOC */
14567:    /* SKIP DOC */
14990:    /* SKIP DOC */
14995:    /* SKIP DOC */
15000:    /* SKIP DOC */
15022:    /* SKIP DOC */
15027:    /* SKIP DOC */
15040:    /* SKIP DOC */
15045:    /* SKIP DOC */
15120:    /* SKIP DOC */
15206:    /* SKIP DOC */
15535:    /* SKIP DOC */
15607:    /* SKIP DOC */
15636:    /* SKIP DOC */

This comment was generated by the SQL Diagram CI workflow.

The HTML files are generated in _bazel/bin/ not bazel-bin/.
Updated all references to use the correct path.

Release note: None
Epic: None
@github-actions
Copy link
Copy Markdown

SQL Diagram Generation Report

Validation Passed

🔄 Diagram changes detected
A PR has been opened to sync these changes: cockroachdb/generated-diagrams#21

Diagram Previews

abort

abort

add_column

add_column

add_constraint

add_constraint

alter

alter

alter_backup

alter_backup

Showing 5 diagram preview(s).

SKIP DOC Warnings

The following grammar rules are suppressed from documentation:

The following grammar rules are suppressed with SKIP DOC:
1977:| alter_virtual_cluster_stmt   /* SKIP DOC */
2570:    /* SKIP DOC */
2582:    /* SKIP DOC */
2707:    /* SKIP DOC */
2724:    /* SKIP DOC */
3035:    /* SKIP DOC */
3041:    /* SKIP DOC */
3093:    /* SKIP DOC */
3205:  SET CYCLE                        { /* SKIP DOC */
3591:    /* SKIP DOC */
3612:  INCLUDE_ALL_SECONDARY_TENANTS { /* SKIP DOC */ }
4197:  TENANT  { /* SKIP DOC */ }
4201:  TENANT_NAME { /* SKIP DOC */ }
4792:    /* SKIP DOC */
4935:  /* SKIP DOC */
4974:    /* SKIP DOC */
4981:    /* SKIP DOC */
4989:    /* SKIP DOC */
4999:    /* SKIP DOC */
5011:  TENANT { /* SKIP DOC */ }
6203:    /* SKIP DOC */
6241:    /* SKIP DOC */
6318:    /* SKIP DOC */
6441:    /* SKIP DOC */
6727:   /* SKIP DOC */
6736:    /* SKIP DOC */
7158:    /* SKIP DOC */
7169:    /* SKIP DOC */
7174:    /* SKIP DOC */
7179:    /* SKIP DOC */
7198:    /* SKIP DOC */
7203:    /* SKIP DOC */
7210:    /* SKIP DOC */
7215:    /* SKIP DOC */
7220:    /* SKIP DOC */
7225:    /* SKIP DOC */
7232:    /* SKIP DOC */
7239:    /* SKIP DOC */
7254:		/* SKIP DOC */
7264:    /* SKIP DOC */
7269:    /* SKIP DOC */
7276:    /* SKIP DOC */
7295:    /* SKIP DOC */
7328:    /* SKIP DOC */
7786:| set_exprs_internal   { /* SKIP DOC */ }
8091:    /* SKIP DOC */
8120:    /* SKIP DOC */
8221:    /* SKIP DOC */
8230:    /* SKIP DOC */
8239:    /* SKIP DOC */
8299:    /* SKIP DOC */
8306:    /* SKIP DOC */
8316:    /* SKIP DOC */
8321:    /* SKIP DOC */
8346:    /* SKIP DOC */
8352:    /* SKIP DOC */
8429:    /* SKIP DOC */
8437:    /* SKIP DOC */
8442:		/* SKIP DOC */
8451:    /* SKIP DOC */
8472:    /* SKIP DOC */
8477:    /* SKIP DOC */
8885:    /* SKIP DOC */
8890:    /* SKIP DOC */
8895:    /* SKIP DOC */
8900:    /* SKIP DOC */
8905:    /* SKIP DOC */
8936:| TRACING { /* SKIP DOC */ }
8939:    /* SKIP DOC */
8981:    /* SKIP DOC */
9002:    /* SKIP DOC */
9054:    /* SKIP DOC */
9060:    /* SKIP DOC */
9066:		/* SKIP DOC */
9072:		/* SKIP DOC */
9089:    /* SKIP DOC */
9094:    /* SKIP DOC */
9099:    /* SKIP DOC */
9177: /* SKIP DOC */
9239:    /* SKIP DOC */
9244:    /* SKIP DOC */
9743:    /* SKIP DOC */
9908:    /* SKIP DOC */
9916:    /* SKIP DOC */
9929:    /* SKIP DOC */
9939:   /* SKIP DOC */
9972:    /* SKIP DOC */
9977:    /* SKIP DOC */
9982:    /* SKIP DOC */
10022:    /* SKIP DOC */
10031:    /* SKIP DOC */
10040:    /* SKIP DOC */
10045:    /* SKIP DOC */
10050:    /* SKIP DOC */
10055:    /* SKIP DOC */
10060:    /* SKIP DOC */
10069:    /* SKIP DOC */
10079:    /* SKIP DOC */
10255:| for_with_lookahead_variants { /* SKIP DOC */ }
10262:| FOR_JOB { /* SKIP DOC */ }
10457:    /* SKIP DOC */
10466:    /* SKIP DOC */
10775:    /* SKIP DOC */
10784:    /* SKIP DOC */
11093:    /* SKIP DOC */
11109:    /* SKIP DOC */
11199:| WITH DATA    { /* SKIP DOC */ /* This is the default */ }
11590:    /* SKIP DOC */
12097:| CYCLE                        { /* SKIP DOC */
12153:    /* SKIP DOC */
12234:    /* SKIP DOC */
12257:    /* SKIP DOC */
12535:    /* SKIP DOC */
12541:    /* SKIP DOC */
12546:    /* SKIP DOC */
12551:    /* SKIP DOC */
13575:| abort_stmt               /* SKIP DOC */
13905:    /* SKIP DOC */
13920:    /* SKIP DOC */
14066:    /* SKIP DOC */
14567:    /* SKIP DOC */
14990:    /* SKIP DOC */
14995:    /* SKIP DOC */
15000:    /* SKIP DOC */
15022:    /* SKIP DOC */
15027:    /* SKIP DOC */
15040:    /* SKIP DOC */
15045:    /* SKIP DOC */
15120:    /* SKIP DOC */
15206:    /* SKIP DOC */
15535:    /* SKIP DOC */
15607:    /* SKIP DOC */
15636:    /* SKIP DOC */

This comment was generated by the SQL Diagram CI workflow.

Use GitHub's <details> tag to hide the verbose SKIP DOC warnings
by default, reducing clutter in PR comments.

Release note: None
Epic: None
@github-actions
Copy link
Copy Markdown

SQL Diagram Generation Report

Validation Passed

🔄 Diagram changes detected
A PR has been opened to sync these changes: cockroachdb/generated-diagrams#22

Diagram Previews

abort

abort

add_column

add_column

add_constraint

add_constraint

alter

alter

alter_backup

alter_backup

Showing 5 diagram preview(s).

SKIP DOC Warnings (click to expand)

The following grammar rules are suppressed from documentation:

The following grammar rules are suppressed with SKIP DOC:
1977:| alter_virtual_cluster_stmt   /* SKIP DOC */
2570:    /* SKIP DOC */
2582:    /* SKIP DOC */
2707:    /* SKIP DOC */
2724:    /* SKIP DOC */
3035:    /* SKIP DOC */
3041:    /* SKIP DOC */
3093:    /* SKIP DOC */
3205:  SET CYCLE                        { /* SKIP DOC */
3591:    /* SKIP DOC */
3612:  INCLUDE_ALL_SECONDARY_TENANTS { /* SKIP DOC */ }
4197:  TENANT  { /* SKIP DOC */ }
4201:  TENANT_NAME { /* SKIP DOC */ }
4792:    /* SKIP DOC */
4935:  /* SKIP DOC */
4974:    /* SKIP DOC */
4981:    /* SKIP DOC */
4989:    /* SKIP DOC */
4999:    /* SKIP DOC */
5011:  TENANT { /* SKIP DOC */ }
6203:    /* SKIP DOC */
6241:    /* SKIP DOC */
6318:    /* SKIP DOC */
6441:    /* SKIP DOC */
6727:   /* SKIP DOC */
6736:    /* SKIP DOC */
7158:    /* SKIP DOC */
7169:    /* SKIP DOC */
7174:    /* SKIP DOC */
7179:    /* SKIP DOC */
7198:    /* SKIP DOC */
7203:    /* SKIP DOC */
7210:    /* SKIP DOC */
7215:    /* SKIP DOC */
7220:    /* SKIP DOC */
7225:    /* SKIP DOC */
7232:    /* SKIP DOC */
7239:    /* SKIP DOC */
7254:		/* SKIP DOC */
7264:    /* SKIP DOC */
7269:    /* SKIP DOC */
7276:    /* SKIP DOC */
7295:    /* SKIP DOC */
7328:    /* SKIP DOC */
7786:| set_exprs_internal   { /* SKIP DOC */ }
8091:    /* SKIP DOC */
8120:    /* SKIP DOC */
8221:    /* SKIP DOC */
8230:    /* SKIP DOC */
8239:    /* SKIP DOC */
8299:    /* SKIP DOC */
8306:    /* SKIP DOC */
8316:    /* SKIP DOC */
8321:    /* SKIP DOC */
8346:    /* SKIP DOC */
8352:    /* SKIP DOC */
8429:    /* SKIP DOC */
8437:    /* SKIP DOC */
8442:		/* SKIP DOC */
8451:    /* SKIP DOC */
8472:    /* SKIP DOC */
8477:    /* SKIP DOC */
8885:    /* SKIP DOC */
8890:    /* SKIP DOC */
8895:    /* SKIP DOC */
8900:    /* SKIP DOC */
8905:    /* SKIP DOC */
8936:| TRACING { /* SKIP DOC */ }
8939:    /* SKIP DOC */
8981:    /* SKIP DOC */
9002:    /* SKIP DOC */
9054:    /* SKIP DOC */
9060:    /* SKIP DOC */
9066:		/* SKIP DOC */
9072:		/* SKIP DOC */
9089:    /* SKIP DOC */
9094:    /* SKIP DOC */
9099:    /* SKIP DOC */
9177: /* SKIP DOC */
9239:    /* SKIP DOC */
9244:    /* SKIP DOC */
9743:    /* SKIP DOC */
9908:    /* SKIP DOC */
9916:    /* SKIP DOC */
9929:    /* SKIP DOC */
9939:   /* SKIP DOC */
9972:    /* SKIP DOC */
9977:    /* SKIP DOC */
9982:    /* SKIP DOC */
10022:    /* SKIP DOC */
10031:    /* SKIP DOC */
10040:    /* SKIP DOC */
10045:    /* SKIP DOC */
10050:    /* SKIP DOC */
10055:    /* SKIP DOC */
10060:    /* SKIP DOC */
10069:    /* SKIP DOC */
10079:    /* SKIP DOC */
10255:| for_with_lookahead_variants { /* SKIP DOC */ }
10262:| FOR_JOB { /* SKIP DOC */ }
10457:    /* SKIP DOC */
10466:    /* SKIP DOC */
10775:    /* SKIP DOC */
10784:    /* SKIP DOC */
11093:    /* SKIP DOC */
11109:    /* SKIP DOC */
11199:| WITH DATA    { /* SKIP DOC */ /* This is the default */ }
11590:    /* SKIP DOC */
12097:| CYCLE                        { /* SKIP DOC */
12153:    /* SKIP DOC */
12234:    /* SKIP DOC */
12257:    /* SKIP DOC */
12535:    /* SKIP DOC */
12541:    /* SKIP DOC */
12546:    /* SKIP DOC */
12551:    /* SKIP DOC */
13575:| abort_stmt               /* SKIP DOC */
13905:    /* SKIP DOC */
13920:    /* SKIP DOC */
14066:    /* SKIP DOC */
14567:    /* SKIP DOC */
14990:    /* SKIP DOC */
14995:    /* SKIP DOC */
15000:    /* SKIP DOC */
15022:    /* SKIP DOC */
15027:    /* SKIP DOC */
15040:    /* SKIP DOC */
15045:    /* SKIP DOC */
15120:    /* SKIP DOC */
15206:    /* SKIP DOC */
15535:    /* SKIP DOC */
15607:    /* SKIP DOC */
15636:    /* SKIP DOC */

This comment was generated by the SQL Diagram CI workflow.

@ebembi-crdb ebembi-crdb changed the title docgen: embed diagram previews in PR comments DEMO: SQL Diagram Automation with PNG Previews Jan 20, 2026
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.

1 participant