From 230baa0e12266601282e0feeaa79096e0f72786c Mon Sep 17 00:00:00 2001 From: "Mountain/\\Ash" Date: Tue, 7 May 2024 11:33:13 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=B7=20truncate=20long=20ALIAS=5FDOMAIN?= =?UTF-8?q?S=20values?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + dist/index.js | 85 ++++++++++++++++++++++++++------------------------ src/helpers.js | 42 ++++++++++++++++++++++++- src/index.js | 43 +++---------------------- 4 files changed, 91 insertions(+), 80 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 060dcffa..4ea57ab3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [2.3.2] - 2024-05-07 +- truncate long ALIAS_DOMAINS values - 📦 eslint@9.2.0 ## [2.3.1] - 2024-04-26 diff --git a/dist/index.js b/dist/index.js index 5a04fa08..d50057fc 100644 --- a/dist/index.js +++ b/dist/index.js @@ -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 = '' @@ -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 } /***/ }), @@ -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, @@ -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() @@ -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)) } @@ -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) diff --git a/src/helpers.js b/src/helpers.js index f20439fd..f3d48494 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -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 = '' @@ -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 } \ No newline at end of file diff --git a/src/index.js b/src/index.js index bf939c1b..2168b579 100644 --- a/src/index.js +++ b/src/index.js @@ -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, @@ -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() @@ -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)) } @@ -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)