Compare commits

...

3 Commits

Author SHA1 Message Date
Vercel Release Bot
d3c84e5d2a Version Packages (#10398)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-24 16:04:39 -05:00
Andrew Barba
9e3827c785 [build-utils] Support serverless function architecture (#10392)
# Problem

Framework authors often produce build outputs from platforms like Github
Actions or M1 Macs where the arm64 architecture is being used. They then
deploy these outputs to Vercel using `vercel deploy`, bypassing Vercel's
build system. Today they must cross compile to x86_64 in order to deploy
compatible Serverless functions to Vercel.

# Solution

Allow Framework authors to detect the current architecture and specify
either x86_64 or arm64 when deploying a Serverless function to Vercel.

# Related PRs

https://github.com/vercel/api/pull/21559

https://github.com/vercel/proxy/pull/6901

https://github.com/vercel/front/pull/24924
2023-08-24 16:44:30 -04:00
Trek Glowacki
fb6d77afac [cli] Improve error messages for JSON parse issues (#10396) 2023-08-24 15:09:13 -05:00
31 changed files with 154 additions and 60 deletions

View File

@@ -1,5 +1,12 @@
# @vercel-internals/types
## 1.0.8
### Patch Changes
- Updated dependencies [[`9e3827c78`](https://github.com/vercel/vercel/commit/9e3827c785e1bc45f2bed421132167381481770f)]:
- @vercel/build-utils@7.1.0
## 1.0.7
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"private": true,
"name": "@vercel-internals/types",
"version": "1.0.7",
"version": "1.0.8",
"types": "index.d.ts",
"main": "index.d.ts",
"files": [
@@ -10,7 +10,7 @@
"dependencies": {
"@types/node": "14.14.31",
"@vercel-internals/constants": "1.0.4",
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"@vercel/routing-utils": "3.0.0"
},
"devDependencies": {

View File

@@ -1,5 +1,11 @@
# @vercel/build-utils
## 7.1.0
### Minor Changes
- Support serverless function architecture ([#10392](https://github.com/vercel/vercel/pull/10392))
## 7.0.0
### Major Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/build-utils",
"version": "7.0.0",
"version": "7.1.0",
"license": "Apache-2.0",
"main": "./dist/index.js",
"types": "./dist/index.d.js",

View File

@@ -13,9 +13,12 @@ interface Environment {
export type LambdaOptions = LambdaOptionsWithFiles | LambdaOptionsWithZipBuffer;
export type LambdaArchitecture = 'x86_64' | 'arm64';
export interface LambdaOptionsBase {
handler: string;
runtime: string;
architecture?: LambdaArchitecture;
memory?: number;
maxDuration?: number;
environment?: Environment;
@@ -62,6 +65,7 @@ export class Lambda {
files?: Files;
handler: string;
runtime: string;
architecture?: LambdaArchitecture;
memory?: number;
maxDuration?: number;
environment: Environment;
@@ -81,6 +85,7 @@ export class Lambda {
handler,
runtime,
maxDuration,
architecture,
memory,
environment = {},
allowQuery,
@@ -102,6 +107,13 @@ export class Lambda {
assert(typeof runtime === 'string', '"runtime" is not a string');
assert(typeof environment === 'object', '"environment" is not an object');
if (architecture !== undefined) {
assert(
architecture === 'x86_64' || architecture === 'arm64',
'"architecture" must be either "x86_64" or "arm64"'
);
}
if (memory !== undefined) {
assert(typeof memory === 'number', '"memory" is not a number');
}
@@ -159,6 +171,7 @@ export class Lambda {
this.files = 'files' in opts ? opts.files : undefined;
this.handler = handler;
this.runtime = runtime;
this.architecture = architecture;
this.memory = memory;
this.maxDuration = maxDuration;
this.environment = environment;

View File

@@ -1,5 +1,19 @@
# vercel
## 32.1.0
### Minor Changes
- Improve error messages for JSON parse failures ([#10396](https://github.com/vercel/vercel/pull/10396))
### Patch Changes
- Updated dependencies [[`9e3827c78`](https://github.com/vercel/vercel/commit/9e3827c785e1bc45f2bed421132167381481770f)]:
- @vercel/build-utils@7.1.0
- @vercel/node@3.0.3
- @vercel/remix-builder@2.0.2
- @vercel/static-build@2.0.3
## 32.0.2
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "vercel",
"version": "32.0.2",
"version": "32.1.0",
"preferGlobal": true,
"license": "Apache-2.0",
"description": "The command-line interface for Vercel",
@@ -31,16 +31,16 @@
"node": ">= 16"
},
"dependencies": {
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"@vercel/go": "3.0.0",
"@vercel/hydrogen": "1.0.0",
"@vercel/next": "4.0.1",
"@vercel/node": "3.0.2",
"@vercel/node": "3.0.3",
"@vercel/python": "4.0.0",
"@vercel/redwood": "2.0.0",
"@vercel/remix-builder": "2.0.1",
"@vercel/remix-builder": "2.0.2",
"@vercel/ruby": "2.0.0",
"@vercel/static-build": "2.0.2"
"@vercel/static-build": "2.0.3"
},
"devDependencies": {
"@alex_neo/jest-expect-message": "1.0.5",
@@ -64,6 +64,7 @@
"@types/inquirer": "7.3.1",
"@types/jest": "27.4.1",
"@types/jest-expect-message": "1.0.3",
"@types/json-parse-better-errors": "1.0.0",
"@types/load-json-file": "2.0.7",
"@types/mime-types": "2.1.0",
"@types/minimatch": "3.0.3",
@@ -85,8 +86,8 @@
"@types/yauzl-promise": "2.1.0",
"@vercel-internals/constants": "1.0.4",
"@vercel-internals/get-package-json": "1.0.0",
"@vercel-internals/types": "1.0.7",
"@vercel/client": "13.0.0",
"@vercel-internals/types": "1.0.8",
"@vercel/client": "13.0.1",
"@vercel/error-utils": "2.0.1",
"@vercel/frameworks": "2.0.1",
"@vercel/fs-detectors": "5.0.1",
@@ -135,6 +136,7 @@
"jaro-winkler": "0.2.8",
"jest-junit": "16.0.0",
"jest-matcher-utils": "29.3.1",
"json-parse-better-errors": "1.0.2",
"jsonlines": "0.1.1",
"line-async-iterator": "3.0.0",
"load-json-file": "3.0.0",

View File

@@ -118,7 +118,7 @@ export default async function main(client: Client) {
const pkg = await readJSONFile<PackageJson>(path.join(dir, 'package.json'));
if (pkg instanceof CantParseJSONFile) {
client.output.error('Could not parse package.json');
client.output.error(pkg.message);
return 1;
}

View File

@@ -24,6 +24,7 @@ import {
} from '../../util/env/diff-env-files';
import { isErrnoException } from '@vercel/error-utils';
import { addToGitIgnore } from '../../util/link/add-to-gitignore';
import JSONparse from 'json-parse-better-errors';
const CONTENTS_PREFIX = '# Created by Vercel CLI\n';
@@ -121,7 +122,7 @@ export default async function pull(
// We need this because double quotes are stripped from the local .env file,
// but `records` is already in the form of a JSON object that doesn't filter
// double quotes.
const newEnv = JSON.parse(JSON.stringify(records).replace(/\\"/g, ''));
const newEnv = JSONparse(JSON.stringify(records).replace(/\\"/g, ''));
deltaString = buildDeltaString(oldEnv, newEnv);
}
}

View File

@@ -20,7 +20,8 @@ export async function initCorepack({
);
if (pkg instanceof CantParseJSONFile) {
console.warn(
'Warning: Could not enable corepack because package.json is invalid JSON'
'Warning: Could not enable corepack because package.json is invalid JSON',
pkg.meta.parseErrorLocation
);
} else if (!pkg?.packageManager) {
console.warn(

View File

@@ -20,6 +20,7 @@ import isPortReachable from 'is-port-reachable';
import deepEqual from 'fast-deep-equal';
import npa from 'npm-package-arg';
import type { ChildProcess } from 'child_process';
import JSONparse from 'json-parse-better-errors';
import { getVercelIgnore, fileNameSymbol } from '@vercel/client';
import {
@@ -726,7 +727,7 @@ export default class DevServer {
try {
const raw = await fs.readFile(abs, 'utf8');
const parsed: WithFileNameSymbol<T> = JSON.parse(raw);
const parsed: WithFileNameSymbol<T> = JSONparse(raw);
parsed[fileNameSymbol] = rel;
return parsed;
} catch (err: unknown) {

View File

@@ -668,13 +668,14 @@ export class CertMissing extends NowError<'ALIAS_IN_USE', { domain: string }> {
export class CantParseJSONFile extends NowError<
'CANT_PARSE_JSON_FILE',
{ file: string }
{ file: string; parseErrorLocation: string }
> {
constructor(file: string) {
constructor(file: string, parseErrorLocation: string) {
const message = `Can't parse json file ${file}: ${parseErrorLocation}`;
super({
code: 'CANT_PARSE_JSON_FILE',
meta: { file },
message: `Can't parse json file`,
meta: { file, parseErrorLocation },
message,
});
}
}

View File

@@ -1,5 +1,7 @@
import fs from 'fs-extra';
import { CantParseJSONFile } from './errors-ts';
import JSONparse from 'json-parse-better-errors';
import { errorToString } from '@vercel/error-utils';
export default async function readJSONFile<T>(
file: string
@@ -10,10 +12,10 @@ export default async function readJSONFile<T>(
}
try {
const json = JSON.parse(content);
const json = JSONparse(content);
return json;
} catch (error) {
return new CantParseJSONFile(file);
return new CantParseJSONFile(file, errorToString(error));
}
}

View File

@@ -1,5 +1,12 @@
# @vercel/client
## 13.0.1
### Patch Changes
- Updated dependencies [[`9e3827c78`](https://github.com/vercel/vercel/commit/9e3827c785e1bc45f2bed421132167381481770f)]:
- @vercel/build-utils@7.1.0
## 13.0.0
### Major Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/client",
"version": "13.0.0",
"version": "13.0.1",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"homepage": "https://vercel.com",
@@ -36,7 +36,7 @@
"typescript": "4.9.5"
},
"dependencies": {
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"@vercel/routing-utils": "3.0.0",
"@zeit/fetch": "5.2.0",
"async-retry": "1.2.3",

View File

@@ -36,7 +36,7 @@
"@types/minimatch": "3.0.5",
"@types/node": "14.18.33",
"@types/semver": "7.3.10",
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"jest-junit": "16.0.0",
"typescript": "4.9.5"
}

View File

@@ -1,5 +1,13 @@
# @vercel/gatsby-plugin-vercel-builder
## 2.0.3
### Patch Changes
- Updated dependencies [[`9e3827c78`](https://github.com/vercel/vercel/commit/9e3827c785e1bc45f2bed421132167381481770f)]:
- @vercel/build-utils@7.1.0
- @vercel/node@3.0.3
## 2.0.2
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/gatsby-plugin-vercel-builder",
"version": "2.0.2",
"version": "2.0.3",
"main": "dist/index.js",
"files": [
"dist",
@@ -20,8 +20,8 @@
},
"dependencies": {
"@sinclair/typebox": "0.25.24",
"@vercel/build-utils": "7.0.0",
"@vercel/node": "3.0.2",
"@vercel/build-utils": "7.1.0",
"@vercel/node": "3.0.3",
"@vercel/routing-utils": "3.0.0",
"esbuild": "0.14.47",
"etag": "1.8.1",

View File

@@ -27,7 +27,7 @@
"@types/node-fetch": "^2.3.0",
"@types/tar": "^4.0.0",
"@types/yauzl-promise": "2.1.0",
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"@vercel/ncc": "0.24.0",
"async-retry": "1.3.1",
"execa": "^1.0.0",

View File

@@ -21,7 +21,7 @@
"devDependencies": {
"@types/jest": "27.5.1",
"@types/node": "14.18.33",
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"@vercel/static-config": "3.0.0",
"execa": "3.2.0",
"fs-extra": "11.1.0",

View File

@@ -35,7 +35,7 @@
"@types/semver": "6.0.0",
"@types/text-table": "0.2.1",
"@types/webpack-sources": "3.2.0",
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"@vercel/nft": "0.22.5",
"@vercel/routing-utils": "3.0.0",
"async-sema": "3.0.1",

View File

@@ -1,5 +1,12 @@
# @vercel/node
## 3.0.3
### Patch Changes
- Updated dependencies [[`9e3827c78`](https://github.com/vercel/vercel/commit/9e3827c785e1bc45f2bed421132167381481770f)]:
- @vercel/build-utils@7.1.0
## 3.0.2
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/node",
"version": "3.0.2",
"version": "3.0.3",
"license": "Apache-2.0",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/node-js",
@@ -23,7 +23,7 @@
"@edge-runtime/primitives": "3.1.0",
"@edge-runtime/vm": "3.1.0",
"@types/node": "14.18.33",
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"@vercel/error-utils": "2.0.1",
"@vercel/static-config": "3.0.0",
"async-listen": "3.0.0",

View File

@@ -23,7 +23,7 @@
"@types/execa": "^0.9.0",
"@types/jest": "27.4.1",
"@types/node": "14.18.33",
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"@vercel/ncc": "0.24.0",
"execa": "^1.0.0",
"jest-junit": "16.0.0"

View File

@@ -27,7 +27,7 @@
"@types/aws-lambda": "8.10.19",
"@types/node": "14.18.33",
"@types/semver": "6.0.0",
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"execa": "3.2.0",
"fs-extra": "11.1.0",
"jest-junit": "16.0.0"

View File

@@ -1,5 +1,12 @@
# @vercel/remix-builder
## 2.0.2
### Patch Changes
- Updated dependencies [[`9e3827c78`](https://github.com/vercel/vercel/commit/9e3827c785e1bc45f2bed421132167381481770f)]:
- @vercel/build-utils@7.1.0
## 2.0.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/remix-builder",
"version": "2.0.1",
"version": "2.0.2",
"license": "Apache-2.0",
"main": "./dist/index.js",
"homepage": "https://vercel.com/docs",
@@ -20,7 +20,7 @@
"defaults"
],
"dependencies": {
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"@vercel/nft": "0.22.5",
"@vercel/static-config": "3.0.0",
"path-to-regexp": "6.2.1",

View File

@@ -22,7 +22,7 @@
"devDependencies": {
"@types/fs-extra": "8.0.0",
"@types/semver": "6.0.0",
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"@vercel/ncc": "0.24.0",
"execa": "2.0.4",
"fs-extra": "^7.0.1",

View File

@@ -1,5 +1,12 @@
# @vercel/static-build
## 2.0.3
### Patch Changes
- Updated dependencies []:
- @vercel/gatsby-plugin-vercel-builder@2.0.3
## 2.0.2
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/static-build",
"version": "2.0.2",
"version": "2.0.3",
"license": "Apache-2.0",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/build-step",
@@ -20,7 +20,7 @@
},
"dependencies": {
"@vercel/gatsby-plugin-vercel-analytics": "1.0.10",
"@vercel/gatsby-plugin-vercel-builder": "2.0.2"
"@vercel/gatsby-plugin-vercel-builder": "2.0.3"
},
"devDependencies": {
"@types/aws-lambda": "8.10.64",
@@ -32,7 +32,7 @@
"@types/node-fetch": "2.5.4",
"@types/promise-timeout": "1.3.0",
"@types/semver": "7.3.13",
"@vercel/build-utils": "7.0.0",
"@vercel/build-utils": "7.1.0",
"@vercel/error-utils": "2.0.1",
"@vercel/frameworks": "2.0.1",
"@vercel/fs-detectors": "5.0.1",

52
pnpm-lock.yaml generated
View File

@@ -183,7 +183,7 @@ importers:
specifier: 1.0.4
version: link:../constants
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../../packages/build-utils
'@vercel/routing-utils':
specifier: 3.0.0
@@ -310,7 +310,7 @@ importers:
packages/cli:
dependencies:
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
'@vercel/go':
specifier: 3.0.0
@@ -322,7 +322,7 @@ importers:
specifier: 4.0.1
version: link:../next
'@vercel/node':
specifier: 3.0.2
specifier: 3.0.3
version: link:../node
'@vercel/python':
specifier: 4.0.0
@@ -331,13 +331,13 @@ importers:
specifier: 2.0.0
version: link:../redwood
'@vercel/remix-builder':
specifier: 2.0.1
specifier: 2.0.2
version: link:../remix
'@vercel/ruby':
specifier: 2.0.0
version: link:../ruby
'@vercel/static-build':
specifier: 2.0.2
specifier: 2.0.3
version: link:../static-build
devDependencies:
'@alex_neo/jest-expect-message':
@@ -403,6 +403,9 @@ importers:
'@types/jest-expect-message':
specifier: 1.0.3
version: 1.0.3
'@types/json-parse-better-errors':
specifier: 1.0.0
version: 1.0.0
'@types/load-json-file':
specifier: 2.0.7
version: 2.0.7
@@ -467,10 +470,10 @@ importers:
specifier: 1.0.0
version: link:../../internals/get-package-json
'@vercel-internals/types':
specifier: 1.0.7
specifier: 1.0.8
version: link:../../internals/types
'@vercel/client':
specifier: 13.0.0
specifier: 13.0.1
version: link:../client
'@vercel/error-utils':
specifier: 2.0.1
@@ -616,6 +619,9 @@ importers:
jest-matcher-utils:
specifier: 29.3.1
version: 29.3.1
json-parse-better-errors:
specifier: 1.0.2
version: 1.0.2
jsonlines:
specifier: 0.1.1
version: 0.1.1
@@ -728,7 +734,7 @@ importers:
packages/client:
dependencies:
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
'@vercel/routing-utils':
specifier: 3.0.0
@@ -929,7 +935,7 @@ importers:
specifier: 7.3.10
version: 7.3.10
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
jest-junit:
specifier: 16.0.0
@@ -963,10 +969,10 @@ importers:
specifier: 0.25.24
version: 0.25.24
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
'@vercel/node':
specifier: 3.0.2
specifier: 3.0.3
version: link:../node
'@vercel/routing-utils':
specifier: 3.0.0
@@ -1030,7 +1036,7 @@ importers:
specifier: 2.1.0
version: 2.1.0
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
'@vercel/ncc':
specifier: 0.24.0
@@ -1075,7 +1081,7 @@ importers:
specifier: 14.18.33
version: 14.18.33
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
'@vercel/static-config':
specifier: 3.0.0
@@ -1135,7 +1141,7 @@ importers:
specifier: 3.2.0
version: 3.2.0
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
'@vercel/nft':
specifier: 0.22.5
@@ -1225,7 +1231,7 @@ importers:
specifier: 14.18.33
version: 14.18.33
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
'@vercel/error-utils':
specifier: 2.0.1
@@ -1337,7 +1343,7 @@ importers:
specifier: 14.18.33
version: 14.18.33
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
'@vercel/ncc':
specifier: 0.24.0
@@ -1371,7 +1377,7 @@ importers:
specifier: 6.0.0
version: 6.0.0
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
execa:
specifier: 3.2.0
@@ -1386,7 +1392,7 @@ importers:
packages/remix:
dependencies:
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
'@vercel/nft':
specifier: 0.22.5
@@ -1452,7 +1458,7 @@ importers:
specifier: 6.0.0
version: 6.0.0
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
'@vercel/ncc':
specifier: 0.24.0
@@ -1476,7 +1482,7 @@ importers:
specifier: 1.0.10
version: link:../gatsby-plugin-vercel-analytics
'@vercel/gatsby-plugin-vercel-builder':
specifier: 2.0.2
specifier: 2.0.3
version: link:../gatsby-plugin-vercel-builder
devDependencies:
'@types/aws-lambda':
@@ -1507,7 +1513,7 @@ importers:
specifier: 7.3.13
version: 7.3.13
'@vercel/build-utils':
specifier: 7.0.0
specifier: 7.1.0
version: link:../build-utils
'@vercel/error-utils':
specifier: 2.0.1
@@ -5106,6 +5112,10 @@ packages:
resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==}
dev: true
/@types/json-parse-better-errors@1.0.0:
resolution: {integrity: sha512-JAsGXEMsiw2ttNrlady/Z8ztrSEl1y8IoG9ge7hpBQ4I+ilKxelOPGKnVmt9TX69lkXdJioDWCkzkktWcdAshA==}
dev: true
/@types/json-schema@7.0.11:
resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}