mirror of https://github.com/lukechilds/docs.git
Thomas Osmonson
4 years ago
4 changed files with 484 additions and 262 deletions
@ -1,138 +0,0 @@ |
|||||
name: Deploy Preview |
|
||||
on: [pull_request] |
|
||||
|
|
||||
jobs: |
|
||||
vercel-deployment: |
|
||||
runs-on: ubuntu-latest |
|
||||
steps: |
|
||||
- name: Cancel Previous Runs |
|
||||
uses: styfle/cancel-workflow-action@0.5.0 |
|
||||
with: |
|
||||
access_token: ${{ github.token }} |
|
||||
- uses: actions/checkout@v2 |
|
||||
- uses: aulneau/vercel-action@v20.0.0 |
|
||||
id: vercel_deployment_preview |
|
||||
if: github.event_name == 'pull_request' |
|
||||
with: |
|
||||
vercel-token: ${{ secrets.VERCEL_TOKEN }} |
|
||||
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }} |
|
||||
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }} |
|
||||
scope: ${{ secrets.VERCEL_SCOPE }} |
|
||||
alias-domains: pr-{{ PR_NUMBER }}.docs.stacks.engineering |
|
||||
- id: file_changes |
|
||||
name: Check diff of PR |
|
||||
uses: trilom/file-changes-action@v1.2.4 |
|
||||
with: |
|
||||
prNumber: ${{ github.event.pull_request.number }} |
|
||||
- name: Comment on PR |
|
||||
uses: actions/github-script@v2 |
|
||||
id: comment |
|
||||
if: github.event_name == 'pull_request' |
|
||||
with: |
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }} |
|
||||
script: | |
|
||||
const getPageUrl = (changed) => { |
|
||||
const pageUrl = changed.replace('src/pages/', '/').replace('.md', '') |
|
||||
if(pageUrl === '/index') return '/' |
|
||||
return pageUrl |
|
||||
} |
|
||||
|
|
||||
const makeUrl = (path, url) => `${url}${path}` |
|
||||
const getScreenshotUrl = (path, url) => `https://api.microlink.io/?url=${makeUrl(path, url)}&meta=false&screenshot=&overlay.browser=dark&screenshot&embed=screenshot.url` |
|
||||
|
|
||||
const getChangedPages = (changed, url) => { |
|
||||
let changedPages = [] |
|
||||
changed.forEach(file => { |
|
||||
if(file.includes('src/pages')){ |
|
||||
const path = getPageUrl(file) |
|
||||
changedPages.push({ |
|
||||
url: makeUrl(path, url), |
|
||||
screenshot: getScreenshotUrl(path, url) |
|
||||
}) |
|
||||
} |
|
||||
}) |
|
||||
// group by screenshots by 3 |
|
||||
const grouped = changedPages.reduce((pv, cv, i) => { |
|
||||
const j = Math.floor(i / 2) |
|
||||
;(pv[j] || (pv[j] = [])).push(cv) |
|
||||
return pv |
|
||||
}, []) |
|
||||
|
|
||||
return grouped |
|
||||
} |
|
||||
|
|
||||
const ellipsis = (txt, l = 25) => { |
|
||||
return txt.length > l ? `…${txt.slice(-22)}` : txt; |
|
||||
}; |
|
||||
|
|
||||
const escapeLinkTitle = txt => { |
|
||||
// escape [ and ] with \ |
|
||||
return txt.replace(/\[/g, '\\[').replace(/\]/g, '\\]'); |
|
||||
}; |
|
||||
|
|
||||
const createChangedPagesMarkdown = (changed, url) => { |
|
||||
if(changed.length === 0) return '' |
|
||||
const grouped = getChangedPages(changed, url) |
|
||||
if(grouped.length === 0) return '' |
|
||||
let md = ` |
|
||||
#### 📝 Changed routes:` |
|
||||
md += grouped |
|
||||
.map( |
|
||||
group => ` |
|
||||
|${group |
|
||||
.map(({ url: routeUrl }) => ` [**${escapeLinkTitle(ellipsis(routeUrl.replace(url, '')))}**](${routeUrl}) |`) |
|
||||
.join('')} |
|
||||
|${':-:|'.repeat(group.length)} |
|
||||
|${group |
|
||||
.map( |
|
||||
({ url: routeUrl, screenshot }) => |
|
||||
`<a href="${routeUrl}"><img src="${screenshot}" alt="Screenshot of ${routeUrl.replace(url, '')}" width="420"></a>` + |
|
||||
'<br />' + |
|
||||
`<sup><a href="${screenshot}">(view full size)</a>` + |
|
||||
' |' |
|
||||
) |
|
||||
.join('')} |
|
||||
`).join(''); |
|
||||
return md |
|
||||
} |
|
||||
|
|
||||
const firstLine = `Blockstack docs have been deployed with Vercel using the code from this PR!`; |
|
||||
const {data} = await github.issues.listComments({ |
|
||||
...context.repo, |
|
||||
issue_number: context.issue.number, |
|
||||
}); |
|
||||
const vercelPreviewURLComment = data.find((comment) => |
|
||||
comment.body.includes(firstLine) |
|
||||
); |
|
||||
const commentId = vercelPreviewURLComment && vercelPreviewURLComment.id || undefined; |
|
||||
|
|
||||
const prUrl = '${{steps.vercel_deployment_preview.outputs.preview-url}}' |
|
||||
const changed = ${{steps.file_changes.outputs.files_modified}} |
|
||||
const added = ${{steps.file_changes.outputs.files_added}} |
|
||||
const removed = ${{steps.file_changes.outputs.files_removed}} |
|
||||
const all_files = ${{steps.file_changes.outputs.files}} |
|
||||
|
|
||||
const commentBody = ` |
|
||||
#### Blockstack Documentation |
|
||||
${ firstLine } |
|
||||
|
|
||||
- [Blockstack Docs](${prUrl}) |
|
||||
${createChangedPagesMarkdown([...changed, ...added], prUrl)} |
|
||||
Built with commit ${context.sha}. |
|
||||
`; |
|
||||
|
|
||||
if (context.issue.number) { |
|
||||
if (commentId) { |
|
||||
await github.issues.updateComment({ |
|
||||
...context.repo, |
|
||||
comment_id: commentId, |
|
||||
body: commentBody, |
|
||||
}); |
|
||||
} else { |
|
||||
await github.issues.createComment({ |
|
||||
...context.repo, |
|
||||
issue_number: context.issue.number, |
|
||||
body: commentBody, |
|
||||
}); |
|
||||
} |
|
||||
} |
|
File diff suppressed because it is too large
Loading…
Reference in new issue