@commercetools/github-labels
Version:
Manage Labels of a Repository
88 lines (79 loc) • 2.13 kB
JavaScript
require('dotenv').config();
const createHttpUserAgent = require('@commercetools/http-user-agent');
const createHttpClient = require('@octokit/rest');
const pkg = require('../package.json');
const { authToken } = require('./env');
const { getRepoData } = require('./utils');
const { owner, repo } = getRepoData();
const userAgent = createHttpUserAgent({
name: '@octokit/rest',
version: pkg.dependencies['@octokit/rest'],
libaryName: pkg.name,
libaryVersion: pkg.version,
});
const octokit = createHttpClient({
auth: `token ${authToken}`,
accept: 'application/vnd.github.v3+json',
'user-agent': userAgent,
// For using descriptions in requests
previews: ['symmetra'],
});
async function fetchLabels() {
const options = octokit.issues.listLabelsForRepo.endpoint.merge({
owner,
repo,
});
const data = await octokit.paginate(options);
return data.map(label => {
return {
id: label.id,
name: label.name,
color: label.color,
description: label.description || '',
};
});
}
function createLabels(labels) {
const promiseList = labels.map(label => {
return octokit.issues.createLabel({
owner,
repo,
name: label.name,
color: label.color,
description: label.description || '',
});
});
return Promise.all(promiseList);
}
function deleteLabels(labels) {
const promiseList = labels.map(label => {
return octokit.issues.deleteLabel({
owner,
repo,
name: label.name,
});
});
return Promise.all(promiseList);
}
async function updateLabels(labels, oldLabels) {
const promiseList = labels.map(label => {
const requiredLabel = oldLabels.find(oldLabel => {
return label.id === oldLabel.id;
});
return octokit.issues.updateLabel({
owner,
repo,
current_name: requiredLabel.name,
name: label.name,
description: label.description || requiredLabel.description || '',
color: label.color || requiredLabel.color,
});
});
return Promise.all(promiseList);
}
module.exports = {
fetchLabels,
createLabels,
deleteLabels,
updateLabels,
};