This is a fix to pnpm deployment which needs testing as the final part of origin/master release No functional changes * fix(docs): remove stray tool-call tags breaking the MDX build platform/docs/docs/migration-guide/3p12-to-3p13/build-tooling.md ended with two orphan closing tags (leftover tool-call serialization artifacts): </content> </invoke> Docusaurus compiles Markdown as MDX (JSX-aware), so the orphan closing tag failed the docs build: MDX compilation failed ... Unexpected closing slash in tag, expected an open tag first (build-tooling.md line 402) This was the remaining blocker for build-and-deploy-docs once the --no-frozen-lockfile change let the install step succeed. A scan of the docs tree found no other such artifacts. Verified locally: docusaurus build now generates static files with no MDX errors. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Update lockfile and avoid freshness check on every command * fix(release): keep workspace:* in the repo, concretize only at publish The release flow rewrote internal @ohif/* dependency specifiers to the concrete version and committed them, so pnpm-lock.yaml (which records workspace links) drifted from the manifests on every version bump. The resulting ERR_PNPM_OUTDATED_LOCKFILE broke every frozen install: Netlify (viewer-dev), the docs deploy, pnpm's pre-run deps check, and post-merge installs. Keep workspace:* everywhere in the committed repo and move the concrete-version substitution to publish time only: - publish-version.mjs: bump each package's own `version` field only; stop rewriting @ohif/* dependency/peerDependency specifiers. - publish-package.mjs: publish with `pnpm publish --no-git-checks` instead of `npm publish`. pnpm rewrites workspace:* to the exact version in the published tarball; npm would publish the literal "workspace:*", which npm/yarn consumers cannot resolve. - One-time: revert the 25 workspace manifests' @ohif/* specifiers to workspace:* (version fields untouched) and regenerate pnpm-lock.yaml to match. Because internal deps are workspace:* (links, not versions in the lockfile), version bumps no longer change pnpm-lock.yaml, so it stays in sync and frozen installs keep working. Verified: `pnpm install --frozen-lockfile` passes, and `pnpm pack` of @ohif/core emits a tarball whose @ohif/ui dependency is the exact version (3.13.0-beta.92), not workspace:*. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(ci): correct build-docs install comment for workspace:* release flow publish-version.mjs no longer rewrites @ohif/* deps to concrete versions, so the old comment was stale. Internal deps stay workspace:* and the lockfile stays consistent; pnpm publish concretizes only the published tarball. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci(docs): use --frozen-lockfile now that the lockfile no longer drifts With internal deps as workspace:* the lockfile stays in sync across version bumps, so the docs deploy can install frozen -- failing fast on genuine lockfile drift instead of silently reconciling. The --no-frozen-lockfile workaround is no longer needed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci: use --frozen-lockfile in CI install steps now that the lockfile is stable Internal @ohif/* deps are workspace:* so pnpm-lock.yaml no longer drifts; the UNIT_TESTS/BUILD/NPM_PUBLISH installs can run frozen and fail fast on genuine drift. Kept --no-frozen-lockfile only where it is still required: the Dockerfile (platform/docs is excluded from the build context) and the playwright CS3D-version step (mutates @cornerstonejs versions before installing). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test: stability of seg load mpr test * Better drag fix for crosshairs --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
121 lines
5.2 KiB
YAML
121 lines
5.2 KiB
YAML
name: Build and Deploy Docs
|
|
|
|
on:
|
|
push:
|
|
branches: [master]
|
|
|
|
env:
|
|
ACTIONS_STEP_DEBUG: true
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build-and-deploy-docs:
|
|
timeout-minutes: 60
|
|
runs-on: ubuntu-latest
|
|
# Need permissions to read actions and pull requests
|
|
permissions:
|
|
actions: read
|
|
contents: read
|
|
pull-requests: read
|
|
steps:
|
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
with:
|
|
persist-credentials: false
|
|
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
|
|
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
with:
|
|
node-version: 24
|
|
cache: pnpm
|
|
|
|
- name: Configure git for private repos
|
|
run: git config --global url."https://${GITHUB_TOKEN}:x-oauth-basic@github.com/".insteadOf ssh://git@github.com/
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Install dependencies
|
|
# Internal @ohif/* deps are workspace:* in the committed manifests and the
|
|
# lockfile records them as links, so pnpm-lock.yaml stays in sync across
|
|
# version bumps and a frozen install passes. Frozen is the right choice
|
|
# for a deploy job: it fails fast if a PR ever changed a real dependency
|
|
# without committing the lockfile update, instead of silently reconciling.
|
|
# (Exact versions appear only in published tarballs, where pnpm publish
|
|
# rewrites workspace:* at pack time -- not publish-version.mjs.)
|
|
run: pnpm install --frozen-lockfile
|
|
|
|
# Removed Playwright tests and coverage generation steps
|
|
|
|
- name: Find PR and associated workflow run
|
|
id: find_pr_run
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
MERGE_COMMIT_SHA: ${{ github.sha }}
|
|
run: |
|
|
# Find the PR associated with the merge commit SHA
|
|
# Note: This relies on the merge commit being directly pushed to main
|
|
PR_DATA=$(gh pr list --state merged --search "$MERGE_COMMIT_SHA" --json number,headRefOid --jq '.[0]')
|
|
if [ -z "$PR_DATA" ]; then
|
|
echo "::warning::Could not find merged PR for commit $MERGE_COMMIT_SHA. Skipping coverage embedding."
|
|
echo "coverage_found=false" >> $GITHUB_OUTPUT
|
|
exit 0
|
|
fi
|
|
PR_HEAD_SHA=$(echo "$PR_DATA" | jq -r '.headRefOid')
|
|
PR_NUMBER=$(echo "$PR_DATA" | jq -r '.number')
|
|
echo "Found PR Number: $PR_NUMBER"
|
|
echo "Found PR Head SHA: $PR_HEAD_SHA"
|
|
|
|
# Find the latest *successful* playwright.yml run for the PR head commit so we
|
|
# never embed coverage from a failed/incomplete run.
|
|
RUN_ID=$(gh run list --workflow playwright.yml --commit "$PR_HEAD_SHA" --event pull_request --status success --json databaseId --jq '.[0].databaseId')
|
|
|
|
if [ -z "$RUN_ID" ]; then
|
|
echo "::warning::Could not find a successful 'playwright.yml' run for PR $PR_NUMBER (Head SHA: $PR_HEAD_SHA). Skipping coverage embedding."
|
|
echo "coverage_found=false" >> $GITHUB_OUTPUT
|
|
exit 0
|
|
fi
|
|
echo "Found Run ID: $RUN_ID"
|
|
echo "run_id=$RUN_ID" >> $GITHUB_OUTPUT
|
|
echo "coverage_found=true" >> $GITHUB_OUTPUT
|
|
|
|
- name: Download coverage artifact from PR run
|
|
if: steps.find_pr_run.outputs.coverage_found == 'true'
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
run: |
|
|
mkdir -p ./coverage-artifact
|
|
gh run download ${{ steps.find_pr_run.outputs.run_id }} -n coverage-report-pr --dir ./coverage-artifact
|
|
# Verify the artifact contains an HTML coverage report rather than checking a single asset
|
|
if [ -z "$(ls -A ./coverage-artifact)" ] || ! ls ./coverage-artifact/*.html >/dev/null 2>&1; then
|
|
echo "Failed to download or find an HTML coverage report in artifact 'coverage-report-pr' from run ${{ steps.find_pr_run.outputs.run_id }}."
|
|
exit 1
|
|
fi
|
|
echo "Artifact downloaded successfully."
|
|
|
|
- name: Copy coverage to docs static directory
|
|
if: steps.find_pr_run.outputs.coverage_found == 'true'
|
|
run: |
|
|
# Copy files from the downloaded artifact directory
|
|
mkdir -p platform/docs/static/coverage
|
|
cp -r ./coverage-artifact/* platform/docs/static/coverage/
|
|
# Copy specific asset files from the downloaded artifact root to static root
|
|
cp ./coverage-artifact/base.css platform/docs/static/
|
|
cp ./coverage-artifact/block-navigation.js platform/docs/static/
|
|
cp ./coverage-artifact/prettify.css platform/docs/static/
|
|
cp ./coverage-artifact/prettify.js platform/docs/static/
|
|
cp ./coverage-artifact/favicon.png platform/docs/static/
|
|
cp ./coverage-artifact/sort-arrow-sprite.png platform/docs/static/
|
|
cp ./coverage-artifact/sorter.js platform/docs/static/
|
|
|
|
- name: Build docs
|
|
run: pnpm --filter ohif-docs run build
|
|
|
|
- name: Deploy to Netlify
|
|
run: |
|
|
cd platform/docs
|
|
npx netlify-cli deploy --dir=./build --prod
|
|
env:
|
|
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
|
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
|