diff --git a/tools/scripts/ignore-build-step.js b/tools/scripts/ignore-build-step.js new file mode 100644 index 0000000000..181096231a --- /dev/null +++ b/tools/scripts/ignore-build-step.js @@ -0,0 +1,66 @@ +const fetch = require('node-fetch') + +const owner = process.env.VERCEL_GIT_REPO_OWNER +const repo = process.env.VERCEL_GIT_REPO_SLUG +const pullRequestId = process.env.VERCEL_GIT_PULL_REQUEST_ID +const commitRef = process.env.VERCEL_GIT_COMMIT_REF +const githubToken = process.env.GITHUB_TOKEN + +const APP_ARGV = '--app=' +const appName = (() => { + const argv = process.argv.find((arg) => arg.startsWith(APP_ARGV)) + return argv ? argv.slice(APP_ARGV.length) : undefined +})() + +const PREVIEW_IGNORE_BRANCHES = ['main', 'configuration', 'release-please--branches--main'] + +async function shouldSkipBuild() { + if (PREVIEW_IGNORE_BRANCHES.includes(commitRef)) { + console.log(`Skipping build for branch ${commitRef}.`) + return true + } + + if (!pullRequestId || !githubToken || !appName) { + console.log('No PR ID or GitHub token or appName found. Proceeding with build.') + return false + } + + const url = `https://api.github.com/repos/${owner}/${repo}/issues/${pullRequestId}/labels` + + try { + const response = await fetch(url, { + headers: { + Authorization: `Bearer ${githubToken}`, + Accept: 'application/vnd.github.v3+json', + }, + }) + + if (!response.ok) { + console.error('Failed to fetch PR labels:', response.statusText) + return false // Proceed with the build in case of an error + } + + const labels = await response.json() + console.log( + 'PR Labels:', + labels.map((label) => label.name), + ) + const hasAppLabel = labels.some((label) => label.name === appName) + + // Skip the build if the PR doesn't have the app label + return !hasAppLabel + } catch (error) { + console.error('Error fetching PR labels:', error) + return false // Proceed with the build in case of an error + } +} + +shouldSkipBuild().then((skip) => { + if (skip) { + console.log('Skipping build.') + process.exit(0) + } else { + console.log('Proceeding with build.') + process.exit(1) + } +})