From ba59a59deee19a47c3999cf19dfadf70140595dd Mon Sep 17 00:00:00 2001 From: Jamie King Date: Wed, 21 Feb 2024 15:08:00 -0700 Subject: [PATCH] refactor(one-app-runner): use semver for app version comparison (#608) * refactor(one-app-runner): use semver for app version comparison * refactor(one-app-runner): add NOTE to comment --------- Co-authored-by: Matthew Mallimo --- .../one-app-runner/__tests__/src/startApp.spec.js | 13 +++++++++++++ packages/one-app-runner/package.json | 1 + packages/one-app-runner/src/startApp.js | 14 +++++--------- yarn.lock | 7 +++++++ 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/packages/one-app-runner/__tests__/src/startApp.spec.js b/packages/one-app-runner/__tests__/src/startApp.spec.js index 12cf6362..7c20d586 100644 --- a/packages/one-app-runner/__tests__/src/startApp.spec.js +++ b/packages/one-app-runner/__tests__/src/startApp.spec.js @@ -411,6 +411,19 @@ Array [ '--dns-result-order=ipv4first --no-experimental-fetch' ); }); + + it('adds node flags when one-app version is greater than 5.13.0 and is a prerelease', async () => { + expect.assertions(1); + const mockSpawn = makeMockSpawn(); + childProcess.spawn.mockImplementation(mockSpawn); + await startApp({ + moduleMapUrl: 'https://example.com/module-map.json', rootModuleName: 'frank-lloyd-root', appDockerImage: 'one-app:5.14.0-rc1', modulesToServe: ['/path/to/module-a'], + }); + expect(mockSpawn.calls[1].args[mockSpawn.calls[1].args.indexOf('-c') + 1]).toMatch( + '--dns-result-order=ipv4first --no-experimental-fetch' + ); + }); + it('adds node flags when one-app version is greater than 5.13.0 but only major specified', async () => { expect.assertions(1); const mockSpawn = makeMockSpawn(); diff --git a/packages/one-app-runner/package.json b/packages/one-app-runner/package.json index e0db0236..60901afa 100644 --- a/packages/one-app-runner/package.json +++ b/packages/one-app-runner/package.json @@ -39,6 +39,7 @@ "get-port": "^5.1.1", "node-fetch": "^2.6.1", "pkg-up": "^3.1.0", + "semver": "^7.6.0", "uuid": "^8.3.2", "yargs": "^16.2.0" }, diff --git a/packages/one-app-runner/src/startApp.js b/packages/one-app-runner/src/startApp.js index 8b2b92ae..bd1085c8 100644 --- a/packages/one-app-runner/src/startApp.js +++ b/packages/one-app-runner/src/startApp.js @@ -17,6 +17,7 @@ const path = require('node:path'); const fs = require('node:fs'); const os = require('node:os'); const Docker = require('dockerode'); +const semver = require('semver'); async function spawnAndPipe(command, args, logStream) { return new Promise((resolve, reject) => { @@ -131,19 +132,14 @@ const generateLogFormat = (logFormat) => (logFormat ? `--log-format=${logFormat} const generateDebug = (port, useDebug) => (useDebug ? `--inspect=0.0.0.0:${port}` : ''); -// Node 12 does not support --dns-result-order or --no-experimental-fetch +// NOTE: Node 12 does not support --dns-result-order or --no-experimental-fetch // So we have to remove those flags if the one-app version is less than 5.13.0 // 5.13.0 is when node 16 was introduced. const generateNodeFlags = (appVersion) => { - const versionArray = appVersion.split('.'); - if (versionArray.length > 1) { - const majorVersion = Number.parseInt(versionArray[0], 10); - const minorVersion = Number.parseInt(versionArray[1], 10); - if (majorVersion === 5 && minorVersion < 13) { - return ''; - } + if (semver.intersects(appVersion, '^5.13.0', { includePrerelease: true })) { + return '--dns-result-order=ipv4first --no-experimental-fetch'; } - return '--dns-result-order=ipv4first --no-experimental-fetch'; + return ''; }; module.exports = async function startApp({ diff --git a/yarn.lock b/yarn.lock index e24629de..4cfc9ac4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12270,6 +12270,13 @@ semver@^7.1.1, semver@^7.1.3, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semve dependencies: lru-cache "^6.0.0" +semver@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"