diff --git a/scripts/published-package-smoke-config.mjs b/scripts/published-package-smoke-config.mjs index 2316117a..6aea8688 100644 --- a/scripts/published-package-smoke-config.mjs +++ b/scripts/published-package-smoke-config.mjs @@ -1,3 +1,4 @@ +import { dirname, join } from 'node:path'; import assert from 'node:assert/strict'; import { readFile } from 'node:fs/promises'; @@ -28,6 +29,30 @@ function assertHttpRegistry(registry, label) { } } +function registryEnv(config) { + return config.registry ? { npm_config_registry: config.registry } : {}; +} + +function runtimeCommandEnv(config, runtimeRoot) { + return { ...registryEnv(config), KTX_RUNTIME_ROOT: runtimeRoot }; +} + +function semanticQueryArgs(projectDir) { + return [ + 'sl', + 'query', + '--project-dir', + projectDir, + '--connection-id', + 'orbit_demo', + '--measure', + 'contracts.contract_count', + '--format', + 'sql', + '--yes', + ]; +} + function normalizePolicyConfig(policyConfig = {}) { if (policyConfig === null || policyConfig === undefined) { return { packageName: null, version: DEFAULT_VERSION_TAG, registry: null }; @@ -114,65 +139,70 @@ export function publishedPackageSpec(config) { return `${config.packageName}@${config.packageVersion}`; } -export function buildPublishedPackageNpxCommand(config, args, label = 'published package command') { - const env = config.registry ? { npm_config_registry: config.registry } : {}; - +export function buildPublishedPackageNpxCommand(config, args, label = 'published package command', extraEnv = {}) { return { label, command: 'npx', args: ['--yes', publishedPackageSpec(config), ...args], - env, + env: { ...registryEnv(config), ...extraEnv }, }; } -export function buildPublishedPackageSmokeCommands(config, projectDir) { +export function buildPublishedPackageSmokeCommands( + config, + projectDir, + runtimeRoot = join(dirname(projectDir), 'managed-runtime'), +) { + const runtimeEnv = runtimeCommandEnv(config, runtimeRoot); + const packageEnv = registryEnv(config); + const queryArgs = semanticQueryArgs(projectDir); + return [ - buildPublishedPackageNpxCommand(config, ['--version'], 'published package version'), + buildPublishedPackageNpxCommand(config, ['--version'], 'published package npx version'), buildPublishedPackageNpxCommand( config, ['setup', 'demo', '--project-dir', projectDir, '--no-input', '--plain'], 'published package setup demo', + { KTX_RUNTIME_ROOT: runtimeRoot }, ), - buildPublishedPackageNpxCommand( - config, - [ - 'sl', - 'query', - '--project-dir', - projectDir, - '--connection-id', - 'orbit_demo', - '--measure', - 'contracts.contract_count', - '--format', - 'sql', - '--yes', - ], - 'published package sl query', - ), + buildPublishedPackageNpxCommand(config, queryArgs, 'published package npx sl query', { + KTX_RUNTIME_ROOT: runtimeRoot, + }), { label: 'published package local install', command: 'pnpm', args: ['add', publishedPackageSpec(config)], - env: config.registry ? { npm_config_registry: config.registry } : {}, + env: packageEnv, }, { - label: 'published package local binary', - command: 'pnpm', - args: ['exec', 'ktx', '--version'], - env: config.registry ? { npm_config_registry: config.registry } : {}, + label: 'published package local version', + command: 'npx', + args: ['ktx', '--version'], + env: packageEnv, + }, + { + label: 'published package local sl query', + command: 'npx', + args: ['ktx', ...queryArgs], + env: runtimeEnv, }, { label: 'published package global install', command: 'pnpm', args: ['add', '--global', publishedPackageSpec(config)], - env: config.registry ? { npm_config_registry: config.registry } : {}, + env: packageEnv, }, { - label: 'published package global binary', + label: 'published package global version', command: 'ktx', args: ['--version'], - env: config.registry ? { npm_config_registry: config.registry } : {}, + env: packageEnv, + }, + { + label: 'published package global sl query', + command: 'ktx', + args: queryArgs, + env: runtimeEnv, }, ]; } diff --git a/scripts/published-package-smoke.test.mjs b/scripts/published-package-smoke.test.mjs index 252b55a6..8c7091c4 100644 --- a/scripts/published-package-smoke.test.mjs +++ b/scripts/published-package-smoke.test.mjs @@ -169,73 +169,129 @@ describe('published package smoke command construction', () => { }); it('builds the full public package smoke command list', () => { - assert.deepEqual(buildPublishedPackageSmokeCommands(config, '/tmp/ktx-smoke/demo', '/tmp/ktx-smoke/empty'), [ - { - label: 'published package version', - command: 'npx', - args: ['--yes', '@kaelio/ktx@latest', '--version'], - env: { npm_config_registry: 'https://registry.npmjs.org/' }, - }, - { - label: 'published package setup demo', - command: 'npx', - args: [ - '--yes', - '@kaelio/ktx@latest', - 'setup', - 'demo', - '--project-dir', - '/tmp/ktx-smoke/demo', - '--no-input', - '--plain', - ], - env: { npm_config_registry: 'https://registry.npmjs.org/' }, - }, - { - label: 'published package sl query', - command: 'npx', - args: [ - '--yes', - '@kaelio/ktx@latest', - 'sl', - 'query', - '--project-dir', - '/tmp/ktx-smoke/demo', - '--connection-id', - 'orbit_demo', - '--measure', - 'contracts.contract_count', - '--format', - 'sql', - '--yes', - ], - env: { npm_config_registry: 'https://registry.npmjs.org/' }, - }, - { - label: 'published package local install', - command: 'pnpm', - args: ['add', '@kaelio/ktx@latest'], - env: { npm_config_registry: 'https://registry.npmjs.org/' }, - }, - { - label: 'published package local binary', - command: 'pnpm', - args: ['exec', 'ktx', '--version'], - env: { npm_config_registry: 'https://registry.npmjs.org/' }, - }, - { - label: 'published package global install', - command: 'pnpm', - args: ['add', '--global', '@kaelio/ktx@latest'], - env: { npm_config_registry: 'https://registry.npmjs.org/' }, - }, - { - label: 'published package global binary', - command: 'ktx', - args: ['--version'], - env: { npm_config_registry: 'https://registry.npmjs.org/' }, - }, - ]); + assert.deepEqual( + buildPublishedPackageSmokeCommands( + config, + '/tmp/ktx-smoke/demo', + '/tmp/ktx-smoke/managed-runtime', + ), + [ + { + label: 'published package npx version', + command: 'npx', + args: ['--yes', '@kaelio/ktx@latest', '--version'], + env: { npm_config_registry: 'https://registry.npmjs.org/' }, + }, + { + label: 'published package setup demo', + command: 'npx', + args: [ + '--yes', + '@kaelio/ktx@latest', + 'setup', + 'demo', + '--project-dir', + '/tmp/ktx-smoke/demo', + '--no-input', + '--plain', + ], + env: { + npm_config_registry: 'https://registry.npmjs.org/', + KTX_RUNTIME_ROOT: '/tmp/ktx-smoke/managed-runtime', + }, + }, + { + label: 'published package npx sl query', + command: 'npx', + args: [ + '--yes', + '@kaelio/ktx@latest', + 'sl', + 'query', + '--project-dir', + '/tmp/ktx-smoke/demo', + '--connection-id', + 'orbit_demo', + '--measure', + 'contracts.contract_count', + '--format', + 'sql', + '--yes', + ], + env: { + npm_config_registry: 'https://registry.npmjs.org/', + KTX_RUNTIME_ROOT: '/tmp/ktx-smoke/managed-runtime', + }, + }, + { + label: 'published package local install', + command: 'pnpm', + args: ['add', '@kaelio/ktx@latest'], + env: { npm_config_registry: 'https://registry.npmjs.org/' }, + }, + { + label: 'published package local version', + command: 'npx', + args: ['ktx', '--version'], + env: { npm_config_registry: 'https://registry.npmjs.org/' }, + }, + { + label: 'published package local sl query', + command: 'npx', + args: [ + 'ktx', + 'sl', + 'query', + '--project-dir', + '/tmp/ktx-smoke/demo', + '--connection-id', + 'orbit_demo', + '--measure', + 'contracts.contract_count', + '--format', + 'sql', + '--yes', + ], + env: { + npm_config_registry: 'https://registry.npmjs.org/', + KTX_RUNTIME_ROOT: '/tmp/ktx-smoke/managed-runtime', + }, + }, + { + label: 'published package global install', + command: 'pnpm', + args: ['add', '--global', '@kaelio/ktx@latest'], + env: { npm_config_registry: 'https://registry.npmjs.org/' }, + }, + { + label: 'published package global version', + command: 'ktx', + args: ['--version'], + env: { npm_config_registry: 'https://registry.npmjs.org/' }, + }, + { + label: 'published package global sl query', + command: 'ktx', + args: [ + 'sl', + 'query', + '--project-dir', + '/tmp/ktx-smoke/demo', + '--connection-id', + 'orbit_demo', + '--measure', + 'contracts.contract_count', + '--format', + 'sql', + '--yes', + ], + env: { + npm_config_registry: 'https://registry.npmjs.org/', + KTX_RUNTIME_ROOT: '/tmp/ktx-smoke/managed-runtime', + }, + }, + ], + ); }); it('exposes the smoke through the package release script', async () => {