Skip to content

Commit

Permalink
👷 truncate long ALIAS_DOMAINS values
Browse files Browse the repository at this point in the history
  • Loading branch information
mountainash authored May 7, 2024
1 parent 2649834 commit 230baa0
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 80 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

## [2.3.2] - 2024-05-07

- truncate long ALIAS_DOMAINS values
- 📦 [email protected]

## [2.3.1] - 2024-04-26
Expand Down
85 changes: 45 additions & 40 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -32217,9 +32217,18 @@ module.exports = {

const { StringDecoder } = __nccwpck_require__(1576)

const crypto = __nccwpck_require__(6113)
const core = __nccwpck_require__(2186)
const { exec } = __nccwpck_require__(1514)

const {
USER,
REPOSITORY,
BRANCH,
PR_NUMBER,
SHA
} = __nccwpck_require__(7779)

const execCmd = async (command, args, cwd) => {
const options = {}
let stdout = ''
Expand Down Expand Up @@ -32275,10 +32284,41 @@ const removeSchema = (url) => {
return url.replace(regex, '')
}

// Following https://perishablepress.com/stop-using-unsafe-characters-in-urls/ only allow characters that won't break as a domain name
const urlSafeParameter = (input) => input.replace(/[^a-z0-9~]/gi, '-')

const aliasFormatting = (alias) => {
let validAlias = alias.replace('{USER}', urlSafeParameter(USER))
.replace('{REPO}', urlSafeParameter(REPOSITORY))
.replace('{BRANCH}', urlSafeParameter(BRANCH))
.replace('{PR}', PR_NUMBER)
.replace('{SHA}', SHA.substring(0, 7))
.toLowerCase()

const previewDomainSuffix = '.vercel.app'

if (validAlias.endsWith(previewDomainSuffix)) {
let prefix = validAlias.substring(0, validAlias.indexOf(previewDomainSuffix))

if (prefix.length >= 60) {
core.warning(`⚠️ The alias ${ prefix } exceeds 60 chars in length, truncating using vercel's rules. See https://vercel.com/docs/concepts/deployments/automatic-urls#automatic-branch-urls`)
prefix = prefix.substring(0, 55)
const uniqueSuffix = crypto.createHash('sha256')
.update(`git-${ BRANCH }-${ REPOSITORY }`)
.digest('hex')
.slice(0, 6)

validAlias = `${ prefix }-${ uniqueSuffix }${ previewDomainSuffix }`
}
}
return validAlias
}

module.exports = {
execCmd,
addSchema,
removeSchema
removeSchema,
aliasFormatting
}

/***/ }),
Expand Down Expand Up @@ -32496,15 +32536,11 @@ var __webpack_exports__ = {};
const core = __nccwpck_require__(2186)
const Github = __nccwpck_require__(2196)
const Vercel = __nccwpck_require__(2463)
const { addSchema } = __nccwpck_require__(5946)
const crypto = __nccwpck_require__(6113)
const { addSchema, aliasFormatting } = __nccwpck_require__(5946)

const {
GITHUB_DEPLOYMENT,
USER,
REPOSITORY,
BRANCH,
PR_NUMBER,
SHA,
IS_PR,
PR_LABELS,
Expand All @@ -32520,9 +32556,6 @@ const {
ACTOR
} = __nccwpck_require__(7779)

// Following https://perishablepress.com/stop-using-unsafe-characters-in-urls/ only allow characters that won't break as a domainname
const urlSafeParameter = (input) => input.replace(/[^a-z0-9~]/gi, '-')

const run = async () => {
const github = Github.init()

Expand Down Expand Up @@ -32598,33 +32631,10 @@ const run = async () => {
throw new Error('🛑 invalid type for PR_PREVIEW_DOMAIN')
}

const alias = PR_PREVIEW_DOMAIN.replace('{USER}', urlSafeParameter(USER))
.replace('{REPO}', urlSafeParameter(REPOSITORY))
.replace('{BRANCH}', urlSafeParameter(BRANCH))
.replace('{PR}', PR_NUMBER)
.replace('{SHA}', SHA.substring(0, 7))
.toLowerCase()

const previewDomainSuffix = '.vercel.app'
let nextAlias = alias

if (alias.endsWith(previewDomainSuffix)) {
let prefix = alias.substring(0, alias.indexOf(previewDomainSuffix))

if (prefix.length >= 60) {
core.warning(`⚠️ The alias ${ prefix } exceeds 60 chars in length, truncating using vercel's rules. See https://vercel.com/docs/concepts/deployments/automatic-urls#automatic-branch-urls`)
prefix = prefix.substring(0, 55)
const uniqueSuffix = crypto.createHash('sha256')
.update(`git-${ BRANCH }-${ REPOSITORY }`)
.digest('hex')
.slice(0, 6)

nextAlias = `${ prefix }-${ uniqueSuffix }${ previewDomainSuffix }`
core.info(`Updated domain alias: ${ nextAlias }`)
}
}
const nextAlias = aliasFormatting(PR_PREVIEW_DOMAIN)

await vercel.assignAlias(nextAlias)
core.info(`Updated domain alias: ${ nextAlias }`)

deploymentUrls.push(addSchema(nextAlias))
}
Expand All @@ -32640,12 +32650,7 @@ const run = async () => {
// check for "falsey" can often be null and empty values
if (!ALIAS_DOMAINS[i]) continue

const alias = ALIAS_DOMAINS[i]
.replace('{USER}', urlSafeParameter(USER))
.replace('{REPO}', urlSafeParameter(REPOSITORY))
.replace('{BRANCH}', urlSafeParameter(BRANCH))
.replace('{SHA}', SHA.substring(0, 7))
.toLowerCase()
const alias = aliasFormatting(ALIAS_DOMAINS[i])

await vercel.assignAlias(alias)

Expand Down
42 changes: 41 additions & 1 deletion src/helpers.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
const { StringDecoder } = require('string_decoder')

const crypto = require('crypto')
const core = require('@actions/core')
const { exec } = require('@actions/exec')

const {
USER,
REPOSITORY,
BRANCH,
PR_NUMBER,
SHA
} = require('./config')

const execCmd = async (command, args, cwd) => {
const options = {}
let stdout = ''
Expand Down Expand Up @@ -58,8 +67,39 @@ const removeSchema = (url) => {
return url.replace(regex, '')
}

// Following https://perishablepress.com/stop-using-unsafe-characters-in-urls/ only allow characters that won't break as a domain name
const urlSafeParameter = (input) => input.replace(/[^a-z0-9~]/gi, '-')

const aliasFormatting = (alias) => {
let validAlias = alias.replace('{USER}', urlSafeParameter(USER))
.replace('{REPO}', urlSafeParameter(REPOSITORY))
.replace('{BRANCH}', urlSafeParameter(BRANCH))
.replace('{PR}', PR_NUMBER)
.replace('{SHA}', SHA.substring(0, 7))
.toLowerCase()

const previewDomainSuffix = '.vercel.app'

if (validAlias.endsWith(previewDomainSuffix)) {
let prefix = validAlias.substring(0, validAlias.indexOf(previewDomainSuffix))

if (prefix.length >= 60) {
core.warning(`⚠️ The alias ${ prefix } exceeds 60 chars in length, truncating using vercel's rules. See https://vercel.com/docs/concepts/deployments/automatic-urls#automatic-branch-urls`)
prefix = prefix.substring(0, 55)
const uniqueSuffix = crypto.createHash('sha256')
.update(`git-${ BRANCH }-${ REPOSITORY }`)
.digest('hex')
.slice(0, 6)

validAlias = `${ prefix }-${ uniqueSuffix }${ previewDomainSuffix }`
}
}
return validAlias
}

module.exports = {
execCmd,
addSchema,
removeSchema
removeSchema,
aliasFormatting
}
43 changes: 4 additions & 39 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
const core = require('@actions/core')
const Github = require('./github')
const Vercel = require('./vercel')
const { addSchema } = require('./helpers')
const crypto = require('crypto')
const { addSchema, aliasFormatting } = require('./helpers')

const {
GITHUB_DEPLOYMENT,
USER,
REPOSITORY,
BRANCH,
PR_NUMBER,
SHA,
IS_PR,
PR_LABELS,
Expand All @@ -25,9 +21,6 @@ const {
ACTOR
} = require('./config')

// Following https://perishablepress.com/stop-using-unsafe-characters-in-urls/ only allow characters that won't break as a domainname
const urlSafeParameter = (input) => input.replace(/[^a-z0-9~]/gi, '-')

const run = async () => {
const github = Github.init()

Expand Down Expand Up @@ -103,33 +96,10 @@ const run = async () => {
throw new Error('🛑 invalid type for PR_PREVIEW_DOMAIN')
}

const alias = PR_PREVIEW_DOMAIN.replace('{USER}', urlSafeParameter(USER))
.replace('{REPO}', urlSafeParameter(REPOSITORY))
.replace('{BRANCH}', urlSafeParameter(BRANCH))
.replace('{PR}', PR_NUMBER)
.replace('{SHA}', SHA.substring(0, 7))
.toLowerCase()

const previewDomainSuffix = '.vercel.app'
let nextAlias = alias

if (alias.endsWith(previewDomainSuffix)) {
let prefix = alias.substring(0, alias.indexOf(previewDomainSuffix))

if (prefix.length >= 60) {
core.warning(`⚠️ The alias ${ prefix } exceeds 60 chars in length, truncating using vercel's rules. See https://vercel.com/docs/concepts/deployments/automatic-urls#automatic-branch-urls`)
prefix = prefix.substring(0, 55)
const uniqueSuffix = crypto.createHash('sha256')
.update(`git-${ BRANCH }-${ REPOSITORY }`)
.digest('hex')
.slice(0, 6)

nextAlias = `${ prefix }-${ uniqueSuffix }${ previewDomainSuffix }`
core.info(`Updated domain alias: ${ nextAlias }`)
}
}
const nextAlias = aliasFormatting(PR_PREVIEW_DOMAIN)

await vercel.assignAlias(nextAlias)
core.info(`Updated domain alias: ${ nextAlias }`)

deploymentUrls.push(addSchema(nextAlias))
}
Expand All @@ -145,12 +115,7 @@ const run = async () => {
// check for "falsey" can often be null and empty values
if (!ALIAS_DOMAINS[i]) continue

const alias = ALIAS_DOMAINS[i]
.replace('{USER}', urlSafeParameter(USER))
.replace('{REPO}', urlSafeParameter(REPOSITORY))
.replace('{BRANCH}', urlSafeParameter(BRANCH))
.replace('{SHA}', SHA.substring(0, 7))
.toLowerCase()
const alias = aliasFormatting(ALIAS_DOMAINS[i])

await vercel.assignAlias(alias)

Expand Down

0 comments on commit 230baa0

Please sign in to comment.