UNPKG

@buildo/hophop

Version:

A minimal tool to accelerate the GitHub workflow from the command line.

353 lines (276 loc) 11.6 kB
'use strict'; var _regeneratorRuntime = require('babel-runtime/regenerator')['default']; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; exports.__esModule = true; var _ramda = require('ramda'); var _ramda2 = _interopRequireDefault(_ramda); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _es6Promisify = require('es6-promisify'); var _es6Promisify2 = _interopRequireDefault(_es6Promisify); var _togglApi = require('toggl-api'); var _togglApi2 = _interopRequireDefault(_togglApi); var _utils = require('../utils'); function toggl_token() { return _fs2['default'].readFileSync(process.env.HOME + '/.hophop_toggl_token', 'utf8'); } function toggl_helper() { var togglClient; return _regeneratorRuntime.async(function toggl_helper$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: togglClient = new _togglApi2['default']({ apiToken: toggl_token() }); return context$1$0.abrupt('return', { togglClient: togglClient }); case 2: case 'end': return context$1$0.stop(); } }, null, this); } function toggl_getProjects(togglClient) { var togglUser, wid, togglProjects; return _regeneratorRuntime.async(function toggl_getProjects$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: context$1$0.next = 2; return _regeneratorRuntime.awrap(_es6Promisify2['default'](togglClient.getUserData.bind(togglClient))({})); case 2: togglUser = context$1$0.sent; wid = togglUser.default_wid; context$1$0.next = 6; return _regeneratorRuntime.awrap(_es6Promisify2['default'](togglClient.getWorkspaceProjects.bind(togglClient))(wid, {})); case 6: togglProjects = context$1$0.sent; return context$1$0.abrupt('return', { togglProjects: togglProjects }); case 8: case 'end': return context$1$0.stop(); } }, null, this); } function toggl_setup() { var token; return _regeneratorRuntime.async(function toggl_setup$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: context$1$0.next = 2; return _regeneratorRuntime.awrap(_utils.rl.question({ message: 'Personal access token: (from https://toggl.com/app/profile):' })); case 2: token = context$1$0.sent; if (!token) { _utils.error('No token inserted.'); process.exit(0); } _fs2['default'].writeFileSync(process.env.HOME + '/.hophop_toggl_token', token); case 5: case 'end': return context$1$0.stop(); } }, null, this); } function toggl_start() { var _ref, genericTask, args$1$0 = arguments; return _regeneratorRuntime.async(function toggl_start$(context$1$0) { var _this = this; while (1) switch (context$1$0.prev = context$1$0.next) { case 0: _ref = args$1$0.length <= 0 || args$1$0[0] === undefined ? {} : args$1$0[0]; genericTask = _ref.genericTask; context$1$0.prev = 2; context$1$0.next = 5; return _regeneratorRuntime.awrap((function callee$1$0() { var _ref2, togglClient, _ref3, repo_name, client, repo, branch, issueno, issue, issues, issuesChoices, issueRef, _ref4, togglProjects, projectName, startTimeEntry, getProject, togglProject, projectLog, issueLog; return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(toggl_helper()); case 2: _ref2 = context$2$0.sent; togglClient = _ref2.togglClient; context$2$0.next = 6; return _regeneratorRuntime.awrap(_utils.gh_helper()); case 6: _ref3 = context$2$0.sent; repo_name = _ref3.repo_name; client = _ref3.client; repo = _ref3.repo; context$2$0.next = 12; return _regeneratorRuntime.awrap(_utils.currBranch()); case 12: branch = context$2$0.sent; if (branch === 'master') { _utils.log('You\'re not working on any PR, switch to a branch tracking a PR and retry.'); process.exit(0); } issueno = undefined; issue = undefined; if (genericTask) { context$2$0.next = 33; break; } issueno = _ramda2['default'].take(2, branch.split('-').map(function (i) { return parseInt(i, 10); })).filter(function (x) { return !!x; })[0]; _utils.log('Inferred issue number ' + issueno + ' from branch name \'' + branch + '\''); if (issueno) { context$2$0.next = 28; break; } _utils.log('Cannot infer the issue number from the branch name'); context$2$0.next = 23; return _regeneratorRuntime.awrap(_es6Promisify2['default'](repo.issues.bind(repo))()); case 23: issues = context$2$0.sent; issuesChoices = _utils.issuesLabelMapper(issues.filter(function (i) { return !i.pull_request; })); context$2$0.next = 27; return _regeneratorRuntime.awrap(_utils.rl.question({ type: 'list', message: 'Which issue?', choices: issuesChoices })); case 27: issueno = context$2$0.sent; case 28: issueRef = client.issue(repo_name, issueno); context$2$0.next = 31; return _regeneratorRuntime.awrap(_es6Promisify2['default'](issueRef.info.bind(issueRef))()); case 31: issue = context$2$0.sent; if (!issue) { _utils.log('Invalid issue'); } case 33: context$2$0.next = 35; return _regeneratorRuntime.awrap(toggl_getProjects(togglClient)); case 35: _ref4 = context$2$0.sent; togglProjects = _ref4.togglProjects; projectName = _ramda2['default'].compose(_ramda2['default'].drop(1), _ramda2['default'].split('/'))(repo_name)[0]; startTimeEntry = _es6Promisify2['default'](togglClient.startTimeEntry.bind(togglClient)); getProject = function getProject(_projectName) { return _ramda2['default'].find(_ramda2['default'].propEq('name', _projectName))(togglProjects); }; togglProject = getProject(projectName); if (!togglProject) { _utils.log(_utils.warning('\n🚨 \'' + projectName + '\' does not exist on Toggl\n')); } context$2$0.next = 44; return _regeneratorRuntime.awrap(startTimeEntry({ description: genericTask ? 'miscellaneous' : '#' + issueno + ': ' + issue.title, billable: togglProject ? togglProject.billable : undefined, pid: togglProject ? togglProject.id : undefined })); case 44: projectLog = togglProject ? ' on project \'' + togglProject.name + '\'' : ''; issueLog = !genericTask ? 'issue ' + issueno : ''; _utils.log('⏰ Started tracking time for ' + issueLog + projectLog); case 47: case 'end': return context$2$0.stop(); } }, null, _this); })()); case 5: context$1$0.next = 10; break; case 7: context$1$0.prev = 7; context$1$0.t0 = context$1$0['catch'](2); _utils.log(context$1$0.t0); case 10: case 'end': return context$1$0.stop(); } }, null, this, [[2, 7]]); } function toggl_stop() { var _ref5, togglClient, currentTimeEntry, startGenericTask; return _regeneratorRuntime.async(function toggl_stop$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: context$1$0.prev = 0; context$1$0.next = 3; return _regeneratorRuntime.awrap(toggl_helper()); case 3: _ref5 = context$1$0.sent; togglClient = _ref5.togglClient; context$1$0.next = 7; return _regeneratorRuntime.awrap(_es6Promisify2['default'](togglClient.getCurrentTimeEntry.bind(togglClient))()); case 7: currentTimeEntry = context$1$0.sent; if (!currentTimeEntry) { context$1$0.next = 20; break; } context$1$0.next = 11; return _regeneratorRuntime.awrap(_es6Promisify2['default'](togglClient.stopTimeEntry.bind(togglClient))(currentTimeEntry.id)); case 11: _utils.log('⏰ Stopped tracking time for \'' + currentTimeEntry.description + '\''); context$1$0.next = 14; return _regeneratorRuntime.awrap(_utils.rl.question({ message: 'Start generic task? (y/n)', 'default': 'n' })); case 14: startGenericTask = context$1$0.sent; if (!(startGenericTask === 'y')) { context$1$0.next = 18; break; } context$1$0.next = 18; return _regeneratorRuntime.awrap(toggl_start({ genericTask: true })); case 18: context$1$0.next = 21; break; case 20: _utils.log('Mmh, it seems like your Toggl isn\'t running'); case 21: context$1$0.next = 26; break; case 23: context$1$0.prev = 23; context$1$0.t0 = context$1$0['catch'](0); _utils.log(context$1$0.t0); case 26: case 'end': return context$1$0.stop(); } }, null, this, [[0, 23]]); } function toggl_install_hooks() { var exec, prefix, repoDir; return _regeneratorRuntime.async(function toggl_install_hooks$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: exec = _es6Promisify2['default'](require('child_process').exec); context$1$0.prev = 1; context$1$0.next = 4; return _regeneratorRuntime.awrap(exec('npm prefix -g')); case 4: prefix = context$1$0.sent.replace(/\r?\n|\r/g, ''); context$1$0.next = 7; return _regeneratorRuntime.awrap(exec('git rev-parse --show-toplevel')); case 7: repoDir = context$1$0.sent.replace(/\r?\n|\r/g, ''); _fs2['default'].symlinkSync(prefix + '/lib/node_modules/@buildo/hophop/hooks/post-checkout', repoDir + '/.git/hooks/post-checkout'); _utils.log('🔧 Toggl git hooks correctly installed!'); context$1$0.next = 15; break; case 12: context$1$0.prev = 12; context$1$0.t0 = context$1$0['catch'](1); _utils.log(context$1$0.t0); case 15: case 'end': return context$1$0.stop(); } }, null, this, [[1, 12]]); } exports['default'] = { toggl_setup: toggl_setup, toggl_start: toggl_start, toggl_stop: toggl_stop, toggl_install_hooks: toggl_install_hooks }; module.exports = exports['default']; // TODO; gh_helper gets also me -> this slows down the process