smdev 0.1.0 → 0.1.1
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 +4 -4
- data/bin/smdev +3 -0
- data/lib/smdev.rb +168 -161
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa67f8f3b47f335c23ec5e74776cf587c3ab7657f7aed988bcb0c704c7d8611e
|
4
|
+
data.tar.gz: 9e7f2552a2c211fca3fa46835135913dcaa9bf48462b22d1284f5ad5cc88d52a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c4ec298b2832ce60e47ae7ba634e943e0365df7560d49c559ab13d51713819b71b57ab13d5dd67a0cba23594eca31813b732ede754ec69a2702415b98808e89
|
7
|
+
data.tar.gz: 2e5c8397d2f75b8e1060471524d927a30e6f465182c7badcb2c0d0e6eeec1ebe8ac75bd6f15279369dea7903f988c1d5c00a9a089a691e7f87a303bdc4c886d0
|
data/bin/smdev
ADDED
data/lib/smdev.rb
CHANGED
@@ -2,166 +2,173 @@
|
|
2
2
|
require 'io/console'
|
3
3
|
require 'octokit'
|
4
4
|
require 'optparse'
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
5
|
+
require_relative 'smdev/cli'
|
6
|
+
|
7
|
+
|
8
|
+
module Smdev
|
9
|
+
class CLI
|
10
|
+
def run
|
11
|
+
options = {}
|
12
|
+
OptionParser.new do |opts|
|
13
|
+
opts.banner = "Usage: smdev.rb [options]"
|
14
|
+
|
15
|
+
opts.on("-t", "--team TEAM_NAME", "Pull repositories assigned to a specific team") do |team_name|
|
16
|
+
options[:team] = team_name
|
17
|
+
end
|
18
|
+
|
19
|
+
opts.on("-s", "--https", "Use HTTPS to pull repos") do
|
20
|
+
options[:https] = true
|
21
|
+
end
|
22
|
+
|
23
|
+
opts.on("-h", "--help", "Prints this help message") do
|
24
|
+
puts opts
|
25
|
+
exit
|
26
|
+
end
|
27
|
+
|
28
|
+
opts.on("-l", "--local-app-install", "Setup this local application") do
|
29
|
+
options[:local_install] = true
|
30
|
+
end
|
31
|
+
|
32
|
+
opts.on("-i", "--install", "Install Homebrew, Ruby, PostgreSQL, and Ruby on Rails") do
|
33
|
+
options[:install] = true
|
34
|
+
end
|
35
|
+
end.parse!
|
36
|
+
|
37
|
+
if options[:local_install]
|
38
|
+
puts "Running Bundle Install"
|
39
|
+
system('bundle', 'install')
|
40
|
+
|
41
|
+
puts "Copying env file"
|
42
|
+
system('cp', '.env.example', '.env')
|
43
|
+
|
44
|
+
puts "Create database"
|
45
|
+
system('bin/rails', 'db:create')
|
46
|
+
|
47
|
+
puts "Run database migrations"
|
48
|
+
system('rails', 'db:migrate')
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
if options[:install]
|
53
|
+
# Install Homebrew
|
54
|
+
puts "Installing Homebrew..."
|
55
|
+
system({ 'SHELL' => '/bin/bash' }, '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"')
|
56
|
+
# system('/bin/bash', '-c', "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)")
|
57
|
+
|
58
|
+
# Add Homebrew to PATH and run initialization script
|
59
|
+
puts "adding homebrew to .zshrc"
|
60
|
+
File.open("#{ENV['HOME']}/.zshrc", "a") do |file|
|
61
|
+
file.write("\n")
|
62
|
+
file.write('eval "$(/opt/homebrew/bin/brew shellenv)"')
|
63
|
+
end
|
64
|
+
|
65
|
+
# Update PATH to include Homebrew
|
66
|
+
ENV['PATH'] = "#{ENV['HOME']}/.homebrew/bin:#{ENV['HOME']}/.homebrew/sbin:#{ENV['PATH']}"
|
67
|
+
|
68
|
+
# Install PostgreSQL
|
69
|
+
puts "Installing PostgreSQL..."
|
70
|
+
system('brew', 'install', 'libpq')
|
71
|
+
|
72
|
+
puts "Installing lib-pq..."
|
73
|
+
system('brew', 'install', 'postgresql@15')
|
74
|
+
|
75
|
+
# Install Code Climate
|
76
|
+
puts "Preparing Code Climate Formulae..."
|
77
|
+
system('brew', 'tap', 'codeclimate/formulae')
|
78
|
+
|
79
|
+
puts "Installing Code Climate..."
|
80
|
+
system('brew', 'install', 'codeclimate')
|
81
|
+
|
82
|
+
# TODO: need to add the path & compiler flags
|
83
|
+
# echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc
|
84
|
+
# export LDFLAGS="-L/opt/homebrew/opt/libpq/lib"
|
85
|
+
# export CPPFLAGS="-I/opt/homebrew/opt/libpq/include"
|
86
|
+
|
87
|
+
# Install RBenv
|
88
|
+
puts "Installing RBenv..."
|
89
|
+
system('brew', 'install', 'rbenv')
|
90
|
+
puts "Initialize RBenv..."
|
91
|
+
File.open("#{ENV['HOME']}/.zshrc", "a") do |file|
|
92
|
+
file.write("\n")
|
93
|
+
file.write('eval "$(rbenv init - zsh)"')
|
94
|
+
end
|
95
|
+
# Load the contents of .zshrc into a string
|
96
|
+
zshrc_contents = File.read(File.expand_path('~/.zshrc'))
|
97
|
+
|
98
|
+
# Execute a new shell session with the .zshrc contents
|
99
|
+
exec('zsh', '-c', zshrc_contents)
|
100
|
+
|
101
|
+
# Install Ruby
|
102
|
+
puts "Installing Ruby via RBenv..."
|
103
|
+
system('rbenv', 'install', '3.2.2')
|
104
|
+
puts "Making ruby 3.2.2 global ..."
|
105
|
+
system('rbenv', 'global', '3.2.2')
|
106
|
+
|
107
|
+
# Install Ruby on Rails
|
108
|
+
puts "Installing Ruby on Rails..."
|
109
|
+
system('sudo', 'gem', 'install', 'rails')
|
110
|
+
|
111
|
+
# If install option is provided, exit the script
|
112
|
+
exit if options[:install]
|
113
|
+
end
|
114
|
+
|
115
|
+
token = ENV['GITHUB_TOKEN']
|
116
|
+
if token.nil?
|
117
|
+
# Prompt the user for their GitHub personal access token
|
118
|
+
print "GitHub personal access token: "
|
119
|
+
token = STDIN.noecho(&:gets).chomp
|
120
|
+
puts ""
|
121
|
+
end
|
122
|
+
# Authenticate with the GitHub API using the user's credentials
|
123
|
+
client = Octokit::Client.new(access_token: token)
|
124
|
+
|
125
|
+
# Specify the organization name
|
126
|
+
org_name = "StrongMind"
|
127
|
+
|
128
|
+
if options[:team]
|
129
|
+
# A team name was provided as a command-line argument
|
130
|
+
team_name = options[:team]
|
131
|
+
# Get a list of all teams in the organization
|
132
|
+
teams = client.organization_teams(org_name)
|
133
|
+
# Find the team with the specified name
|
134
|
+
team = teams.find { |t| t.name == team_name }
|
135
|
+
if team.nil?
|
136
|
+
puts "Error: Could not find team with name '#{team_name}' in organization '#{org_name}'"
|
137
|
+
exit
|
138
|
+
end
|
139
|
+
# Get a list of all repositories in the organization that are assigned to the specified team
|
140
|
+
#
|
141
|
+
repos = client.org_repos(org_name, { :affiliation => 'organization_member', :team_id => team.id })
|
142
|
+
puts "Team Name #{team_name} - Team ID: #{team.id}"
|
143
|
+
else
|
144
|
+
repos = []
|
145
|
+
page_number = 1
|
146
|
+
per_page = 100
|
147
|
+
loop do
|
148
|
+
repos_page = client.organization_repositories(org_name, { :affiliation => 'owner,organization_member', :per_page => per_page, :page => page_number })
|
149
|
+
repos.concat(repos_page)
|
150
|
+
break if repos_page.length < per_page
|
151
|
+
page_number += 1
|
152
|
+
end
|
153
|
+
|
154
|
+
# # No team name was provided, so get a list of all teams in the organization
|
155
|
+
# teams = client.organization_teams(org_name)
|
156
|
+
# # Get a list of all repositories in the organization that are assigned to each team
|
157
|
+
# repos = []
|
158
|
+
# teams.each do |team|
|
159
|
+
# team_repos = client.team_repos(team.id)
|
160
|
+
# repos.concat(team_repos)
|
161
|
+
# end
|
162
|
+
end
|
163
|
+
|
164
|
+
# Clone each repository to a local directory
|
165
|
+
repos.each do |repo|
|
166
|
+
clone_url = repo.clone_url
|
167
|
+
ssh_url = repo.ssh_url
|
168
|
+
repo_name = repo.name
|
169
|
+
url = options[:https] ? clone_url : ssh_url
|
170
|
+
`git clone #{url} #{repo_name}`
|
171
|
+
end
|
172
|
+
end
|
58
173
|
end
|
59
|
-
|
60
|
-
# Update PATH to include Homebrew
|
61
|
-
ENV['PATH'] = "#{ENV['HOME']}/.homebrew/bin:#{ENV['HOME']}/.homebrew/sbin:#{ENV['PATH']}"
|
62
|
-
|
63
|
-
# Install PostgreSQL
|
64
|
-
puts "Installing PostgreSQL..."
|
65
|
-
system('brew', 'install', 'libpq')
|
66
|
-
|
67
|
-
puts "Installing lib-pq..."
|
68
|
-
system('brew', 'install', 'postgresql@15')
|
69
|
-
|
70
|
-
# Install Code Climate
|
71
|
-
puts "Preparing Code Climate Formulae..."
|
72
|
-
system('brew', 'tap', 'codeclimate/formulae')
|
73
|
-
|
74
|
-
puts "Installing Code Climate..."
|
75
|
-
system('brew', 'install', 'codeclimate')
|
76
|
-
|
77
|
-
# TODO: need to add the path & compiler flags
|
78
|
-
# echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc
|
79
|
-
# export LDFLAGS="-L/opt/homebrew/opt/libpq/lib"
|
80
|
-
# export CPPFLAGS="-I/opt/homebrew/opt/libpq/include"
|
81
|
-
|
82
|
-
|
83
|
-
# Install RBenv
|
84
|
-
puts "Installing RBenv..."
|
85
|
-
system('brew', 'install', 'rbenv')
|
86
|
-
puts "Initialize RBenv..."
|
87
|
-
File.open("#{ENV['HOME']}/.zshrc", "a") do |file|
|
88
|
-
file.write("\n")
|
89
|
-
file.write('eval "$(rbenv init - zsh)"')
|
90
|
-
end
|
91
|
-
# Load the contents of .zshrc into a string
|
92
|
-
zshrc_contents = File.read(File.expand_path('~/.zshrc'))
|
93
|
-
|
94
|
-
# Execute a new shell session with the .zshrc contents
|
95
|
-
exec('zsh', '-c', zshrc_contents)
|
96
|
-
|
97
|
-
# Install Ruby
|
98
|
-
puts "Installing Ruby via RBenv..."
|
99
|
-
system('rbenv', 'install', '3.2.2')
|
100
|
-
puts "Making ruby 3.2.2 global ..."
|
101
|
-
system('rbenv', 'global', '3.2.2')
|
102
|
-
|
103
|
-
# Install Ruby on Rails
|
104
|
-
puts "Installing Ruby on Rails..."
|
105
|
-
system('sudo', 'gem', 'install', 'rails')
|
106
|
-
|
107
|
-
# If install option is provided, exit the script
|
108
|
-
exit if options[:install]
|
109
|
-
end
|
110
|
-
|
111
|
-
token = ENV['GITHUB_TOKEN']
|
112
|
-
if token.nil?
|
113
|
-
# Prompt the user for their GitHub personal access token
|
114
|
-
print "GitHub personal access token: "
|
115
|
-
token = STDIN.noecho(&:gets).chomp
|
116
|
-
puts ""
|
117
|
-
end
|
118
|
-
# Authenticate with the GitHub API using the user's credentials
|
119
|
-
client = Octokit::Client.new(access_token: token)
|
120
|
-
|
121
|
-
# Specify the organization name
|
122
|
-
org_name = "StrongMind"
|
123
|
-
|
124
|
-
if options[:team]
|
125
|
-
# A team name was provided as a command-line argument
|
126
|
-
team_name = options[:team]
|
127
|
-
# Get a list of all teams in the organization
|
128
|
-
teams = client.organization_teams(org_name)
|
129
|
-
# Find the team with the specified name
|
130
|
-
team = teams.find { |t| t.name == team_name }
|
131
|
-
if team.nil?
|
132
|
-
puts "Error: Could not find team with name '#{team_name}' in organization '#{org_name}'"
|
133
|
-
exit
|
134
|
-
end
|
135
|
-
# Get a list of all repositories in the organization that are assigned to the specified team
|
136
|
-
#
|
137
|
-
repos = client.org_repos(org_name, { :affiliation => 'organization_member', :team_id => team.id })
|
138
|
-
puts "Team Name #{team_name} - Team ID: #{team.id}"
|
139
|
-
else
|
140
|
-
repos = []
|
141
|
-
page_number = 1
|
142
|
-
per_page = 100
|
143
|
-
loop do
|
144
|
-
repos_page = client.organization_repositories(org_name, { :affiliation => 'owner,organization_member', :per_page => per_page, :page => page_number })
|
145
|
-
repos.concat(repos_page)
|
146
|
-
break if repos_page.length < per_page
|
147
|
-
page_number += 1
|
148
|
-
end
|
149
|
-
|
150
|
-
# # No team name was provided, so get a list of all teams in the organization
|
151
|
-
# teams = client.organization_teams(org_name)
|
152
|
-
# # Get a list of all repositories in the organization that are assigned to each team
|
153
|
-
# repos = []
|
154
|
-
# teams.each do |team|
|
155
|
-
# team_repos = client.team_repos(team.id)
|
156
|
-
# repos.concat(team_repos)
|
157
|
-
# end
|
158
|
-
end
|
159
|
-
|
160
|
-
# Clone each repository to a local directory
|
161
|
-
repos.each do |repo|
|
162
|
-
clone_url = repo.clone_url
|
163
|
-
ssh_url = repo.ssh_url
|
164
|
-
repo_name = repo.name
|
165
|
-
url = options[:https] ? clone_url : ssh_url
|
166
|
-
`git clone #{url} #{repo_name}`
|
167
174
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smdev
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derek Neighbors
|
@@ -12,10 +12,12 @@ date: 2023-06-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
13
13
|
description: StrongMind Development Tool
|
14
14
|
email: derek.neighbors@strongmind.com
|
15
|
-
executables:
|
15
|
+
executables:
|
16
|
+
- smdev
|
16
17
|
extensions: []
|
17
18
|
extra_rdoc_files: []
|
18
19
|
files:
|
20
|
+
- bin/smdev
|
19
21
|
- lib/smdev.rb
|
20
22
|
homepage: https://github.com/StrongMind/Helpers/tree/main/smdev
|
21
23
|
licenses:
|