unlearn 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +67 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/bin/unlearn +5 -0
- data/lib/unlearn.rb +11 -0
- data/lib/unlearn/cli.rb +74 -0
- data/lib/unlearn/github_api.rb +21 -0
- data/lib/unlearn/github_api/query.rb +21 -0
- data/lib/unlearn/github_api/token.rb +19 -0
- data/lib/unlearn/graphql/schema.json +35267 -0
- data/lib/unlearn/repo_deleter.rb +41 -0
- data/lib/unlearn/runner.rb +64 -0
- data/lib/unlearn/version.rb +3 -0
- data/unlearn.gemspec +38 -0
- metadata +137 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'octokit'
|
|
2
|
+
|
|
3
|
+
module Unlearn
|
|
4
|
+
class RepoDeleter
|
|
5
|
+
attr_reader :repos, :octokit
|
|
6
|
+
|
|
7
|
+
def initialize(repos)
|
|
8
|
+
@repos = repos
|
|
9
|
+
|
|
10
|
+
login_to_octokit
|
|
11
|
+
|
|
12
|
+
@octokit = Octokit::Client.new
|
|
13
|
+
|
|
14
|
+
delete_repos
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def login_to_octokit
|
|
20
|
+
Octokit.configure do |c|
|
|
21
|
+
c.login = "Required field, but GitHub doesn't check it when password is a token"
|
|
22
|
+
c.password = Unlearn::GitHubAPI::Token.get
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def delete_repos
|
|
27
|
+
begin
|
|
28
|
+
repos.map do |repo|
|
|
29
|
+
octokit.delete_repository(repo)
|
|
30
|
+
end.all?
|
|
31
|
+
rescue Octokit::Forbidden => e
|
|
32
|
+
puts "Unable to delete repositories. Please check that"
|
|
33
|
+
puts "the 'delete_repo' scope is enabled and try again."
|
|
34
|
+
puts e.documentation_url
|
|
35
|
+
puts "\nGoodbye!"
|
|
36
|
+
|
|
37
|
+
exit
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module Unlearn
|
|
2
|
+
class Runner
|
|
3
|
+
attr_reader :batches, :repos, :filtered_repos
|
|
4
|
+
|
|
5
|
+
def initialize
|
|
6
|
+
@batches = [
|
|
7
|
+
'-v-000',
|
|
8
|
+
'-bootcamp-prep-000',
|
|
9
|
+
'-cb-000',
|
|
10
|
+
'-cb-gh-000',
|
|
11
|
+
'-re-coded-000',
|
|
12
|
+
'-js-intro-000'
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
@repos = []
|
|
16
|
+
@filtered_repos = []
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def run
|
|
20
|
+
get_repos
|
|
21
|
+
|
|
22
|
+
filter_repos
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def get_repos
|
|
28
|
+
has_next_page = true
|
|
29
|
+
end_cursor = nil
|
|
30
|
+
|
|
31
|
+
while has_next_page
|
|
32
|
+
if end_cursor
|
|
33
|
+
result = Unlearn::GitHubAPI::Client.query(Unlearn::GitHubAPI::Query::Repos, variables: { endCursor: end_cursor })
|
|
34
|
+
else
|
|
35
|
+
result = Unlearn::GitHubAPI::Client.query(Unlearn::GitHubAPI::Query::Repos)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
if result.data
|
|
39
|
+
result.data.viewer.repositories.nodes.each do |n|
|
|
40
|
+
repos << n.name_with_owner
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
has_next_page = result.data.viewer.repositories.page_info.has_next_page
|
|
44
|
+
end_cursor = result.data.viewer.repositories.page_info.end_cursor
|
|
45
|
+
else
|
|
46
|
+
puts "Unable to load repositories. Please check that"
|
|
47
|
+
puts "your token is valid and try again. Goodbye!"
|
|
48
|
+
|
|
49
|
+
exit
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def filter_repos
|
|
55
|
+
batches.each do |batch|
|
|
56
|
+
repos.each do |repo|
|
|
57
|
+
filtered_repos << repo if repo.include? batch
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
filtered_repos
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
data/unlearn.gemspec
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require "unlearn/version"
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "unlearn"
|
|
8
|
+
spec.version = Unlearn::VERSION
|
|
9
|
+
spec.authors = ["Gabe Jackson"]
|
|
10
|
+
spec.email = ["gj@mail.co.de"]
|
|
11
|
+
|
|
12
|
+
spec.summary = %q{Declutter your GitHub by deleting all forked Learn.co repositories.}
|
|
13
|
+
spec.homepage = "https://github.com/gj/unlearn"
|
|
14
|
+
spec.license = "MIT"
|
|
15
|
+
|
|
16
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
|
17
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
|
18
|
+
if spec.respond_to?(:metadata)
|
|
19
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
|
20
|
+
else
|
|
21
|
+
raise "RubyGems 2.0 or newer is required to protect against " \
|
|
22
|
+
"public gem pushes."
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
26
|
+
f.match(%r{^(test|spec|features)/})
|
|
27
|
+
end
|
|
28
|
+
spec.bindir = "bin"
|
|
29
|
+
spec.executables = spec.files.grep(%r{^bin/unlearn}) { |f| File.basename(f) }
|
|
30
|
+
spec.require_paths = ["lib"]
|
|
31
|
+
|
|
32
|
+
spec.add_development_dependency "bundler", "~> 1.15"
|
|
33
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
|
34
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
|
35
|
+
spec.add_development_dependency "pry", "~> 0.10"
|
|
36
|
+
|
|
37
|
+
spec.add_runtime_dependency "octokit", "~> 4.7"
|
|
38
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: unlearn
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Gabe Jackson
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2017-07-10 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: bundler
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '1.15'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '1.15'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rake
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '10.0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '10.0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rspec
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '3.0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '3.0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: pry
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0.10'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0.10'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: octokit
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '4.7'
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '4.7'
|
|
83
|
+
description:
|
|
84
|
+
email:
|
|
85
|
+
- gj@mail.co.de
|
|
86
|
+
executables:
|
|
87
|
+
- unlearn
|
|
88
|
+
extensions: []
|
|
89
|
+
extra_rdoc_files: []
|
|
90
|
+
files:
|
|
91
|
+
- ".gitignore"
|
|
92
|
+
- ".rspec"
|
|
93
|
+
- ".travis.yml"
|
|
94
|
+
- CODE_OF_CONDUCT.md
|
|
95
|
+
- Gemfile
|
|
96
|
+
- LICENSE.txt
|
|
97
|
+
- README.md
|
|
98
|
+
- Rakefile
|
|
99
|
+
- bin/console
|
|
100
|
+
- bin/setup
|
|
101
|
+
- bin/unlearn
|
|
102
|
+
- lib/unlearn.rb
|
|
103
|
+
- lib/unlearn/cli.rb
|
|
104
|
+
- lib/unlearn/github_api.rb
|
|
105
|
+
- lib/unlearn/github_api/query.rb
|
|
106
|
+
- lib/unlearn/github_api/token.rb
|
|
107
|
+
- lib/unlearn/graphql/schema.json
|
|
108
|
+
- lib/unlearn/repo_deleter.rb
|
|
109
|
+
- lib/unlearn/runner.rb
|
|
110
|
+
- lib/unlearn/version.rb
|
|
111
|
+
- unlearn.gemspec
|
|
112
|
+
homepage: https://github.com/gj/unlearn
|
|
113
|
+
licenses:
|
|
114
|
+
- MIT
|
|
115
|
+
metadata:
|
|
116
|
+
allowed_push_host: https://rubygems.org
|
|
117
|
+
post_install_message:
|
|
118
|
+
rdoc_options: []
|
|
119
|
+
require_paths:
|
|
120
|
+
- lib
|
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
|
+
requirements:
|
|
123
|
+
- - ">="
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: '0'
|
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
|
+
requirements:
|
|
128
|
+
- - ">="
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: '0'
|
|
131
|
+
requirements: []
|
|
132
|
+
rubyforge_project:
|
|
133
|
+
rubygems_version: 2.6.8
|
|
134
|
+
signing_key:
|
|
135
|
+
specification_version: 4
|
|
136
|
+
summary: Declutter your GitHub by deleting all forked Learn.co repositories.
|
|
137
|
+
test_files: []
|