diff --git a/lib/config.js b/lib/config.js index e643fbab..0b2cb1b6 100644 --- a/lib/config.js +++ b/lib/config.js @@ -228,9 +228,11 @@ const getFullConfig = async ({ if (pkgConfig.ciVersions) { let versions = pkgConfig.ciVersions - if (versions === 'latest') { - const defaultVersions = [rootPkgConfig, defaultConfig].find(c => Array.isArray(c.ciVersions)) - versions = defaultVersions.ciVersions.slice(-1) + if (versions === 'latest' || (Array.isArray(versions) && versions.includes('latest'))) { + const { ciVersions } = [isWorkspace ? rootPkgConfig : {}, defaultConfig] + .find(c => Array.isArray(c.ciVersions)) + const defaultLatest = ciVersions[ciVersions.length - 1] + versions = [].concat(versions).map(v => v === 'latest' ? defaultLatest : v) } const { targets, engines } = parseCIVersions(versions) diff --git a/test/apply/engines.js b/test/apply/engines.js index c907e66b..d34246ea 100644 --- a/test/apply/engines.js +++ b/test/apply/engines.js @@ -20,6 +20,26 @@ t.test('can set engines and ci separately', async (t) => { t.notOk(ci.includes('- 12')) }) +t.test('can set ci to latest plus other versions', async (t) => { + const s = await setup(t, { + package: { + templateOSS: { + ciVersions: ['6', '8', 'latest'], + engines: '*', + }, + }, + }) + await s.apply() + + const pkg = await s.readJson('package.json') + const ci = await s.readFile(join('.github', 'workflows', 'ci.yml')) + + t.equal(pkg.engines.node, '*') + t.ok(ci.includes('- 6')) + t.ok(ci.includes('- 8')) + t.ok(ci.includes('- 18.x')) +}) + t.test('latest ci versions', async (t) => { const s = await setup(t, { package: {