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 = ``; 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(); } }