Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Schmid2019-11-16 00:54:46 +0000
committerMatthias Villiger2019-11-19 15:09:26 +0000
commit1068c2f35469aae8c8aa605147eda4f48b19ee5c (patch)
tree4777ee4268e2fe3239b00e9fdf18bccd2b599bcc
parented5cf3ab872be4665895c8065ec32c31b605342b (diff)
downloadorg.eclipse.scout.rt-1068c2f35469aae8c8aa605147eda4f48b19ee5c.tar.gz
org.eclipse.scout.rt-1068c2f35469aae8c8aa605147eda4f48b19ee5c.tar.xz
org.eclipse.scout.rt-1068c2f35469aae8c8aa605147eda4f48b19ee5c.zip
create releng module
Signed-off-by: Daniel Schmid <Daniel.Schmid@bsiag.com>
-rw-r--r--eclipse-scout-cli/bin/scout-scripts.js26
-rw-r--r--eclipse-scout-cli/package.json19
-rw-r--r--eclipse-scout-cli/scripts/updateVersion.js129
-rw-r--r--eclipse-scout-core/package.json15
-rw-r--r--eclipse-scout-releng/.gitignore5
-rw-r--r--eclipse-scout-releng/bin/releng-scripts.js186
-rw-r--r--eclipse-scout-releng/package.json36
-rw-r--r--eclipse-scout-releng/scripts/snapshot-cleanup.js (renamed from eclipse-scout-cli/scripts/snapshot-cleanup.js)91
-rw-r--r--eclipse-scout-releng/scripts/updateVersion.js285
-rw-r--r--eclipse-scout-testing/package.json17
-rw-r--r--eslint-config/package.json13
-rw-r--r--karma-jasmine-scout/package.json13
-rw-r--r--org.eclipse.scout.rt.svg.ui.html/package.json15
13 files changed, 588 insertions, 262 deletions
diff --git a/eclipse-scout-cli/bin/scout-scripts.js b/eclipse-scout-cli/bin/scout-scripts.js
index 97cc7c46b9..b1d16993e1 100644
--- a/eclipse-scout-cli/bin/scout-scripts.js
+++ b/eclipse-scout-cli/bin/scout-scripts.js
@@ -56,32 +56,6 @@ switch (script) {
runWebpackWatch({mode: 'development'});
break;
}
- case 'snapshot-version': {
- const updateVersionScript = require('../scripts/updateVersion');
- updateVersionScript.generateSnapshotVersion()
- .then(() => console.log('snapshot version done'))
- .catch(e => {
- console.error('snapshot version failed');
- console.error(e);
- process.exit(1);
- });
- break;
- }
- case 'release-version': {
- const updateVersionScript = require('../scripts/updateVersion');
- updateVersionScript.updateVersionAndDependencies()
- .then(() => console.log('Update version done'))
- .catch(e => {
- console.error('Update version failed');
- console.error(e);
- process.exit(1);
- });
- break;
- }
- case 'snapshot-cleanup': {
- require('../scripts/snapshot-cleanup');
- break;
- }
default:
console.log(`Unknown script "${script}"`);
break;
diff --git a/eclipse-scout-cli/package.json b/eclipse-scout-cli/package.json
index fc0146047a..b6aa11fb16 100644
--- a/eclipse-scout-cli/package.json
+++ b/eclipse-scout-cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@eclipse-scout/cli",
- "version": "10.0.0",
+ "version": "10.0.0-snapshot",
"description": "CLI for Eclipse Scout",
"author": "BSI Business Systems Integration AG",
"homepage": "https://www.eclipse.org/scout",
@@ -22,9 +22,11 @@
"scripts"
],
"scripts": {
- "snapshot-version": "node bin/scout-scripts snapshot-version",
- "release-version": "node bin/scout-scripts release-version",
- "snapshot-cleanup": "node bin/scout-scripts snapshot-cleanup"
+ "snapshot-cleanup": "releng-scripts snapshot-cleanup",
+ "snapshot-predependency": "releng-scripts snapshot-install-dependency",
+ "snapshot-postdependency": "releng-scripts snapshot-publish-dependency",
+ "release-predependency": "releng-scripts release-install-dependency",
+ "release-postdependency": "releng-scripts release-publish-dependency"
},
"dependencies": {
"@babel/cli": "7.6.4",
@@ -33,7 +35,6 @@
"@babel/plugin-proposal-object-rest-spread": "7.6.2",
"@babel/plugin-transform-object-assign": "7.2.0",
"@babel/preset-env": "7.6.3",
- "axios": "0.19.0",
"babel-loader": "8.0.6",
"clean-webpack-plugin": "3.0.0",
"copy-webpack-plugin": "5.0.4",
@@ -44,7 +45,7 @@
"karma-jasmine": "2.0.1",
"karma-jasmine-jquery": "0.1.1",
"karma-jasmine-ajax": "0.1.13",
- "@eclipse-scout/karma-jasmine-scout": "^10.0.0-snapshot",
+ "@eclipse-scout/karma-jasmine-scout": "10.0.0-snapshot",
"karma-jasmine-html-reporter": "1.4.2",
"karma-junit-reporter": "2.0.1",
"karma-webpack": "4.0.2",
@@ -57,8 +58,10 @@
"webpack": "4.41.2",
"webpack-cli": "3.3.9",
"webpack-dev-server": "3.8.2",
- "webpack-shell-plugin": "0.5.0",
- "yargs": "14.2.0"
+ "webpack-shell-plugin": "0.5.0"
+ },
+ "devDependencies": {
+ "@eclipse-scout/releng": "10.0.0"
},
"bin": {
"scout-scripts": "./bin/scout-scripts.js"
diff --git a/eclipse-scout-cli/scripts/updateVersion.js b/eclipse-scout-cli/scripts/updateVersion.js
deleted file mode 100644
index f56fee4bb1..0000000000
--- a/eclipse-scout-cli/scripts/updateVersion.js
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/usr/bin/env node
-/*
- * Copyright (c) 2010-2019 BSI Business Systems Integration AG.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * BSI Business Systems Integration AG - initial API and implementation
- */
-
-// Makes the script crash on unhandled rejections instead of silently
-// ignoring them. In the future, promise rejections that are not handled will
-// terminate the Node.js process with a non-zero exit code.
-process.on('unhandledRejection', err => {
- throw err;
-});
-
-const writeFile = async(fileName, file, verbose) => {
- const fsp = require('fs').promises;
- const stringified = JSON.stringify(file, null, 2);
- if (verbose) {
- console.log(`file: ${fileName}; new content:\n${stringified}`);
- }
- await fsp.writeFile(fileName, stringified);
- if (verbose) {
- console.log(`file ${fileName} saved`);
- }
-};
-
-const updateDepencies = (dependencies, regex, version, verbose) => {
- if (dependencies) {
- for (const moduleName of Object.keys(dependencies)) {
- if (regex.test(moduleName)) {
- if (verbose) {
- console.log(`updating dependency: ${moduleName}: ${version}`);
- }
- dependencies[moduleName] = version;
- }
- }
- }
-};
-
-const updateVersionAndDependencies = async() => {
- const yargs = require('yargs');
- const path = require('path');
- const argv = yargs
- .option('newVersion', {
- description: 'new version of the npm module',
- type: 'string'
- })
- .option('verbose', {
- description: 'More Logging',
- type: 'boolean',
- default: false
- })
- .argv;
-
- console.log(`Input arguments: new version=${argv.newVersion};verbose=${argv.verbose}`);
-
- if (!argv.newVersion) {
- throw new Error('Please provide arguments for --newVersion');
- }
-
- const fileName = './package.json';
- const packageJson = require(path.resolve(fileName));
-
- // update version of npm module
- packageJson.version = argv.newVersion;
-
- // --mapping.0.regex @eclipse-scout --mapping.0.version 10.0.2 creates an object mapping = {0: {regex: @eclipse-scout; version: 10.0.2}}
- if (argv.mapping) {
- for (const entry of Object.values(argv.mapping)) {
- if (!entry.regex || !entry.version) {
- throw new Error('Please provide arguments in the form of --mapping.0.regex and --mapping.0.version');
- }
-
- const regex = new RegExp(`^${entry.regex}`); // the module name should start with the regex
-
- if (argv.verbose) {
- console.log(`searching for dependencies with regex: ${regex} and updating to version=${entry.version}`);
- }
- updateDepencies(packageJson.dependencies, regex, entry.version, argv.verbose);
- updateDepencies(packageJson.devDependencies, regex, entry.version, argv.verbose);
- updateDepencies(packageJson.peerDependencies, regex, entry.version, argv.verbose);
- }
- }
-
- await writeFile(fileName, packageJson, argv.verbose);
-};
-
-const generateSnapshotVersion = async() => {
- const yargs = require('yargs');
- const path = require('path');
- const argv = yargs
- .option('verbose', {
- description: 'More Logging',
- type: 'boolean',
- default: false
- })
- .argv;
-
- const filename = './package.json';
- const packageJson = require(path.resolve(filename));
-
- let timestamp = new Date().toISOString(); // UTC
-
- // Create a string with the pattern yyyyMMddHHmmss
- timestamp = timestamp.replace(/[-:.TZ]/g, '');
- timestamp = timestamp.substr(0, timestamp.length - 3);
-
- const oldVersion = packageJson.version;
- const cleanedVersion = oldVersion.replace(/-snapshot(.)*/i, '');
- const newVersion = `${cleanedVersion}-snapshot.${timestamp}`;
-
- if (argv.verbose) {
- console.log(`old version was: ${oldVersion}`);
- }
- console.log(`New Version: ${newVersion}`);
- packageJson.version = newVersion;
-
- await writeFile(filename, packageJson, argv.verbose);
-};
-
-module.exports = {
- generateSnapshotVersion,
- updateVersionAndDependencies
-};
diff --git a/eclipse-scout-core/package.json b/eclipse-scout-core/package.json
index a443ee16dd..f1aebe1429 100644
--- a/eclipse-scout-core/package.json
+++ b/eclipse-scout-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@eclipse-scout/core",
- "version": "10.0.0",
+ "version": "10.0.0-snapshot",
"description": "Eclipse Scout",
"author": "BSI Business Systems Integration AG",
"homepage": "https://www.eclipse.org/scout",
@@ -31,13 +31,16 @@
"build:prod": "scout-scripts build:prod",
"build:all": "scout-scripts build:dev && scout-scripts build:prod",
"build:dev:watch": "scout-scripts build:dev:watch",
- "snapshot-version": "scout-scripts snapshot-version",
- "release-version": "scout-scripts release-version",
- "snapshot-cleanup": "scout-scripts snapshot-cleanup"
+ "snapshot-cleanup": "releng-scripts snapshot-cleanup",
+ "snapshot-predependency": "releng-scripts snapshot-install-dependency",
+ "snapshot-postdependency": "releng-scripts snapshot-publish-dependency",
+ "release-predependency": "releng-scripts release-install-dependency",
+ "release-postdependency": "releng-scripts release-publish-dependency"
},
"devDependencies": {
- "@eclipse-scout/cli": "^10.0.0-snapshot",
- "@eclipse-scout/testing": "^10.0.0-snapshot"
+ "@eclipse-scout/cli": "10.0.0-snapshot",
+ "@eclipse-scout/releng": "10.0.0",
+ "@eclipse-scout/testing": "10.0.0-snapshot"
},
"dependencies": {
"jquery": "3.4.1"
diff --git a/eclipse-scout-releng/.gitignore b/eclipse-scout-releng/.gitignore
new file mode 100644
index 0000000000..921ac61272
--- /dev/null
+++ b/eclipse-scout-releng/.gitignore
@@ -0,0 +1,5 @@
+node_modules
+dist
+test-results
+node
+!bin \ No newline at end of file
diff --git a/eclipse-scout-releng/bin/releng-scripts.js b/eclipse-scout-releng/bin/releng-scripts.js
new file mode 100644
index 0000000000..abc0f7f13a
--- /dev/null
+++ b/eclipse-scout-releng/bin/releng-scripts.js
@@ -0,0 +1,186 @@
+#!/usr/bin/env node
+/*
+ * Copyright (c) BSI Business Systems Integration AG. All rights reserved.
+ * http://www.bsiag.com/
+ */
+
+// Makes the script crash on unhandled rejections instead of silently
+// ignoring them. In the future, promise rejections that are not handled will
+// terminate the Node.js process with a non-zero exit code.
+process.on('unhandledRejection', err => {
+ throw err;
+});
+
+const yargs = require('yargs');
+
+const generateSnapshot = args => {
+ const script = require('../scripts/updateVersion');
+ script.updateSnapshotVersion(args.verbose)
+ .then(() => console.log('snapshot version done'))
+ .catch(e => {
+ console.error('snapshot version failed');
+ console.error(e);
+ process.exit(1);
+ });
+};
+
+const setInstallSnapshotDependencies = args => {
+ const script = require('../scripts/updateVersion');
+ script.setPreInstallSnapshotDependencies({verbose: args.verbose, dryrun: args.dryrun, excludeFolderOverride: args.excludeFolderOverride})
+ .then(() => console.log('setPreInstallSnapshotDependencies version done'))
+ .catch(e => {
+ console.error('setPreInstallSnapshotDependencies version failed');
+ console.error(e);
+ process.exit(1);
+ });
+};
+
+const setPublishSnapshotDependencies = args => {
+ const script = require('../scripts/updateVersion');
+ script.setPrePublishSnapshotDependencies({verbose: args.verbose, dryrun: args.dryrun, excludeFolderOverride: args.excludeFolderOverride})
+ .then(() => console.log('setPublishSnapshotDependencies version done'))
+ .catch(e => {
+ console.error('setPublishSnapshotDependencies version failed');
+ console.error(e);
+ process.exit(1);
+ });
+};
+
+const setInstallReleaseDependencies = args => {
+ const script = require('../scripts/updateVersion');
+ script.setPreInstallReleaseDependencies({mapping: args.mapping, verbose: args.verbose, dryrun: args.dryrun, excludeFolderOverride: args.excludeFolderOverride})
+ .then(() => console.log('setInstallReleaseDependencies version done'))
+ .catch(e => {
+ console.error('setInstallReleaseDependencies version failed');
+ console.error(e);
+ process.exit(1);
+ });
+};
+
+const setPublishReleaseDependencies = args => {
+ if (!args.newVersion && !args.mapping) {
+ throw new Error('Please provide arguments for --newVersion or --mapping');
+ }
+ const script = require('../scripts/updateVersion');
+ script.setPrePublishReleaseDependencies({mapping: args.mapping, newVersion: args.newVersion, useRegexMap: args.useRegexMap, verbose: args.verbose, dryrun: args.dryrun, excludeFolderOverride: args.excludeFolderOverride})
+ .then(() => console.log('setPublishReleaseDependencies version done'))
+ .catch(e => {
+ console.error('setPublishReleaseDependencies version failed');
+ console.error(e);
+ process.exit(1);
+ });
+};
+
+const cleanupArtifactory = args => {
+ const script = require('../scripts/snapshot-cleanup');
+ script.doCleanup({url: args.url, apikey: args.apikey, user: args.user, pwd: args.pwd, reponame: args.reponame, keep: args.keep, dryrun: args.dryrun, verbose: args.verbose})
+ .then(() => console.log('Repository cleanup done'))
+ .catch(e => {
+ console.error('Repository cleanup failed');
+ console.error(e);
+ process.exit(1);
+ });
+};
+
+yargs
+ .command('$0', 'default', () => {
+ }, argv => {
+ console.log(`Unknown script ${argv._[0]}`);
+ })
+ .command('snapshot-version', 'generate a new snapshot version for the module',
+ () => {
+ },
+ generateSnapshot
+ )
+ .command('snapshot-install-dependency', 'updates dependencies for ci',
+ yargs => {
+ return yargs
+ .option('excludeFolderOverride', {
+ description: 'override the default exclusion',
+ type: 'array'
+ });
+ },
+ setInstallSnapshotDependencies
+ )
+ .command('snapshot-publish-dependency', 'updates dependencies for ci',
+ yargs => {
+ return yargs
+ .option('excludeFolderOverride', {
+ description: 'override the default exclusion',
+ type: 'array'
+ });
+ },
+ setPublishSnapshotDependencies
+ )
+ .command('release-install-dependency', 'updates dependencies for ci',
+ yargs => {
+ return yargs
+ .option('excludeFolderOverride', {
+ description: 'override the default exclusion',
+ type: 'array'
+ });
+ },
+ setInstallReleaseDependencies
+ )
+ .command('release-publish-dependency', 'updates dependencies for ci',
+ yargs => {
+ return yargs
+ .option('newVersion', {
+ description: 'new version of the npm module',
+ type: 'string'
+ })
+ .option('useRegexMap', {
+ description: 'true if the modules in the workspace have different versions. the regex-version mapping is used to set the version',
+ type: 'boolean',
+ default: false
+ })
+ .option('excludeFolderOverride', {
+ description: 'override the default exclusion',
+ type: 'array'
+ });
+ },
+ setPublishReleaseDependencies
+ )
+ .command('snapshot-cleanup', 'cleanup old modules on the artifactory',
+ yargs => {
+ return yargs
+ .option('apikey', {
+ description: 'API Key for authentication',
+ type: 'string'
+ })
+ .option('url', {
+ description: 'URL of the artifactory',
+ type: 'string'
+ })
+ .option('user', {
+ description: 'username',
+ type: 'string'
+ })
+ .option('pwd', {
+ description: 'password',
+ type: 'string'
+ })
+ .option('reponame', {
+ description: 'name of the repository',
+ type: 'string'
+ })
+ .option('keep', {
+ description: 'Number of Artifacts to keep',
+ type: 'number'
+ });
+ },
+ cleanupArtifactory
+ )
+ .option('dryrun', {
+ description: 'If true, simulation of the command',
+ type: 'boolean',
+ default: false
+ })
+ .option(
+ 'verbose',
+ {
+ description: 'More Logging',
+ type: 'boolean',
+ default: false
+ }
+ ).argv;
diff --git a/eclipse-scout-releng/package.json b/eclipse-scout-releng/package.json
new file mode 100644
index 0000000000..b6a15ff550
--- /dev/null
+++ b/eclipse-scout-releng/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "@eclipse-scout/releng",
+ "version": "10.0.0",
+ "description": "Release Engineering module for Eclipse Scout",
+ "author": "BSI Business Systems Integration AG",
+ "homepage": "https://www.eclipse.org/scout",
+ "repository": {
+ "type": "git",
+ "url": "ssh://git.eclipse.org:29418/scout/org.eclipse.scout.rt"
+ },
+ "license": "EPL-1.0",
+ "publishConfig": {
+ "registry": "https://scout.bsiag.com/repository/api/npm/com.bsiag.scout-npm-local/"
+ },
+ "engines": {
+ "node": ">=12.2.0",
+ "npm": ">=6.9.0",
+ "pnpm": ">=4"
+ },
+ "files": [
+ "bin",
+ "scripts"
+ ],
+ "scripts": {
+ "snapshot-version": "node bin/releng-scripts snapshot-version",
+ "release-version": "node bin/releng-scripts release-version",
+ "snapshot-cleanup": "node bin/releng-scripts snapshot-cleanup"
+ },
+ "dependencies": {
+ "axios": "0.19.0",
+ "yargs": "14.2.0"
+ },
+ "bin": {
+ "releng-scripts": "./bin/releng-scripts.js"
+ }
+}
diff --git a/eclipse-scout-cli/scripts/snapshot-cleanup.js b/eclipse-scout-releng/scripts/snapshot-cleanup.js
index df200bc8e8..287ba54102 100644
--- a/eclipse-scout-cli/scripts/snapshot-cleanup.js
+++ b/eclipse-scout-releng/scripts/snapshot-cleanup.js
@@ -1,13 +1,7 @@
#!/usr/bin/env node
/*
- * Copyright (c) 2014-2019 BSI Business Systems Integration AG.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * BSI Business Systems Integration AG - initial API and implementation
+ * Copyright (c) BSI Business Systems Integration AG. All rights reserved.
+ * http://www.bsiag.com/
*/
const axios = require('axios');
@@ -36,7 +30,7 @@ const getPackageName = itemName => {
return itemName.replace(NAME_REGEX, '');
};
-const getSnapshots = async (artifactoryUrl, repoName, config, verbose) => {
+const getSnapshots = async(artifactoryUrl, repoName, config, verbose) => {
const AQL_API = 'api/search/aql'; // use aql for search
const searchUrl = `${artifactoryUrl}${AQL_API}`;
const query = `items.find({"repo":"${repoName}","name":{"$match":"*snapshot.*tgz"}})`;
@@ -71,7 +65,7 @@ const getSnapshots = async (artifactoryUrl, repoName, config, verbose) => {
return snapshotMap;
};
-const calculateItemsToDelete = async (itemMap, noToKeep) => {
+const calculateItemsToDelete = async(itemMap, noToKeep) => {
const toDelete = [];
for (const itemSet of itemMap.values()) {
// order the snapshots of each package by date and select the oldest items to delete
@@ -83,7 +77,7 @@ const calculateItemsToDelete = async (itemMap, noToKeep) => {
return toDelete;
};
-const deleteItems = async (artifactoryUrl, items, config, dryrun) => {
+const deleteItems = async(artifactoryUrl, items, config, dryrun) => {
let success = true;
if (!items || items.length === 0) {
console.log('Nothing to cleanup');
@@ -109,49 +103,11 @@ const deleteItems = async (artifactoryUrl, items, config, dryrun) => {
}
};
-const doCleanup = async () => {
- const yargs = require('yargs');
- const argv = yargs
- .option('apikey', {
- description: 'API Key for authentication',
- type: 'string'
- })
- .option('url', {
- description: 'URL of the artifactory',
- type: 'string'
- })
- .option('user', {
- description: 'username',
- type: 'string'
- })
- .option('pwd', {
- description: 'password',
- type: 'string'
- })
- .option('reponame', {
- description: 'name of the repository',
- type: 'string'
- })
- .option('dryrun', {
- description: 'If true, the command only indicates which artifacts would have been deleted.',
- type: 'boolean',
- default: false
- })
- .option('keep', {
- description: 'Number of Artifacts to keep',
- type: 'number',
- default: 5
- })
- .option('verbose', {
- description: 'More Logging',
- type: 'boolean',
- default: false
- })
- .argv;
-
- console.log(`Input arguments: url=${argv.url}; repo-name=${argv.reponame}; number of artifacts to keep=${argv.keep}; dry-run=${argv.dryrun}; verbose=${argv.verbose}`);
-
- if (!argv.reponame || !argv.url) {
+const doCleanup = async({url, apikey, user, pwd, reponame, keep = 5, dryrun = false, verbose = false}) => {
+
+ console.log(`Input arguments: url=${url}; repo-name=${reponame}; number of artifacts to keep=${keep}; dry-run=${dryrun}; verbose=${verbose}`);
+
+ if (!reponame || !url) {
throw new Error('Please provide arguments for --url and --repo-name');
}
@@ -159,32 +115,27 @@ const doCleanup = async () => {
'Content-Type': 'text/plain'
};
- if (argv.apikey) {
- headers['X-JFrog-Art-Api'] = argv.apikey;
+ if (apikey) {
+ headers['X-JFrog-Art-Api'] = apikey;
}
const config = {
headers: headers
};
- if (!argv.apikey && argv.user && argv.pwd) {
+ if (!apikey && user && pwd) {
config.auth = {
- username: argv.user,
- password: argv.pwd
+ username: user,
+ password: pwd
};
}
- const foundItems = await getSnapshots(argv.url, argv.reponame, config, argv.verbose);
- const itemsToDelete = await calculateItemsToDelete(foundItems, argv.keep);
- await deleteItems(argv.url, itemsToDelete, config, argv.dryrun);
+ const foundItems = await getSnapshots(url, reponame, config, verbose);
+ const itemsToDelete = await calculateItemsToDelete(foundItems, keep);
+ await deleteItems(url, itemsToDelete, config, dryrun);
};
-doCleanup()
- .then(() => console.log('Repository cleanup done'))
- .catch(e => {
- console.error('Repository cleanup failed');
- console.error(e);
- process.exit(1);
- });
-
+module.exports = {
+ doCleanup
+};
diff --git a/eclipse-scout-releng/scripts/updateVersion.js b/eclipse-scout-releng/scripts/updateVersion.js
new file mode 100644
index 0000000000..9775c0e5f1
--- /dev/null
+++ b/eclipse-scout-releng/scripts/updateVersion.js
@@ -0,0 +1,285 @@
+#!/usr/bin/env node
+/*
+ * Copyright (c) 2010-2019 BSI Business Systems Integration AG.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BSI Business Systems Integration AG - initial API and implementation
+ */
+
+// Makes the script crash on unhandled rejections instead of silently
+// ignoring them. In the future, promise rejections that are not handled will
+// terminate the Node.js process with a non-zero exit code.
+process.on('unhandledRejection', err => {
+ throw err;
+});
+
+const path = require('path');
+const fs = require('fs');
+const fsp = fs.promises;
+
+const writeFile = async(fileName, file, verbose) => {
+ const stringified = JSON.stringify(file, null, 2);
+ if (verbose) {
+ console.log(`file: ${fileName}; new content:\n${stringified}`);
+ }
+ await fsp.writeFile(fileName, stringified);
+ if (verbose) {
+ console.log(`file ${fileName} saved`);
+ }
+};
+
+/**
+ * generates a timestamp with the pattern yyyyMMddHHmmss
+ * @returns {string}
+ */
+const generateTimeStamp = () => {
+ let timestamp = new Date().toISOString(); // UTC
+
+ // Create a string with the pattern yyyyMMddHHmmss
+ timestamp = timestamp.replace(/[-:.TZ]/g, '');
+ timestamp = timestamp.substr(0, timestamp.length - 3);
+ return timestamp;
+};
+
+/**
+ * generates a snapshot-version of the current module version and the timestamp
+ * @param moduleVersion
+ * @param timestamp
+ * @param verbose
+ * @returns {string}
+ */
+const generateSnapshotVersion = ({moduleVersion, timestamp, verbose}) => {
+ const cleanedVersion = moduleVersion.replace(/-snapshot(.)*/i, '');
+ const newVersion = `${cleanedVersion}-snapshot.${timestamp}`;
+
+ if (verbose) {
+ console.log(`old version was: ${moduleVersion}`);
+ }
+ console.log(`New Version: ${newVersion}`);
+ return newVersion;
+};
+
+
+const updateSnapshotVersion = async verbose => {
+ const filename = './package.json';
+ const packageJson = require(path.resolve(filename));
+ packageJson.version = generateSnapshotVersion({moduleVersion: packageJson.version, timestamp: generateTimeStamp(), verbose});
+ await writeFile(filename, packageJson, verbose);
+};
+
+/**
+ * searches the matching regex for the module name and returns the corresponding version.
+ * @param moduleName
+ * @param mapping
+ * @param newModuleVersion
+ * @param useRegexMap
+ * @param updateWorkspaceDependencies
+ * @param verbose
+ * @returns {string | *}
+ */
+const createReleaseVersionConstraint = ({moduleName, mapping, newModuleVersion, useRegexMap = false, updateWorkspaceDependencies, verbose}) => {
+ // --mapping.0.regex @eclipse-scout --mapping.0.version 10.0.2 creates an object mapping = {0: {regex: @eclipse-scout; version: 10.0.2}}
+ if (updateWorkspaceDependencies && !useRegexMap) {
+ // all Modules in the repository/workspace get the same version
+ return newModuleVersion;
+ }
+ if (mapping) {
+ for (const entry of Object.values(mapping)) {
+ if (!entry.regex || !entry.version) {
+ throw new Error('Please provide arguments in the form of --mapping.0.regex and --mapping.0.version');
+ }
+
+ const regex = new RegExp(`^${entry.regex}`); // the module name should start with the regex
+ if (regex.test(moduleName)) {
+ if (verbose) {
+ console.log(`new release constraint form: ${moduleName}: ${entry.version}`);
+ }
+ return entry.version;
+ }
+ }
+ }
+ throw new Error(`couldn't find a constraint for ${moduleName}! Please provide a matching regex`);
+};
+
+/**
+ * generates the constraint for a snapshot build
+ * @param oldConstraint
+ * @returns {string}
+ */
+const createSnapshotVersionConstraint = oldConstraint => {
+ const cleanedModuleVersion = oldConstraint.replace(/-snapshot(.)*/i, '');
+ const versionConstraint = `>=${cleanedModuleVersion}-snapshot <${cleanedModuleVersion}`; // ">=10.0.0-snapshot <10.0.0"
+ return versionConstraint;
+};
+
+const updateDependencyConstraints = ({dependencies, modulesInWorkspace = [], updateWorkspaceDependencies, isSnapshot, mapping, verbose, newModuleVersion, useRegexMap}) => {
+ if (!dependencies) {
+ return;
+ }
+
+ const regex = new RegExp('-snapshot$');
+ for (const [moduleName, version] of Object.entries(dependencies)) {
+ if (regex.test(version)) {
+ if ((updateWorkspaceDependencies && modulesInWorkspace.includes(moduleName)) || (!updateWorkspaceDependencies && !modulesInWorkspace.includes(moduleName))) {
+ const versionConstraint = isSnapshot ? createSnapshotVersionConstraint(version) : createReleaseVersionConstraint({moduleName, mapping, newModuleVersion: newModuleVersion, useRegexMap, updateWorkspaceDependencies, verbose});
+ console.log(`dependency ${moduleName} with version ${version} needs to be updated. new constraint: ${versionConstraint}`);
+ dependencies[moduleName] = versionConstraint;
+ } else {
+ if (verbose) {
+ console.log(`dependency ${moduleName} with version ${version} is in the workspace. no update`);
+ }
+ }
+ } else {
+ if (verbose) {
+ console.log(`dependency ${moduleName} with version ${version} is not a snapshot. no update`);
+ }
+ }
+ }
+};
+
+/**
+ * find pnpm-workspace.yaml file by going up the directory tree
+ * @param dir where to start searching
+ * @param verbose more logging
+ * @returns {Promise<*>}
+ */
+const findWorkspaceFileDir = async(dir, verbose) => {
+ const filePath = path.join(dir, 'pnpm-workspace.yaml');
+ if (fs.existsSync(filePath)) {
+ if (verbose) {
+ console.log('workspace dir: ' + dir);
+ }
+ return dir;
+ }
+
+ const parentDir = path.join(dir, '../');
+ if (dir === parentDir) {
+ throw new Error('there is no workspace file');
+ }
+ return findWorkspaceFileDir(parentDir, verbose);
+};
+
+/**
+ * returns the folders which are excluded by default
+ * @param excludeFolderOverride
+ * @returns {*[]|*}
+ */
+const getExcludedFolders = excludeFolderOverride => {
+ if (!excludeFolderOverride) {
+ return ['node_modules', '.git', '.settings', '.idea', 'target', 'src'];
+ }
+ return excludeFolderOverride;
+};
+/**
+ * searches all npm modules in the workspace.
+ * @param dir
+ * @param verbose
+ * @param result
+ * @returns {Promise<Array>} key is the name of the module, value is the path to the package.json file
+ */
+const findNpmModules = async({dir, verbose, result = [], excludeFolderOverride}) => {
+ const excludedFolders = getExcludedFolders(excludeFolderOverride);
+ const files = await fsp.readdir(dir);
+ for (const file of files) {
+ const filePath = path.resolve(dir, file);
+ const state = await fsp.stat(filePath);
+ if (state.isDirectory() && !excludedFolders.includes(file)) {
+ // go deeper
+ await findNpmModules({dir: filePath, verbose, result, excludeFolderOverride});
+ } else {
+ if (file === 'package.json' ) {
+ if (verbose) {
+ console.log(`found a package.json here: ${filePath}`);
+ }
+
+ const packageJson = require(filePath);
+ const name = packageJson.name;
+ result[name] = filePath;
+ }
+ }
+ }
+ return result;
+};
+
+const collectModulesInWorkspace = async(startDir, excludeFolderOverride, verbose) => {
+ const root = await findWorkspaceFileDir(startDir, verbose);
+ console.log('start searching for package.json files...');
+ const result = await findNpmModules({dir: root, verbose, excludeFolderOverride});
+ return result;
+};
+
+
+const updateAllPackageJsons = async({isSnapshot = true, updateWorkspaceDependencies = false, releaseDependencyMapping = {}, newVersion, useRegexMap = false, verbose = false, dryrun = false, excludeFolderOverride}) => {
+ const filename = './package.json';
+ const filePath = path.resolve(filename);
+ const dir = path.dirname(filePath);
+ const foundModulesMap = await collectModulesInWorkspace(dir, excludeFolderOverride, verbose);
+ if (!foundModulesMap) {
+ console.log('no modules found');
+ return;
+ }
+
+ const modulesInWorkspace = Object.keys(foundModulesMap);
+ for (const modulePath of Object.values(foundModulesMap)) {
+ const packageJson = require(modulePath);
+ console.log(`updating version/dependency for module: ${packageJson.name}`);
+ // update version of this module
+ if (newVersion || useRegexMap) {
+ if (isSnapshot) {
+ packageJson.version = generateSnapshotVersion({moduleVersion: packageJson.version, timestamp: newVersion, verbose});
+ } else {
+ if (!useRegexMap) {
+ packageJson.version = newVersion;
+ } else {
+ packageJson.version = createReleaseVersionConstraint({moduleName: packageJson.name, mapping: releaseDependencyMapping, newVersion, useRegexMap, updateWorkspaceDependencies, verbose});
+ }
+ }
+ if (verbose) {
+ console.log(`new version for module: ${packageJson.version}`);
+ }
+ }
+
+ // update dependencies of this module
+ updateDependencyConstraints({dependencies: packageJson.dependencies, modulesInWorkspace, updateWorkspaceDependencies, isSnapshot, mapping: releaseDependencyMapping, newModuleVersion: newVersion, useRegexMap, verbose});
+ updateDependencyConstraints({dependencies: packageJson.devDependencies, modulesInWorkspace, updateWorkspaceDependencies, isSnapshot, mapping: releaseDependencyMapping, newModuleVersion: newVersion, useRegexMap, verbose});
+ updateDependencyConstraints({dependencies: packageJson.peerDependencies, modulesInWorkspace, updateWorkspaceDependencies, isSnapshot, mapping: releaseDependencyMapping, newModuleVersion: newVersion, useRegexMap, verbose});
+ updateDependencyConstraints({dependencies: packageJson.bundledDependencies, modulesInWorkspace, updateWorkspaceDependencies, isSnapshot, mapping: releaseDependencyMapping, newModuleVersion: newVersion, useRegexMap, verbose});
+ updateDependencyConstraints({dependencies: packageJson.optionalDependencies, modulesInWorkspace, updateWorkspaceDependencies, isSnapshot, mapping: releaseDependencyMapping, newModuleVersion: newVersion, useRegexMap, verbose});
+
+ if (!dryrun) {
+ await writeFile(modulePath, packageJson, verbose);
+ } else {
+ console.log(JSON.stringify(packageJson, null, 2));
+ }
+ }
+};
+
+const setPreInstallSnapshotDependencies = async({verbose, dryrun, excludeFolderOverride}) => {
+ await updateAllPackageJsons({isSnapshot: true, updateWorkspaceDependencies: false, verbose, dryrun, excludeFolderOverride});
+};
+
+const setPrePublishSnapshotDependencies = async({verbose, dryrun, excludeFolderOverride}) => {
+ const timeStamp = generateTimeStamp();
+ await updateAllPackageJsons({isSnapshot: true, updateWorkspaceDependencies: true, newVersion: timeStamp, verbose, dryrun, excludeFolderOverride});
+};
+
+const setPreInstallReleaseDependencies = async({mapping, verbose, dryrun, excludeFolderOverride}) => {
+ await updateAllPackageJsons({isSnapshot: false, updateWorkspaceDependencies: false, releaseDependencyMapping: mapping, verbose, dryrun, excludeFolderOverride});
+
+};
+
+const setPrePublishReleaseDependencies = async({mapping, newVersion, verbose, dryrun, useRegexMap, excludeFolderOverride}) => {
+ await updateAllPackageJsons({isSnapshot: false, updateWorkspaceDependencies: true, releaseDependencyMapping: mapping, newVersion, useRegexMap, verbose, dryrun, excludeFolderOverride});
+};
+
+module.exports = {
+ updateSnapshotVersion,
+ setPreInstallSnapshotDependencies,
+ setPrePublishSnapshotDependencies,
+ setPreInstallReleaseDependencies,
+ setPrePublishReleaseDependencies
+};
diff --git a/eclipse-scout-testing/package.json b/eclipse-scout-testing/package.json
index b4ed67e91b..97f2666d27 100644
--- a/eclipse-scout-testing/package.json
+++ b/eclipse-scout-testing/package.json
@@ -1,6 +1,6 @@
{
"name": "@eclipse-scout/testing",
- "version": "10.0.0",
+ "version": "10.0.0-snapshot",
"description": "Eclipse Scout",
"author": "BSI Business Systems Integration AG",
"homepage": "https://www.eclipse.org/scout",
@@ -22,17 +22,20 @@
"src"
],
"scripts": {
- "snapshot-version": "scout-scripts snapshot-version",
- "release-version": "scout-scripts release-version",
- "snapshot-cleanup": "scout-scripts snapshot-cleanup"
+ "snapshot-cleanup": "releng-scripts snapshot-cleanup",
+ "snapshot-predependency": "releng-scripts snapshot-install-dependency",
+ "snapshot-postdependency": "releng-scripts snapshot-publish-dependency",
+ "release-predependency": "releng-scripts release-install-dependency",
+ "release-postdependency": "releng-scripts release-publish-dependency"
},
"devDependencies": {
- "@eclipse-scout/cli": "^10.0.0-snapshot",
+ "@eclipse-scout/cli": "10.0.0-snapshot",
+ "@eclipse-scout/releng": "10.0.0",
"jquery": "3.4.1",
- "@eclipse-scout/core": "^10.0.0-snapshot"
+ "@eclipse-scout/core": "10.0.0-snapshot"
},
"peerDependencies": {
"jquery": "3.4.1",
- "@eclipse-scout/core": "^10.0.0-snapshot"
+ "@eclipse-scout/core": "10.0.0-snapshot"
}
}
diff --git a/eslint-config/package.json b/eslint-config/package.json
index f738110aaa..bead84c76c 100644
--- a/eslint-config/package.json
+++ b/eslint-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@eclipse-scout/eslint-config",
- "version": "10.0.0",
+ "version": "10.0.0-snapshot",
"description": "ESLint shareable config for the Scout style",
"author": "BSI Business Systems Integration AG",
"homepage": "https://www.eclipse.org/scout",
@@ -42,12 +42,15 @@
"src"
],
"scripts": {
- "snapshot-version": "scout-scripts snapshot-version",
- "release-version": "scout-scripts release-version",
- "snapshot-cleanup": "scout-scripts snapshot-cleanup"
+ "snapshot-cleanup": "releng-scripts snapshot-cleanup",
+ "snapshot-predependency": "releng-scripts snapshot-install-dependency",
+ "snapshot-postdependency": "releng-scripts snapshot-publish-dependency",
+ "release-predependency": "releng-scripts release-install-dependency",
+ "release-postdependency": "releng-scripts release-publish-dependency"
},
"devDependencies": {
- "@eclipse-scout/cli": "^10.0.0-snapshot",
+ "@eclipse-scout/cli": "10.0.0-snapshot",
+ "@eclipse-scout/releng": "10.0.0",
"eslint": "6.5.1"
},
"peerDependencies": {
diff --git a/karma-jasmine-scout/package.json b/karma-jasmine-scout/package.json
index d600b4de15..4dc7e9b305 100644
--- a/karma-jasmine-scout/package.json
+++ b/karma-jasmine-scout/package.json
@@ -1,6 +1,6 @@
{
"name": "@eclipse-scout/karma-jasmine-scout",
- "version": "10.0.0",
+ "version": "10.0.0-snapshot",
"description": "Scout plugin for Jasmine in Karma",
"author": "BSI Business Systems Integration AG",
"homepage": "https://www.eclipse.org/scout",
@@ -25,12 +25,15 @@
"testserver:start": "scout-scripts test-server:start",
"testserver:stop": "scout-scripts test-server:stop",
"test:ci": "scout-scripts test:ci",
- "snapshot-version": "scout-scripts snapshot-version",
- "release-version": "scout-scripts release-version",
- "snapshot-cleanup": "scout-scripts snapshot-cleanup"
+ "snapshot-cleanup": "releng-scripts snapshot-cleanup",
+ "snapshot-predependency": "releng-scripts snapshot-install-dependency",
+ "snapshot-postdependency": "releng-scripts snapshot-publish-dependency",
+ "release-predependency": "releng-scripts release-install-dependency",
+ "release-postdependency": "releng-scripts release-publish-dependency"
},
"devDependencies": {
- "@eclipse-scout/cli": "^10.0.0-snapshot"
+ "@eclipse-scout/cli": "10.0.0-snapshot",
+ "@eclipse-scout/releng": "10.0.0"
},
"dependencies": {
"jquery": "3.4.1"
diff --git a/org.eclipse.scout.rt.svg.ui.html/package.json b/org.eclipse.scout.rt.svg.ui.html/package.json
index d4d735a03f..6c9c8bcb3d 100644
--- a/org.eclipse.scout.rt.svg.ui.html/package.json
+++ b/org.eclipse.scout.rt.svg.ui.html/package.json
@@ -1,6 +1,6 @@
{
"name": "@eclipse-scout/svg",
- "version": "10.0.0",
+ "version": "10.0.0-snapshot",
"description": "Eclipse Scout",
"author": "BSI Business Systems Integration AG",
"homepage": "https://www.eclipse.org/scout",
@@ -26,15 +26,18 @@
"build:prod": "scout-scripts build:prod",
"build:all": "scout-scripts build:dev && scout-scripts build:prod",
"build:dev:watch": "scout-scripts build:dev:watch",
- "snapshot-version": "scout-scripts snapshot-version",
- "release-version": "scout-scripts release-version",
- "snapshot-cleanup": "scout-scripts snapshot-cleanup"
+ "snapshot-cleanup": "releng-scripts snapshot-cleanup",
+ "snapshot-predependency": "releng-scripts snapshot-install-dependency",
+ "snapshot-postdependency": "releng-scripts snapshot-publish-dependency",
+ "release-predependency": "releng-scripts release-install-dependency",
+ "release-postdependency": "releng-scripts release-publish-dependency"
},
"devDependencies": {
- "@eclipse-scout/cli": "^10.0.0-snapshot"
+ "@eclipse-scout/cli": "10.0.0-snapshot",
+ "@eclipse-scout/releng": "10.0.0"
},
"dependencies": {
- "@eclipse-scout/core": "^10.0.0-snapshot",
+ "@eclipse-scout/core": "10.0.0-snapshot",
"jquery": "3.4.1"
},
"peerDependencies": {

Back to the top