UNPKG

gen-jhipster

Version:

Spring Boot + Angular/React/Vue in one handy generator

71 lines (70 loc) 3.27 kB
import { createHash } from 'node:crypto'; import { readFileSync } from 'node:fs'; import { join } from 'node:path'; import { RECOMMENDED_JAVA_VERSION, RECOMMENDED_NODE_VERSION } from '../../generators/index.js'; import { getSourceRoot } from '../index.js'; import { JAVA_COMPATIBLE_VERSIONS, JAVA_VERSION, NODE_VERSION } from '../../generators/generator-constants.js'; const knwonGitHubMatrixProperties = [ 'os', 'node-version', 'java-version', 'default-environment', 'job-name', 'sample', 'samples-group', 'sample-type', 'args', 'jwt-secret', 'jdl', ]; export const getUnknownGitHubMatrixProperties = (matrix) => Object.keys(matrix).filter(key => !knwonGitHubMatrixProperties.includes(key)); export const getUnknownGitHubMatrixGroupProperties = (matrixRecord) => { let unknownProperties = []; for (const matrix of Object.values(matrixRecord)) { unknownProperties = [...new Set([...unknownProperties, ...getUnknownGitHubMatrixProperties(matrix)])]; } return unknownProperties; }; const NPM_VERSION = JSON.parse(readFileSync(join(getSourceRoot(), 'generators/common/resources/package.json'), 'utf-8')).devDependencies .npm; export const defaultGithubEnvironment = { os: 'ubuntu-latest', 'node-version': RECOMMENDED_NODE_VERSION, 'java-version': RECOMMENDED_JAVA_VERSION, 'npm-version': NPM_VERSION, 'default-environment': 'prod', 'jwt-secret-key': 'ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=', }; const randomReproducibleValue = (seed, choices, options) => { const { useVersionPlaceholders } = options ?? {}; const index = createHash('shake256', { outputLength: 1 }).update(seed, 'utf8').digest('binary').charCodeAt(0) % choices.length; if (useVersionPlaceholders) { return `[${index}]`; } return choices[index]; }; const randomEnvironmentMatrix = (key, options) => { const { useVersionPlaceholders, javaVersions = [JAVA_VERSION, ...JAVA_COMPATIBLE_VERSIONS], nodeVersions = [NODE_VERSION, '18', '20'], } = options; const javaVersion = randomReproducibleValue(`java-${key}`, javaVersions, { useVersionPlaceholders }); const nodeVersion = randomReproducibleValue(`node-${key}`, nodeVersions, { useVersionPlaceholders }); return { 'job-name': `${key} (n${nodeVersion}/j${javaVersion})`, 'java-version': javaVersion, 'node-version': nodeVersion, }; }; export const convertToGitHubMatrix = (matrix, options) => { const { randomEnvironment, useVersionPlaceholders, ...randomEnvironmentOptions } = options ?? {}; return { include: Object.entries(matrix) .filter(([_key, value]) => !value.disabled) .map(([key, value]) => ({ 'job-name': key, sample: key, ...defaultGithubEnvironment, ...(useVersionPlaceholders ? { 'java-version': 'JAVA-VERSION', 'node-version': 'NODE-VERSION', 'npm-version': 'NPM-VERSION' } : {}), ...value, ...(randomEnvironment ? randomEnvironmentMatrix(key, { useVersionPlaceholders, ...randomEnvironmentOptions }) : {}), })), }; };