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 }}