fix(state): restore Hermes cron scripts before enabling restored jobs #8613
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. | |
| # SPDX-License-Identifier: Apache-2.0 | |
| name: Docs / Fern Preview | |
| on: | |
| pull_request: | |
| branches: [main] | |
| types: [opened, reopened, synchronize] | |
| paths: | |
| - "docs/**" | |
| - "fern/**" | |
| - "README.md" | |
| - "package.json" | |
| - "package-lock.json" | |
| - "scripts/generate-starter-prompt.mts" | |
| - "scripts/sync-agent-variant-docs.mts" | |
| - ".github/workflows/docs-preview-pr.yaml" | |
| concurrency: | |
| group: fern-preview-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| env: | |
| FERN_STAGING_INSTANCE: nvidia-nemoclaw-staging.docs.buildwithfern.com/nemoclaw | |
| jobs: | |
| preview: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Check Fern preview availability | |
| id: fern-preview | |
| env: | |
| FERN_TOKEN: ${{ secrets.FERN_TOKEN }} | |
| run: | | |
| if [ -n "$FERN_TOKEN" ]; then | |
| echo "enabled=true" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "enabled=false" >> "$GITHUB_OUTPUT" | |
| echo "::notice::Skipping Fern docs preview because FERN_TOKEN is unavailable. This is expected for fork PRs and repos without Fern preview credentials configured." | |
| fi | |
| - name: Setup Node.js | |
| uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 | |
| with: | |
| node-version: "24" | |
| - name: Install docs dependencies | |
| run: npm ci --ignore-scripts | |
| - name: Prepare and validate docs | |
| run: | | |
| npm run docs:prepare | |
| npm run docs:validate | |
| - name: Generate preview URL | |
| if: ${{ steps.fern-preview.outputs.enabled == 'true' }} | |
| id: generate-docs | |
| env: | |
| FERN_TOKEN: ${{ secrets.FERN_TOKEN }} | |
| PREVIEW_ID: pr-${{ github.event.pull_request.number }} | |
| run: | | |
| FERN_VERSION=$(node -p "require('./fern/fern.config.json').version") | |
| set +e | |
| OUTPUT=$(cd fern && npx --yes "fern-api@${FERN_VERSION}" generate --docs --instance "$FERN_STAGING_INSTANCE" --preview --id "$PREVIEW_ID" 2>&1) | |
| STATUS=$? | |
| set -e | |
| echo "$OUTPUT" | |
| URL=$(echo "$OUTPUT" | sed -nE 's/.*Published docs to (https?:\/\/[^[:space:]]+).*/\1/p' | head -n1) | |
| if [ -z "$URL" ]; then | |
| echo "::error::Failed to generate preview URL. See fern output above." | |
| exit "$STATUS" | |
| fi | |
| FERN_ORG=$(node -p "require('./fern/fern.config.json').organization") | |
| INSTANCE_PATH="${FERN_STAGING_INSTANCE#*/}" | |
| if [[ "$INSTANCE_PATH" == "$FERN_STAGING_INSTANCE" ]]; then | |
| INSTANCE_PATH="" | |
| else | |
| INSTANCE_PATH="/${INSTANCE_PATH}" | |
| fi | |
| EXPECTED_BASE="https://${FERN_ORG}-preview-${PREVIEW_ID}.docs.buildwithfern.com${INSTANCE_PATH}" | |
| EXPECTED_PREFIX="${EXPECTED_BASE}/" | |
| if [[ "$URL" != "$EXPECTED_BASE" && "$URL" != "${EXPECTED_PREFIX}"* ]]; then | |
| echo "::error::Preview URL must match ${EXPECTED_BASE} or start with ${EXPECTED_PREFIX}; got ${URL}." | |
| exit 1 | |
| fi | |
| echo "preview_url=$URL" >> "$GITHUB_OUTPUT" | |
| - name: Post or update PR comment | |
| if: ${{ steps.fern-preview.outputs.enabled == 'true' }} | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| PR_NUMBER: ${{ github.event.pull_request.number }} | |
| PREVIEW_URL: ${{ steps.generate-docs.outputs.preview_url }} | |
| run: | | |
| BODY=":herb: **Preview your docs:** <${PREVIEW_URL}>" | |
| MARKER="<!-- fern-preview-docs -->" | |
| BODY="${BODY} | |
| ${MARKER}" | |
| COMMENT_ID=$(gh api "repos/${{ github.repository }}/issues/${PR_NUMBER}/comments" \ | |
| --jq ".[] | select(.body | contains(\"${MARKER}\")) | .id" | head -1) | |
| if [ -n "$COMMENT_ID" ]; then | |
| gh api "repos/${{ github.repository }}/issues/comments/${COMMENT_ID}" \ | |
| -X PATCH -f body="$BODY" | |
| else | |
| gh api "repos/${{ github.repository }}/issues/${PR_NUMBER}/comments" \ | |
| -f body="$BODY" | |
| fi |