assembler-preview #10
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
| name: assembler-preview | |
| on: | |
| pull_request: | |
| types: | |
| - opened | |
| - synchronize | |
| - reopened | |
| - labeled | |
| workflow_dispatch: | |
| inputs: | |
| pr_number: | |
| description: 'Pull Request number to build the assembler preview for' | |
| required: true | |
| type: string | |
| permissions: | |
| contents: read | |
| deployments: write | |
| id-token: write | |
| pull-requests: read | |
| concurrency: | |
| group: assembler-preview-${{ github.event.pull_request.number || inputs.pr_number }} | |
| cancel-in-progress: true | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| env: | |
| PR_NUMBER: ${{ github.event.pull_request.number || inputs.pr_number }} | |
| ASSEMBLER_PREVIEW_PATH_PREFIX: ${{ github.repository }}/docs/${{ github.event.pull_request.number || inputs.pr_number }} | |
| steps: | |
| - name: Get PR details | |
| if: github.event_name == 'workflow_dispatch' | |
| id: pr-details | |
| uses: actions/github-script@v8 | |
| env: | |
| PR_NUMBER: ${{ inputs.pr_number }} | |
| with: | |
| result-encoding: string | |
| script: | | |
| const { owner, repo } = context.repo; | |
| const prNumber = parseInt(process.env.PR_NUMBER, 10); | |
| if (isNaN(prNumber) || prNumber <= 0) { | |
| core.setFailed(`Invalid PR number: ${process.env.PR_NUMBER}`); | |
| return; | |
| } | |
| try { | |
| const { data: pr } = await github.rest.pulls.get({ | |
| owner, | |
| repo, | |
| pull_number: prNumber, | |
| }); | |
| return pr.head.sha; | |
| } catch (error) { | |
| core.setFailed(`Failed to get PR #${prNumber}: ${error.message}`); | |
| } | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ steps.pr-details.outputs.result || github.event.pull_request.head.sha }} | |
| persist-credentials: false | |
| - name: Create Deployment | |
| uses: actions/github-script@v8 | |
| id: deployment | |
| env: | |
| PR_SHA: ${{ steps.pr-details.outputs.result || github.event.pull_request.head.sha }} | |
| with: | |
| result-encoding: string | |
| script: | | |
| const { owner, repo } = context.repo; | |
| const prNumber = process.env.PR_NUMBER; | |
| const environment = 'assembler-preview'; | |
| const task = `assembler-preview-${prNumber}`; | |
| const deployment = await github.rest.repos.createDeployment({ | |
| owner, | |
| repo, | |
| environment, | |
| task, | |
| ref: process.env.PR_SHA, | |
| auto_merge: false, | |
| transient_environment: true, | |
| required_contexts: [], | |
| }) | |
| await github.rest.repos.createDeploymentStatus({ | |
| deployment_id: deployment.data.id, | |
| owner, | |
| repo, | |
| state: "in_progress", | |
| log_url: `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`, | |
| }) | |
| return deployment.data.id | |
| - name: Bootstrap Action Workspace | |
| uses: elastic/docs-builder/.github/actions/bootstrap@main | |
| - name: Build assembled documentation | |
| run: | | |
| yq -i ".environments.preview.path_prefix = \"${ASSEMBLER_PREVIEW_PATH_PREFIX}\"" config/assembler.yml | |
| dotnet run --project src/tooling/docs-builder -- assemble --skip-private-repositories --environment preview | |
| - uses: elastic/docs-builder/.github/actions/aws-auth@main | |
| - name: Upload assembled docs to S3 | |
| id: s3-upload | |
| env: | |
| AWS_RETRY_MODE: standard | |
| AWS_MAX_ATTEMPTS: 6 | |
| run: | | |
| aws s3 sync .artifacts/assembly/${ASSEMBLER_PREVIEW_PATH_PREFIX} "s3://elastic-docs-v3-website-preview/${ASSEMBLER_PREVIEW_PATH_PREFIX}" --delete --no-follow-symlinks | |
| aws cloudfront create-invalidation \ | |
| --distribution-id EKT7LT5PM8RKS \ | |
| --paths "/${ASSEMBLER_PREVIEW_PATH_PREFIX}" "/${ASSEMBLER_PREVIEW_PATH_PREFIX}/*" | |
| - name: Update Deployment Status | |
| if: always() && steps.deployment.outputs.result | |
| uses: actions/github-script@v8 | |
| with: | |
| script: | | |
| await github.rest.repos.createDeploymentStatus({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| deployment_id: ${{ steps.deployment.outputs.result }}, | |
| state: "${{ steps.s3-upload.outcome == 'success' && 'success' || 'failure' }}", | |
| environment_url: `https://docs-v3-preview.elastic.dev/${process.env.ASSEMBLER_PREVIEW_PATH_PREFIX}`, | |
| log_url: `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`, | |
| }) |