const slugify = require('slugify') const {exec} = require('child_process') const axios = require('axios') const siteId = process.env.NETLIFY_SITE_ID const branchSlug = slugify(process.env.DRONE_SOURCE_BRANCH) const prNumber = process.env.CI_PULL_REQUEST const alias = `${prNumber}-${branchSlug}` const promiseExec = cmd => { return new Promise((resolve, reject) => { exec(cmd, (error, stdout, stderr) => { if (error) { reject(error) return } resolve(stdout) }) }) } (async function () { let stdout = await promiseExec(`./node_modules/.bin/netlify link --id ${siteId}`) console.log(stdout) stdout = await promiseExec(`./node_modules/.bin/netlify deploy --alias ${alias}`) console.log(stdout) })() // We need the user id of the bot to prevent multiple comments as the PR gets updated const BOT_USER_ID = 8 // The gitea token from the pipeline settings const giteaToken = process.env.BOT_TOKEN // The second, hard coded part of this url is something you need to set in Netlify's site settings. const fullPreviewUrl = `https://${alias}--canopymc.netlify.app` const prIssueCommentsUrl = `https://git.jojodev.com/api/v1/repos/Canopy/website/issues/${prNumber}/comments`; (async function () { // Here we get all comments through Gitea's API to see if there's already a comment from our bot const {data} = await axios.get(prIssueCommentsUrl) const hasComment = data.some(c => c.user.id === BOT_USER_ID) if (hasComment) { console.log(`PR #${prNumber} already has a comment with a link, not sending another comment.`) return } // Once we arrive here we know for sure there's no other comment yet. That means we can proceed to post one. await axios.post(prIssueCommentsUrl, { body: ` Hi ${process.env.CI_COMMIT_AUTHOR}! Thank you for creating a PR! [I've deployed a preview of the changes here.](${fullPreviewUrl}) > Beep boop, I'm a bot. :robot: `, }, { headers: { 'Content-Type': 'application/json', 'accept': 'application/json', 'Authorization': `token ${giteaToken}`, }, }) console.log(`Preview comment sent successfully to PR #${prNumber}!`) })()