diff --git a/.github/workflows/docs-review.yml b/.github/workflows/docs-review.yml index f713c8f74..6a9c31a74 100644 --- a/.github/workflows/docs-review.yml +++ b/.github/workflows/docs-review.yml @@ -473,7 +473,7 @@ jobs: # Summary report summary: - needs: [setup, changes, vale-lint, editorial-review-skill, consolidated-review] + needs: [setup, changes, editorial-review-skill, consolidated-review] if: always() && needs.changes.outputs.docs == 'true' runs-on: ubuntu-latest steps: @@ -482,7 +482,6 @@ jobs: with: script: | const jobs = [ - { name: 'Terminology (Vale)', status: '${{ needs.vale-lint.result }}' }, { name: 'Editorial Review (AI)', status: '${{ needs.editorial-review-skill.result }}' }, { name: 'Consolidated Review', status: '${{ needs.consolidated-review.result }}' } ]; diff --git a/.github/workflows/vale.yml b/.github/workflows/vale.yml new file mode 100644 index 000000000..8e4c2356b --- /dev/null +++ b/.github/workflows/vale.yml @@ -0,0 +1,41 @@ +name: Vale + +# Vale runs on every PR push (cheap, fast, deterministic). Editorial review +# orchestration lives in docs-review.yml and is triggered on demand via +# `/editorial-review`; those two flows are independent. + +on: + pull_request: + paths: + - 'platform-enterprise_docs/**/*.md' + - 'platform-enterprise_docs/**/*.mdx' + - 'platform-cloud/docs/**/*.md' + - 'platform-cloud/docs/**/*.mdx' + - '.github/styles/**' + - '.vale.ini' + workflow_dispatch: + +permissions: + contents: read + pull-requests: write + +jobs: + vale: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # ratchet:actions/checkout@v6.0.2 + + - name: Vale Terminology Check + uses: errata-ai/vale-action@85f9f7f2c5f449ac0ae5b66662961bae3f77ca6a # v2.1.2 + with: + # platform-enterprise_versioned_docs intentionally excluded — frozen + # release snapshots; Vale findings there are noise. + files: | + platform-enterprise_docs + platform-cloud/docs + reporter: github-pr-review + # Substitution rules in .github/styles/Seqera/*.yml are level: error. + # Block the check so the declared severity actually means something. + fail_on_error: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.vale.ini b/.vale.ini index 94321d9f0..1a0403c35 100644 --- a/.vale.ini +++ b/.vale.ini @@ -1,14 +1,13 @@ # Vale configuration for Seqera documentation -# Minimal setup - only catches terminology issues you care about +# Minimal setup — only catches Seqera-specific terminology issues. +# +# Styles are vendored under .github/styles/Seqera/. CI installs Vale via +# errata-ai/vale-action; no package hub fetch is needed. StylesPath = .github/styles -# Download packages from Vale package hub -Packages = write-good - -# Only check markdown files -[*.md] -BasedOnStyles = Seqera, write-good +[*.{md,mdx}] +BasedOnStyles = Seqera # Make context-dependent rules warnings (not blockers) Seqera.Features.CE = warning # CE might match unrelated terms @@ -16,32 +15,6 @@ Seqera.Features.Workspace = warning # Workspace capitalization is context-dep Seqera.Features.PAT = warning # PAT expansion depends on first use Seqera.Products.Tower = warning # Tower is OK in legacy contexts -# Disable noisy write-good rules -write-good.Weasel = NO # "very", "really" sometimes needed -write-good.ThereIs = NO # "There is" is fine in technical docs -write-good.So = NO # "So" is fine for transitions -write-good.Passive = suggestion # Passive voice is OK sometimes - -# Also check MDX files -[*.mdx] -BasedOnStyles = Seqera, write-good - -# Same overrides for MDX -Seqera.Features.CE = warning -Seqera.Features.Workspace = warning -Seqera.Features.PAT = warning -Seqera.Products.Tower = warning -write-good.Weasel = NO -write-good.ThereIs = NO -write-good.So = NO -write-good.Passive = suggestion - -# Ignore code blocks entirely -BlockIgnores = (?s) *(`{3}.*?`{3}) +# Ignore code fences, inline code, and frontmatter +BlockIgnores = (?s) *(`{3}.*?`{3}), (?s)^---.*?--- TokenIgnores = (`[^`]+`) - -# Ignore frontmatter -BlockIgnores = (?s)^---.*?--- - -# Paths to check (relative patterns) -# Vale will check files matching these when run