Update pkg.pr.new comment #705
This file contains 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: Update pkg.pr.new comment | |
on: | |
workflow_run: | |
workflows: ['Publish Any Commit'] | |
types: | |
- completed | |
jobs: | |
build: | |
name: 'Update comment' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: output | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
run-id: ${{ github.event.workflow_run.id }} | |
- run: ls -R . | |
- name: 'Post or update comment' | |
uses: actions/github-script@v6 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const fs = require('fs'); | |
const output = JSON.parse(fs.readFileSync('output.json', 'utf8')); | |
const bot_comment_identifier = `<!-- pkg.pr.new comment -->`; | |
const body = (number) => `${bot_comment_identifier} | |
[Playground](https://svelte.dev/playground?version=pr-${number}) | |
\`\`\` | |
${output.packages.map((p) => `pnpm add https://pkg.pr.new/${p.name}@${number}`).join('\n')} | |
\`\`\` | |
`; | |
async function find_bot_comment(issue_number) { | |
if (!issue_number) return null; | |
const comments = await github.rest.issues.listComments({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issue_number, | |
}); | |
return comments.data.find((comment) => | |
comment.body.includes(bot_comment_identifier) | |
); | |
} | |
async function create_or_update_comment(issue_number) { | |
if (!issue_number) { | |
console.log('No issue number provided. Cannot post or update comment.'); | |
return; | |
} | |
const existing_comment = await find_bot_comment(issue_number); | |
if (existing_comment) { | |
await github.rest.issues.updateComment({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
comment_id: existing_comment.id, | |
body: body(issue_number), | |
}); | |
} else { | |
await github.rest.issues.createComment({ | |
issue_number: issue_number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: body(issue_number), | |
}); | |
} | |
} | |
async function log_publish_info() { | |
const svelte_package = output.packages.find(p => p.name === 'svelte'); | |
const svelte_sha = svelte_package.url.replace(/^.+@([^@]+)$/, '$1'); | |
console.log('\n' + '='.repeat(50)); | |
console.log('Publish Information'); | |
console.log('='.repeat(50)); | |
console.log('\nPublished Packages:'); | |
console.log(output.packages.map((p) => `${p.name} - pnpm add https://pkg.pr.new/${p.name}@${p.url.replace(/^.+@([^@]+)$/, '$1')}`).join('\n')); | |
if(svelte_sha){ | |
console.log('\nPlayground URL:'); | |
console.log(`\nhttps://svelte.dev/playground?version=commit-${svelte_sha}`) | |
} | |
console.log('\n' + '='.repeat(50)); | |
} | |
if (output.event_name === 'pull_request') { | |
if (output.number) { | |
await create_or_update_comment(output.number); | |
} | |
} else if (output.event_name === 'push') { | |
const pull_requests = await github.rest.pulls.list({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
state: 'open', | |
head: `${context.repo.owner}:${output.ref.replace('refs/heads/', '')}`, | |
}); | |
if (pull_requests.data.length > 0) { | |
await create_or_update_comment(pull_requests.data[0].number); | |
} else { | |
console.log( | |
'No open pull request found for this push. Logging publish information to console:' | |
); | |
await log_publish_info(); | |
} | |
} |