Skip to content

Commit 0ad1257

Browse files
committed
ci: don't install fixture's deps if next version requierment is not satisfied
1 parent 96ff784 commit 0ad1257

File tree

4 files changed

+37
-19
lines changed

4 files changed

+37
-19
lines changed

tests/prepare.mjs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,12 @@ const promises = fixtures.map((fixture) =>
6060
})
6161
await Promise.all(publishDirectories.map((dir) => rm(dir, { recursive: true, force: true })))
6262

63-
if (NEXT_VERSION !== 'latest') {
64-
await setNextVersionInFixture(cwd, NEXT_VERSION, {
65-
logPrefix: `[${fixture}] `,
66-
})
63+
const fixtureNextVersionSatisfied = await setNextVersionInFixture(cwd, NEXT_VERSION, {
64+
logPrefix: `[${fixture}] `,
65+
})
66+
67+
if (!fixtureNextVersionSatisfied) {
68+
return
6769
}
6870

6971
let cmd = ``
@@ -104,12 +106,10 @@ const promises = fixtures.map((fixture) =>
104106
}
105107
output.stderr?.pipe(addPrefix).pipe(process.stderr)
106108
return output.finally(async () => {
107-
if (NEXT_VERSION !== 'latest') {
108-
await setNextVersionInFixture(cwd, 'latest', {
109-
logPrefix: `[${fixture}] `,
110-
operation: 'revert',
111-
})
112-
}
109+
await setNextVersionInFixture(cwd, 'latest', {
110+
logPrefix: `[${fixture}] `,
111+
operation: 'revert',
112+
})
113113
if (output.exitCode !== 0) {
114114
const errorMessage = `[${fixture}] 🚨 Failed to install dependencies or build a fixture`
115115
console.error(errorMessage)

tests/utils/create-e2e-fixture.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,7 @@ export const createE2EFixture = async (fixture: string, config: E2EConfig = {})
7777
copyFixture(fixture, isolatedFixtureRoot, config),
7878
])
7979

80-
if (NEXT_VERSION !== 'latest') {
81-
await setNextVersionInFixture(isolatedFixtureRoot, NEXT_VERSION)
82-
}
80+
await setNextVersionInFixture(isolatedFixtureRoot, NEXT_VERSION)
8381
await installRuntime(packageName, isolatedFixtureRoot, config)
8482
await verifyFixture(isolatedFixtureRoot, config)
8583

tests/utils/fixture.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ const eszipHelper = join(actualCwd, 'tools/deno/eszip.ts')
3939

4040
async function installDependencies(cwd: string) {
4141
const NEXT_VERSION = process.env.NEXT_VERSION ?? 'latest'
42-
if (NEXT_VERSION !== 'latest') {
43-
await setNextVersionInFixture(cwd, NEXT_VERSION, { silent: true })
44-
}
42+
await setNextVersionInFixture(cwd, NEXT_VERSION, { silent: true })
4543

4644
const { packageManager } = JSON.parse(await readFile(join(cwd, 'package.json'), 'utf8'))
4745
if (packageManager?.startsWith('pnpm')) {

tests/utils/next-version-helpers.mjs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export function nextVersionRequiresReact19(version) {
7070
* @param {'update' | 'revert'} [options.operation] This just informs log output wording, otherwise it has no effect
7171
* @param {boolean} [options.silent] Doesn't produce any logs if truthy
7272
* @param {boolean} [options.updateReact] Update React version to match Next version
73-
* @returns {Promise<void>}
73+
* @returns {Promise<boolean>} true if fixture's next version requirements are satisfied
7474
*/
7575
export async function setNextVersionInFixture(
7676
cwd,
@@ -100,7 +100,7 @@ export async function setNextVersionInFixture(
100100

101101
const isSemverVersion = valid(resolvedVersion)
102102

103-
await Promise.all(
103+
const areNextVersionConstraintsSatisfied = await Promise.all(
104104
packageJsons.map(async (packageJsonPath) => {
105105
const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf8'))
106106
if (packageJson.dependencies?.next) {
@@ -118,9 +118,29 @@ export async function setNextVersionInFixture(
118118
`${logPrefix}⏩ Skipping '${packageJson.name}' because it requires next@${versionConstraint}`,
119119
)
120120
}
121-
return
121+
return false
122122
}
123+
}
124+
return true
125+
}),
126+
)
127+
128+
if (areNextVersionConstraintsSatisfied.some((isSatisfied) => !isSatisfied)) {
129+
// at least one next version constraint is not satisfied so we skip this fixture
130+
return false
131+
}
132+
133+
if (process.env.NEXT_VERSION ?? 'latest' === 'latest') {
134+
// latest is default so we don't want to make any changes
135+
return true
136+
}
137+
138+
await Promise.all(
139+
packageJsons.map(async (packageJsonPath) => {
140+
const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf8'))
141+
if (packageJson.dependencies?.next) {
123142
packageJson.dependencies.next = version
143+
const checkVersion = isSemverVersion ? resolvedVersion : FUTURE_NEXT_PATCH_VERSION
124144

125145
const { stdout } = await execaCommand(
126146
`npm info next@${resolvedVersion} peerDependencies --json`,
@@ -172,4 +192,6 @@ export async function setNextVersionInFixture(
172192
`${logPrefix}${operation === 'revert' ? 'Reverted' : 'Updated'} to ${nextVersionForLogs}`,
173193
)
174194
}
195+
196+
return true
175197
}

0 commit comments

Comments
 (0)