From b023ac9f0e48665a862728cf4c94cb1b0e7919fa Mon Sep 17 00:00:00 2001 From: Mathieu LEMAIRE Date: Thu, 6 Jul 2017 18:48:01 +0200 Subject: [PATCH] Add create + delete milestone commands --- README.md | 2 ++ lib/commands/milestone/change-status.js | 2 +- lib/commands/milestone/create.js | 45 +++++++++++++++++++++++++ lib/commands/milestone/delete.js | 28 +++++++++++++++ lib/commands/milestone/index.js | 4 ++- 5 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 lib/commands/milestone/create.js create mode 100644 lib/commands/milestone/delete.js diff --git a/README.md b/README.md index e5d6966..7b4a752 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,8 @@ ghm milestone list list all milestones ghm milestone open [milestone] re-open milestone ghm milestone close [milestone] close milestone ghm milestone update [milestone] update milestone +ghm milestone create [milestone] create a new milestone +ghm milestone delete [milestone] permanently delete a milestone # pull-request commands ghm pull list list all pull-requests diff --git a/lib/commands/milestone/change-status.js b/lib/commands/milestone/change-status.js index e254451..82e0f32 100644 --- a/lib/commands/milestone/change-status.js +++ b/lib/commands/milestone/change-status.js @@ -10,7 +10,7 @@ module.exports = state => { const milestones = await filterMilestones(repos, argv.milestone); if (!milestones.length) return; - log.info(`Changing status to ${state}...`);Ò + log.info(`Changing status to ${state}...`); const progress = new ProgressBar(':current/:total [:bar]', { total: milestones.length }); for (let milestone of milestones) { diff --git a/lib/commands/milestone/create.js b/lib/commands/milestone/create.js new file mode 100644 index 0000000..3f1b80d --- /dev/null +++ b/lib/commands/milestone/create.js @@ -0,0 +1,45 @@ +const ProgressBar = require('progress'); +const colors = require('colors'); +const auth = require('../../auth'); +const log = require('../../log'); + +module.exports.command = 'create [milestone]'; + +module.exports.describe = 'Create a new milestone in multiple repositories'; + +module.exports.builder = { + description: { + type: 'string', + describe: 'description of the milestone' + }, + due: { + alias: 'd', + type: 'string', + describe: 'milestone\'s due date. format: YYYY-MM-DD' + } +}; + +module.exports.handler = async function(argv) { + const { github, repos } = await auth.init(); + + log.info(`Creating milestones...`); + const progress = new ProgressBar(':current/:total [:bar]', { total: repos.length }); + for (let repo of repos) { + await github.issues.createMilestone({ + owner: repo.owner, + repo: repo.name, + title: argv.milestone, + description: argv.description, + due_on: argv.due || getDefaultDue() + }); + progress.tick(); + } + + log.success(`Done.`); +}; + +function getDefaultDue() { + var now = new Date(); + now.setDate(now.getDate() + 14); + return now.toISOString(); +} diff --git a/lib/commands/milestone/delete.js b/lib/commands/milestone/delete.js new file mode 100644 index 0000000..e38120e --- /dev/null +++ b/lib/commands/milestone/delete.js @@ -0,0 +1,28 @@ +const ProgressBar = require('progress'); +const auth = require('../../auth'); +const log = require('../../log'); + +module.exports.command = 'delete [milestone]'; + +module.exports.describe = 'Permanently delete a milestone a milestone (see `close` to update milestone status)'; + +module.exports.handler = async function(argv) { + const { github, repos, hydrateMilestones, filterMilestones } = await auth.init(); + await hydrateMilestones(repos, 'all'); + const milestones = await filterMilestones(repos, argv.milestone); + if (!milestones.length) return; + + log.info(`Deleting milestones...`); + const progress = new ProgressBar(':current/:total [:bar]', { total: milestones.length }); + + for (let milestone of milestones) { + await github.issues.deleteMilestone({ + owner: milestone.repo.owner, + repo: milestone.repo.name, + number: milestone.number + }); + progress.tick(); + } + + log.success(`Done.`); +}; diff --git a/lib/commands/milestone/index.js b/lib/commands/milestone/index.js index 7d92c3f..49ff91e 100644 --- a/lib/commands/milestone/index.js +++ b/lib/commands/milestone/index.js @@ -1,7 +1,9 @@ module.exports = yargs => { return yargs - .command(require('./list')) .command(require('./close')) + .command(require('./create')) + .command(require('./delete')) + .command(require('./list')) .command(require('./open')) .command(require('./update')); };