falkorlib 0.7.16 → 0.7.17
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/.travis.yml +1 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +18 -13
- data/lib/falkorlib/bootstrap/base.rb +66 -1
- data/lib/falkorlib/bootstrap/git.rb +98 -30
- data/lib/falkorlib/cli.rb +15 -1
- data/lib/falkorlib/cli/make.rb +56 -0
- data/lib/falkorlib/cli/new.rb +26 -1
- data/lib/falkorlib/version.rb +1 -1
- data/spec/falkorlib/bootstrap_spec.rb +40 -2
- data/templates/git-crypt/.gitattributes +10 -0
- data/templates/git-crypt/pre-commit.git-crypt.sh +33 -0
- metadata +5 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 603782c1cf39fcfe8dc3e2ce0a8163feb6f46ded
|
|
4
|
+
data.tar.gz: 5c4a70beeacca4445e86fac8768fd75bd354d6a2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4aa8e8563852b17a9d4dbf7e09bd430c3c18a3d0681df652ac2c4d03d412009364ea95259e4fb316a9f0ef0d321fa6f1e35d55395d1f51e66e022c9cebcc5e21
|
|
7
|
+
data.tar.gz: 15952d0e647dccf036b4d0db8b7829180ead265af2291535338d9de6f7c437b69dae1e15bc9e0bf4e6241dae7bc7475df6d9fcbe9562befc462b79f743cdc3bb
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
falkorlib (0.7.
|
|
4
|
+
falkorlib (0.7.17)
|
|
5
5
|
activesupport (~> 4.0)
|
|
6
6
|
artii (>= 2.1)
|
|
7
7
|
awesome_print (~> 1.2)
|
|
@@ -31,7 +31,7 @@ GEM
|
|
|
31
31
|
addressable (2.5.0)
|
|
32
32
|
public_suffix (~> 2.0, >= 2.0.2)
|
|
33
33
|
artii (2.1.2)
|
|
34
|
-
ast (2.
|
|
34
|
+
ast (2.4.0)
|
|
35
35
|
awesome_print (1.7.0)
|
|
36
36
|
backports (3.6.8)
|
|
37
37
|
codeclimate-test-reporter (0.3.0)
|
|
@@ -49,7 +49,7 @@ GEM
|
|
|
49
49
|
multipart-post (>= 1.2, < 3)
|
|
50
50
|
faraday_middleware (0.10.1)
|
|
51
51
|
faraday (>= 0.7.4, < 1.0)
|
|
52
|
-
ffi (1.9.
|
|
52
|
+
ffi (1.9.25)
|
|
53
53
|
gh (0.14.0)
|
|
54
54
|
addressable
|
|
55
55
|
backports
|
|
@@ -61,6 +61,7 @@ GEM
|
|
|
61
61
|
hashr (0.0.22)
|
|
62
62
|
highline (1.7.8)
|
|
63
63
|
i18n (0.7.0)
|
|
64
|
+
jaro_winkler (1.5.1)
|
|
64
65
|
json (1.8.6)
|
|
65
66
|
launchy (2.4.3)
|
|
66
67
|
addressable (~> 2.3)
|
|
@@ -74,9 +75,10 @@ GEM
|
|
|
74
75
|
multipart-post (2.0.0)
|
|
75
76
|
net-http-persistent (2.9.4)
|
|
76
77
|
net-http-pipeline (1.0.1)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
parallel (1.12.1)
|
|
79
|
+
parser (2.5.3.0)
|
|
80
|
+
ast (~> 2.4.0)
|
|
81
|
+
powerpack (0.1.2)
|
|
80
82
|
pry (0.10.4)
|
|
81
83
|
coderay (~> 1.1.0)
|
|
82
84
|
method_source (~> 0.8.1)
|
|
@@ -85,7 +87,7 @@ GEM
|
|
|
85
87
|
pusher-client (0.6.2)
|
|
86
88
|
json
|
|
87
89
|
websocket (~> 1.0)
|
|
88
|
-
rainbow (
|
|
90
|
+
rainbow (3.0.0)
|
|
89
91
|
rake (10.5.0)
|
|
90
92
|
rspec (3.5.0)
|
|
91
93
|
rspec-core (~> 3.5.0)
|
|
@@ -100,13 +102,15 @@ GEM
|
|
|
100
102
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
101
103
|
rspec-support (~> 3.5.0)
|
|
102
104
|
rspec-support (3.5.0)
|
|
103
|
-
rubocop (0.
|
|
104
|
-
|
|
105
|
+
rubocop (0.57.2)
|
|
106
|
+
jaro_winkler (~> 1.5.1)
|
|
107
|
+
parallel (~> 1.10)
|
|
108
|
+
parser (>= 2.5)
|
|
105
109
|
powerpack (~> 0.1)
|
|
106
|
-
rainbow (>=
|
|
110
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
107
111
|
ruby-progressbar (~> 1.7)
|
|
108
112
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
|
109
|
-
ruby-progressbar (1.
|
|
113
|
+
ruby-progressbar (1.10.0)
|
|
110
114
|
rubygems-tasks (0.2.4)
|
|
111
115
|
safe_yaml (0.9.7)
|
|
112
116
|
simplecov (0.8.2)
|
|
@@ -138,7 +142,7 @@ GEM
|
|
|
138
142
|
ethon (>= 0.8.0)
|
|
139
143
|
tzinfo (1.2.2)
|
|
140
144
|
thread_safe (~> 0.1)
|
|
141
|
-
unicode-display_width (1.
|
|
145
|
+
unicode-display_width (1.4.0)
|
|
142
146
|
websocket (1.2.3)
|
|
143
147
|
yard (0.9.12)
|
|
144
148
|
|
|
@@ -150,10 +154,11 @@ DEPENDENCIES
|
|
|
150
154
|
bundler
|
|
151
155
|
codeclimate-test-reporter (~> 0)
|
|
152
156
|
falkorlib!
|
|
157
|
+
ffi (>= 1.9.24)
|
|
153
158
|
pry
|
|
154
159
|
rake
|
|
155
160
|
rspec (~> 3.0)
|
|
156
|
-
rubocop
|
|
161
|
+
rubocop (>= 0.49.0)
|
|
157
162
|
rubygems-tasks (~> 0.2)
|
|
158
163
|
simplecov
|
|
159
164
|
travis (~> 1.6)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
################################################################################
|
|
3
|
-
# Time-stamp: <
|
|
3
|
+
# Time-stamp: <Thu 2018-11-08 17:47 svarrette>
|
|
4
4
|
################################################################################
|
|
5
5
|
# Interface for the main Bootstrapping operations
|
|
6
6
|
#
|
|
@@ -22,6 +22,22 @@ module FalkorLib #:nodoc:
|
|
|
22
22
|
|
|
23
23
|
DEFAULTS =
|
|
24
24
|
{
|
|
25
|
+
:gitcrypt => {
|
|
26
|
+
:owner => `git config user.signingKey`.chomp,
|
|
27
|
+
:subkeys => [],
|
|
28
|
+
:hooksdir => 'config/hooks',
|
|
29
|
+
:hook => 'pre-commit.git-crypt.sh',
|
|
30
|
+
:ulhpc => [
|
|
31
|
+
#'Ox5D08BCDD4F156AD7', # S. Varrette
|
|
32
|
+
'0x3F3242C5B34D98C2', # V. Plugaru
|
|
33
|
+
'0x6429C2514EBC4737', # S. Peter
|
|
34
|
+
'0x07FEA8BA69203C2D', # C. Parisot
|
|
35
|
+
'0x37183CEF550DF40B', # H. Cartiaux
|
|
36
|
+
],
|
|
37
|
+
# :hooks => {
|
|
38
|
+
# :precommit => 'https://gist.github.com/848c82daa63710b6c132bb42029b30ef.git',
|
|
39
|
+
# },
|
|
40
|
+
},
|
|
25
41
|
:motd => {
|
|
26
42
|
:file => 'motd',
|
|
27
43
|
:hostname => `hostname -f`.chomp,
|
|
@@ -140,6 +156,55 @@ module FalkorLib
|
|
|
140
156
|
|
|
141
157
|
module_function
|
|
142
158
|
|
|
159
|
+
###### makefile ######
|
|
160
|
+
# Supported options:
|
|
161
|
+
# * :master [string] git flow master/production branch
|
|
162
|
+
# * :develop [string] git flow development branch
|
|
163
|
+
# * :force [boolean] for overwritting
|
|
164
|
+
#......................................
|
|
165
|
+
def makefile(dir = Dir.pwd, options = {})
|
|
166
|
+
path = normalized_path(dir)
|
|
167
|
+
path = FalkorLib::Git.rootdir(path) if FalkorLib::Git.init?(path)
|
|
168
|
+
info "=> Setup a root repository makefile in '#{dir}'"
|
|
169
|
+
# Preparing submodule
|
|
170
|
+
submodules = {}
|
|
171
|
+
submodules['Makefiles'] = {
|
|
172
|
+
:url => 'https://github.com/Falkor/Makefiles.git',
|
|
173
|
+
:branch => 'devel'
|
|
174
|
+
}
|
|
175
|
+
FalkorLib::Git.submodule_init(path, submodules)
|
|
176
|
+
makefile = File.join(path, "Makefile")
|
|
177
|
+
if File.exist?( makefile )
|
|
178
|
+
puts " ... not overwriting the root Makefile which already exists"
|
|
179
|
+
else
|
|
180
|
+
src_makefile = File.join(path, FalkorLib.config.git[:submodulesdir],
|
|
181
|
+
'Makefiles', 'repo', 'Makefile')
|
|
182
|
+
FileUtils.cp src_makefile, makefile
|
|
183
|
+
gitflow_branches = FalkorLib::Config::GitFlow::DEFAULTS[:branches]
|
|
184
|
+
if FalkorLib::GitFlow.init?(path)
|
|
185
|
+
[ :master, :develop ].each do |b|
|
|
186
|
+
gitflow_branches[t.to_sym] = FalkorLib::GitFlow.branches(b.to_sym)
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
unless options.nil?
|
|
190
|
+
[ :master, :develop ].each do |b|
|
|
191
|
+
gitflow_branches[b.to_sym] = options[b.to_sym] if options[b.to_sym]
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
info "adapting Makefile to the gitflow branches"
|
|
195
|
+
Dir.chdir( path ) do
|
|
196
|
+
run %(
|
|
197
|
+
sed -i '' \
|
|
198
|
+
-e \"s/^GITFLOW_BR_MASTER=production/GITFLOW_BR_MASTER=#{gitflow_branches[:master]}/\" \
|
|
199
|
+
-e \"s/^GITFLOW_BR_DEVELOP=devel/GITFLOW_BR_DEVELOP=#{gitflow_branches[:develop]}/\" \
|
|
200
|
+
Makefile
|
|
201
|
+
)
|
|
202
|
+
end
|
|
203
|
+
FalkorLib::Git.add(makefile, 'Initialize root Makefile for the repo')
|
|
204
|
+
end
|
|
205
|
+
end # makefile
|
|
206
|
+
|
|
207
|
+
|
|
143
208
|
###
|
|
144
209
|
# Initialize a trash directory in path
|
|
145
210
|
##
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
################################################################################
|
|
3
|
-
# Time-stamp: <
|
|
3
|
+
# Time-stamp: <Thu 2018-11-08 18:27 svarrette>
|
|
4
4
|
################################################################################
|
|
5
5
|
# Interface for the main Bootstrapping operations
|
|
6
6
|
#
|
|
@@ -66,39 +66,14 @@ module FalkorLib
|
|
|
66
66
|
FalkorLib::Git.init(path, options)
|
|
67
67
|
end
|
|
68
68
|
# === prepare Git submodules ===
|
|
69
|
-
info " ==> prepare the relevant Git submodules"
|
|
70
69
|
submodules = {}
|
|
71
70
|
#'gitstats' => { :url => 'https://github.com/hoxu/gitstats.git' }
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
submodules
|
|
75
|
-
:url => 'https://github.com/Falkor/Makefiles.git',
|
|
76
|
-
:branch => 'devel'
|
|
77
|
-
}
|
|
71
|
+
unless submodules.empty?
|
|
72
|
+
info " ==> prepare the relevant Git submodules"
|
|
73
|
+
FalkorLib::Git.submodule_init(path, submodules)
|
|
78
74
|
end
|
|
79
|
-
FalkorLib::Git.submodule_init(path, submodules)
|
|
80
75
|
# === Prepare root [M|R]akefile ===
|
|
81
|
-
if options[:make]
|
|
82
|
-
info " ==> prepare Root Makefile"
|
|
83
|
-
makefile = File.join(path, "Makefile")
|
|
84
|
-
if File.exist?( makefile )
|
|
85
|
-
puts " ... not overwriting the root Makefile which already exists"
|
|
86
|
-
else
|
|
87
|
-
src_makefile = File.join(path, FalkorLib.config.git[:submodulesdir],
|
|
88
|
-
'Makefiles', 'repo', 'Makefile')
|
|
89
|
-
FileUtils.cp src_makefile, makefile
|
|
90
|
-
info "adapting Makefile to the gitflow branches"
|
|
91
|
-
Dir.chdir( path ) do
|
|
92
|
-
run %(
|
|
93
|
-
sed -i '' \
|
|
94
|
-
-e \"s/^GITFLOW_BR_MASTER=production/GITFLOW_BR_MASTER=#{gitflow_branches[:master]}/\" \
|
|
95
|
-
-e \"s/^GITFLOW_BR_DEVELOP=devel/GITFLOW_BR_DEVELOP=#{gitflow_branches[:develop]}/\" \
|
|
96
|
-
Makefile
|
|
97
|
-
)
|
|
98
|
-
end
|
|
99
|
-
FalkorLib::Git.add(makefile, 'Initialize root Makefile for the repo')
|
|
100
|
-
end
|
|
101
|
-
end
|
|
76
|
+
FalkorLib::Bootstrap.makefile(path, gitflow_branches) if options[:make]
|
|
102
77
|
if options[:rake]
|
|
103
78
|
info " ==> prepare Root Rakefile"
|
|
104
79
|
rakefile = File.join(path, "Rakefile")
|
|
@@ -147,7 +122,100 @@ module FalkorLib
|
|
|
147
122
|
end
|
|
148
123
|
end # repo
|
|
149
124
|
|
|
125
|
+
###### gitcrypt ######
|
|
126
|
+
# Initialize git-crypt in the current directory
|
|
127
|
+
# Supported options:
|
|
128
|
+
# * :force [boolean] force overwritting
|
|
129
|
+
# * :owner [string] owner (GPG ID or email)
|
|
130
|
+
# * :keys [array] List of GPG IDs allowed to unlock the repository
|
|
131
|
+
# * :ulhpc [boolean] setup the repository for the ULHPC team
|
|
132
|
+
##
|
|
133
|
+
def gitcrypt(dir = Dir.pwd, options = {})
|
|
134
|
+
path = normalized_path(dir)
|
|
135
|
+
unless File.directory?(path)
|
|
136
|
+
warning "The directory '#{path}' does not exist yet."
|
|
137
|
+
warning 'Do you want to create (and git init) this directory?'
|
|
138
|
+
really_continue?
|
|
139
|
+
run %(mkdir -p #{path})
|
|
140
|
+
FalkorLib::Git.init(path)
|
|
141
|
+
end
|
|
142
|
+
error "Not a git-ready directory" unless FalkorLib::Git.init?(path)
|
|
143
|
+
rootdir = FalkorLib::Git.rootdir(path)
|
|
144
|
+
config = FalkorLib::Config::Bootstrap::DEFAULTS[:gitcrypt].clone
|
|
145
|
+
info "about to initialize Git crypt for the repository '#{rootdir}'"
|
|
146
|
+
really_continue?
|
|
147
|
+
config[:owner] = (options[:owner]) ? options[:owner] : ask("\tEmail or (better) GPG ID of the owner of the git-crypt (root) vault", config[:owner])
|
|
148
|
+
[ :hooksdir ].each do |k|
|
|
149
|
+
config[k] = (options[k]) ? options[k] : ask("\t#{k.capitalize}", config[k])
|
|
150
|
+
end
|
|
151
|
+
#puts config.to_yaml
|
|
152
|
+
if File.exists?(File.join(rootdir, '.git/git-crypt/keys/default'))
|
|
153
|
+
warning "git-crypt has already been initialised in '#{rootdir}'"
|
|
154
|
+
else
|
|
155
|
+
Dir.chdir( rootdir ) do
|
|
156
|
+
run %( git crypt init )
|
|
157
|
+
if config[:owner]
|
|
158
|
+
info "setup owner of the git-crypt vault to '#{config[:owner]}'"
|
|
159
|
+
run %( gpg --list-key #{config[:owner]} | grep uid| head -n1)
|
|
160
|
+
run %( git crypt add-gpg-user #{config[:owner]} )
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
# Bootstrap the directory
|
|
165
|
+
gitattributes = File.join(rootdir, '.gitattributes')
|
|
166
|
+
if File.exists?(gitattributes)
|
|
167
|
+
puts " ... '.gitattributes' file already exists"
|
|
168
|
+
else
|
|
169
|
+
templatedir = File.join( FalkorLib.templates, 'git-crypt')
|
|
170
|
+
init_from_template(templatedir, rootdir, {},
|
|
171
|
+
:no_interaction => true,
|
|
172
|
+
:no_commit => false)
|
|
173
|
+
FalkorLib::Git.add(gitattributes, 'Initialize .gitattributes for git-crypt')
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
git_hooksdir = File.join(rootdir, '.git', 'hooks')
|
|
177
|
+
precommit_hook = File.join(git_hooksdir, 'pre-commit')
|
|
178
|
+
src_git_hooksdir = File.join(rootdir, config[:hooksdir])
|
|
179
|
+
src_precommit_hook = File.join(src_git_hooksdir, config[:hook])
|
|
180
|
+
if File.exists?(File.join(rootdir, config[:hook]))
|
|
181
|
+
Dir.chdir( rootdir ) do
|
|
182
|
+
run %(mkdir -p #{config[:hooksdir]} )
|
|
183
|
+
unless File.exists?(src_precommit_hook)
|
|
184
|
+
run %(mv #{config[:hook]} #{config[:hooksdir]}/ )
|
|
185
|
+
run %(chmod +x #{config[:hooksdir]}/#{config[:hook]})
|
|
186
|
+
FalkorLib::Git.add(src_precommit_hook, 'pre-commit hook for git-crypt')
|
|
187
|
+
end
|
|
188
|
+
run %(rm -f #{config[:hook]} ) if File.exists?(File.join(rootdir, config[:hook]))
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
# Pre-commit hook
|
|
192
|
+
unless File.exist?(precommit_hook)
|
|
193
|
+
info "=> bootstrapping special Git pre-commit hook for git-crypt"
|
|
194
|
+
relative_src_hooksdir = Pathname.new( File.realpath( src_git_hooksdir )).relative_path_from Pathname.new( git_hooksdir )
|
|
195
|
+
Dir.chdir( git_hooksdir ) do
|
|
196
|
+
run %(ln -s #{relative_src_hooksdir}/#{config[:hook]} pre-commit)
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
gpgkeys = []
|
|
200
|
+
gpgkeys = config[:ulhpc] if options[:ulhpc]
|
|
201
|
+
gpgkeys = options[:keys] if options[:keys]
|
|
202
|
+
unless gpgkeys.empty?
|
|
203
|
+
warning "About to allow the following GPG IDs to unlock the git-crypt vault"
|
|
204
|
+
puts gpgkeys.to_yaml
|
|
205
|
+
really_continue?
|
|
206
|
+
end
|
|
207
|
+
gpgkeys.each do |k|
|
|
208
|
+
Dir.chdir( rootdir ) do
|
|
209
|
+
info "allow GPG ID '#{k}' to unlock the git-crypt vault"
|
|
210
|
+
run %( gpg --list-key #{k} | grep uid| head -n1)
|
|
211
|
+
run %( git crypt add-gpg-user #{k} )
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
150
217
|
|
|
218
|
+
end # gitcrypt
|
|
151
219
|
|
|
152
220
|
end # module Bootstrap
|
|
153
221
|
end # module FalkorLib
|
data/lib/falkorlib/cli.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
################################################################################
|
|
3
|
-
# Time-stamp: <
|
|
3
|
+
# Time-stamp: <Thu 2018-11-08 17:28 svarrette>
|
|
4
4
|
################################################################################
|
|
5
5
|
# Interface for the CLI
|
|
6
6
|
#
|
|
@@ -14,6 +14,7 @@ require 'falkorlib'
|
|
|
14
14
|
|
|
15
15
|
require 'falkorlib/cli/new'
|
|
16
16
|
require 'falkorlib/cli/link'
|
|
17
|
+
require 'falkorlib/cli/make'
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
|
|
@@ -67,6 +68,19 @@ CONFIG_LONG_DESC
|
|
|
67
68
|
|
|
68
69
|
#map %w[--help -h] => :help
|
|
69
70
|
|
|
71
|
+
###### gitcrypt ######
|
|
72
|
+
method_option :owner, :aliases => '-o',
|
|
73
|
+
:desc => "Email or (better) GPG ID of the owner of the git-crypt (root) vault"
|
|
74
|
+
method_option :ulhpc, :aliases => '-u', :type => :boolean,
|
|
75
|
+
:desc => "Bootstrap git-crypt for the UL HPC team"
|
|
76
|
+
method_option :keys, :type => :array, :aliases => [ '--gpgkeys', '-k' ],
|
|
77
|
+
:desc => "(space separated) List of GPG IDs allowed to unlock the repository"
|
|
78
|
+
#......................................
|
|
79
|
+
desc "gitcrypt <PATH> [options]", "Initialize git-crypt for the current repository"
|
|
80
|
+
def gitcrypt(path = '.')
|
|
81
|
+
FalkorLib::Bootstrap.gitcrypt(path, options)
|
|
82
|
+
end # gitcrypt
|
|
83
|
+
|
|
70
84
|
###### init ######
|
|
71
85
|
desc "init <PATH> [options]", "Bootstrap a Git Repository"
|
|
72
86
|
long_desc <<-INIT_LONG_DESC
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
################################################################################
|
|
3
|
+
# Time-stamp: <Thu 2018-11-08 16:50 svarrette>
|
|
4
|
+
################################################################################
|
|
5
|
+
|
|
6
|
+
require 'thor'
|
|
7
|
+
require 'falkorlib'
|
|
8
|
+
#require 'falkorlib/cli/init/repo'
|
|
9
|
+
#require "falkorlib/bootstrap"
|
|
10
|
+
|
|
11
|
+
module FalkorLib
|
|
12
|
+
module CLI
|
|
13
|
+
# Thor class for symlink creation
|
|
14
|
+
class Make < ::Thor
|
|
15
|
+
|
|
16
|
+
include FalkorLib::Common
|
|
17
|
+
|
|
18
|
+
###### commands ######
|
|
19
|
+
desc "commands", "Lists all available commands", :hide => true
|
|
20
|
+
def commands
|
|
21
|
+
puts Make.all_commands.keys.sort - [ 'commands' ]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
###### repo ######
|
|
25
|
+
method_option :master, :aliases => ['--production', '-m', '-p'],
|
|
26
|
+
:desc => 'Git flow master/production branch'
|
|
27
|
+
method_option :develop, :aliases => ['--devel', '-d'],
|
|
28
|
+
:desc => 'Git flow development branch'
|
|
29
|
+
#......................................
|
|
30
|
+
desc "repo", "Create a root Makefile piloting repository operations"
|
|
31
|
+
def repo(dir = Dir.pwd)
|
|
32
|
+
FalkorLib::Bootstrap.makefile(dir, options)
|
|
33
|
+
end # repo
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
###### latex ######
|
|
37
|
+
desc "latex", "Symlink to a Makefile to compile LaTeX documents"
|
|
38
|
+
def latex(dir = Dir.pwd)
|
|
39
|
+
FalkorLib::Bootstrap::Link.makefile(dir, :latex => true)
|
|
40
|
+
end # latex
|
|
41
|
+
|
|
42
|
+
##### gnuplot #####
|
|
43
|
+
desc "gnuplot", "Symlink to a Makefile to compile GnuPlot scripts"
|
|
44
|
+
def gnuplot(dir = Dir.pwd)
|
|
45
|
+
FalkorLib::Bootstrap::Link.makefile(dir, :gnuplot => true)
|
|
46
|
+
end # gnuplot
|
|
47
|
+
|
|
48
|
+
##### generic #####
|
|
49
|
+
desc "generic", "Symlink to Generic Makefile for sub directory"
|
|
50
|
+
def generic(dir = Dir.pwd)
|
|
51
|
+
FalkorLib::Bootstrap::Link.makefile(dir, :generic => true)
|
|
52
|
+
end # generic
|
|
53
|
+
|
|
54
|
+
end # class Make
|
|
55
|
+
end # module CLI
|
|
56
|
+
end # module FalkorLib
|
data/lib/falkorlib/cli/new.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
################################################################################
|
|
3
|
-
# Time-stamp: <
|
|
3
|
+
# Time-stamp: <Thu 2018-11-08 17:01 svarrette>
|
|
4
4
|
################################################################################
|
|
5
5
|
|
|
6
6
|
require 'thor'
|
|
@@ -101,6 +101,31 @@ By default, NAME is '.' meaning that the repository will be initialized in the c
|
|
|
101
101
|
FalkorLib::Bootstrap.license(path, license, '', options)
|
|
102
102
|
end # license
|
|
103
103
|
|
|
104
|
+
##### make ######
|
|
105
|
+
method_option :repo, :type => :boolean, :aliases => '-r',
|
|
106
|
+
:desc => "Create a root Makefile piloting repository operations"
|
|
107
|
+
method_option :latex, :type => :boolean, :aliases => '-l',
|
|
108
|
+
:desc => "Makefile to compile LaTeX documents"
|
|
109
|
+
method_option :gnuplot, :type => :boolean, :aliases => ['--plot', '-p'],
|
|
110
|
+
:desc => "Makefile to compile GnuPlot scripts"
|
|
111
|
+
method_option :generic, :type => :boolean, :aliases => '-g',
|
|
112
|
+
:desc => "Generic Makefile for sub directory"
|
|
113
|
+
method_option :images, :type => :boolean, :aliases => [ '-i', '--img' ],
|
|
114
|
+
:desc => "Makefile to optimize images"
|
|
115
|
+
method_option :src, :type => :boolean, :aliases => [ '--src', '-s' ],
|
|
116
|
+
:desc => "Path to Falkor's Makefile for latex_src"
|
|
117
|
+
#......................................
|
|
118
|
+
desc "make [options]", "Initiate one of Falkor's Makefile"
|
|
119
|
+
def make(dir = Dir.pwd)
|
|
120
|
+
if options[:repo]
|
|
121
|
+
FalkorLib::Bootstrap.makefile(dir)
|
|
122
|
+
elsif (options[:latex] or options[:gnuplot] or options[:generic] or options[:images] or options[:src])
|
|
123
|
+
FalkorLib::Bootstrap::Link.makefile(dir, options)
|
|
124
|
+
else
|
|
125
|
+
FalkorLib::Common.error 'Kindly precize the type of Makefile you which to create'
|
|
126
|
+
end
|
|
127
|
+
end # make
|
|
128
|
+
|
|
104
129
|
|
|
105
130
|
###### slides ######
|
|
106
131
|
#......................................
|
data/lib/falkorlib/version.rb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#########################################
|
|
3
3
|
# bootstrap_spec.rb
|
|
4
4
|
# @author Sebastien Varrette <Sebastien.Varrette@uni.lu>
|
|
5
|
-
# Time-stamp: <
|
|
5
|
+
# Time-stamp: <Thu 2018-11-08 16:26 svarrette>
|
|
6
6
|
#
|
|
7
7
|
# @description Check the basic Bootstrapping operations
|
|
8
8
|
#
|
|
@@ -37,7 +37,7 @@ describe FalkorLib::Bootstrap do
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
[ :without_git, :with_git ].each do |ctx|
|
|
40
|
-
#
|
|
40
|
+
# [ :with_git ].each do |ctx|
|
|
41
41
|
dir = dirs[ctx]
|
|
42
42
|
#############################################################
|
|
43
43
|
context "bootstrap/base (#{ctx}) within temporary directory '#{dir}'" do
|
|
@@ -49,8 +49,16 @@ describe FalkorLib::Bootstrap do
|
|
|
49
49
|
t = FalkorLib::Git.init?(dir)
|
|
50
50
|
expect(t).to be true
|
|
51
51
|
end
|
|
52
|
+
|
|
53
|
+
#### root Makefile creation #########
|
|
54
|
+
it "#makefile -- bootstrap root makefile" do
|
|
55
|
+
c = FalkorLib::Bootstrap.makefile(dir)
|
|
56
|
+
t = File.exists?( File.join(dir, 'Makefile'))
|
|
57
|
+
end
|
|
58
|
+
|
|
52
59
|
end
|
|
53
60
|
|
|
61
|
+
|
|
54
62
|
#### Trash creation #########
|
|
55
63
|
it "#trash" do
|
|
56
64
|
c = FalkorLib::Bootstrap.trash(dir)
|
|
@@ -146,6 +154,36 @@ describe FalkorLib::Bootstrap do
|
|
|
146
154
|
end
|
|
147
155
|
end
|
|
148
156
|
|
|
157
|
+
if ctx == :without_git
|
|
158
|
+
it "#repo -- bootstrap a new repository" do
|
|
159
|
+
c = FalkorLib::Bootstrap.repo(dir, { :no_interaction => true, :make => true, :git_flow => false })
|
|
160
|
+
[ 'Makefile', 'VERSION', 'README.md' ].each do |f|
|
|
161
|
+
expect(File).to exist( File.join(dir, f))
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
if ctx == :with_git
|
|
167
|
+
it "#gitcrypt -- owner is empty" do
|
|
168
|
+
c = FalkorLib::Bootstrap.gitcrypt(dir, { :owner => '', :no_interaction => true })
|
|
169
|
+
[ '.git-crypt' ].each do |d|
|
|
170
|
+
expect(File.directory?(File.join(dir, d))).to be false
|
|
171
|
+
end
|
|
172
|
+
expect(File).to exist( File.join(dir, '.gitattributes'))
|
|
173
|
+
expect(File).to exist( File.join(dir, '.git', 'git-crypt', 'keys', 'default'))
|
|
174
|
+
expect(File).to exist( File.join(dir, FalkorLib::Config::Bootstrap::DEFAULTS[:gitcrypt][:hooksdir], FalkorLib::Config::Bootstrap::DEFAULTS[:gitcrypt][:hook]))
|
|
175
|
+
expect(File).to exist( File.join(dir, '.git','hooks','pre-commit'))
|
|
176
|
+
end
|
|
177
|
+
# it "#gitcrypt -- owner" do
|
|
178
|
+
# c = FalkorLib::Bootstrap.gitcrypt(dir, { :no_interaction => true })
|
|
179
|
+
# [ '.git-crypt' ].each do |d|
|
|
180
|
+
# expect(File.directory?(File.join(dir, d))).to be true
|
|
181
|
+
# end
|
|
182
|
+
# #expect(File).to exist( File.join(dir, '.git-crypt', 'keys', 'default', '0', '*.gpg'))
|
|
183
|
+
# # TODO check gpg file
|
|
184
|
+
# end
|
|
185
|
+
end
|
|
186
|
+
|
|
149
187
|
|
|
150
188
|
end # context "bootstrap/base"
|
|
151
189
|
end # each
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# -*- mode: conf -*-
|
|
2
|
+
#
|
|
3
|
+
# specify which files to encrypt using [git-crypt](https://www.agwa.name/projects/git-crypt/)
|
|
4
|
+
#
|
|
5
|
+
|
|
6
|
+
# Certificate private keys
|
|
7
|
+
# *.key filter=git-crypt diff=git-crypt
|
|
8
|
+
# Private document/folders
|
|
9
|
+
# *PRIVATE* filter=git-crypt diff=git-crypt
|
|
10
|
+
# subfolder/**/* filter=git-crypt diff=git-crypt
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
################################################################################
|
|
3
|
+
# See <https://gist.github.com/Falkor/848c82daa63710b6c132bb42029b30ef>
|
|
4
|
+
# Pre-commit hook to avoid accidentally adding unencrypted files with [git-crypt](https://www.agwa.name/projects/git-crypt/)
|
|
5
|
+
# Fix to [Issue #45](https://github.com/AGWA/git-crypt/issues/45)
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# $> cd /path/to/repository
|
|
9
|
+
# $> git-crypt init
|
|
10
|
+
# $> curl <url/to/this/raw/gist> -o .git/hooks/pre-commit
|
|
11
|
+
# $> chmod +x .git/hooks/pre-commit
|
|
12
|
+
#
|
|
13
|
+
# Otherwise, you might want to add it as a git submodule, using:
|
|
14
|
+
# $> git submodule add https://gist.github.com/848c82daa63710b6c132bb42029b30ef.git config/hooks/pre-commit.git-crypt
|
|
15
|
+
# $> cd .git/hooks
|
|
16
|
+
# $> ln -s ../../config/hooks/pre-commit.git-crypt/pre-commit.git-crypt.sh pre-commit
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
if [ -d .git-crypt ]; then
|
|
20
|
+
STAGED_FILES=$(git diff --cached --name-status | awk '$1 != "D" { print $2 }' | xargs echo)
|
|
21
|
+
if [ -n "${STAGED_FILES}" ]; then
|
|
22
|
+
git-crypt status ${STAGED_FILES} &>/dev/null
|
|
23
|
+
if [[ $? -ne 0 ]]; then
|
|
24
|
+
git-crypt status -e ${STAGED_FILES}
|
|
25
|
+
echo '/!\ You should have first unlocked your repository BEFORE staging the above file(s)'
|
|
26
|
+
echo '/!\ Proceed now as follows:'
|
|
27
|
+
echo -e "\t git unstage ${STAGED_FILES}"
|
|
28
|
+
echo -e "\t git crypt unlock"
|
|
29
|
+
echo -e "\t git add ${STAGED_FILES}"
|
|
30
|
+
exit 1
|
|
31
|
+
fi
|
|
32
|
+
fi
|
|
33
|
+
fi
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: falkorlib
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.7.
|
|
4
|
+
version: 0.7.17
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sebastien Varrette
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-
|
|
11
|
+
date: 2018-11-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -422,6 +422,7 @@ files:
|
|
|
422
422
|
- lib/falkorlib/cli.rb
|
|
423
423
|
- lib/falkorlib/cli/config.rb
|
|
424
424
|
- lib/falkorlib/cli/link.rb
|
|
425
|
+
- lib/falkorlib/cli/make.rb
|
|
425
426
|
- lib/falkorlib/cli/new.rb
|
|
426
427
|
- lib/falkorlib/common.rb
|
|
427
428
|
- lib/falkorlib/config.rb
|
|
@@ -484,6 +485,8 @@ files:
|
|
|
484
485
|
- templates/gems/lib/sysadmin-warrior/loader.rb
|
|
485
486
|
- templates/gems/lib/sysadmin-warrior/version.rb
|
|
486
487
|
- templates/gems/sysadmin-warrior.gemspec
|
|
488
|
+
- templates/git-crypt/.gitattributes
|
|
489
|
+
- templates/git-crypt/pre-commit.git-crypt.sh
|
|
487
490
|
- templates/latex/.gitignore
|
|
488
491
|
- templates/latex/acm/ACM-Reference-Format.bst
|
|
489
492
|
- templates/latex/acm/acmart.cls
|