Skip to content

Instantly share code, notes, and snippets.

@fatso83
Last active September 13, 2016 12:56
Show Gist options
  • Save fatso83/0605b0ab2750080e834a04281efc504b to your computer and use it in GitHub Desktop.
Save fatso83/0605b0ab2750080e834a04281efc504b to your computer and use it in GitHub Desktop.
Keep an organization team in sync with all of the members. Replace the team id in the script if needed.

Add members

This script is all you need to keep the all-in-makingwaves group include all of the makingwaves org's members. Useful when everyone should have access to a repo.

node add-users.js my.user

That's all. You can optionally pre-set the password as an environment variable to avoid typing it in when prompted:

read -s GITHUB_PASS
export GITHUB_PASS

Some background REST information

Endpoint: https://api.github.com

Basic usage: curl https://hostname/api/v3/ -u username:password

REST calls

GET /orgs/:org/members
PUT /teams/:id/members/:username
# read password
read -s GITHUB_PASS

# get all members
curl https://api.github.com/orgs/makingwaves/members -u fatso83:$GITHUB_PASS > members.json

#get all teams
curl  https://api.github.com/orgs/makingwaves/teams -u fatso83:$GITHUB_PASS  > teams.json

# id of all-in-makingwaves = 1830664
#!/usr/bin/env node
/**
* Small util to keep the all-in-makingwaves team in sync with all the people in the makingwaves org
* Lives at: https://gist.github.com/fatso83/0605b0ab2750080e834a04281efc504b
*/
var fs = require("fs");
var request = require('superagent');
var util = require('util');
var parse = require('parse-link-header');
var read = require('read')
var username = process.argv[2];
var password;
var json;
var args;
var result;
var teamId = 1830664; // all-in-makingwaves
if(!username) {
console.error("Pass userid (john.doe) as the first argument");
process.exit(1);
}
if(process.env['GITHUB_PASS']) {
password = process.env.GITHUB_PASS
startTheMagic();
} else {
read({ prompt: 'Password: ', silent: true }, function(err, pass) {
password = pass;
startTheMagic();
})
}
function startTheMagic(){
getMembers( (err, members) => {
if(err){
console.error(err);
process.exit(1);
}
addMembersToTeam(teamId, members);
})
}
function addMembersToTeam(teamId, members) {
members.forEach( function(member) {
request
.put(util.format('https://api.github.com/teams/%s/members/%s', teamId, member.login))
.auth(username, password)
.end(function(err, res) {
if(err) {
console.error('error adding', member.login, err);
return;
}
if(res.statusCode >= 400) {
console.error('error http code', res.statusCode, 'on adding ', member.login);
return;
}
else
console.log(member.login, res.statusCode);
});
});
}
function getMembers(cb){
var members = [];
var push = Array.prototype.push
function processUrl(err, res) {
if(err) { return cb(err); }
var parsed = parse(res.header.link);
var next = parsed.next;
push.apply(members, res.body);
if(next){
doRequest(next.url);
} else {
cb(null, members);
}
}
function doRequest(memberPage){
request
.get(memberPage)
.auth(username, password)
.end(processUrl);
}
doRequest('https://api.github.com/orgs/makingwaves/members');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment