Skip to content

Commit 97c3865

Browse files
committed
Fixed tests to use testSpawn. Fixed alias resource.
1 parent 22891c3 commit 97c3865

47 files changed

Lines changed: 417 additions & 444 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.cirrus.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ run_dev_task:
1212
run_script:
1313
- sleep 2000
1414

15-
integration_test_dev_task:
15+
integration_test_dev_macos_task:
1616
macos_instance:
1717
image: codify-test-vm
1818
node_modules_cache:
@@ -24,7 +24,7 @@ integration_test_dev_task:
2424

2525
integration_test_dev_linux_task:
2626
arm_container:
27-
image: node:22
27+
image: kevinwang5658/codify-test-linux:latest
2828
# node_modules_cache:
2929
# folder: node_modules
3030
# fingerprint_script: cat package-lock.json
@@ -35,7 +35,7 @@ integration_test_dev_linux_task:
3535
- npm ci
3636
- npm run test:integration -- --disable-console-intercept $DEBUG --no-file-parallelism
3737

38-
integration_individual_test_task:
38+
integration_individual_test_macos_task:
3939
macos_instance:
4040
image: codify-test-vm
4141
node_modules_cache:
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="test:integration:dev:linux" type="js.build_tools.npm">
3+
<package-json value="$PROJECT_DIR$/package.json" />
4+
<command value="run" />
5+
<scripts>
6+
<script value="test:integration:dev" />
7+
</scripts>
8+
<arguments value="-- --operatingSystem=linux" />
9+
<node-interpreter value="project" />
10+
<envs />
11+
<EXTENSION ID="com.intellij.javascript.debugger.execution.StartBrowserRunConfigurationExtension">
12+
<browser with-js-debugger="true" />
13+
</EXTENSION>
14+
<method v="2" />
15+
</configuration>
16+
</component>

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
"@types/node": "^18",
5656
"@types/plist": "^3.0.5",
5757
"@types/semver": "^7.5.4",
58-
"codify-plugin-test": "0.0.53-beta11",
58+
"codify-plugin-test": "0.0.53-beta14",
5959
"commander": "^12.1.0",
6060
"eslint": "^8.51.0",
6161
"eslint-config-oclif": "^5",

scripts/run-tests.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,50 @@ import { Command } from 'commander';
22
import { glob } from 'glob';
33
import { spawn, spawnSync } from 'node:child_process';
44
import * as inspector from 'node:inspector';
5+
import os from 'node:os';
56

67
const IP_REGEX = /VM was assigned with (.*) IP/;
78

89
const program = new Command();
910

1011
program
12+
.option('--operatingSystem <operatingSystem>', 'Operating system to run tests on', os.platform())
1113
.argument('[file]', 'File to run')
1214
.action(main)
1315
.parse()
1416

15-
async function main(argument: string): Promise<void> {
17+
async function main(argument: string, operatingSystem: string): Promise<void> {
1618
const debug = isInDebugMode();
1719
if (debug) {
1820
console.log('Running in debug mode!')
1921
}
2022

2123
if (!argument) {
22-
await launchTestAll(debug)
24+
await launchTestAll(debug, operatingSystem)
2325
return process.exit(0);
2426
}
2527

26-
await launchSingleTest(argument, debug);
28+
await launchSingleTest(argument, debug, operatingSystem);
2729
process.exit(0);
2830
}
2931

30-
async function launchTestAll(debug: boolean): Promise<void> {
32+
async function launchTestAll(debug: boolean, operatingSystem: string): Promise<void> {
33+
const image = operatingSystem === 'darwin' ? 'integration_individual_test_macos' : 'integration_individual_test_linux';
34+
3135
const tests = await glob('./test/**/*.test.ts');
3236
for (const test of tests) {
3337
console.log(`Running test ${test}`)
34-
await run(`cirrus run --lazy-pull integration_individual_test_linux -e FILE_NAME="${test}" ${ debug ? '-o simple' : ''}`, debug, false)
38+
await run(`cirrus run --lazy-pull ${image} -e FILE_NAME="${test}" ${ debug ? '-o simple' : ''}`, debug, false)
3539
}
3640

3741
// await run('cirrus run --lazy-pull integration_test_dev -o simple', debug, false);
3842
}
3943

40-
async function launchSingleTest(test: string, debug: boolean) {
44+
async function launchSingleTest(test: string, debug: boolean, operatingSystem: string) {
45+
const image = operatingSystem === 'darwin' ? 'integration_individual_test_macos' : 'integration_individual_test_linux';
46+
4147
console.log(`Running test: ${test}`)
42-
await run(`cirrus run --lazy-pull integration_individual_test -e FILE_NAME="${test}" -o simple`, debug)
48+
await run(`cirrus run --lazy-pull ${image} -e FILE_NAME="${test}" -o simple`, debug)
4349
}
4450

4551
async function run(cmd: string, debug: boolean, simple = true) {

src/resources/javascript/npm/npm.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export class Npm extends Resource<NpmConfig> {
1212
getSettings(): ResourceSettings<NpmConfig> {
1313
return {
1414
id: 'npm',
15-
operatingSystems: [OS.Darwin],
15+
operatingSystems: [OS.Darwin, OS.Linux],
1616
schema,
1717
parameterSettings: {
1818
globalInstall: { type: 'stateful', definition: new NpmGlobalInstallParameter() },

src/resources/javascript/nvm/nvm.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export class NvmResource extends Resource<NvmConfig> {
1818
getSettings(): ResourceSettings<NvmConfig> {
1919
return {
2020
id: 'nvm',
21-
operatingSystems: [OS.Darwin],
21+
operatingSystems: [OS.Darwin, OS.Linux],
2222
schema: Schema,
2323
parameterSettings: {
2424
global: { type: 'stateful', definition: new NvmGlobalParameter(), order: 2 },
@@ -54,8 +54,10 @@ export class NvmResource extends Resource<NvmConfig> {
5454
if (installResult.includes(`nvm source string already in ${shellRc}`)
5555
&& (await $.spawnSafe('which nvm', { interactive: true })).status === SpawnStatus.ERROR
5656
) {
57-
await FileUtils.addToStartupFile('export NVM_DIR="$HOME/.nvm"')
58-
await FileUtils.addToStartupFile('[ -s "$NVM_DIR/nvm.sh" ] && \\. "$NVM_DIR/nvm.sh" ');
57+
await FileUtils.addAllToStartupFile([
58+
'export NVM_DIR="$HOME/.nvm"',
59+
'[ -s "$NVM_DIR/nvm.sh" ] && \\. "$NVM_DIR/nvm.sh"'
60+
])
5961
}
6062
}
6163

src/resources/python/pyenv/pyenv.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export class PyenvResource extends Resource<PyenvConfig> {
1919
getSettings(): ResourceSettings<PyenvConfig> {
2020
return {
2121
id: 'pyenv',
22-
operatingSystems: [OS.Darwin],
22+
operatingSystems: [OS.Darwin, OS.Linux],
2323
schema: Schema,
2424
parameterSettings: {
2525
global: { type: 'stateful', definition: new PyenvGlobalParameter(), order: 2 },

src/resources/shell/alias/alias-resource.ts

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,25 +49,24 @@ export class AliasResource extends Resource<AliasConfig> {
4949
.find((l) => {
5050
const firstEqualIndex = l.indexOf('=');
5151
const name = l.slice(0, firstEqualIndex);
52-
return name === desired;
52+
return name.endsWith(desired!);
5353
});
5454

5555
if (!matchedAlias) {
5656
return null;
5757
}
5858

59-
const firstEqualIndex = matchedAlias.indexOf('=');
60-
const name = matchedAlias.slice(0, firstEqualIndex);
61-
const value = matchedAlias.slice(firstEqualIndex + 1);
62-
63-
let processedValue = value.trim()
64-
if ((processedValue.startsWith('\'') && processedValue.endsWith('\'')) || (processedValue.startsWith('"') && processedValue.endsWith('"'))) {
65-
processedValue = processedValue.slice(1, -1)
59+
const aliasMatch = matchedAlias.match(/^(?:alias\s+)?([^=]+)='?(.*?)'?$/);
60+
if (!aliasMatch) {
61+
return null;
6662
}
6763

64+
const name = aliasMatch[1].trim();
65+
const value = aliasMatch[2].trim();
66+
6867
return {
6968
alias: name,
70-
value: processedValue,
69+
value,
7170
}
7271
}
7372

@@ -81,10 +80,7 @@ export class AliasResource extends Resource<AliasConfig> {
8180
const { alias, value } = plan.desiredConfig;
8281
const aliasString = this.aliasString(alias, value);
8382

84-
const file = await fs.readFile(shellRcPath, 'utf8');
85-
const fileWithAlias = FileUtils.appendToFileWithSpacing(file, aliasString);
86-
87-
await fs.writeFile(shellRcPath, fileWithAlias, { encoding: 'utf8' });
83+
await FileUtils.addToStartupFile(aliasString);
8884
}
8985

9086
async modify(pc: ParameterChange<AliasConfig>, plan: ModifyPlan<AliasConfig>): Promise<void> {

src/resources/terraform/terraform.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import { CreatePlan, getPty, Resource, ResourceSettings, SpawnStatus } from 'codify-plugin-lib';
1+
import { CreatePlan, Resource, ResourceSettings, SpawnStatus, getPty } from 'codify-plugin-lib';
22
import { OS, StringIndexedObject } from 'codify-schemas';
3+
import fs from 'node:fs/promises';
4+
import os from 'node:os';
5+
import path from 'node:path';
36
import semver from 'semver';
47

58
import { FileUtils } from '../../utils/file-utils.js';
69
import { Utils } from '../../utils/index.js';
710
import Schema from './terraform-schema.json';
811
import { HashicorpReleaseInfo, HashicorpReleasesAPIResponse, TerraformVersionInfo } from './terraform-types.js';
9-
import fs from 'node:fs/promises';
10-
import path from 'node:path';
11-
import os from 'node:os';
1212

1313
const TERRAFORM_RELEASES_API_URL = 'https://api.releases.hashicorp.com/v1/releases/terraform';
1414
const TERRAFORM_RELEASE_INFO_API_URL = (version: string) => `https://api.releases.hashicorp.com/v1/releases/terraform/${version}`;
@@ -146,9 +146,9 @@ ${JSON.stringify(releaseInfo, null, 2)}
146146

147147
private async getDownloadUrl(releaseInfo: HashicorpReleaseInfo, isArm: boolean): Promise<null | string> {
148148
const arch = isArm ? 'arm64' : 'amd64';
149-
const os = 'darwin';
149+
const osParam = os.platform() === 'darwin' ? 'darwin' : 'linux';
150150

151-
const build = releaseInfo.builds.find((b) => b.arch === arch && b.os === os);
151+
const build = releaseInfo.builds.find((b) => b.arch === arch && b.os === osParam);
152152
if (!build) {
153153
return null;
154154
}

0 commit comments

Comments
 (0)