@hexonet/semantic-release-whmcs 4.0.4 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. package/.github/dependabot.yml +7 -7
  2. package/.github/workflows/release.yml +29 -0
  3. package/.github/workflows/{pull-request.yml → test.yml} +13 -16
  4. package/.releaserc.json +1 -5
  5. package/HISTORY.md +12 -0
  6. package/index.js +23 -24
  7. package/lib/definitions/errors.js +19 -10
  8. package/lib/delete-marketplace-version.js +48 -48
  9. package/lib/get-error.js +6 -6
  10. package/lib/get-github-releases.js +17 -18
  11. package/lib/publish.js +10 -13
  12. package/lib/puppet.js +73 -74
  13. package/lib/resolve-config.js +5 -6
  14. package/lib/scrape-marketplace-versions.js +30 -28
  15. package/lib/set-compatible-versions.js +42 -41
  16. package/lib/verify.js +4 -4
  17. package/package.json +32 -28
  18. package/whmcs.js +81 -53
  19. package/.eslintignore +0 -3
  20. package/.eslintrc.js +0 -14
  21. package/.github/workflows/push.yml +0 -79
  22. package/coverage/base.css +0 -224
  23. package/coverage/block-navigation.js +0 -87
  24. package/coverage/coverage-final.json +0 -11
  25. package/coverage/favicon.png +0 -0
  26. package/coverage/index.html +0 -131
  27. package/coverage/lib/definitions/errors.js.html +0 -148
  28. package/coverage/lib/definitions/index.html +0 -116
  29. package/coverage/lib/delete-marketplace-version.js.html +0 -343
  30. package/coverage/lib/get-error.js.html +0 -106
  31. package/coverage/lib/get-github-releases.js.html +0 -184
  32. package/coverage/lib/index.html +0 -236
  33. package/coverage/lib/publish.js.html +0 -370
  34. package/coverage/lib/puppet.js.html +0 -424
  35. package/coverage/lib/resolve-config.js.html +0 -118
  36. package/coverage/lib/scrape-marketplace-versions.js.html +0 -220
  37. package/coverage/lib/set-compatible-versions.js.html +0 -298
  38. package/coverage/lib/verify.js.html +0 -157
  39. package/coverage/prettify.css +0 -1
  40. package/coverage/prettify.js +0 -2
  41. package/coverage/sort-arrow-sprite.png +0 -0
  42. package/coverage/sorter.js +0 -196
package/lib/puppet.js CHANGED
@@ -1,113 +1,112 @@
1
- const puppeteer = require('puppeteer')
2
- const debug = require('debug')('semantic-release:whmcs')
3
- const resolveConfig = require('./resolve-config')
4
-
5
- module.exports = async (context) => {
1
+ import puppeteer from "puppeteer";
2
+ import resolveConfig from "./resolve-config.js";
3
+ import debugConfig from "debug";
4
+ const debug = debugConfig("semantic-release:whmcs");
5
+ export default async (context) => {
6
+ let config;
6
7
  const cfg = {
7
- urlbase: 'https://marketplace.whmcs.com',
8
+ urlbase: "https://marketplace.whmcs.com",
8
9
  ...resolveConfig(context),
9
10
  // logger: logger,
10
11
  gotoOpts: {
11
- waitUntil: ['load', 'domcontentloaded'],
12
- timeout: 240000
12
+ waitUntil: ["load", "domcontentloaded"],
13
+ timeout: 240000,
13
14
  },
14
15
  navOpts: {
15
- waitUntil: ['networkidle0'],
16
- timeout: 240000
16
+ waitUntil: ["networkidle0"],
17
+ timeout: 240000,
17
18
  },
18
19
  selectorOpts: {
19
- timeout: 10000
20
+ timeout: 20000,
20
21
  },
21
- logger: context.logger
22
- }
22
+ logger: context.logger,
23
+ };
23
24
 
24
25
  const browser = await puppeteer.launch({
25
- headless: cfg.headless === '1',
26
+ headless: cfg.headless === "1",
26
27
  defaultViewport: null, // automatically full-sized
27
28
  args: [
28
- '--disable-gpu',
29
- '--incognito',
30
- '--start-maximized',
31
- '--no-sandbox',
32
- '--disable-setuid-sandbox',
33
- '--disable-infobars',
34
- '--ignore-certifcate-errors',
35
- '--ignore-certifcate-errors-spki-list',
36
- '--ignoreHTTPSErrors=true'
37
- ]
38
- })
39
- const { logger } = cfg
40
- const [page] = await browser.pages()
29
+ "--disable-gpu",
30
+ "--incognito",
31
+ "--start-maximized",
32
+ "--no-sandbox",
33
+ "--disable-setuid-sandbox",
34
+ "--disable-infobars",
35
+ "--ignore-certifcate-errors",
36
+ "--ignore-certifcate-errors-spki-list",
37
+ "--ignoreHTTPSErrors=true",
38
+ ],
39
+ });
40
+ const { logger } = cfg;
41
+ const [page] = await browser.pages();
41
42
  await page.setExtraHTTPHeaders({
42
- 'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8'
43
- })
43
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
44
+ });
44
45
  await page.setUserAgent(
45
- 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
46
- )
47
- await page.setJavaScriptEnabled(true)
46
+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
47
+ );
48
+ await page.setJavaScriptEnabled(true);
48
49
 
49
50
  if (cfg.debug) {
50
- page.on('console', (msg) => {
51
+ page.on("console", (msg) => {
51
52
  for (let i = 0; i < msg.args().length; i++) {
52
- logger.log(`${i}: ${msg.args()[i]}`)
53
+ logger.log(`${i}: ${msg.args()[i]}`);
53
54
  }
54
- })
55
+ });
55
56
  }
56
57
 
57
58
  page.clickAndNavigate = async (selector) => {
58
- const { page, navOpts } = this.config
59
- const nav = page.waitForNavigation(navOpts)
60
- await page.hover(selector)
61
- await page.click(selector)
62
- await nav
63
- }
59
+ const { page, navOpts } = config;
60
+ const nav = page.waitForNavigation(navOpts);
61
+ await page.hover(selector);
62
+ await page.click(selector);
63
+ await nav;
64
+ };
64
65
 
65
66
  page.enterAndType = async (selector, value) => {
66
- const { page, selectorOpts } = this.config
67
- await page.waitForSelector(selector, selectorOpts)
68
- await page.type(selector, value)
69
- }
67
+ const { page, selectorOpts } = config;
68
+ await page.waitForSelector(selector, selectorOpts);
69
+ await page.type(selector, value);
70
+ };
70
71
 
71
- this.login = async () => {
72
- const { page, login, password, productid, gotoOpts, urlbase } = this.config
73
- const selector = 'div.login-leftcol form button[type="submit"]'
72
+ async function login() {
73
+ const { page, login, password, productid, gotoOpts, urlbase } = config;
74
+ const selector = 'div.login-leftcol form button[type="submit"]';
74
75
  // do login
75
76
  try {
76
- await page.goto(`${urlbase}/user/login`, gotoOpts)
77
- debug('login form loaded at %s', `${urlbase}/user/login`)
78
- await page.enterAndType('#email', login)
79
- await page.enterAndType('#password', password)
80
- debug('WHMCS Marketplace credentials entered')
81
- await page.clickAndNavigate(selector)
82
- debug('WHMCS Marketplace login form submitted.')
77
+ await page.goto(`${urlbase}/user/login`, gotoOpts);
78
+ debug("login form loaded at %s", `${urlbase}/user/login`);
79
+ await page.enterAndType("#email", login);
80
+ await page.enterAndType("#password", password);
81
+ debug("WHMCS Marketplace credentials entered");
82
+ await page.clickAndNavigate(selector);
83
+ debug("WHMCS Marketplace login form submitted.");
83
84
  } catch (error) {
84
- debug(
85
- 'WHMCS Marketplace login failed or Product ID missing',
86
- error.message
87
- )
88
- await page.browser().close()
89
- return false
85
+ debug("WHMCS Marketplace login failed or Product ID missing", error.message);
86
+ await page.browser().close();
87
+ return false;
90
88
  }
91
- debug('WHMCS Marketplace login succeeded.')
89
+
90
+ debug("WHMCS Marketplace login succeeded.");
92
91
 
93
92
  // access MP Product ID
94
- let tmp = productid
93
+ let tmp = productid;
95
94
  if (!tmp || !/^[0-9]+$/.test(productid) || !parseInt(productid, 10)) {
96
- debug('No or invalid WHMCS Marketplace Product ID provided.')
97
- await page.browser().close()
98
- return false
95
+ debug("No or invalid WHMCS Marketplace Product ID provided.");
96
+ await page.browser().close();
97
+ return false;
99
98
  }
100
99
 
101
- tmp = tmp.replace(/(.)/g, '$&\u200E')
102
- debug(`WHMCS Marketplace Product ID: ${tmp}`)
100
+ tmp = tmp.replace(/(.)/g, "$&\u200E");
101
+ debug(`WHMCS Marketplace Product ID: ${tmp}`);
103
102
 
104
- return true
103
+ return true;
105
104
  }
106
105
 
107
- this.config = {
106
+ config = {
108
107
  ...cfg,
109
- page
110
- }
108
+ page,
109
+ };
111
110
 
112
- return this
113
- }
111
+ return { config, login };
112
+ };
@@ -1,11 +1,10 @@
1
- module.exports = ({ env }) => ({
1
+ export default ({ env }) => ({
2
2
  login: env.WHMCSMP_LOGIN || false,
3
3
  password: env.WHMCSMP_PASSWORD || false,
4
4
  productid: env.WHMCSMP_PRODUCTID || false,
5
- minversion: env.WHMCSMP_MINVERSION || '7.10',
5
+ minversion: env.WHMCSMP_MINVERSION || "7.10",
6
6
  ghtoken: env.GH_TOKEN || env.GITHUB_TOKEN || false,
7
7
  ghrepo: env.GH_REPO || env.GITHUB_REPO || false,
8
- headless: env.PUPPETEER_HEADLESS || '1',
9
- debug:
10
- (env.DEBUG && /^semantic-release:(\*|whmcs)$/.test(env.DEBUG)) || false
11
- })
8
+ headless: env.PUPPETEER_HEADLESS || "1",
9
+ debug: (env.DEBUG && /^semantic-release:(\*|whmcs)$/.test(env.DEBUG)) || false,
10
+ });
@@ -1,45 +1,47 @@
1
- const debug = require('debug')('semantic-release:whmcs')
2
- const puppet = require('./puppet')
3
- const path = require('path')
1
+ import puppet from "./puppet.js";
2
+ import debugConfig from "debug";
3
+ import { fileURLToPath } from "node:url";
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const debug = debugConfig("semantic-release:whmcs");
4
6
 
5
7
  /**
6
8
  * A method to publish the module update on whmcs market place
7
9
  */
8
- module.exports = async (pluginConfig, context) => {
9
- const sep = '+++++++++++++++++++++++++++++++++++++++++++++++++++'
10
- const out = `\n${sep}\n${path.basename(__filename)}\n${sep}\n`
10
+ export default async (pluginConfig, context) => {
11
+ const sep = "+++++++++++++++++++++++++++++++++++++++++++++++++++";
12
+ const out = `\n${sep}\n${__filename}\n${sep}\n`;
11
13
 
12
- const püppi = await puppet(context)
13
- const result = await püppi.login()
14
+ const püppi = await puppet(context);
15
+ const result = await püppi.login();
14
16
  if (!result) {
15
- return result
17
+ return result;
16
18
  }
17
- const { page, gotoOpts, selectorOpts, productid, urlbase } = püppi.config
19
+ const { page, gotoOpts, selectorOpts, productid, urlbase } = püppi.config;
18
20
 
19
- let marketplaceVersions = []
21
+ let marketplaceVersions = [];
20
22
  try {
21
23
  // scrap versions from WHMCS marketplace
22
- const url = `${urlbase}/product/${productid}/edit#versions`
23
- await page.goto(url, gotoOpts)
24
- debug(`${out}product page loaded at %s`, url)
25
- const selector = 'div#versions tr strong'
26
- await page.waitForSelector(selector, selectorOpts)
27
- debug('product version table found')
24
+ const url = `${urlbase}/product/${productid}/edit#versions`;
25
+ await page.goto(url, gotoOpts);
26
+ debug(`${out}product page loaded at %s`, url);
27
+ const selector = "div#versions tr strong";
28
+ await page.waitForSelector(selector, selectorOpts);
29
+ debug("product version table found");
28
30
  /* istanbul ignore next */
29
31
  marketplaceVersions = await page.$$eval(selector, (tds) =>
30
32
  tds.map((td) => {
31
- return td.innerText.substring(8)
33
+ return td.innerText.substring(8);
32
34
  })
33
- )
34
- marketplaceVersions.reverse()
35
- marketplaceVersions.forEach((v) => debug(`Detected WHMCS version ${v}`))
35
+ );
36
+ marketplaceVersions.reverse();
37
+ marketplaceVersions.forEach((v) => debug(`Detected WHMCS version ${v}`));
36
38
  } catch (error) {
37
- debug('Publishing new product version failed.', error.message)
38
- await page.browser().close()
39
- return false
39
+ debug("Publishing new product version failed.", error.message);
40
+ await page.browser().close();
41
+ return false;
40
42
  }
41
43
 
42
- debug('Publishing new product version succeeded.')
43
- await page.browser().close()
44
- return marketplaceVersions
45
- }
44
+ debug("Publishing new product version succeeded.");
45
+ await page.browser().close();
46
+ return marketplaceVersions;
47
+ };
@@ -1,71 +1,72 @@
1
- const debug = require('debug')('semantic-release:whmcs')
2
- const puppet = require('./puppet')
3
- const path = require('path')
1
+ import puppet from "./puppet.js";
2
+ import debugConfig from "debug";
3
+ import { fileURLToPath } from "node:url";
4
+ const debug = debugConfig("semantic-release:whmcs");
5
+ const __filename = fileURLToPath(import.meta.url);
4
6
 
5
7
  /**
6
8
  * A method to publish the module update on whmcs market place
7
9
  */
8
- module.exports = async (pluginConfig, context) => {
9
- const sep = '+++++++++++++++++++++++++++++++++++++++++++++++++++'
10
- const out = `\n${sep}\n${path.basename(__filename)}\n${sep}\n`
10
+ export default async (pluginConfig, context) => {
11
+ const sep = "+++++++++++++++++++++++++++++++++++++++++++++++++++";
12
+ const out = `\n${sep}\n${__filename}\n${sep}\n`;
11
13
 
12
- const püppi = await puppet(context)
13
- const result = await püppi.login()
14
+ const püppi = await puppet(context);
15
+ const result = await püppi.login();
14
16
  if (!result) {
15
- return result
17
+ return result;
16
18
  }
17
- const { page, gotoOpts, selectorOpts, productid, urlbase, minversion } =
18
- püppi.config
19
+ const { page, gotoOpts, selectorOpts, productid, urlbase, minversion } = püppi.config;
19
20
 
20
- debug(out)
21
+ debug(out);
21
22
  try {
22
23
  // scrap versions from WHMCS marketplace
23
- const url = `${urlbase}/product/${productid}/edit#compatibility`
24
- await page.goto(url, gotoOpts)
25
- debug('product page loaded at %s', url)
24
+ const url = `${urlbase}/product/${productid}/edit#compatibility`;
25
+ await page.goto(url, gotoOpts);
26
+ debug("product page loaded at %s", url);
26
27
 
27
- const selector = 'input[name="versionIds[]"]'
28
- const submitSelector = 'div#compatibility button[type="submit"]'
29
- await page.waitForSelector(selector, selectorOpts)
30
- await page.waitForSelector(submitSelector, selectorOpts)
31
- debug('compatibility version table found')
28
+ const selector = 'input[name="versionIds[]"]';
29
+ const submitSelector = 'div#compatibility button[type="submit"]';
30
+ await page.waitForSelector(selector, selectorOpts);
31
+ await page.waitForSelector(submitSelector, selectorOpts);
32
+ debug("compatibility version table found");
32
33
 
33
- let tmp = minversion
34
+ let tmp = minversion;
34
35
  if (tmp) {
35
- tmp = tmp.replace(/(.)/g, '$&\u200E')
36
+ tmp = tmp.replace(/(.)/g, "$&\u200E");
36
37
  }
37
- debug(`Minimum required WHMCS version: ${tmp}`)
38
+ debug(`Minimum required WHMCS version: ${tmp}`);
38
39
  /* istanbul ignore next */
39
40
  await page.$$eval(
40
41
  selector,
41
42
  (checkboxes, minversion) =>
42
43
  checkboxes.forEach(function (c) {
43
- const checkParts = c.className.split('-')[0].split('_')
44
- const minParts = minversion.split('.')
45
- let check = true
44
+ const checkParts = c.className.split("-")[0].split("_");
45
+ const minParts = minversion.split(".");
46
+ let check = true;
46
47
  for (let i = 0; i < 2; i++) {
47
- const a = ~~checkParts[i]
48
- const b = ~~minParts[i]
48
+ const a = ~~checkParts[i];
49
+ const b = ~~minParts[i];
49
50
  if (a > b) {
50
- break
51
+ break;
51
52
  }
52
53
  if (a < b) {
53
- check = false
54
- break
54
+ check = false;
55
+ break;
55
56
  }
56
57
  }
57
- c.checked = check
58
+ c.checked = check;
58
59
  }),
59
60
  minversion
60
- )
61
- await page.clickAndNavigate(submitSelector)
61
+ );
62
+ await page.clickAndNavigate(submitSelector);
62
63
  } catch (error) {
63
- debug('Updating whmcs compatibility list failed.', error.message)
64
- await page.browser().close()
65
- return false
64
+ debug("Updating whmcs compatibility list failed.", error.message);
65
+ await page.browser().close();
66
+ return false;
66
67
  }
67
68
 
68
- debug('Updating whmcs compatibility list succeeded.')
69
- await page.browser().close()
70
- return true
71
- }
69
+ debug("Updating whmcs compatibility list succeeded.");
70
+ await page.browser().close();
71
+ return true;
72
+ };
package/lib/verify.js CHANGED
@@ -1,8 +1,8 @@
1
- const AggregateError = require("aggregate-error");
2
- const resolveConfig = require("./resolve-config");
3
- const getError = require("./get-error");
1
+ import AggregateError from "aggregate-error";
2
+ import resolveConfig from "./resolve-config.js";
3
+ import getError from "./get-error.js";
4
4
 
5
- module.exports = async (pluginConfig, context) => {
5
+ export default async (pluginConfig, context) => {
6
6
  const cfg = resolveConfig(context);
7
7
  const errors = [];
8
8
  if (cfg.ghtoken === false) {
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@hexonet/semantic-release-whmcs",
3
3
  "description": "`semantic-release` plugin for auto-publishing on WHMCS marketplace",
4
- "version": "4.0.4",
4
+ "version": "5.0.0",
5
5
  "private": false,
6
+ "type": "module",
6
7
  "publishConfig": {
7
8
  "access": "public"
8
9
  },
@@ -10,11 +11,10 @@
10
11
  "name": "Kai Schwarz",
11
12
  "email": "kschwarz@hexonet.net"
12
13
  },
13
- "main": "index.js",
14
14
  "license": "MIT",
15
15
  "engines": {
16
- "node": ">=16.15.1",
17
- "npm": ">=8.11.0"
16
+ "node": ">=18",
17
+ "npm": "8.11.0"
18
18
  },
19
19
  "homepage": "https://github.com/centralnicgroup-opensource/rtldev-middleware-semantic-release-whmcs#readme",
20
20
  "repository": "github:centralnicgroup-opensource/rtldev-middleware-semantic-release-whmcs",
@@ -34,9 +34,24 @@
34
34
  "semantic-release",
35
35
  "version"
36
36
  ],
37
- "nyc": {
37
+ "ava": {
38
+ "files": [
39
+ "test/**/*.test.js"
40
+ ],
41
+ "nodeArguments": [
42
+ "--no-warnings"
43
+ ],
44
+ "timeout": "2m"
45
+ },
46
+ "prettier": {
47
+ "printWidth": 120,
48
+ "trailingComma": "es5"
49
+ },
50
+ "c8": {
38
51
  "include": [
39
- "lib/**/*.js"
52
+ "lib/**/*.js",
53
+ "index.js",
54
+ "cli.js"
40
55
  ],
41
56
  "reporter": [
42
57
  "json",
@@ -45,39 +60,28 @@
45
60
  ],
46
61
  "all": true
47
62
  },
48
- "ava": {
49
- "require": [
50
- "esm"
51
- ]
52
- },
63
+ "main": "index.js",
53
64
  "scripts": {
54
- "coverage": "nyc npm run test",
55
- "test": "ava --fail-fast --verbose --timeout=2m",
56
- "lint": "eslint --fix --config=./.eslintrc.js *.js lib/*.js lib/definitions/*.js README.md *.json test/*.test.js"
65
+ "test": "c8 ava --verbose",
66
+ "lint": "prettier --check \"*.{js,json}\" \".github/**/*.{md,yml}\" \"{lib,test}/*.js\"",
67
+ "lint:fix": "prettier --write \"*.{js,json}\" \".github/**/*.{md,yml}\" \"{lib,test}/*.js\""
57
68
  },
58
69
  "devDependencies": {
59
70
  "@semantic-release/changelog": "^6.0.1",
60
71
  "@semantic-release/exec": "^6.0.2",
61
72
  "@semantic-release/git": "^10.0.1",
62
- "ava": "^5.1.0",
63
- "eslint": "^8.0.1",
64
- "eslint-config-standard": "^17.0.0",
65
- "eslint-plugin-import": "^2.25.2",
66
- "eslint-plugin-json": "^3.0.0",
67
- "eslint-plugin-markdown": "^3.0.0",
68
- "eslint-plugin-n": "^15.2.2",
69
- "eslint-plugin-promise": "^6.0.0",
70
- "esm": "^3.2.25",
71
- "nyc": "^15.1.0",
72
- "semantic-release": "^19.0.3",
73
+ "ava": "5.1.1",
74
+ "c8": "^7.12.0",
75
+ "prettier": "^2.8.3",
76
+ "semantic-release": "^20.0.2",
73
77
  "stream-buffers": "^3.0.2"
74
78
  },
75
79
  "dependencies": {
76
80
  "@semantic-release/error": "^3.0.0",
77
- "aggregate-error": "^3.1.0",
81
+ "aggregate-error": "^4.0.1",
78
82
  "debug": "^4.3.4",
79
83
  "github-api": "^3.4.0",
80
- "puppeteer": "^16.0.0",
81
- "yargs": "^17.0.1"
84
+ "puppeteer": "^19.4.1",
85
+ "yargs": "^17.5.1"
82
86
  }
83
87
  }
package/whmcs.js CHANGED
@@ -1,59 +1,87 @@
1
-
2
- const { publish, syncVersions, delVersion, updateCompatibility } = require('./index.js')
1
+ import { createRequire } from "node:module";
2
+ import { publish, syncVersions, delVersion, updateCompatibility } from "./index.js";
3
+ const require = createRequire(import.meta.url);
3
4
 
4
5
  const context = {
5
6
  env: process.env,
6
- logger: new class {
7
- log (msg) { console.log(msg) }
8
- info (msg) { console.log(msg) }
9
- error (msg, details) { console.error(msg + ' ' + details) }
10
- }()
11
- }
7
+ logger: new (class {
8
+ log(msg) {
9
+ console.log(msg);
10
+ }
11
+ info(msg) {
12
+ console.log(msg);
13
+ }
14
+ error(msg, details) {
15
+ console.error(msg + " " + details);
16
+ }
17
+ })(),
18
+ };
12
19
 
13
20
  // eslint-disable-next-line no-unused-expressions
14
- require('yargs')
15
- .scriptName('whmcs.js')
16
- .usage('$0 <cmd> [args]')
17
- .command('publish [ver] [notes]', 'publishes the specified version to the WHMCS Marketplace', (yargs) => {
18
- yargs.positional('ver', {
19
- type: 'string',
20
- demandOption: true,
21
- describe: 'the version to publish'
22
- }).positional('notes', {
23
- type: 'string',
24
- demandOption: true,
25
- describe: 'the changelog'
26
- })
27
- }, function (argv) {
28
- context.nextRelease = {
29
- version: argv.ver,
30
- notes: argv.notes
21
+ require("yargs")
22
+ .scriptName("whmcs.js")
23
+ .usage("$0 <cmd> [args]")
24
+ .command(
25
+ "publish [ver] [notes]",
26
+ "publishes the specified version to the WHMCS Marketplace",
27
+ (yargs) => {
28
+ yargs
29
+ .positional("ver", {
30
+ type: "string",
31
+ demandOption: true,
32
+ describe: "the version to publish",
33
+ })
34
+ .positional("notes", {
35
+ type: "string",
36
+ demandOption: true,
37
+ describe: "the changelog",
38
+ });
39
+ },
40
+ function (argv) {
41
+ context.nextRelease = {
42
+ version: argv.ver,
43
+ notes: argv.notes,
44
+ };
45
+ publish({}, context).then((r) => {
46
+ console.log(r === false ? "Failed" : "Successful");
47
+ });
48
+ }
49
+ )
50
+ .command(
51
+ "sync",
52
+ "adds missing versions to the WHMCS Marketplace",
53
+ () => {},
54
+ function () {
55
+ syncVersions({}, context).then((r) => {
56
+ console.log(r === false ? "Failed" : "Successful");
57
+ });
58
+ }
59
+ )
60
+ .command(
61
+ "del [ver]",
62
+ "deletes the specified version from the WHMCS Marketplace",
63
+ (yargs) => {
64
+ yargs.positional("ver", {
65
+ type: "string",
66
+ demandOption: true,
67
+ describe: "the version to delete",
68
+ });
69
+ },
70
+ function (argv) {
71
+ context.version = argv.ver;
72
+ delVersion({}, context).then((r) => {
73
+ console.log(r === false ? "Failed" : "Successful");
74
+ });
75
+ }
76
+ )
77
+ .command(
78
+ "compatibility",
79
+ "set the compatible WHMCS versions in the Marketplace",
80
+ () => {},
81
+ function () {
82
+ updateCompatibility({}, context).then((r) => {
83
+ console.log(r === false ? "Failed" : "Successful");
84
+ });
31
85
  }
32
- publish({}, context).then(r => {
33
- console.log(r === false ? 'Failed' : 'Successful')
34
- })
35
- })
36
- .command('sync', 'adds missing versions to the WHMCS Marketplace', () => {}, function () {
37
- syncVersions({}, context).then(r => {
38
- console.log(r === false ? 'Failed' : 'Successful')
39
- })
40
- })
41
- .command('del [ver]', 'deletes the specified version from the WHMCS Marketplace', (yargs) => {
42
- yargs.positional('ver', {
43
- type: 'string',
44
- demandOption: true,
45
- describe: 'the version to delete'
46
- })
47
- }, function (argv) {
48
- context.version = argv.ver
49
- delVersion({}, context).then(r => {
50
- console.log(r === false ? 'Failed' : 'Successful')
51
- })
52
- })
53
- .command('compatibility', 'set the compatible WHMCS versions in the Marketplace', () => {}, function () {
54
- updateCompatibility({}, context).then(r => {
55
- console.log(r === false ? 'Failed' : 'Successful')
56
- })
57
- })
58
- .help()
59
- .argv
86
+ )
87
+ .help().argv;
package/.eslintignore DELETED
@@ -1,3 +0,0 @@
1
- coverage
2
- node_modules
3
- .nyc_output