Updated API's because fetching all merge requests on Gitlab doesn't make sense

This commit is contained in:
Ramon Gebben
2018-03-29 16:52:47 +02:00
parent e5389ede24
commit e52c131304
6 changed files with 74 additions and 37 deletions

View File

@@ -1,7 +1,5 @@
# Mergify
A very *very* simple cli to check merge requests on Gitlab.
> NOTE: Only works for hosted Gitlab
A very simple cli to check merge requests on Gitlab.
## Install
@@ -25,8 +23,8 @@ Just grab up the help menu by using `mergify --help` and you will be presented w
Options:
-V, --version output the version number
-a --all Get all merge request
-m --me Get all open merge request assigned to you
-a --assigned Get all open merge request assigned to you
-s --submitted Get all open merge request submitted to you
-c --configure Setup or update required config
-h, --help output usage information
```

View File

@@ -5,6 +5,7 @@ const program = require('commander');
const R = require('ramda');
const chalk = require('chalk');
const inquirer = require('inquirer');
const { Spinner } = require('cli-spinner');
const pack = require('./package.json');
const { getMergeRequests } = require('./lib/getMergeRequests');
const { printMergeRequest } = require('./lib/printMergeRequest');
@@ -14,37 +15,45 @@ const { readConfig } = require('./lib/readConfig');
const simplifyMergeRequest = R.pick([
'title',
'id',
'iid',
'target_branch',
'source_branch',
'state',
'author',
'assignee',
'web_url'
'web_url',
'merge_status',
]);
const getAll = async () => {
console.log('#getAll')
const mergeRequests = await getMergeRequests();
const simplifiedMergeRequest = R.map(simplifyMergeRequest)(mergeRequests);
simplifiedMergeRequest
.forEach(printMergeRequest);
};
const spinner = new Spinner('Processing.. %s');
spinner.setSpinnerString('|/-\\');
const getAllAssigned = async ({ userId }) => {
console.log('#getAllAssigned', userId)
const mergeRequests = await getMergeRequests();
spinner.start();
const params = {
assignee_id: userId,
};
const mergeRequests = await getMergeRequests(params);
spinner.stop();
const simplifiedMergeRequest = R.map(simplifyMergeRequest)(mergeRequests);
simplifiedMergeRequest
.filter(({ state, assignee: { id: assignee } }) => state !== 'merged' && assignee === userId)
.filter(({ state, assignee: { id: assignee } }) => state === 'opened')
.forEach(printMergeRequest);
}
const getAllSubmitted = async ({ userId }) => {
console.log('#getAllSubmitted', userId)
const mergeRequests = await getMergeRequests();
spinner.start();
const params = {
author_id: userId,
};
const mergeRequests = await getMergeRequests(params);
spinner.stop();
const simplifiedMergeRequest = R.map(simplifyMergeRequest)(mergeRequests);
simplifiedMergeRequest
.filter(({ state, author: { id: author } }) => author === userId && state !== 'merged')
.filter(({ state, author: { id: author } }) => state !== 'merged')
.forEach(printMergeRequest);
}
@@ -82,12 +91,7 @@ program
const options = [
{
trigger: '-a --all',
description: 'Get all merge request',
fn: getAll
},
{
trigger: '-m --me',
trigger: '-a --assigned',
description: 'Get all open merge request assigned to you',
fn: getAllAssigned
},

View File

@@ -1,7 +1,9 @@
const queryString = require('query-string');
const { doFetch } = require('../doFetch');
async function getMergeRequests(id) {
return doFetch('/merge_requests');
async function getMergeRequests(params) {
const stringified = queryString.stringify(params);
return doFetch(`/merge_requests?scope=all&${stringified}`);
}
module.exports = {

View File

@@ -1,4 +1,5 @@
const chalk = require('chalk');
const { pathOr } = require('ramda');
const states = {
merged: chalk.blue,
@@ -6,22 +7,37 @@ const states = {
opened: chalk.green,
};
const statuses = {
cannot_be_merged: chalk.red,
unchecked: chalk.gray,
can_be_merged: chalk.green,
}
const getUsername = pathOr('Unknown', ['username']);
const printMergeRequest = ({
iid,
title,
state,
author: { username: author },
assignee: { username: assignee },
author,
assignee,
source_branch,
target_branch,
web_url,
merge_status,
}) => {
console.log(
`
${`[${states[state](state)}]`}
${title}
Branch: ${chalk.cyan(source_branch)}
Assignee: ${chalk.cyan(assignee)}
Author: ${chalk.cyan(author)}
${chalk.gray(web_url)}`,
const authorName = getUsername(author);
const assigneeName = getUsername(assignee);
console.log(`
${`[${states[state](state)}|${statuses[merge_status](merge_status.replace(/_/g, ' '))}]`}
!${iid}: ${title}
Assignee: ${chalk.cyan(assigneeName)}
Author: ${chalk.cyan(authorName)}
Source: ${chalk.green(source_branch)}
Target: ${chalk.magenta(target_branch)}
${chalk.gray(web_url)}`,
);
}

View File

@@ -1,9 +1,11 @@
{
"dependencies": {
"chalk": "^2.3.2",
"cli-spinner": "^0.2.8",
"commander": "^2.15.1",
"inquirer": "^5.2.0",
"node-fetch": "^2.1.2",
"query-string": "^6.0.0",
"ramda": "^0.25.0"
},
"name": "@pindakaasman/mergify",

View File

@@ -522,6 +522,10 @@ cli-cursor@^2.1.0:
dependencies:
restore-cursor "^2.0.0"
cli-spinner@^0.2.8:
version "0.2.8"
resolved "https://registry.yarnpkg.com/cli-spinner/-/cli-spinner-0.2.8.tgz#8169d9ffae870676445e6ee4397e95a7a15bd805"
cli-width@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
@@ -2503,6 +2507,13 @@ qs@~6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
query-string@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.0.0.tgz#8b8f39447b73e8290d6f5e3581779218e9171142"
dependencies:
decode-uri-component "^0.2.0"
strict-uri-encode "^2.0.0"
ramda@^0.25.0:
version "0.25.0"
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9"
@@ -2936,6 +2947,10 @@ stealthy-require@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
strict-uri-encode@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
string-length@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"