chore: move the messaging and fix windows verify builds
Signed-off-by: blam <ben@blam.sh>
This commit is contained in:
@@ -21,7 +21,7 @@ jobs:
|
||||
|
||||
env:
|
||||
CI: true
|
||||
NODE_OPTIONS: --max-old-space-size=4096
|
||||
NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=4096 --no-node-snapshot' || '--max-old-space-size=4096' }}
|
||||
INTEGRATION_TEST_GITHUB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITHUB_TOKEN }}
|
||||
INTEGRATION_TEST_GITLAB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITLAB_TOKEN }}
|
||||
INTEGRATION_TEST_BITBUCKET_TOKEN: ${{ secrets.INTEGRATION_TEST_BITBUCKET_TOKEN }}
|
||||
|
||||
@@ -22,6 +22,7 @@ import {
|
||||
} from '@backstage/plugin-scaffolder-node';
|
||||
import fs from 'fs-extra';
|
||||
import { JsonValue } from '@backstage/types';
|
||||
import { getMajorNodeVersion, isNoNodeSnapshotOptionProvided } from './helpers';
|
||||
|
||||
// language=JavaScript
|
||||
const mkScript = (nunjucksSource: string) => `
|
||||
@@ -128,6 +129,14 @@ export class SecureTemplater {
|
||||
nunjucksConfigs = {},
|
||||
} = options;
|
||||
|
||||
const nodeVersion = getMajorNodeVersion();
|
||||
if (nodeVersion >= 20 && !isNoNodeSnapshotOptionProvided()) {
|
||||
throw new Error(
|
||||
`When using node v20+ Scaffolder requires that node be started with the --no-node-snapshot option.
|
||||
Please make sure that you have NODE_OPTIONS=--no-node-snapshot in your environment.`,
|
||||
);
|
||||
}
|
||||
|
||||
const isolate = new Isolate({ memoryLimit: 128 });
|
||||
const context = await isolate.createContext();
|
||||
const contextGlobal = context.global;
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2024 The Backstage Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export function isNoNodeSnapshotOptionProvided(): boolean {
|
||||
return (
|
||||
process.env.NODE_OPTIONS?.includes('--no-node-snapshot') ||
|
||||
process.argv.includes('--no-node-snapshot')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the major version of the currently running Node.js process.
|
||||
*
|
||||
* @remarks
|
||||
* This function extracts the major version from `process.versions.node` (a string representing the Node.js version),
|
||||
* which includes the major, minor, and patch versions. It splits this string by the `.` character to get an array
|
||||
* of these versions, and then parses the first element of this array (the major version) to a number.
|
||||
*
|
||||
* @returns {number} The major version of the currently running Node.js process.
|
||||
*/
|
||||
export function getMajorNodeVersion(): number {
|
||||
const version = process.versions.node;
|
||||
return parseInt(version.split('.')[0], 10);
|
||||
}
|
||||
@@ -107,42 +107,3 @@ export async function findTemplate(options: {
|
||||
|
||||
return template as TemplateEntityV1beta3;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the '--no-node-snapshot' option is included in the NODE_OPTIONS environment variable
|
||||
* or not included in the command line arguments.
|
||||
*
|
||||
* @remarks
|
||||
* This function checks whether the '--no-node-snapshot' option is part of the NODE_OPTIONS environment
|
||||
* variable or is missing from the command line arguments. If either condition is met, the function returns `true`.
|
||||
* This check is especially important when using the "isolated-vm" package with Node.js version 20.x or later.
|
||||
*
|
||||
* According to the "isolated-vm" documentation on GitHub (https://github.com/laverdet/isolated-vm),
|
||||
* if you are using a version of Node.js 20.x or later and you don't pass the '--no-node-snapshot' option,
|
||||
* it can cause the process to crash. This function helps prevent such crashes by ensuring that the option
|
||||
* is correctly provided.
|
||||
*
|
||||
* @returns {boolean} Returns `true` if the '--no-node-snapshot' option is included in the NODE_OPTIONS
|
||||
* environment variable or not included in the command line arguments. Otherwise, it returns `false`.
|
||||
*/
|
||||
export function isNoNodeSnapshotOptionProvided(): boolean {
|
||||
return (
|
||||
process.env.NODE_OPTIONS?.includes('--no-node-snapshot') ||
|
||||
process.argv.includes('--no-node-snapshot')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the major version of the currently running Node.js process.
|
||||
*
|
||||
* @remarks
|
||||
* This function extracts the major version from `process.versions.node` (a string representing the Node.js version),
|
||||
* which includes the major, minor, and patch versions. It splits this string by the `.` character to get an array
|
||||
* of these versions, and then parses the first element of this array (the major version) to a number.
|
||||
*
|
||||
* @returns {number} The major version of the currently running Node.js process.
|
||||
*/
|
||||
export function getMajorNodeVersion(): number {
|
||||
const version = process.versions.node;
|
||||
return parseInt(version.split('.')[0], 10);
|
||||
}
|
||||
|
||||
@@ -61,13 +61,7 @@ import {
|
||||
} from '../scaffolder';
|
||||
import { createDryRunner } from '../scaffolder/dryrun';
|
||||
import { StorageTaskBroker } from '../scaffolder/tasks/StorageTaskBroker';
|
||||
import {
|
||||
findTemplate,
|
||||
getEntityBaseUrl,
|
||||
getMajorNodeVersion,
|
||||
getWorkingDirectory,
|
||||
isNoNodeSnapshotOptionProvided,
|
||||
} from './helpers';
|
||||
import { findTemplate, getEntityBaseUrl, getWorkingDirectory } from './helpers';
|
||||
import {
|
||||
IdentityApi,
|
||||
IdentityApiGetIdentityRequest,
|
||||
@@ -266,14 +260,6 @@ export async function createRouter(
|
||||
|
||||
const logger = parentLogger.child({ plugin: 'scaffolder' });
|
||||
|
||||
const nodeVersion = getMajorNodeVersion();
|
||||
if (nodeVersion >= 20 && !isNoNodeSnapshotOptionProvided()) {
|
||||
throw new Error(
|
||||
'When using node v20+ Scaffolder requires that node be started with the --no-node-snapshot option. Please restart ' +
|
||||
'Backstage providing the node --no-node-snapshot option.',
|
||||
);
|
||||
}
|
||||
|
||||
const identity: IdentityApi =
|
||||
options.identity || buildDefaultIdentityClient(options);
|
||||
const workingDirectory = await getWorkingDirectory(config, logger);
|
||||
|
||||
Reference in New Issue
Block a user