Skip to content

Commit 5927783

Browse files
revive CI tasks that test against latest scaffolder and framework versions (#930)
1 parent f966e5f commit 5927783

File tree

12 files changed

+108
-49
lines changed

12 files changed

+108
-49
lines changed

.github/workflows/applications.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ on:
55
pull_request:
66
workflow_call:
77
inputs:
8-
external-tools-version:
9-
description: 'Version of external tools'
10-
default: latest
8+
deps-version-tag:
9+
description: 'Version tag of scaffolder and framework'
10+
default: ''
1111
required: false
1212
type: string
1313

@@ -32,7 +32,7 @@ jobs:
3232
runs-on: ${{ matrix.OS }}
3333
env:
3434
VUE_CLI_CONFIG_PATH: $GITHUB_WORKSPACE/.vuerc
35-
TOOLING_VERSION_PARAM: ${{ inputs.external-tools-version != '' && format('--tooling-version {0}', inputs.external-tools-version) || '' }}
35+
DEPS_VERSION_TAG_PARAM: ${{ inputs.deps-version-tag != '' && format('--deps-version-tag {0}', inputs.deps-version-tag) || '' }}
3636

3737
name: ${{ matrix.APPROACH }}, node ${{ matrix.NODE }}, ${{ matrix.OS }}
3838

@@ -54,7 +54,7 @@ jobs:
5454
run: npm config set legacy-peer-deps true
5555

5656
- name: Create ${{ matrix.APPROACH }} application
57-
run: npm run create-template -- -- -e ${{ matrix.APPROACH }} ${{ env.TOOLING_VERSION_PARAM }}
57+
run: npm run create-template -- -- -e ${{ matrix.APPROACH }} ${{ env.DEPS_VERSION_TAG_PARAM }}
5858
timeout-minutes: 30
5959

6060
- name: Install Internal Packages
@@ -64,14 +64,14 @@ jobs:
6464

6565
- name: Lint created application
6666
if: ${{ matrix.OS != 'windows-latest' }}
67-
run: npm run lint-template -- -- -e ${{ matrix.APPROACH }} ${{ env.TOOLING_VERSION_PARAM }}
67+
run: npm run lint-template -- -- -e ${{ matrix.APPROACH }} ${{ env.DEPS_VERSION_TAG_PARAM }}
6868

6969
- name: Run template tests
7070
if: ${{ matrix.OS != 'windows-latest' }}
7171
env:
7272
LAUNCH_BROWSER: true
7373
CHROME_PATH: ${{ steps.setup-chrome.outputs.chrome-path }}
74-
run: npm run test-template -- -- -e ${{ matrix.APPROACH }} ${{ env.TOOLING_VERSION_PARAM }}
74+
run: npm run test-template -- -- -e ${{ matrix.APPROACH }} ${{ env.DEPS_VERSION_TAG_PARAM }}
7575
timeout-minutes: 40
7676

7777
- name: Archive artifacts

.github/workflows/schedule-cli-tests-latest-version.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
name: Run CLI tests
1111
uses: ./.github/workflows/applications.yml
1212
with:
13-
external-tools-version: latest
13+
external-tools-version-tag: latest
1414

1515
teams_notification_on_failure:
1616
name: Send Teams notification

.github/workflows/schedule-cli-tests-next-version.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ name: Schedule tests for next versions of external CLIs
22

33
on:
44
workflow_dispatch:
5-
schedule:
6-
- cron: "0 1 * * 1"
5+
# schedule:
6+
# - cron: "0 1 * * 1"
77

88
jobs:
99
call_tests_workflow:
1010
name: Run CLI tests
1111
uses: ./.github/workflows/applications.yml
1212
with:
13-
external-tools-version: next
13+
external-tools-version-tag: next
1414

1515
teams_notification_on_failure:
1616
name: Send Teams notification

packages/devextreme-cli/src/applications/application.angular.js

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ const fs = require('fs');
77
const dasherize = require('../utility/string').dasherize;
88
const ngVersion = require('../utility/ng-version');
99
const latestVersions = require('../utility/latest-versions');
10-
const { extractToolingVersion, toolingVersionOptionName } = require('../utility/extract-tooling-version');
10+
const { extractDepsVersionTag, depsVersionTagOptionName } = require('../utility/extract-deps-version-tag');
11+
const { getPackageJsonPath } = require('../utility/package-json-utils');
12+
const modifyJson = require('../utility/modify-json-file');
1113
const schematicsVersion = latestVersions['devextreme-schematics'] || 'latest';
1214

1315
const minNgCliVersion = new semver('17.0.0');
@@ -27,7 +29,7 @@ async function runSchematicCommand(schematicCommand, options, evaluatingOptions)
2729

2830
const commandArguments = ['g', `${collectionName}:${schematicCommand}`];
2931

30-
const { [toolingVersionOptionName]: _, ...optionsToArguments } = options; // eslint-disable-line no-unused-vars
32+
const { [depsVersionTagOptionName]: _, ...optionsToArguments } = options; // eslint-disable-line no-unused-vars
3133
for(let option in optionsToArguments) {
3234
commandArguments.push(`--${dasherize(option)}=${options[option]}`);
3335
}
@@ -37,12 +39,13 @@ async function runSchematicCommand(schematicCommand, options, evaluatingOptions)
3739

3840
async function runNgCommand(commandArguments, commandOptions, commandConfig) {
3941
const hasNg = await hasSutableNgCli();
40-
const toolingVersion = extractToolingVersion(commandOptions);
41-
const npmCommandName = hasNg && !toolingVersion ? 'ng' : 'npx';
42+
const depsVersionTag = extractDepsVersionTag(commandOptions);
43+
const npmCommandName = hasNg && !depsVersionTag ? 'ng' : 'npx';
4244
const [minCliLtsVersion] = minNgCliVersion.version.split('.');
43-
const ngCommandArguments = hasNg && !toolingVersion
45+
46+
const ngCommandArguments = hasNg && !depsVersionTag
4447
? []
45-
: ['-p', `@angular/cli@v${minCliLtsVersion}-lts`, 'ng'];
48+
: ['-p', `@angular/cli@${depsVersionTag || `v${minCliLtsVersion}-lts`}`, 'ng'];
4649

4750
ngCommandArguments.push(...commandArguments);
4851
return runCommand(npmCommandName, ngCommandArguments, commandConfig);
@@ -74,8 +77,26 @@ const install = async(options) => {
7477
});
7578
};
7679

80+
const bumpAngular = (appPath, versionTag) => {
81+
modifyJson(getPackageJsonPath(appPath), ({ dependencies, devDependencies, ...rest }) => {
82+
const bump = (section) => {
83+
for(const depName in section) {
84+
section[depName] = depName.startsWith('@angular') ? versionTag : section[depName];
85+
}
86+
};
87+
88+
return {
89+
dependencies: bump(dependencies),
90+
devDependencies: bump(devDependencies),
91+
...rest,
92+
};
93+
});
94+
95+
};
96+
7797
const create = async(appName, options) => {
7898
const layout = await getLayoutInfo(options.layout);
99+
const depsVersionTag = extractDepsVersionTag(options);
79100

80101
const commandArguments = [
81102
'new',
@@ -92,6 +113,10 @@ const create = async(appName, options) => {
92113

93114
const appPath = path.join(process.cwd(), appName);
94115

116+
if(depsVersionTag) {
117+
bumpAngular(appPath, depsVersionTag);
118+
}
119+
95120
options.resolveConflicts = 'override';
96121
options.updateBudgets = true;
97122
options.layout = layout;

packages/devextreme-cli/src/applications/application.react.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const stringUtils = require('../utility/string');
1414
const typescriptUtils = require('../utility/typescript-extension');
1515
const removeFile = require('../utility/file-operations').remove;
1616
const latestVersions = require('../utility/latest-versions');
17+
const { extractDepsVersionTag } = require('../utility/extract-deps-version-tag');
1718
const defaultStyles = [
1819
'devextreme/dist/css/dx.light.css'
1920
];
@@ -51,6 +52,17 @@ const updateJsonPropName = (path, name) => {
5152
});
5253
};
5354

55+
const bumpReact = (appPath, versionTag) => {
56+
const dependencies = [
57+
{ name: 'react', version: versionTag },
58+
{ name: 'react-dom', version: versionTag },
59+
{ name: '@types/react', version: versionTag, dev: true },
60+
{ name: '@types/react-dom', version: versionTag, dev: true },
61+
];
62+
63+
packageJsonUtils.addDependencies(appPath, dependencies);
64+
};
65+
5466
const create = async(appName, options) => {
5567
const templateType = await getTemplateTypeInfo(options.template);
5668
const transpiler = await getTranspilerTypeInfo(options.transpiler);
@@ -61,8 +73,9 @@ const create = async(appName, options) => {
6173
layout: stringUtils.classify(layoutType),
6274
isTypeScript: typescriptUtils.isTypeScript(templateType)
6375
});
76+
const depsVersionTag = extractDepsVersionTag(options);
6477

65-
const commandArguments = [`-p=create-vite@${latestVersions['create-vite']}`, 'create-vite', appName];
78+
const commandArguments = [`-p=create-vite@${depsVersionTag || latestVersions['create-vite']}`, 'create-vite', appName];
6679

6780
commandArguments.push(`--template react${transpiler === 'swc' ? '-swc' : ''}${templateOptions.isTypeScript ? '-ts' : ''}`);
6881

@@ -72,6 +85,10 @@ const create = async(appName, options) => {
7285

7386
modifyIndexHtml(appPath, templateOptions.project);
7487

88+
if(depsVersionTag) {
89+
bumpReact(appPath, depsVersionTag);
90+
}
91+
7592
addTemplate(appPath, appName, templateOptions);
7693
};
7794

packages/devextreme-cli/src/applications/application.vue.js

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const insertItemToArray = require('../utility/file-content').insertItemToArray;
99
const moduleUtils = require('../utility/module');
1010
const stringUtils = require('../utility/string');
1111
const latestVersions = require('../utility/latest-versions');
12-
const { toolingVersionOptionName, extractToolingVersion } = require('../utility/extract-tooling-version');
12+
const { depsVersionTagOptionName, extractDepsVersionTag } = require('../utility/extract-deps-version-tag');
1313
const defaultStyles = [
1414
'devextreme/dist/css/dx.light.css'
1515
];
@@ -37,25 +37,42 @@ const preparePackageJsonForTemplate = (appPath, appName) => {
3737
packageJsonUtils.updateName(appPath, appName);
3838
};
3939

40-
async function createVueApp(name, templateOptions) {
41-
const toolingVersion = extractToolingVersion(templateOptions);
42-
const argList = ['-p', `@vue/cli${toolingVersion}`, 'vue', 'create', name, '--registry', 'https://registry.npmjs.org/', '-p "Default (Vue 3)"'];
40+
async function createVueApp(name, depsVersionTag) {
41+
const argList = ['-p', `@vue/cli@${depsVersionTag}`, 'vue', 'create', name, '--registry', 'https://registry.npmjs.org/', '-p "Default (Vue 3)"'];
4342

4443
return runCommand('npx', argList);
4544
}
4645

46+
const bumpVue = (appPath, versionTag) => {
47+
const dependencies = [
48+
{ name: 'vue', version: versionTag },
49+
{ name: 'vue-router', version: versionTag },
50+
{ name: '@vue/cli-plugin-babel', version: versionTag, dev: true },
51+
{ name: '@vue/cli-plugin-eslint', version: versionTag, dev: true },
52+
{ name: '@vue/cli-service', version: versionTag, dev: true },
53+
];
54+
55+
packageJsonUtils.addDependencies(appPath, dependencies);
56+
};
57+
4758
const create = async(appName, options) => {
4859
const layout = await getLayoutInfo(options.layout);
60+
const depsVersionTag = extractDepsVersionTag(options);
4961

5062
const templateOptions = {
5163
project: stringUtils.humanize(appName),
5264
layout: layout,
53-
[toolingVersionOptionName]: options[toolingVersionOptionName]
65+
[depsVersionTagOptionName]: options[depsVersionTagOptionName]
5466
};
5567

56-
await createVueApp(appName, templateOptions);
68+
await createVueApp(appName, depsVersionTag);
5769

5870
const appPath = path.join(process.cwd(), appName);
71+
72+
if(depsVersionTag) {
73+
bumpVue(appPath, depsVersionTag);
74+
}
75+
5976
modifyIndexHtml(appPath, templateOptions.project);
6077
addTemplate(appPath, appName, templateOptions);
6178
};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const depsVersionTagOptionName = 'deps-version-tag';
2+
3+
const extractDepsVersionTag = (commandOptions) => {
4+
if(commandOptions && commandOptions[depsVersionTagOptionName]) {
5+
return commandOptions[depsVersionTagOptionName];
6+
}
7+
return '';
8+
};
9+
10+
module.exports = {
11+
depsVersionTagOptionName,
12+
extractDepsVersionTag,
13+
};

packages/devextreme-cli/src/utility/extract-tooling-version.js

Lines changed: 0 additions & 13 deletions
This file was deleted.

packages/devextreme-cli/testing/creating.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const minimist = require('minimist');
2-
const { toolingVersionOptionName } = require('../src/utility/extract-tooling-version');
2+
const { depsVersionTagOptionName } = require('../src/utility/extract-deps-version-tag');
33
const envs = require('./constants').envs;
44

55
const args = minimist(process.argv.slice(2), {
@@ -17,10 +17,10 @@ const args = minimist(process.argv.slice(2), {
1717
? envs
1818
: envs.filter(e => e.engine === args.e);
1919

20-
const toolingVersion = args[toolingVersionOptionName];
20+
const depsVersionTag = args[depsVersionTagOptionName];
2121
filteredEnvs.forEach(async env => {
2222
try {
23-
await env.createApp(toolingVersion);
23+
await env.createApp(depsVersionTag);
2424
} catch(e) {
2525
process.exit(1);
2626
}

packages/devextreme-cli/testing/env.angular.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const path = require('path');
44
const packageManager = require('../src/utility/package-manager');
55
const rimraf = require('./utils/rimraf-async');
66
const runCommand = require('../src/utility/run-command');
7-
const { toolingVersionOptionName } = require('../src/utility/extract-tooling-version');
7+
const { depsVersionTagOptionName } = require('../src/utility/extract-deps-version-tag');
88

99
const appName = 'my-app';
1010
const sandboxPath = path.join(process.cwd(), './testing/sandbox/angular');
@@ -31,12 +31,12 @@ exports.deployPath = path.join(appPath, 'dist', 'my-app', 'browser');
3131
exports.npmArgs = ['run', 'build', '--', '--configuration', 'development'];
3232
exports.fileExtension = 'ts';
3333

34-
exports.createApp = async(toolingVersion) => {
34+
exports.createApp = async(depsVersionTag) => {
3535
await rimraf(sandboxPath);
3636
fs.mkdirSync(sandboxPath, { recursive: true });
3737

3838
await prepareSchematics();
39-
const additionalArguments = toolingVersion && [`--${toolingVersionOptionName} ${toolingVersion}`] || [];
39+
const additionalArguments = depsVersionTag && [`--${depsVersionTagOptionName} ${depsVersionTag}`] || [];
4040
await runCommand('node', [
4141
path.join(process.cwd(), './index.js'),
4242
'new',

0 commit comments

Comments
 (0)