Skip to content

[RHIDP-12950]: Rewrite CQA scripts from bash to Node.js ESM#1989

Merged
themr0c merged 17 commits into
redhat-developer:mainfrom
themr0c:RHIDP-12950-cqa-nodejs-plugin
Apr 1, 2026
Merged

[RHIDP-12950]: Rewrite CQA scripts from bash to Node.js ESM#1989
themr0c merged 17 commits into
redhat-developer:mainfrom
themr0c:RHIDP-12950-cqa-nodejs-plugin

Conversation

@themr0c

@themr0c themr0c commented Apr 1, 2026

Copy link
Copy Markdown
Member

IMPORTANT: Do Not Merge - To be merged by Docs Team Only

Version(s): N/A (build tooling only)
Issue: https://issues.redhat.com/browse/RHIDP-12950
Preview: N/A

Summary

  • Rewrite all 19 CQA bash scripts (cqa-*.sh) to Node.js ESM modules under build/scripts/cqa/
  • Single Vale run with shared cache across CQA-01, CQA-12, and CQA-16 checks (performance: 3m31s → 22s in --all mode)
  • CQA-16 autofix now handles code blocks by adding subs="+attributes,+quotes" to listing/literal blocks
  • Add {product-cli} and {product-local-very-short} attribute enforcement and fix content
  • Update GitHub Actions workflow to use Node.js + Vale instead of bash scripts
  • Add --help flag and alphabetical report ordering

Bugs found in bash scripts during development

The rewrite uncovered several bugs in the original bash implementations:

  • CQA-10: Unsafe sed substitution for titlessed -i "s/^= ${OLD_TITLE}/= ${FIXED_TITLE_RAW}/" breaks when title contains sed metacharacters (/, &, \). Same issue for xref and include path updates. Node.js uses safe replaceAll().
  • CQA-16: Unescaped grep/sed patternsgrep -n "$pattern" and sed "s/$pattern/$fix_attr/g" treat product name patterns as regex. Characters like ., (, ) would be interpreted as metacharacters instead of literals. Node.js uses includes() and replaceAll().
  • CQA-02: Non-portable sed newline insertionsed -i '1s/^/:_mod-docs-content-type: ASSEMBLY\n/' uses \n which is not portable across BSD and GNU sed. Node.js uses array manipulation with readFileSync/writeFileSync.
  • CQA-05: Topic ID fix pattern too restrictivesed 's/\[id="\([^"]*[^}]\)"\]/[id="\1_{context}"]/' requires at least 2 characters in the ID and the second-to-last character to not be }. Single-character IDs or edge cases are missed.
  • CQA-00a: Orphaned module detection uses basename onlyINCLUDED_BASENAMES["$inc_bn"]=1 means modules/foo/bar.adoc and assemblies/bar.adoc both map to bar.adoc. If one is included, the other won't be flagged as orphaned (false negative).
  • CQA-10: Gerund-to-imperative incomplete — The bash case statement only covers a fixed set of gerunds. Unrecognized gerunds fall through to a heuristic that can produce incorrect results. Node.js uses a comprehensive lookup map with a safer fallback.

Test plan

  • Run node build/scripts/cqa/index.js --all and verify all checks report correctly
  • Run node build/scripts/cqa/index.js titles/<title>/master.adoc for a single title
  • Run node build/scripts/cqa/index.js --fix titles/<title>/master.adoc and verify fixes
  • Verify node build/scripts/cqa/index.js --help shows usage information
  • Verify GitHub Actions CQA workflow runs successfully on this PR

🤖 Generated with Claude Code

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Shellcheck Analysis Results

Changed shell scripts in this PR: 21

Scripts analyzed:

  • build/scripts/cqa-00-directory-structure.sh
  • build/scripts/cqa-00-orphaned-modules.sh
  • build/scripts/cqa-01-asciidoctor-dita-vale.sh
  • build/scripts/cqa-02-assembly-template.sh
  • build/scripts/cqa-03-modularization.sh
  • build/scripts/cqa-04-module-templates.sh
  • build/scripts/cqa-05-modular-elements-checklist.sh
  • build/scripts/cqa-06-assembly-scope.sh
  • build/scripts/cqa-07-toc-max-3-levels.sh
  • build/scripts/cqa-08-short-description-content.sh
  • build/scripts/cqa-09-short-description-format.sh
  • build/scripts/cqa-10-titles.sh
  • build/scripts/cqa-11-procedures-prerequisites.sh
  • build/scripts/cqa-12-grammar-and-style-guide.sh
  • build/scripts/cqa-13-content-type.sh
  • build/scripts/cqa-14-no-broken-links.sh
  • build/scripts/cqa-15-redirects.sh
  • build/scripts/cqa-16-official-product-names.sh
  • build/scripts/cqa-17-include-legal-approved-disclaimers.sh
  • build/scripts/cqa-lib.sh
  • build/scripts/cqa.sh

Check the Files changed tab for detailed shellcheck suggestions.

All findings are reported as warnings and won't block the PR.


Automated shellcheck analysis • See shellcheck.net for details

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Content Quality Assessment Results


Automated CQA check run on the entire repository

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Shellcheck Analysis Results

Changed shell scripts in this PR: 21

Scripts analyzed:

  • build/scripts/cqa-00-directory-structure.sh
  • build/scripts/cqa-00-orphaned-modules.sh
  • build/scripts/cqa-01-asciidoctor-dita-vale.sh
  • build/scripts/cqa-02-assembly-template.sh
  • build/scripts/cqa-03-modularization.sh
  • build/scripts/cqa-04-module-templates.sh
  • build/scripts/cqa-05-modular-elements-checklist.sh
  • build/scripts/cqa-06-assembly-scope.sh
  • build/scripts/cqa-07-toc-max-3-levels.sh
  • build/scripts/cqa-08-short-description-content.sh
  • build/scripts/cqa-09-short-description-format.sh
  • build/scripts/cqa-10-titles.sh
  • build/scripts/cqa-11-procedures-prerequisites.sh
  • build/scripts/cqa-12-grammar-and-style-guide.sh
  • build/scripts/cqa-13-content-type.sh
  • build/scripts/cqa-14-no-broken-links.sh
  • build/scripts/cqa-15-redirects.sh
  • build/scripts/cqa-16-official-product-names.sh
  • build/scripts/cqa-17-include-legal-approved-disclaimers.sh
  • build/scripts/cqa-lib.sh
  • build/scripts/cqa.sh

Check the Files changed tab for detailed shellcheck suggestions.

All findings are reported as warnings and won't block the PR.


Automated shellcheck analysis • See shellcheck.net for details

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Content Quality Assessment Results


Automated CQA check run on the entire repository

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Shellcheck Analysis Results

Changed shell scripts in this PR: 21

Scripts analyzed:

  • build/scripts/cqa-00-directory-structure.sh
  • build/scripts/cqa-00-orphaned-modules.sh
  • build/scripts/cqa-01-asciidoctor-dita-vale.sh
  • build/scripts/cqa-02-assembly-template.sh
  • build/scripts/cqa-03-modularization.sh
  • build/scripts/cqa-04-module-templates.sh
  • build/scripts/cqa-05-modular-elements-checklist.sh
  • build/scripts/cqa-06-assembly-scope.sh
  • build/scripts/cqa-07-toc-max-3-levels.sh
  • build/scripts/cqa-08-short-description-content.sh
  • build/scripts/cqa-09-short-description-format.sh
  • build/scripts/cqa-10-titles.sh
  • build/scripts/cqa-11-procedures-prerequisites.sh
  • build/scripts/cqa-12-grammar-and-style-guide.sh
  • build/scripts/cqa-13-content-type.sh
  • build/scripts/cqa-14-no-broken-links.sh
  • build/scripts/cqa-15-redirects.sh
  • build/scripts/cqa-16-official-product-names.sh
  • build/scripts/cqa-17-include-legal-approved-disclaimers.sh
  • build/scripts/cqa-lib.sh
  • build/scripts/cqa.sh

Check the Files changed tab for detailed shellcheck suggestions.

All findings are reported as warnings and won't block the PR.


Automated shellcheck analysis • See shellcheck.net for details

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Content Quality Assessment Results


Automated CQA check run on the entire repository

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Shellcheck Analysis Results

Changed shell scripts in this PR: 21

Scripts analyzed:

  • build/scripts/cqa-00-directory-structure.sh
  • build/scripts/cqa-00-orphaned-modules.sh
  • build/scripts/cqa-01-asciidoctor-dita-vale.sh
  • build/scripts/cqa-02-assembly-template.sh
  • build/scripts/cqa-03-modularization.sh
  • build/scripts/cqa-04-module-templates.sh
  • build/scripts/cqa-05-modular-elements-checklist.sh
  • build/scripts/cqa-06-assembly-scope.sh
  • build/scripts/cqa-07-toc-max-3-levels.sh
  • build/scripts/cqa-08-short-description-content.sh
  • build/scripts/cqa-09-short-description-format.sh
  • build/scripts/cqa-10-titles.sh
  • build/scripts/cqa-11-procedures-prerequisites.sh
  • build/scripts/cqa-12-grammar-and-style-guide.sh
  • build/scripts/cqa-13-content-type.sh
  • build/scripts/cqa-14-no-broken-links.sh
  • build/scripts/cqa-15-redirects.sh
  • build/scripts/cqa-16-official-product-names.sh
  • build/scripts/cqa-17-include-legal-approved-disclaimers.sh
  • build/scripts/cqa-lib.sh
  • build/scripts/cqa.sh

Check the Files changed tab for detailed shellcheck suggestions.

All findings are reported as warnings and won't block the PR.


Automated shellcheck analysis • See shellcheck.net for details

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Content Quality Assessment Results


Automated CQA check run on the entire repository

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Shellcheck Analysis Results

Changed shell scripts in this PR: 21

Scripts analyzed:

  • build/scripts/cqa-00-directory-structure.sh
  • build/scripts/cqa-00-orphaned-modules.sh
  • build/scripts/cqa-01-asciidoctor-dita-vale.sh
  • build/scripts/cqa-02-assembly-template.sh
  • build/scripts/cqa-03-modularization.sh
  • build/scripts/cqa-04-module-templates.sh
  • build/scripts/cqa-05-modular-elements-checklist.sh
  • build/scripts/cqa-06-assembly-scope.sh
  • build/scripts/cqa-07-toc-max-3-levels.sh
  • build/scripts/cqa-08-short-description-content.sh
  • build/scripts/cqa-09-short-description-format.sh
  • build/scripts/cqa-10-titles.sh
  • build/scripts/cqa-11-procedures-prerequisites.sh
  • build/scripts/cqa-12-grammar-and-style-guide.sh
  • build/scripts/cqa-13-content-type.sh
  • build/scripts/cqa-14-no-broken-links.sh
  • build/scripts/cqa-15-redirects.sh
  • build/scripts/cqa-16-official-product-names.sh
  • build/scripts/cqa-17-include-legal-approved-disclaimers.sh
  • build/scripts/cqa-lib.sh
  • build/scripts/cqa.sh

Check the Files changed tab for detailed shellcheck suggestions.

All findings are reported as warnings and won't block the PR.


Automated shellcheck analysis • See shellcheck.net for details

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Content Quality Assessment Results


Automated CQA check run on the entire repository

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Shellcheck Analysis Results

Changed shell scripts in this PR: 21

Scripts analyzed:

  • build/scripts/cqa-00-directory-structure.sh
  • build/scripts/cqa-00-orphaned-modules.sh
  • build/scripts/cqa-01-asciidoctor-dita-vale.sh
  • build/scripts/cqa-02-assembly-template.sh
  • build/scripts/cqa-03-modularization.sh
  • build/scripts/cqa-04-module-templates.sh
  • build/scripts/cqa-05-modular-elements-checklist.sh
  • build/scripts/cqa-06-assembly-scope.sh
  • build/scripts/cqa-07-toc-max-3-levels.sh
  • build/scripts/cqa-08-short-description-content.sh
  • build/scripts/cqa-09-short-description-format.sh
  • build/scripts/cqa-10-titles.sh
  • build/scripts/cqa-11-procedures-prerequisites.sh
  • build/scripts/cqa-12-grammar-and-style-guide.sh
  • build/scripts/cqa-13-content-type.sh
  • build/scripts/cqa-14-no-broken-links.sh
  • build/scripts/cqa-15-redirects.sh
  • build/scripts/cqa-16-official-product-names.sh
  • build/scripts/cqa-17-include-legal-approved-disclaimers.sh
  • build/scripts/cqa-lib.sh
  • build/scripts/cqa.sh

Check the Files changed tab for detailed shellcheck suggestions.

All findings are reported as warnings and won't block the PR.


Automated shellcheck analysis • See shellcheck.net for details

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Content Quality Assessment Results


Automated CQA check run on the entire repository

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Shellcheck Analysis Results

Changed shell scripts in this PR: 21

Scripts analyzed:

  • build/scripts/cqa-00-directory-structure.sh
  • build/scripts/cqa-00-orphaned-modules.sh
  • build/scripts/cqa-01-asciidoctor-dita-vale.sh
  • build/scripts/cqa-02-assembly-template.sh
  • build/scripts/cqa-03-modularization.sh
  • build/scripts/cqa-04-module-templates.sh
  • build/scripts/cqa-05-modular-elements-checklist.sh
  • build/scripts/cqa-06-assembly-scope.sh
  • build/scripts/cqa-07-toc-max-3-levels.sh
  • build/scripts/cqa-08-short-description-content.sh
  • build/scripts/cqa-09-short-description-format.sh
  • build/scripts/cqa-10-titles.sh
  • build/scripts/cqa-11-procedures-prerequisites.sh
  • build/scripts/cqa-12-grammar-and-style-guide.sh
  • build/scripts/cqa-13-content-type.sh
  • build/scripts/cqa-14-no-broken-links.sh
  • build/scripts/cqa-15-redirects.sh
  • build/scripts/cqa-16-official-product-names.sh
  • build/scripts/cqa-17-include-legal-approved-disclaimers.sh
  • build/scripts/cqa-lib.sh
  • build/scripts/cqa.sh

Check the Files changed tab for detailed shellcheck suggestions.

All findings are reported as warnings and won't block the PR.


Automated shellcheck analysis • See shellcheck.net for details

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Content Quality Assessment Results


Automated CQA check run on the entire repository

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Shellcheck Analysis Results

Changed shell scripts in this PR: 21

Scripts analyzed:

  • build/scripts/cqa-00-directory-structure.sh
  • build/scripts/cqa-00-orphaned-modules.sh
  • build/scripts/cqa-01-asciidoctor-dita-vale.sh
  • build/scripts/cqa-02-assembly-template.sh
  • build/scripts/cqa-03-modularization.sh
  • build/scripts/cqa-04-module-templates.sh
  • build/scripts/cqa-05-modular-elements-checklist.sh
  • build/scripts/cqa-06-assembly-scope.sh
  • build/scripts/cqa-07-toc-max-3-levels.sh
  • build/scripts/cqa-08-short-description-content.sh
  • build/scripts/cqa-09-short-description-format.sh
  • build/scripts/cqa-10-titles.sh
  • build/scripts/cqa-11-procedures-prerequisites.sh
  • build/scripts/cqa-12-grammar-and-style-guide.sh
  • build/scripts/cqa-13-content-type.sh
  • build/scripts/cqa-14-no-broken-links.sh
  • build/scripts/cqa-15-redirects.sh
  • build/scripts/cqa-16-official-product-names.sh
  • build/scripts/cqa-17-include-legal-approved-disclaimers.sh
  • build/scripts/cqa-lib.sh
  • build/scripts/cqa.sh

Check the Files changed tab for detailed shellcheck suggestions.

All findings are reported as warnings and won't block the PR.


Automated shellcheck analysis • See shellcheck.net for details

…pots

Add lib/bin.js that resolves git, vale, sed to absolute paths via
`which` at startup. All execFileSync calls now use the resolved paths
instead of bare binary names.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Content Quality Assessment Results


Automated CQA check run on the entire repository

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Shellcheck Analysis Results

Changed shell scripts in this PR: 21

Scripts analyzed:

  • build/scripts/cqa-00-directory-structure.sh
  • build/scripts/cqa-00-orphaned-modules.sh
  • build/scripts/cqa-01-asciidoctor-dita-vale.sh
  • build/scripts/cqa-02-assembly-template.sh
  • build/scripts/cqa-03-modularization.sh
  • build/scripts/cqa-04-module-templates.sh
  • build/scripts/cqa-05-modular-elements-checklist.sh
  • build/scripts/cqa-06-assembly-scope.sh
  • build/scripts/cqa-07-toc-max-3-levels.sh
  • build/scripts/cqa-08-short-description-content.sh
  • build/scripts/cqa-09-short-description-format.sh
  • build/scripts/cqa-10-titles.sh
  • build/scripts/cqa-11-procedures-prerequisites.sh
  • build/scripts/cqa-12-grammar-and-style-guide.sh
  • build/scripts/cqa-13-content-type.sh
  • build/scripts/cqa-14-no-broken-links.sh
  • build/scripts/cqa-15-redirects.sh
  • build/scripts/cqa-16-official-product-names.sh
  • build/scripts/cqa-17-include-legal-approved-disclaimers.sh
  • build/scripts/cqa-lib.sh
  • build/scripts/cqa.sh

Check the Files changed tab for detailed shellcheck suggestions.

All findings are reported as warnings and won't block the PR.


Automated shellcheck analysis • See shellcheck.net for details

Previously the workflow only created a new comment when changed files
were found. Now it always creates or updates the comment, consistent
with other PR workflows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Content Quality Assessment Results


Automated CQA check run on the entire repository

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Shellcheck Analysis Results

Changed shell scripts in this PR: 21

Scripts analyzed:

  • build/scripts/cqa-00-directory-structure.sh
  • build/scripts/cqa-00-orphaned-modules.sh
  • build/scripts/cqa-01-asciidoctor-dita-vale.sh
  • build/scripts/cqa-02-assembly-template.sh
  • build/scripts/cqa-03-modularization.sh
  • build/scripts/cqa-04-module-templates.sh
  • build/scripts/cqa-05-modular-elements-checklist.sh
  • build/scripts/cqa-06-assembly-scope.sh
  • build/scripts/cqa-07-toc-max-3-levels.sh
  • build/scripts/cqa-08-short-description-content.sh
  • build/scripts/cqa-09-short-description-format.sh
  • build/scripts/cqa-10-titles.sh
  • build/scripts/cqa-11-procedures-prerequisites.sh
  • build/scripts/cqa-12-grammar-and-style-guide.sh
  • build/scripts/cqa-13-content-type.sh
  • build/scripts/cqa-14-no-broken-links.sh
  • build/scripts/cqa-15-redirects.sh
  • build/scripts/cqa-16-official-product-names.sh
  • build/scripts/cqa-17-include-legal-approved-disclaimers.sh
  • build/scripts/cqa-lib.sh
  • build/scripts/cqa.sh

Check the Files changed tab for detailed shellcheck suggestions.

All findings are reported as warnings and won't block the PR.


Automated shellcheck analysis • See shellcheck.net for details

@sonarqubecloud

sonarqubecloud Bot commented Apr 1, 2026

Copy link
Copy Markdown

@rhdh-bot

rhdh-bot commented Apr 1, 2026

Copy link
Copy Markdown
Collaborator

Content Quality Assessment Results

CQA Summary Checklist

  • CQA-0: Find orphaned modules and images
    • [AUTOFIX] modules/upgrade_upgrade-rhdh/proc-upgrade-rhdh-using-the-helm-chart.adoc: Orphaned .adoc file (not included anywhere)
  • CQA-0: Verify directory structure (_ naming)
  • CQA-3: Verify content type metadata
  • CQA-13: Verify content matches declared type
  • CQA-10: Verify titles are brief, complete, and descriptive
    • [AUTOFIX] modules/shared/proc-configure-rhdh-local-to-install-plugins-by-using-extensions.adoc: ID: configure-rhdh-local-to-install-plugins-by-using-extensions -> configure-to-install-plugins-by-using-extensions
    • [AUTOFIX] modules/shared/proc-configure-rhdh-local-to-install-plugins-by-using-extensions.adoc: File: proc-configure-rhdh-local-to-install-plugins-by-using-extensions.adoc -> proc-configure-to-install-plugins-by-using-extensions.adoc
  • CQA-8: Verify short description content quality
  • CQA-9: Verify short description format
  • CQA-11: Verify procedure prerequisites
  • CQA-2: Verify assembly structure
  • CQA-5: Verify required modular elements
  • CQA-4: Verify module templates
  • CQA-6: Verify assemblies follow official template (one user story)
  • CQA-7: Verify TOC depth (max 3 levels)
  • CQA-16: Verify official product names
  • CQA-1: Vale AsciiDoc DITA compliance
  • CQA-12: Verify grammar and style (Vale)
  • CQA-17: Verify legal disclaimers for preview features
  • CQA-14: Verify no broken links
  • CQA-15: Check redirects

Total: 19 checks | 17 passed | 2 with issues

To auto-fix what can be auto-fixed, run: ./build/scripts/cqa.sh --fix --all

To fix remaining issues, copy-paste this prompt to Claude: Run ./build/scripts/cqa.sh --all, then for each failing CQA check, read the matching .claude/skills/cqa-*.md skill file and fix the [MANUAL] issues following the skill instructions.


Automated CQA check run on the entire repository

@themr0c themr0c merged commit 85104f1 into redhat-developer:main Apr 1, 2026
10 of 12 checks passed
@themr0c themr0c deleted the RHIDP-12950-cqa-nodejs-plugin branch April 1, 2026 12:47
@themr0c

themr0c commented Apr 1, 2026

Copy link
Copy Markdown
Member Author

/cherry-pick release-1.9-post-cqa

@openshift-cherrypick-robot

Copy link
Copy Markdown
Contributor

@themr0c: new pull request created: #1997

Details

In response to this:

/cherry-pick release-1.9-post-cqa

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

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