diff --git a/package.json b/package.json index 20555a0aad..70306c3624 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "typecheck": "turbo run typecheck --filter=\"@scm-manager/ui-*\"", "lint": "turbo run lint --filter=\"@scm-manager/ui-*\"", "predeploy": "turbo run build --filter=\"@scm-manager/ui-*\"", - "deploy": "node ./scripts/publish.js", - "set-version": "node ./scripts/version.js" + "deploy": "./scripts/scripts.js publish", + "set-version": "./scripts/scripts.js version" }, "dependencies": { "@scm-manager/eslint-config": "2.17.0" diff --git a/scripts/publish.js b/scripts/commands/publish.js similarity index 95% rename from scripts/publish.js rename to scripts/commands/publish.js index bb4b29f8ad..07eb90c6c7 100644 --- a/scripts/publish.js +++ b/scripts/commands/publish.js @@ -21,8 +21,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -const yarn = require("./lib/yarn"); -const versions = require("./lib/versions"); +const yarn = require("../lib/yarn"); +const versions = require("../lib/versions"); module.exports = (args) => { if (args.length < 1) { diff --git a/scripts/version.js b/scripts/commands/version.js similarity index 97% rename from scripts/version.js rename to scripts/commands/version.js index 00e681351f..c7d6108adb 100644 --- a/scripts/version.js +++ b/scripts/commands/version.js @@ -22,9 +22,10 @@ * SOFTWARE. */ -const yarn = require("./lib/yarn"); +const yarn = require("../lib/yarn"); module.exports = (args) => { + if (args.length < 1) { console.log("usage ui-scripts version "); process.exit(1); diff --git a/scripts/scripts.js b/scripts/scripts.js new file mode 100755 index 0000000000..7ce5554187 --- /dev/null +++ b/scripts/scripts.js @@ -0,0 +1,56 @@ +#!/usr/bin/env node +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +const fs = require("fs"); +const path = require("path"); + +const commandDir = path.join(__dirname, "commands"); +const commands = fs + .readdirSync(commandDir) + .map(script => { + if (script.endsWith(".js")) { + return script.replace(".js", ""); + } + return undefined; + }) + .filter(cmd => !!cmd); + +const args = process.argv.slice(2); + +const commandIndex = args.findIndex(arg => { + return commands.includes(arg); +}); + +const commandName = commandIndex === -1 ? args[0] : args[commandIndex]; +if (!commandName) { + console.log(`Use plugin-scripts [${commands.join(", ")}]`); +} else if (commands.includes(commandName)) { + // eslint-disable-next-line + const command = require(path.join(commandDir, `${commandName}.js`)); + command(args.slice(commandIndex + 1)); +} else { + console.log(`Unknown script "${commandName}".`); + console.log("Perhaps you need to update plugin-scripts?"); +}