Skip to content

Instantly share code, notes, and snippets.

@AlexDaniel
Created July 15, 2020 00:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save AlexDaniel/c936816bdfcf4ba89d59e8bd8777ecd8 to your computer and use it in GitHub Desktop.
Save AlexDaniel/c936816bdfcf4ba89d59e8bd8777ecd8 to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl6
use Cro::HTTP::Client;
my $org = Raku;
#my $team = ‘Everyone’;
my $team = Raku;
my $token = …………………;
my $headers = [
User-Agent => Raku inviter,
Authorization => token $token,
];
sub get-users($url, $token) {
note $url;
my $resp = await Cro::HTTP::Client.get: $url,
:$headers, content-type => application/json,
;
take await $resp.body;
my $next = $resp.headers.first(*.name eq Link).?value;
if $next && $next ~~ /‘<’ (<-[>]>*?) ‘>; rel="next"’/ {
my $cur-url = ~$0;
get-users $cur-url, $token;
}
}
sub add-user($url, $token, $body) {
my $resp = await Cro::HTTP::Client.put: $url,
:$headers, content-type => application/json,
body => $body,
;
return await $resp.body;
}
my $resp = await Cro::HTTP::Client.get: https://api.github.com/orgs/$org/teams/$team,
:$headers, content-type => application/json,
;
my $team-resp = await $resp.body;
note Team description: , $team-resp<description>;
my $team-id = $team-resp<id>;
my @users;
for gather get-users https://api.github.com/orgs/$org/members, $token {
@users.append: @($_);
}
my @team-users;
for gather get-users https://api.github.com/teams/$team-id/members, $token {
@team-users.append: @($_);
}
note Users:, +@users;
my @users-to-add = ((@users»<login>) (-) (@team-users»<login>)).keys.pick(*);
note Will add to the team , +@users-to-add, users;
for @users-to-add { # [^45] {
note Adding , $_;
add-user https://api.github.com/teams/$team-id/memberships/$_, $token, %(role => member);
}
#!/usr/bin/env perl6
use Cro::HTTP::Client;
#my $org-to = ‘raku-community-modules’;
my $org-to = raku-community-modules;
my $org-from = Raku;
my $token = …………………;
sub get-users($url, $token) {
note $url;
my $resp = await Cro::HTTP::Client.get: $url,
headers => [
User-Agent => Perl6->Raku inviter,
Authorization => token $token,
],
content-type => application/json,
;
take await $resp.body;
my $next = $resp.headers.first(*.name eq Link).?value;
if $next && $next ~~ /‘<’ (<-[>]>*?) ‘>; rel="next"’/ {
my $cur-url = ~$0;
get-users $cur-url, $token;
}
}
sub add-user($url, $token, $body) {
my $resp = await Cro::HTTP::Client.put: $url,
headers => [
User-Agent => Perl6->Raku inviter,
Authorization => token $token,
],
content-type => application/json,
body => $body,
;
return await $resp.body;
}
my @raku-users;
my @perl6-users;
for gather get-users https://api.github.com/orgs/$org-to/members, $token {
@raku-users.append: @($_);
}
for gather get-users https://api.github.com/orgs/$org-from/members, $token {
@perl6-users.append: @($_);
}
note Org-from users:, +@raku-users;
note Org-to users:, +@perl6-users;
my @users-to-add = ((@perl6-users»<login>) (-) (@raku-users»<login>)).keys.pick(*);
note Will invite , +@users-to-add, users;
for @users-to-add { # [^45] {
note Inviting , $_;
#add-user “https://api.github.com/orgs/Raku/memberships/$_”, $token, %(role => ‘member’);
add-user https://api.github.com/orgs/$org-to/memberships/$_, $token, %(role => member);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment