test: make metadata fixture executable on Windows (#220)
* test: make metadata fixture executable on Windows * test: use node executable for metadata fixture * ci: avoid macos tsgolint crash
This commit is contained in:
parent
2a9b353b21
commit
782e028abe
5
.github/workflows/ci.yml
vendored
5
.github/workflows/ci.yml
vendored
@ -48,6 +48,11 @@ jobs:
|
|||||||
- run: pnpm install --frozen-lockfile
|
- run: pnpm install --frozen-lockfile
|
||||||
- run: pnpm --version
|
- run: pnpm --version
|
||||||
- run: pnpm check
|
- run: pnpm check
|
||||||
|
if: matrix.os != 'macos-15'
|
||||||
|
|
||||||
|
- name: Check without type-aware oxlint
|
||||||
|
if: matrix.os == 'macos-15'
|
||||||
|
run: pnpm format:check && pnpm typecheck
|
||||||
|
|
||||||
- name: Verify generated schema is committed
|
- name: Verify generated schema is committed
|
||||||
if: matrix.os == 'ubuntu-latest'
|
if: matrix.os == 'ubuntu-latest'
|
||||||
|
|||||||
@ -7,20 +7,45 @@ import { metadataPathForArtifact, readCliMetadata } from '../src/cli-metadata.js
|
|||||||
describe('readCliMetadata', () => {
|
describe('readCliMetadata', () => {
|
||||||
it('prefers embedded metadata over stale sidecar metadata', async () => {
|
it('prefers embedded metadata over stale sidecar metadata', async () => {
|
||||||
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'mcporter-metadata-'));
|
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'mcporter-metadata-'));
|
||||||
const artifact = path.join(tempDir, 'artifact');
|
const artifact = path.join(tempDir, process.platform === 'win32' ? 'artifact.exe' : 'artifact');
|
||||||
const embedded = metadataPayload('embedded');
|
const embedded = metadataPayload('embedded');
|
||||||
const sidecar = metadataPayload('sidecar');
|
const sidecar = metadataPayload('sidecar');
|
||||||
await fs.writeFile(
|
const previousEmbeddedMetadata = process.env.MCPORTER_TEST_EMBEDDED_METADATA;
|
||||||
artifact,
|
const previousNodeOptions = process.env.NODE_OPTIONS;
|
||||||
`#!/usr/bin/env node\nconsole.log(${JSON.stringify(JSON.stringify(embedded))});\n`,
|
process.env.MCPORTER_TEST_EMBEDDED_METADATA = JSON.stringify(embedded);
|
||||||
'utf8'
|
if (process.platform === 'win32') {
|
||||||
);
|
const preload = path.join(tempDir, 'inspect-preload.cjs');
|
||||||
await fs.chmod(artifact, 0o755);
|
await fs.copyFile(process.execPath, artifact);
|
||||||
|
await fs.writeFile(
|
||||||
|
preload,
|
||||||
|
'console.log(process.env.MCPORTER_TEST_EMBEDDED_METADATA); process.exit(0);\n',
|
||||||
|
'utf8'
|
||||||
|
);
|
||||||
|
const requirePath = preload.replaceAll(path.sep, path.posix.sep);
|
||||||
|
process.env.NODE_OPTIONS = `${previousNodeOptions ? `${previousNodeOptions} ` : ''}--require ${requirePath}`;
|
||||||
|
} else {
|
||||||
|
const artifactContent = '#!/usr/bin/env node\nconsole.log(process.env.MCPORTER_TEST_EMBEDDED_METADATA);\n';
|
||||||
|
await fs.writeFile(artifact, artifactContent, 'utf8');
|
||||||
|
await fs.chmod(artifact, 0o755);
|
||||||
|
}
|
||||||
await fs.writeFile(metadataPathForArtifact(artifact), JSON.stringify(sidecar), 'utf8');
|
await fs.writeFile(metadataPathForArtifact(artifact), JSON.stringify(sidecar), 'utf8');
|
||||||
|
|
||||||
await expect(readCliMetadata(artifact)).resolves.toMatchObject({
|
try {
|
||||||
server: { name: 'embedded' },
|
await expect(readCliMetadata(artifact)).resolves.toMatchObject({
|
||||||
});
|
server: { name: 'embedded' },
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
if (previousEmbeddedMetadata === undefined) {
|
||||||
|
delete process.env.MCPORTER_TEST_EMBEDDED_METADATA;
|
||||||
|
} else {
|
||||||
|
process.env.MCPORTER_TEST_EMBEDDED_METADATA = previousEmbeddedMetadata;
|
||||||
|
}
|
||||||
|
if (previousNodeOptions === undefined) {
|
||||||
|
delete process.env.NODE_OPTIONS;
|
||||||
|
} else {
|
||||||
|
process.env.NODE_OPTIONS = previousNodeOptions;
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user