diff --git a/.github/workflows/preview-build.yml b/.github/workflows/preview-build.yml index 8fb5ed4bd..9c5889b82 100644 --- a/.github/workflows/preview-build.yml +++ b/.github/workflows/preview-build.yml @@ -43,12 +43,17 @@ on: type: string default: 'false' required: false + disable-comments: + description: 'Disable comments' + type: boolean + default: false + required: false permissions: id-token: write deployments: write contents: read - pull-requests: read + pull-requests: write jobs: match: @@ -231,6 +236,81 @@ jobs: aws cloudfront create-invalidation \ --distribution-id EKT7LT5PM8RKS \ --paths "${PATH_PREFIX}" "${PATH_PREFIX}/*" + + - name: Comment on PR + continue-on-error: true + if: inputs.disable-comments != 'true' && env.MATCH == 'true' && steps.deployment.outputs.result && steps.check-files.outputs.all_changed_files + uses: actions/github-script@v7 + env: + ALL_CHANGED_FILES: ${{ steps.check-files.outputs.all_changed_files }} + with: + script: | + const title = '## 🔍 Preview links for changed docs' + const changedMdFiles = process.env.ALL_CHANGED_FILES + .split(/\s+/) + .filter(i => i.endsWith('.md')) + .filter(i => !i.includes('/_snippets/')); + + if (changedMdFiles.length === 0) { + return; + } + + const toLink = (file) => { + const path = file + .replace('docs/', '') + .replace('/index.md', '') + .replace('.md', ''); + return `[${file}](https://docs-v3-preview.elastic.dev${process.env.PATH_PREFIX}/${path})`; + } + + const links = changedMdFiles.map(toLink) + + const body = [ + title, + ...links.slice(0, 10).map(i => `- ${i}`), + ] + + if (links.length > 10) { + body.push('
'); + body.push('More links …'); + body.push(''); + for (const link of links.slice(10, 100)) { + body.push(`- ${link}`); + } + body.push(''); + body.push('
'); + } + + if (links.length > 100) { + body.push(''); + body.push(`In total, ${links.length} files changed.`); + } + + const owner = context.repo.owner; + const repo = context.repo.repo; + const issue_number = context.payload.pull_request.number; + + // Post or update a single bot comment + const { data: comments } = await github.rest.issues.listComments({ + owner, repo, issue_number + }); + const existing = comments.find(c => + c.user.type === 'Bot' && + c.body.startsWith(title) + ); + if (existing) { + await github.rest.issues.updateComment({ + owner, repo, + comment_id: existing.id, + body: body.join('\n'), + }); + } else { + await github.rest.issues.createComment({ + owner, repo, + issue_number, + body:body.join('\n'), + }); + } - name: Update Link Index if: |