125 lines
5.7 KiB
YAML
125 lines
5.7 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
|
|
# The docs are already built by the "Build docs" step above, so pass
|
|
# --no-build: `netlify deploy` runs the build command by default, which
|
|
# would otherwise pick up the repo-root netlify.toml (configured for the
|
|
# main viewer app) and build the wrong project. --dir is resolved
|
|
# relative to the repo root (the netlify.toml base), not the cwd, so it
|
|
# must be the full path to the prebuilt docs output.
|
|
run: npx netlify-cli deploy --dir=platform/docs/build --prod --no-build
|
|
env:
|
|
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
|
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
|