sbs 0.1.2 → 0.1.3
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/Gemfile.lock +1 -1
- data/README.md +4 -2
- data/lib/sbs/version.rb +1 -1
- data/lib/sbs.rb +158 -73
- data/sbs.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 573b2bf7bfb628e62c77c3dbb67cc56e8d0e358b6270dbd3ba91957457f3348a
|
|
4
|
+
data.tar.gz: a7794466413b9a242d3d683161f7519ea4cf76dcad61d786ff85528cfde16412
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c6c75c40d261ce3202c68410f1170e898b130f6d2d56111ccc32194f1ca4a753e9b8dbbf58509ea3d44b2665cfa190a8d84e67fe9dd35afc4949cb45380124de
|
|
7
|
+
data.tar.gz: 89b4f92e45b10ed8aa3f2a5a9d5930f49d9dd1e6dec842353071ac70ebe893b503c2449fd6f5ad43815810c506b173ab886b22b2d3be52b2690c4aab592df5e3
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -28,10 +28,12 @@ sbs new testchain -b v1.0
|
|
|
28
28
|
|
|
29
29
|
sbs new testchain -b v1.0 -a author_name
|
|
30
30
|
|
|
31
|
-
# Check the substrate
|
|
31
|
+
# Check the rust environment and substrate commits used by your project. Do it in your project directory.
|
|
32
32
|
sbs check
|
|
33
33
|
|
|
34
|
-
#
|
|
34
|
+
# Show the difference between your substrate version and branch head. Do it in your project directory.
|
|
35
|
+
sbs diff
|
|
36
|
+
|
|
35
37
|
sbs -h
|
|
36
38
|
|
|
37
39
|
```
|
data/lib/sbs/version.rb
CHANGED
data/lib/sbs.rb
CHANGED
|
@@ -9,38 +9,165 @@ module Sbs
|
|
|
9
9
|
|
|
10
10
|
class Cli < Thor
|
|
11
11
|
desc "new CHAIN_NAME", "Create a new blockchain from substrate node template by branch."
|
|
12
|
-
option :author, :aliases => :a, :default => "
|
|
12
|
+
option :author, :aliases => :a, :default => "wuminzhe"
|
|
13
13
|
option :branch, :aliases => :b, :default => "master"
|
|
14
14
|
def new(chain_name)
|
|
15
|
-
|
|
15
|
+
dest_dir = "."
|
|
16
|
+
|
|
17
|
+
# generate your chain
|
|
18
|
+
if generate_from_node_template(chain_name, options[:branch], options[:author], dest_dir)
|
|
19
|
+
# build
|
|
20
|
+
Dir.chdir("#{dest_dir}/#{chain_name}") do
|
|
21
|
+
puts "*** Initializing WebAssembly build environment..."
|
|
22
|
+
`./scripts/init.sh`
|
|
23
|
+
|
|
24
|
+
puts "*** Building '#{chain_name}' ..."
|
|
25
|
+
if File.exist?("./scripts/build.sh")
|
|
26
|
+
`./scripts/build.sh`
|
|
27
|
+
end
|
|
28
|
+
`cargo build`
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
puts ""
|
|
32
|
+
puts "Your blockchain '#{chain_name}' has been generated."
|
|
33
|
+
puts ""
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
desc "check", "Check the rust environment and substrate commits used by your project. Do it in your project directory."
|
|
38
|
+
def check
|
|
39
|
+
puts "Your rust environment:"
|
|
40
|
+
puts " default: #{`rustc --version`}"
|
|
41
|
+
puts ""
|
|
42
|
+
|
|
43
|
+
puts " stable: #{`rustc +stable --version`}"
|
|
44
|
+
puts " targets: "
|
|
45
|
+
`rustup target list --installed --toolchain stable`.each_line do |line|
|
|
46
|
+
puts " #{line}"
|
|
47
|
+
end
|
|
48
|
+
puts ""
|
|
49
|
+
|
|
50
|
+
puts " nightly: #{`rustc +nightly --version`}"
|
|
51
|
+
puts " targets: "
|
|
52
|
+
`rustup target list --installed --toolchain nightly`.each_line do |line|
|
|
53
|
+
puts " #{line}"
|
|
54
|
+
end
|
|
55
|
+
puts ""
|
|
56
|
+
|
|
57
|
+
puts " all toolchains: "
|
|
58
|
+
`rustup toolchain list`.each_line do |line|
|
|
59
|
+
puts " #{line}"
|
|
60
|
+
end
|
|
61
|
+
puts ""
|
|
62
|
+
|
|
63
|
+
puts "The substrate commit your project depends:"
|
|
64
|
+
get_commits.each do |commit|
|
|
65
|
+
puts " #{commit}"
|
|
66
|
+
end
|
|
67
|
+
puts ""
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
desc "diff", "Show the difference between your substrate version and branch head. Do it in your project directory."
|
|
71
|
+
option :branch, :aliases => :b, :default => "master"
|
|
72
|
+
def diff
|
|
73
|
+
commits = get_commits
|
|
74
|
+
if commits.length > 1
|
|
75
|
+
puts "Your project seems to depend on more than one substrate commit"
|
|
76
|
+
return
|
|
77
|
+
end
|
|
78
|
+
commit = commits[0]
|
|
79
|
+
|
|
80
|
+
home = File.join(Dir.home, ".sbs")
|
|
81
|
+
substrate_dir = File.join(home, "substrate")
|
|
82
|
+
tmp = File.join(home, "tmp", "/")
|
|
83
|
+
tmp_dir_1 = File.join(tmp, "your")
|
|
84
|
+
tmp_dir_2 = File.join(tmp, options[:branch])
|
|
85
|
+
FileUtils.mkdir_p(tmp_dir_1)
|
|
86
|
+
FileUtils.mkdir_p(tmp_dir_2)
|
|
87
|
+
|
|
88
|
+
# Compare the differences between the node-template you depend on and the latest node-template of the branch
|
|
89
|
+
copy_node_template(commit, tmp_dir_1)
|
|
90
|
+
copy_node_template(options[:branch], tmp_dir_2)
|
|
91
|
+
|
|
92
|
+
result = `diff -rq #{tmp_dir_1}/node-template #{tmp_dir_2}/node-template`
|
|
93
|
+
result.each_line do |line|
|
|
94
|
+
if line.start_with?("Files")
|
|
95
|
+
scans = line.scan(/Files (.+) and (.+) differ/)
|
|
96
|
+
file1 = scans[0][0]
|
|
97
|
+
file2 = scans[0][1]
|
|
98
|
+
|
|
99
|
+
puts "-------------------------------------------"
|
|
100
|
+
puts line.gsub(tmp, "")
|
|
101
|
+
puts `diff -u #{file1} #{file2}`.gsub(tmp, "")
|
|
102
|
+
puts "\n"
|
|
103
|
+
else
|
|
104
|
+
puts "-------------------------------------------"
|
|
105
|
+
puts line.gsub(tmp, "")
|
|
106
|
+
puts "\n"
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
`rm -rf #{tmp_dir_1} && rm -rf #{tmp_dir_2}`
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
private
|
|
114
|
+
def copy_node_template(branch_or_commit, dest_dir)
|
|
16
115
|
home = File.join(Dir.home, ".sbs")
|
|
17
116
|
Dir.mkdir(home) if not Dir.exist?(home)
|
|
18
117
|
substrate_dir = File.join(home, "substrate")
|
|
19
118
|
|
|
20
|
-
puts "1. Preparing substrate..."
|
|
21
119
|
if not Dir.exist?(substrate_dir)
|
|
22
120
|
`git clone https://github.com/paritytech/substrate #{substrate_dir}`
|
|
23
121
|
end
|
|
24
122
|
|
|
25
|
-
# checkout branch
|
|
123
|
+
# checkout branch or commit
|
|
26
124
|
Dir.chdir substrate_dir do
|
|
27
|
-
`git
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
125
|
+
if `git cat-file -t #{branch_or_commit}`.strip != "commit"
|
|
126
|
+
puts "Not a valid branch or commit"
|
|
127
|
+
return
|
|
128
|
+
else
|
|
129
|
+
`git checkout -q #{branch_or_commit}`
|
|
130
|
+
if `git show-ref refs/heads/#{branch_or_commit}`.strip != "" # this is a branch
|
|
131
|
+
`git pull`
|
|
132
|
+
end
|
|
32
133
|
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
`cp -R #{substrate_dir}/node-template #{dest_dir}`
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def generate_from_node_template(chain_name, branch_or_commit, author, dest_dir)
|
|
140
|
+
home = File.join(Dir.home, ".sbs")
|
|
141
|
+
Dir.mkdir(home) if not Dir.exist?(home)
|
|
142
|
+
substrate_dir = File.join(home, "substrate")
|
|
143
|
+
|
|
144
|
+
puts "*** Preparing substrate..."
|
|
145
|
+
if not Dir.exist?(substrate_dir)
|
|
146
|
+
`git clone https://github.com/paritytech/substrate #{substrate_dir}`
|
|
147
|
+
end
|
|
33
148
|
|
|
34
|
-
|
|
149
|
+
# checkout branch or commit
|
|
150
|
+
is_branch = false
|
|
151
|
+
Dir.chdir substrate_dir do
|
|
152
|
+
if `git cat-file -t #{branch_or_commit}`.strip != "commit"
|
|
153
|
+
puts "Not a valid branch or commit"
|
|
154
|
+
return
|
|
155
|
+
else
|
|
156
|
+
`git checkout #{branch_or_commit}`
|
|
157
|
+
if `git show-ref refs/heads/#{branch_or_commit}`.strip != "" # this is a branch
|
|
158
|
+
is_branch = true
|
|
159
|
+
`git pull`
|
|
160
|
+
end
|
|
161
|
+
end
|
|
35
162
|
end
|
|
36
163
|
|
|
37
|
-
puts "
|
|
38
|
-
if not Dir.exist?("
|
|
39
|
-
`cp -R #{substrate_dir}/node-template
|
|
164
|
+
puts "*** Copying node-template for '#{chain_name}' ..."
|
|
165
|
+
if not Dir.exist?("#{dest_dir}/#{chain_name}")
|
|
166
|
+
`cp -R #{substrate_dir}/node-template #{dest_dir}/#{chain_name}`
|
|
40
167
|
end
|
|
41
168
|
|
|
42
|
-
Dir.chdir("
|
|
43
|
-
puts "
|
|
169
|
+
Dir.chdir("#{dest_dir}/#{chain_name}") do
|
|
170
|
+
puts "*** Customizing '#{chain_name}' ..."
|
|
44
171
|
Find.find(".") do |path|
|
|
45
172
|
if not File.directory? path
|
|
46
173
|
content = `sed "s/Substrate Node Template/#{chain_name.titleize} Node/g" "#{path}"`
|
|
@@ -59,17 +186,23 @@ module Sbs
|
|
|
59
186
|
File.open(path, "w") do |f| f.write(content) end
|
|
60
187
|
|
|
61
188
|
if path.end_with?("toml")
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
189
|
+
if not author.nil?
|
|
190
|
+
content = `sed "s/Anonymous/#{author}/g" "#{path}"`
|
|
191
|
+
File.open(path, "w") do |f| f.write(content) end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
if is_branch
|
|
195
|
+
sed = "sed \"s/path = \\\"\\\.\\\.\\\/.*\\\"/git = 'https:\\\/\\\/github.com\\\/paritytech\\\/substrate.git', branch='#{branch_or_commit}'/g\" #{path}"
|
|
196
|
+
else
|
|
197
|
+
sed = "sed \"s/path = \\\"\\\.\\\.\\\/.*\\\"/git = 'https:\\\/\\\/github.com\\\/paritytech\\\/substrate.git', rev='#{branch_or_commit}'/g\" #{path}"
|
|
198
|
+
end
|
|
66
199
|
content = `#{sed}`
|
|
67
200
|
File.open(path, "w") do |f| f.write(content) end
|
|
68
201
|
end
|
|
69
202
|
end
|
|
70
203
|
end
|
|
71
204
|
|
|
72
|
-
puts "
|
|
205
|
+
puts "*** Initializing '#{chain_name}' repository..."
|
|
73
206
|
`git init 2>/dev/null >/dev/null`
|
|
74
207
|
`touch .gitignore`
|
|
75
208
|
File.open(".gitignore", "w") do |f|
|
|
@@ -80,46 +213,12 @@ module Sbs
|
|
|
80
213
|
**/*.rs.bk)
|
|
81
214
|
f.write(gitignore)
|
|
82
215
|
end
|
|
83
|
-
|
|
84
|
-
puts "5. Initializing WebAssembly build environment..."
|
|
85
|
-
`./scripts/init.sh`
|
|
86
|
-
|
|
87
|
-
puts "6. Building..."
|
|
88
|
-
if File.exist?("./scripts/build.sh")
|
|
89
|
-
`./scripts/build.sh`
|
|
90
|
-
end
|
|
91
|
-
`cargo build`
|
|
92
216
|
end
|
|
93
217
|
|
|
94
|
-
|
|
95
|
-
puts "blockchain #{chain_name} created by #{options[:author]}"
|
|
96
|
-
puts ""
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
desc "check", "Check the substrate version used by your project. Do it in your project directory."
|
|
100
|
-
def check
|
|
101
|
-
puts get_versions
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
desc "diff", "Show the difference between your substrate version and branch head. Do it in your project directory."
|
|
105
|
-
def diff
|
|
106
|
-
versions = get_versions
|
|
107
|
-
if versions.length > 1
|
|
108
|
-
puts "Your project seems to depend on more than one substrate version"
|
|
109
|
-
return
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
# get branch and commit
|
|
113
|
-
version = versions[0]
|
|
114
|
-
scan_branch = version.scan(/branch=(.+),/)[0]
|
|
115
|
-
branch = scan_branch.nil? ? "master" : scan_branch[0]
|
|
116
|
-
commit = version.scan(/commit=(.+)/)[0][0]
|
|
117
|
-
|
|
118
|
-
|
|
218
|
+
true
|
|
119
219
|
end
|
|
120
220
|
|
|
121
|
-
|
|
122
|
-
def get_versions
|
|
221
|
+
def get_commits
|
|
123
222
|
if not File.exist?("./Cargo.lock")
|
|
124
223
|
puts "There is no Cargo.lock in current directory!"
|
|
125
224
|
return
|
|
@@ -128,27 +227,13 @@ module Sbs
|
|
|
128
227
|
content = File.open("./Cargo.lock").read
|
|
129
228
|
result = content.scan(/substrate\.git(.*#.+)"$/).uniq
|
|
130
229
|
|
|
131
|
-
|
|
230
|
+
commits = []
|
|
132
231
|
result.each do |item|
|
|
133
232
|
splits = item[0].split("#")
|
|
134
|
-
|
|
135
|
-
versions << "#{splits[0][1 ..]}, commit=#{splits[1].strip}"
|
|
136
|
-
else
|
|
137
|
-
commit = splits[1].strip
|
|
138
|
-
versions << "commit=#{commit}"
|
|
139
|
-
end
|
|
233
|
+
commits << splits[1].strip
|
|
140
234
|
end
|
|
141
235
|
|
|
142
|
-
|
|
143
|
-
versions.select do |version|
|
|
144
|
-
included = false
|
|
145
|
-
versions.each do |v|
|
|
146
|
-
if v != version && v.include?(version)
|
|
147
|
-
included = true
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
not included
|
|
151
|
-
end
|
|
236
|
+
commits.uniq
|
|
152
237
|
end
|
|
153
238
|
|
|
154
239
|
end
|
data/sbs.gemspec
CHANGED
|
@@ -5,7 +5,7 @@ require "sbs/version"
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
6
|
spec.name = "sbs"
|
|
7
7
|
spec.version = Sbs::VERSION
|
|
8
|
-
spec.authors = ["
|
|
8
|
+
spec.authors = ["wuminzhe"]
|
|
9
9
|
spec.email = ["wuminzhe@gmail.com"]
|
|
10
10
|
|
|
11
11
|
spec.summary = %q{A better cli tool for substrate development}
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sbs
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
7
|
+
- wuminzhe
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-09-
|
|
11
|
+
date: 2019-09-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|