Skip to content

Commit

Permalink
ci: deploy some apps preview only when PR has label
Browse files Browse the repository at this point in the history
  • Loading branch information
shoom3301 committed Dec 26, 2024
1 parent 22b8f89 commit 45460f3
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 0 deletions.
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,17 @@ In case of problems with the service worker cache you force a reset using
`emergency.js` is not cached by browser and loaded before all.
## Vercel preview build
Since this repo includes multiple apps, we do not want to build all of them on each PR.
Some apps (widget-configurator, cosmos, sdk-tools) are not required to be built on each PR so we run them only a PR is labeled with a specific label.
This label is defined in the project settings on Vercel in `Settings`/`Git`/`Ignored Build Step` script.
For example, the label for the widget-configurator is `preview-widget-cfg`:
```
node tools/scripts/ignore-build-step.js --app=preview-widget-cfg
```
# 📚 Technical Documentation
1. [Oveall Architecture](docs/architecture-overview.md)
Expand Down
63 changes: 63 additions & 0 deletions tools/scripts/ignore-build-step.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
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 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) {
console.log('No PR ID found. Proceeding with build.')
return false
}

if (!appName) {
console.log(`No appName label: ${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)

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)
}
})

0 comments on commit 45460f3

Please sign in to comment.