diff options
author | Daniel Schmid | 2019-11-16 00:54:46 +0000 |
---|---|---|
committer | Matthias Villiger | 2019-11-19 15:09:26 +0000 |
commit | 1068c2f35469aae8c8aa605147eda4f48b19ee5c (patch) | |
tree | 4777ee4268e2fe3239b00e9fdf18bccd2b599bcc /eclipse-scout-cli | |
parent | ed5cf3ab872be4665895c8065ec32c31b605342b (diff) | |
download | org.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>
Diffstat (limited to 'eclipse-scout-cli')
-rw-r--r-- | eclipse-scout-cli/bin/scout-scripts.js | 26 | ||||
-rw-r--r-- | eclipse-scout-cli/package.json | 19 | ||||
-rw-r--r-- | eclipse-scout-cli/scripts/snapshot-cleanup.js | 190 | ||||
-rw-r--r-- | eclipse-scout-cli/scripts/updateVersion.js | 129 |
4 files changed, 11 insertions, 353 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/snapshot-cleanup.js b/eclipse-scout-cli/scripts/snapshot-cleanup.js deleted file mode 100644 index df200bc8e8..0000000000 --- a/eclipse-scout-cli/scripts/snapshot-cleanup.js +++ /dev/null @@ -1,190 +0,0 @@ -#!/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 - */ - -const axios = require('axios'); - -// 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 constructPath = (artifactoryUrl, item) => { - if (item.path === '.') { - return `${artifactoryUrl}/${item.repo}/${item.filename}`; - } - return `${artifactoryUrl}/${item.repo}/${item.path}/${item.filename}`; -}; - -const getScopeName = path => { - const SCOPE_REGEX = /^@[\w-]+/g; - return path.match(SCOPE_REGEX); -}; - -const getPackageName = itemName => { - const NAME_REGEX = /-snapshot.*/gi; - return itemName.replace(NAME_REGEX, ''); -}; - -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"}})`; - - const snapshotMap = new Map(); - const response = await axios.post(searchUrl, query, config); - const data = response.data; - - if (verbose) { - console.log('found items:\n' + JSON.stringify(data, null, 2)); - } - - if (data && data.results) { - for (const item of data.results) { - // group the snapshots by package and version to ensure that old versions wont be deleted e.g. groupName = @scout/cli-10.0.0 - const groupName = `${getScopeName(item.path)}/${getPackageName(item.name)}`; - - let groupSet = snapshotMap.get(groupName); - if (!groupSet) { - groupSet = new Set(); - snapshotMap.set(groupName, groupSet); - } - groupSet.add({ - groupName, - filename: item.name, - path: item.path, - created: new Date(item.created), - repo: item.repo - }); - } - } - return snapshotMap; -}; - -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 - const deleteItems = Array.from(itemSet) - .sort((a, b) => b.created - a.created) - .slice(noToKeep); - toDelete.push(...deleteItems); - } - return toDelete; -}; - -const deleteItems = async (artifactoryUrl, items, config, dryrun) => { - let success = true; - if (!items || items.length === 0) { - console.log('Nothing to cleanup'); - } - for (const item of items) { - const itemUrl = constructPath(artifactoryUrl, item); - console.log(`delete: ${itemUrl}; ${dryrun ? 'dryrun=true' : ''}`); - if (dryrun) { - continue; - } - try { - const response = await axios.delete(itemUrl, config); - console.log(response.status); - } catch (error) { - success = false; - console.error(`couldn't delete item: ${itemUrl}`); - console.error(error); - } - } - - if (!success) { - throw Error('Not every item could be deleted'); - } -}; - -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) { - throw new Error('Please provide arguments for --url and --repo-name'); - } - - const headers = { - 'Content-Type': 'text/plain' - }; - - if (argv.apikey) { - headers['X-JFrog-Art-Api'] = argv.apikey; - } - - const config = { - headers: headers - }; - - if (!argv.apikey && argv.user && argv.pwd) { - config.auth = { - username: argv.user, - password: argv.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); -}; - -doCleanup() - .then(() => console.log('Repository cleanup done')) - .catch(e => { - console.error('Repository cleanup failed'); - console.error(e); - process.exit(1); - }); - - 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 -}; |