Files
pnpm/.github/workflows/sync-docs.yml
T
34277faf16 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#17312)
* chore: update dependencies, Node.js, pnpm, and GitHub Actions

* chore: update pnpm/setup to v3.1.2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: update pnpm/setup examples to v3.1.2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 10:28:02 +01:00

177 lines
7.1 KiB
YAML

name: Sync documentation
on:
# A maintainer publishes the draft GitHub release after approving the staged
# npm packages. A release event runs the workflow file from the tag, so it
# only dispatches the sync from the default branch. The token is limited to
# the push step.
release:
types: [published]
workflow_dispatch:
inputs:
release_tag:
description: Optional published release tag; leave empty to publish all docs from main
required: false
type: string
docs_commit:
description: Optional full SHA of a docs-only correction based on that tag
type: string
permissions:
contents: read
jobs:
dispatch:
if: >-
github.event_name == 'release' &&
(startsWith(github.event.release.tag_name, 'v11.') ||
startsWith(github.event.release.tag_name, 'v12.') ||
startsWith(github.event.release.tag_name, 'pnpr@'))
runs-on: ubuntu-latest
permissions:
actions: write
steps:
- name: Dispatch the sync from the default branch
env:
GH_TOKEN: ${{ github.token }}
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
RELEASE_TAG: ${{ github.event.release.tag_name }}
run: gh workflow run sync-docs.yml -R "$GITHUB_REPOSITORY" --ref "$DEFAULT_BRANCH" -f release_tag="$RELEASE_TAG"
sync:
if: github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
outputs:
publish: ${{ steps.source.outputs.publish }}
main_sync: ${{ steps.source.outputs.main_sync }}
docs_commit: ${{ steps.source.outputs.docs_commit }}
line: ${{ steps.source.outputs.line }}
version: ${{ steps.source.outputs.version }}
website_commit: ${{ steps.website.outputs.commit }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
persist-credentials: false
- name: Select the main or released documentation snapshot
id: source
env:
RELEASE_TAG: ${{ inputs.release_tag }}
DOCS_COMMIT: ${{ inputs.docs_commit }}
run: |
export GNUPGHOME="$(mktemp -d)"
chmod 700 "$GNUPGHOME"
trap 'rm -rf "$GNUPGHOME"' EXIT
gpg --batch --quiet --import .github/release-keys/*.asc
node .github/scripts/prepare-docs-sync.mjs
- name: Check out the documentation snapshot
if: steps.source.outputs.publish == 'true'
env:
DOCS_COMMIT: ${{ steps.source.outputs.docs_commit }}
run: git worktree add --detach "$RUNNER_TEMP/docs-source" "$DOCS_COMMIT"
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
if: steps.source.outputs.publish == 'true'
with:
repository: pnpm/pnpm.io
ref: main
path: website
persist-credentials: false
- name: Record the website revision before executing website code
if: steps.source.outputs.publish == 'true'
id: website
working-directory: website
run: echo "commit=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
- uses: pnpm/setup@fa36a5ef7dcdefc3a7cb25655c122e00cf6e636e # v3.1.2
if: steps.source.outputs.publish == 'true'
with:
runtime: node@22
install: false
- name: Install the website dependencies
if: steps.source.outputs.publish == 'true'
working-directory: website
run: pnpm install --frozen-lockfile
- name: Sync and verify the pages
if: steps.source.outputs.publish == 'true'
working-directory: website
env:
MAIN_SYNC: ${{ steps.source.outputs.main_sync }}
LINE: ${{ steps.source.outputs.line }}
VERSION: ${{ steps.source.outputs.version }}
RELEASE_COMMIT: ${{ steps.source.outputs.release_commit }}
DOCS_COMMIT: ${{ steps.source.outputs.docs_commit }}
run: |
if [ "$MAIN_SYNC" = true ]; then
node scripts/sync-docs.mjs "$RUNNER_TEMP/docs-source" --preview
else
node scripts/sync-docs.mjs "$RUNNER_TEMP/docs-source" "$LINE" "$VERSION" "$RELEASE_COMMIT" "$DOCS_COMMIT"
fi
pnpm build
pnpm check-urls
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
if: steps.source.outputs.publish == 'true'
with:
name: generated-documentation
retention-days: 1
if-no-files-found: error
path: |
website/docs
website/pnpr-docs
website/versioned_docs/version-11.x
website/sidebars.json
website/sidebars-pnpr.json
website/versioned_sidebars/version-11.x-sidebars.json
website/static/docs-assets
website/blog/releases
website/docs-sync.json
publish:
needs: sync
if: needs.sync.outputs.publish == 'true'
runs-on: ubuntu-latest
environment: docs-sync
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: pnpm/pnpm.io
ref: ${{ needs.sync.outputs.website_commit }}
path: website
persist-credentials: false
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
with:
name: generated-documentation
path: generated-documentation
- name: Copy only documentation into the clean checkout
run: node .github/scripts/copy-docs-artifact.mjs generated-documentation website
- name: Commit the generated documentation
id: commit
working-directory: website
env:
MAIN_SYNC: ${{ needs.sync.outputs.main_sync }}
DOCS_COMMIT: ${{ needs.sync.outputs.docs_commit }}
VERSION: ${{ needs.sync.outputs.version }}
LINE: ${{ needs.sync.outputs.line }}
run: |
git add docs pnpr-docs sidebars-pnpr.json versioned_docs/version-11.x versioned_sidebars/version-11.x-sidebars.json sidebars.json static/docs-assets blog/releases docs-sync.json
if git diff --cached --quiet; then exit 0; fi
git config user.name 'pnpm docs sync'
git config user.email 'pnpm-docs-sync@users.noreply.github.com'
if [ "$MAIN_SYNC" = true ]; then
title="docs: sync product documentation from main"
else
title="docs: sync ${LINE} documentation for ${VERSION}"
fi
git commit -m "$title" -m "Generated from pnpm/pnpm commit ${DOCS_COMMIT}. Written by release automation."
echo 'changed=true' >> "$GITHUB_OUTPUT"
- name: Push the verified documentation commit
if: steps.commit.outputs.changed == 'true'
working-directory: website
env:
GH_TOKEN: ${{ secrets.DOCS_SYNC_TOKEN }}
run: |
test -n "$GH_TOKEN" || { echo '::error::Configure DOCS_SYNC_TOKEN in the docs-sync environment'; exit 1; }
gh auth setup-git
git push origin HEAD:main