Skip to content

Commit 7b0f4a7

Browse files
committed
refactor(externals): fixup external scripts and related tests
1 parent 96cdee8 commit 7b0f4a7

File tree

3 files changed

+331
-263
lines changed

3 files changed

+331
-263
lines changed

external-scripts/is-next-compat.ts

+31-38
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,36 @@
1-
// ! WARNING: don't run this in the real repo dir, but in a duplicate temp dir !
1+
// ! WARNING: don't run this in the real repo dir, but in a duplicate temp dir
22

33
import { getCurrentWorkingDirectory } from '@-xun/fs';
4-
import { run } from '@-xun/run';
4+
import { run, runNoRejectOnBadExit } from '@-xun/run';
55
import findPackageJson from 'find-package-json';
66
import { MongoClient } from 'mongodb';
7-
import { createDebugLogger } from 'rejoinder';
7+
import { createGenericLogger } from 'rejoinder';
88
import { satisfies as satisfiesRange, validRange } from 'semver';
99

10-
import { getNextjsReactPeerDependencies } from 'testverse:util.ts';
11-
12-
import { name as packageName, version as packageVersion } from 'package.json';
10+
import { name as packageName, version as packageVersion } from 'rootverse:package.json';
1311

14-
// * By default, external scripts should be silent. Use the DEBUG environment
15-
// * variable to see relevant output
12+
import { getNextjsReactPeerDependencies } from 'testverse:util.ts';
1613

17-
const debug = createDebugLogger({ namespace: `${packageName}:is-next-compat` });
14+
const log = createGenericLogger({ namespace: 'is-next-compat' });
1815

19-
debug(`pkgName: "${packageName}"`);
20-
debug(`pkgVersion: "${packageVersion}"`);
16+
log(`package name: "${packageName}"`);
17+
log(`package version: "${packageVersion}"`);
2118

2219
export default main().catch((error: unknown) => {
23-
debug.error(error);
20+
log.error(error);
2421
process.exitCode = 2;
2522
});
2623

27-
let isRunningInTestMode: boolean | undefined = undefined;
28-
2924
/**
3025
* Detect if this tool was invoked in the context of an integration test
3126
*/
3227
async function checkIfRunningInTestMode() {
33-
try {
34-
isRunningInTestMode =
35-
isRunningInTestMode ??
36-
(await run('npm', ['run', '_is_next_compat_test_mode'])).exitCode === 0;
37-
} catch {}
28+
const isRunningInTestMode =
29+
(await runNoRejectOnBadExit('npm', ['run', '_is_next_compat_test_mode']))
30+
.exitCode === 0;
3831

39-
debug(`test override mode: ${isRunningInTestMode ? 'ACTIVE' : 'inactive'}`);
40-
return !!isRunningInTestMode;
32+
log(`test override mode: ${isRunningInTestMode ? 'ACTIVE' : 'inactive'}`);
33+
return isRunningInTestMode;
4134
}
4235

4336
/**
@@ -46,16 +39,16 @@ async function checkIfRunningInTestMode() {
4639
async function setCompatFlagTo(version: string) {
4740
try {
4841
if (await checkIfRunningInTestMode()) {
49-
debug('skipped updating database (test override mode)');
42+
log('skipped updating database (test override mode)');
5043
} else {
51-
const semverRange = process.env.NODE_TARGET_VERSION!;
52-
debug(`saw potential semver range: ${semverRange}`);
44+
const semverRange = process.env.NODE_TARGET_VERSION;
45+
log(`saw potential semver range: ${semverRange ?? '(undefined)'}`);
5346

5447
if (
5548
validRange(semverRange) &&
56-
!satisfiesRange(process.versions.node, semverRange)
49+
!satisfiesRange(process.versions.node, semverRange!)
5750
) {
58-
debug(
51+
log(
5952
`skipped updating database (node version ${process.versions.node} not in range)`
6053
);
6154
} else {
@@ -74,12 +67,12 @@ async function setCompatFlagTo(version: string) {
7467

7568
await client.close();
7669

77-
debug(`updated database compat: "${version}"`);
78-
} else debug('skipped updating database (no MONGODB_URI)');
70+
log(`updated database compat: "${version}"`);
71+
} else log('skipped updating database (no MONGODB_URI)');
7972
}
8073
}
8174
} catch (error) {
82-
debug('additionally, an attempt to update the database failed');
75+
log.warn('an attempt to update the database failed');
8376
throw error;
8477
}
8578
}
@@ -99,9 +92,9 @@ async function setCompatFlagTo(version: string) {
9992
* ```
10093
*/
10194
async function main() {
102-
debug('connecting to GitHub');
95+
log('connecting to GitHub');
10396

104-
if (!process.env.GH_TOKEN) debug('warning: not using a personal access token!');
97+
if (!process.env.GH_TOKEN) log('warning: not using a personal access token!');
10598

10699
const { Octokit } = await import('@octokit/rest');
107100

@@ -118,21 +111,21 @@ async function main() {
118111
});
119112

120113
const latestReleaseVersion = latestVersion.replace(/^v/, '');
121-
debug(`saw latest release version "${latestReleaseVersion}"`);
114+
log(`saw latest release version "${latestReleaseVersion}"`);
122115

123116
if (!latestReleaseVersion) throw new Error('could not find latest Next.js version');
124117

125118
const { filename: path } = findPackageJson(getCurrentWorkingDirectory()).next();
126-
debug(`using path: %O`, path);
119+
log(`using path: %O`, path);
127120

128121
if (!path) {
129122
throw new Error('could not find package.json');
130123
}
131124

132125
const nextVersionUnderTestFullNameAndVersion = `next@${latestReleaseVersion}`;
133126

134-
debug('installing %O for unit tests', nextVersionUnderTestFullNameAndVersion);
135-
debug(`(integration tests use their own Next.js versions)`);
127+
log('installing %O for unit tests', nextVersionUnderTestFullNameAndVersion);
128+
log(`(integration tests use their own Next.js versions)`);
136129

137130
// ? Install peer deps manually for Next.js
138131
const nextLatestReleaseVersionPeerDependencies = await getNextjsReactPeerDependencies(
@@ -147,16 +140,16 @@ async function main() {
147140
...nextLatestReleaseVersionPeerDependencies
148141
]);
149142

150-
debug('running compatibility tests');
143+
log('running compatibility tests');
151144

152145
await run('npm', ['run', 'test:unit']);
153146
await run('npm', ['run', 'test:integration:client']);
154147

155-
debug('test succeeded');
148+
log('test succeeded');
156149

157150
await setCompatFlagTo(latestReleaseVersion);
158151

159-
debug('execution complete');
152+
log('execution complete');
160153

161154
process.exitCode = 0;
162155
}

jest.config.mjs

+13-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@
22
'use strict';
33

44
import { deepMergeConfig } from '@-xun/symbiote/assets';
5-
import { assertEnvironment, moduleExport } from '@-xun/symbiote/assets/jest.config.mjs';
5+
6+
import {
7+
assertEnvironment,
8+
moduleExport,
9+
transformSelectEsmPackagesToCjs
10+
} from '@-xun/symbiote/assets/jest.config.mjs';
11+
612
import { createDebugLogger } from 'rejoinder';
713

814
const debug = createDebugLogger({ namespace: 'symbiote:config:jest' });
@@ -14,6 +20,12 @@ const config = deepMergeConfig(
1420
}
1521
);
1622

23+
transformSelectEsmPackagesToCjs(config, [
24+
'@octokit',
25+
'universal-user-agent',
26+
'before-after-hook'
27+
]);
28+
1729
export default config;
1830

1931
debug('exported config: %O', config);

0 commit comments

Comments
 (0)