pangea 0.0.30 → 0.0.34

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da486f875f5e3a95c9993480211c2410643c9fca0c98cb0ed19b4e83df92115d
4
- data.tar.gz: caffd610f6071c986c1a811de86327543df212419ad069622a32a44bc9d9a036
3
+ metadata.gz: 46052df7d5af548947dc13c3ae5e5070fbf0e21eaa967616891ebc5714b36efc
4
+ data.tar.gz: aba95de983196fb4b726b9f70c18a939b3368c5df39301e3b6f5958f6844aa65
5
5
  SHA512:
6
- metadata.gz: e3260d284207774f9f30a7040e8069fc63d4fcba3bdf3b309ec38ff041b49d1a77a58bdcbb18391c5af4191e1f1651a7e34eb07ece97e05749f27d4e1b2bf234
7
- data.tar.gz: 499c903810be469d9c203f7a3d07461e72abcafbe1ac9c24a8e0853f486cf2d6feceaf9c0a1fceb10a0cf9b155f79c6c13885bbdb1aeca24d2356c9458ed8d3f
6
+ metadata.gz: 6060dcac778672b6f28f7d62a82257353261638363322049a5a9228d2102bc979d92df0b79fea821018b76aae300c42f355b945a1764bdf2b8956d818c00a06c
7
+ data.tar.gz: 521c84514bac1460138845852016f94159fb8bccf5561228f119406c7d20ff1560a9bba1a41aeb74412b2c7c1bcb68f2dbc7a4757f3f201c04ca9e4c60052c2d
data/.gitignore CHANGED
@@ -54,3 +54,6 @@ build-iPhoneSimulator/
54
54
 
55
55
  # Used by RuboCop. Remote config files pulled in from inherit_from directive.
56
56
  # .rubocop-https?--*
57
+
58
+ # Used by nix
59
+ result
data/Gemfile CHANGED
@@ -4,9 +4,7 @@ group :development do
4
4
  %w[
5
5
  rubocop-rspec
6
6
  rubocop-rake
7
- solargraph
8
7
  keycutter
9
- rubocop
10
8
  rspec
11
9
  rake
12
10
  yard
data/Gemfile.lock CHANGED
@@ -1,50 +1,37 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- abstract-synthesizer (0.0.1)
4
+ abstract-synthesizer (0.0.2)
5
5
  ast (2.4.2)
6
6
  aws-eventstream (1.2.0)
7
- aws-partitions (1.791.0)
8
- aws-sdk-core (3.178.0)
7
+ aws-partitions (1.854.0)
8
+ aws-sdk-core (3.187.1)
9
9
  aws-eventstream (~> 1, >= 1.0.2)
10
10
  aws-partitions (~> 1, >= 1.651.0)
11
11
  aws-sigv4 (~> 1.5)
12
12
  jmespath (~> 1, >= 1.6.1)
13
- aws-sdk-dynamodb (1.92.0)
14
- aws-sdk-core (~> 3, >= 3.177.0)
13
+ aws-sdk-dynamodb (1.96.0)
14
+ aws-sdk-core (~> 3, >= 3.184.0)
15
15
  aws-sigv4 (~> 1.1)
16
- aws-sigv4 (1.6.0)
16
+ aws-sigv4 (1.6.1)
17
17
  aws-eventstream (~> 1, >= 1.0.2)
18
- backport (1.2.0)
19
- benchmark (0.2.1)
20
18
  citrus (3.0.2)
21
19
  diff-lcs (1.5.0)
22
- e2mmap (0.1.0)
23
- jaro_winkler (1.5.6)
24
20
  jmespath (1.6.2)
25
21
  json (2.6.3)
26
22
  keycutter (1.0.2)
27
- kramdown (2.4.0)
28
- rexml
29
- kramdown-parser-gfm (1.1.0)
30
- kramdown (~> 2.0)
31
23
  language_server-protocol (3.17.0.3)
32
- nokogiri (1.15.3)
33
- racc (~> 1.4)
34
24
  parallel (1.23.0)
35
- parser (3.2.2.3)
25
+ parser (3.2.2.4)
36
26
  ast (~> 2.4.1)
37
27
  racc
38
28
  pastel (0.8.0)
39
29
  tty-color (~> 0.5)
40
- racc (1.7.1)
30
+ racc (1.7.3)
41
31
  rainbow (3.1.1)
42
- rake (13.0.6)
43
- rbs (2.8.4)
44
- regexp_parser (2.8.1)
45
- reverse_markdown (2.1.1)
46
- nokogiri
47
- rexml (3.2.5)
32
+ rake (13.1.0)
33
+ regexp_parser (2.8.2)
34
+ rexml (3.2.6)
48
35
  rspec (3.12.0)
49
36
  rspec-core (~> 3.12.0)
50
37
  rspec-expectations (~> 3.12.0)
@@ -58,54 +45,36 @@ GEM
58
45
  diff-lcs (>= 1.2.0, < 2.0)
59
46
  rspec-support (~> 3.12.0)
60
47
  rspec-support (3.12.1)
61
- rubocop (1.54.2)
48
+ rubocop (1.57.2)
62
49
  json (~> 2.3)
63
50
  language_server-protocol (>= 3.17.0)
64
51
  parallel (~> 1.10)
65
- parser (>= 3.2.2.3)
52
+ parser (>= 3.2.2.4)
66
53
  rainbow (>= 2.2.2, < 4.0)
67
54
  regexp_parser (>= 1.8, < 3.0)
68
55
  rexml (>= 3.2.5, < 4.0)
69
- rubocop-ast (>= 1.28.0, < 2.0)
56
+ rubocop-ast (>= 1.28.1, < 2.0)
70
57
  ruby-progressbar (~> 1.7)
71
58
  unicode-display_width (>= 2.4.0, < 3.0)
72
- rubocop-ast (1.29.0)
59
+ rubocop-ast (1.30.0)
73
60
  parser (>= 3.2.1.0)
74
- rubocop-capybara (2.18.0)
61
+ rubocop-capybara (2.19.0)
75
62
  rubocop (~> 1.41)
76
- rubocop-factory_bot (2.23.1)
63
+ rubocop-factory_bot (2.24.0)
77
64
  rubocop (~> 1.33)
78
65
  rubocop-rake (0.6.0)
79
66
  rubocop (~> 1.0)
80
- rubocop-rspec (2.22.0)
81
- rubocop (~> 1.33)
67
+ rubocop-rspec (2.25.0)
68
+ rubocop (~> 1.40)
82
69
  rubocop-capybara (~> 2.17)
83
70
  rubocop-factory_bot (~> 2.22)
84
71
  ruby-progressbar (1.13.0)
85
- solargraph (0.49.0)
86
- backport (~> 1.2)
87
- benchmark
88
- bundler (~> 2.0)
89
- diff-lcs (~> 1.4)
90
- e2mmap
91
- jaro_winkler (~> 1.5)
92
- kramdown (~> 2.3)
93
- kramdown-parser-gfm (~> 1.1)
94
- parser (~> 3.0)
95
- rbs (~> 2.0)
96
- reverse_markdown (~> 2.0)
97
- rubocop (~> 1.38)
98
- thor (~> 1.0)
99
- tilt (~> 2.0)
100
- yard (~> 0.9, >= 0.9.24)
101
72
  strings (0.2.1)
102
73
  strings-ansi (~> 0.2)
103
74
  unicode-display_width (>= 1.5, < 3.0)
104
75
  unicode_utils (~> 1.4)
105
76
  strings-ansi (0.2.0)
106
- terraform-synthesizer (0.0.1)
107
- thor (1.2.2)
108
- tilt (2.2.0)
77
+ terraform-synthesizer (0.0.2)
109
78
  toml-rb (2.2.0)
110
79
  citrus (~> 3.0, > 3.0)
111
80
  tty-box (0.7.0)
@@ -125,12 +94,12 @@ GEM
125
94
  pastel (~> 0.8)
126
95
  strings (~> 0.2.0)
127
96
  tty-screen (~> 0.8)
128
- unicode-display_width (2.4.2)
97
+ unicode-display_width (2.5.0)
129
98
  unicode_utils (1.4.0)
130
99
  yard (0.9.34)
131
100
 
132
101
  PLATFORMS
133
- ruby
102
+ x86_64-linux
134
103
 
135
104
  DEPENDENCIES
136
105
  abstract-synthesizer
@@ -138,10 +107,8 @@ DEPENDENCIES
138
107
  keycutter
139
108
  rake
140
109
  rspec
141
- rubocop
142
110
  rubocop-rake
143
111
  rubocop-rspec
144
- solargraph
145
112
  terraform-synthesizer
146
113
  toml-rb
147
114
  tty-box
data/bin/stitches CHANGED
File without changes
data/gemset.nix CHANGED
@@ -34,10 +34,10 @@
34
34
  platforms = [];
35
35
  source = {
36
36
  remotes = ["https://rubygems.org"];
37
- sha256 = "0728316dwkkfw2m4pwy37dmrl7mxalxvjny2y942nd1zd16n72p9";
37
+ sha256 = "1z6667xiw59fwbz6hqmw8nbw07hllcl9xbqr928d9g8cpwbz1ys6";
38
38
  type = "gem";
39
39
  };
40
- version = "1.791.0";
40
+ version = "1.802.0";
41
41
  };
42
42
  aws-sdk-core = {
43
43
  dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
@@ -45,10 +45,10 @@
45
45
  platforms = [];
46
46
  source = {
47
47
  remotes = ["https://rubygems.org"];
48
- sha256 = "1jv5h7n0vkyjq0v3xqad5xhrl4ijnh214zq3xg4ghvsk6ah8a90r";
48
+ sha256 = "0lc3j74v49b2akyimfnsx3vsgi1i3068cpchn358l0dv27aib6c2";
49
49
  type = "gem";
50
50
  };
51
- version = "3.178.0";
51
+ version = "3.180.3";
52
52
  };
53
53
  aws-sdk-dynamodb = {
54
54
  dependencies = ["aws-sdk-core" "aws-sigv4"];
@@ -56,10 +56,10 @@
56
56
  platforms = [];
57
57
  source = {
58
58
  remotes = ["https://rubygems.org"];
59
- sha256 = "1bnm7bxpz14jggrgidddzirm20w1hj9jfafp20l8rrxrw017bdgi";
59
+ sha256 = "18siyaajyd59sbfvxj16rlgfdlbdshmkqcvdsmbmd7pl88wxr0c4";
60
60
  type = "gem";
61
61
  };
62
- version = "1.92.0";
62
+ version = "1.93.1";
63
63
  };
64
64
  aws-sigv4 = {
65
65
  dependencies = ["aws-eventstream"];
@@ -72,25 +72,15 @@
72
72
  };
73
73
  version = "1.6.0";
74
74
  };
75
- backport = {
75
+ base64 = {
76
76
  groups = ["default" "development"];
77
77
  platforms = [];
78
78
  source = {
79
79
  remotes = ["https://rubygems.org"];
80
- sha256 = "0xbzzjrgah0f8ifgd449kak2vyf30micpz6x2g82aipfv7ypsb4i";
80
+ sha256 = "0cydk9p2cv25qysm0sn2pb97fcpz1isa7n3c8xm1gd99li8x6x8c";
81
81
  type = "gem";
82
82
  };
83
- version = "1.2.0";
84
- };
85
- benchmark = {
86
- groups = ["default" "development"];
87
- platforms = [];
88
- source = {
89
- remotes = ["https://rubygems.org"];
90
- sha256 = "017jh2lx3z5hqjvnqclc5bfr5q0d3zk0nqjfz73909ybr4h20kmi";
91
- type = "gem";
92
- };
93
- version = "0.2.1";
83
+ version = "0.1.1";
94
84
  };
95
85
  citrus = {
96
86
  groups = ["default" "production"];
@@ -112,26 +102,6 @@
112
102
  };
113
103
  version = "1.5.0";
114
104
  };
115
- e2mmap = {
116
- groups = ["default" "development"];
117
- platforms = [];
118
- source = {
119
- remotes = ["https://rubygems.org"];
120
- sha256 = "0n8gxjb63dck3vrmsdcqqll7xs7f3wk78mw8w0gdk9wp5nx6pvj5";
121
- type = "gem";
122
- };
123
- version = "0.1.0";
124
- };
125
- jaro_winkler = {
126
- groups = ["default" "development"];
127
- platforms = [];
128
- source = {
129
- remotes = ["https://rubygems.org"];
130
- sha256 = "10fd3i92897blalxfkgc0jjv0qqx31v7cm7j2b6a3b97an0bfz80";
131
- type = "gem";
132
- };
133
- version = "1.5.6";
134
- };
135
105
  jmespath = {
136
106
  groups = ["default" "production"];
137
107
  platforms = [];
@@ -162,28 +132,6 @@
162
132
  };
163
133
  version = "1.0.2";
164
134
  };
165
- kramdown = {
166
- dependencies = ["rexml"];
167
- groups = ["default" "development"];
168
- platforms = [];
169
- source = {
170
- remotes = ["https://rubygems.org"];
171
- sha256 = "1ic14hdcqxn821dvzki99zhmcy130yhv5fqfffkcf87asv5mnbmn";
172
- type = "gem";
173
- };
174
- version = "2.4.0";
175
- };
176
- kramdown-parser-gfm = {
177
- dependencies = ["kramdown"];
178
- groups = ["default" "development"];
179
- platforms = [];
180
- source = {
181
- remotes = ["https://rubygems.org"];
182
- sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
183
- type = "gem";
184
- };
185
- version = "1.1.0";
186
- };
187
135
  language_server-protocol = {
188
136
  groups = ["default" "development"];
189
137
  platforms = [];
@@ -194,17 +142,6 @@
194
142
  };
195
143
  version = "3.17.0.3";
196
144
  };
197
- nokogiri = {
198
- dependencies = ["racc"];
199
- groups = ["default" "development"];
200
- platforms = [];
201
- source = {
202
- remotes = ["https://rubygems.org"];
203
- sha256 = "1jw8a20a9k05fpz3q24im19b97idss3179z76yn5scc5b8lk2rl7";
204
- type = "gem";
205
- };
206
- version = "1.15.3";
207
- };
208
145
  parallel = {
209
146
  groups = ["default" "development"];
210
147
  platforms = [];
@@ -267,16 +204,6 @@
267
204
  };
268
205
  version = "13.0.6";
269
206
  };
270
- rbs = {
271
- groups = ["default" "development"];
272
- platforms = [];
273
- source = {
274
- remotes = ["https://rubygems.org"];
275
- sha256 = "0dgj5n7rj83981fvrhswfwsh88x42p7r00nvd80hkxmdcjvda2h6";
276
- type = "gem";
277
- };
278
- version = "2.8.4";
279
- };
280
207
  regexp_parser = {
281
208
  groups = ["default" "development"];
282
209
  platforms = [];
@@ -287,26 +214,15 @@
287
214
  };
288
215
  version = "2.8.1";
289
216
  };
290
- reverse_markdown = {
291
- dependencies = ["nokogiri"];
292
- groups = ["default" "development"];
293
- platforms = [];
294
- source = {
295
- remotes = ["https://rubygems.org"];
296
- sha256 = "0087vhw5ik50lxvddicns01clkx800fk5v5qnrvi3b42nrk6885j";
297
- type = "gem";
298
- };
299
- version = "2.1.1";
300
- };
301
217
  rexml = {
302
218
  groups = ["default" "development"];
303
219
  platforms = [];
304
220
  source = {
305
221
  remotes = ["https://rubygems.org"];
306
- sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
222
+ sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0";
307
223
  type = "gem";
308
224
  };
309
- version = "3.2.5";
225
+ version = "3.2.6";
310
226
  };
311
227
  rspec = {
312
228
  dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
@@ -363,15 +279,15 @@
363
279
  version = "3.12.1";
364
280
  };
365
281
  rubocop = {
366
- dependencies = ["json" "language_server-protocol" "parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
367
- groups = ["development"];
282
+ dependencies = ["base64" "json" "language_server-protocol" "parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
283
+ groups = ["default" "development"];
368
284
  platforms = [];
369
285
  source = {
370
286
  remotes = ["https://rubygems.org"];
371
- sha256 = "1hc469ahgpfwbvv2q3hqlhp7dlzcii8dlm8k6k324sq26lilv27r";
287
+ sha256 = "1ig23w64f9y1gi6l4pv69m0nfhn3nnr3q4s81br9vl1b1z02n5cn";
372
288
  type = "gem";
373
289
  };
374
- version = "1.54.2";
290
+ version = "1.56.0";
375
291
  };
376
292
  rubocop-ast = {
377
293
  dependencies = ["parser"];
@@ -423,10 +339,10 @@
423
339
  platforms = [];
424
340
  source = {
425
341
  remotes = ["https://rubygems.org"];
426
- sha256 = "00rsflhijcr0q838fgbdmk7knm5kcjpimn6x0k9qmiw15hi96x1d";
342
+ sha256 = "0ylwy4afnxhbrvlaf8an9nrizj78axnzggiyfcp8v531cv8six5f";
427
343
  type = "gem";
428
344
  };
429
- version = "2.22.0";
345
+ version = "2.23.2";
430
346
  };
431
347
  ruby-progressbar = {
432
348
  groups = ["default" "development"];
@@ -438,17 +354,6 @@
438
354
  };
439
355
  version = "1.13.0";
440
356
  };
441
- solargraph = {
442
- dependencies = ["backport" "benchmark" "diff-lcs" "e2mmap" "jaro_winkler" "kramdown" "kramdown-parser-gfm" "parser" "rbs" "reverse_markdown" "rubocop" "thor" "tilt" "yard"];
443
- groups = ["development"];
444
- platforms = [];
445
- source = {
446
- remotes = ["https://rubygems.org"];
447
- sha256 = "18wpma2mgw82qzf1jwjalmz7nwdvn87b22wd5yy16jb67fqgrq78";
448
- type = "gem";
449
- };
450
- version = "0.49.0";
451
- };
452
357
  strings = {
453
358
  dependencies = ["strings-ansi" "unicode-display_width" "unicode_utils"];
454
359
  groups = ["default" "production"];
@@ -480,26 +385,6 @@
480
385
  };
481
386
  version = "0.0.1";
482
387
  };
483
- thor = {
484
- groups = ["default" "development"];
485
- platforms = [];
486
- source = {
487
- remotes = ["https://rubygems.org"];
488
- sha256 = "0k7j2wn14h1pl4smibasw0bp66kg626drxb59z7rzflch99cd4rg";
489
- type = "gem";
490
- };
491
- version = "1.2.2";
492
- };
493
- tilt = {
494
- groups = ["default" "development"];
495
- platforms = [];
496
- source = {
497
- remotes = ["https://rubygems.org"];
498
- sha256 = "0bmjgbv8158klwp2r3klxjwaj93nh1sbl4xvj9wsha0ic478avz7";
499
- type = "gem";
500
- };
501
- version = "2.2.0";
502
- };
503
388
  toml-rb = {
504
389
  dependencies = ["citrus"];
505
390
  groups = ["production"];
@@ -1,14 +1,14 @@
1
1
  require %(pangea/cli/subcommands/pangea)
2
2
  require %(pangea/synthesizer/config)
3
+ require %(terraform-synthesizer)
3
4
  require %(pangea/cli/config)
4
- require %(json)
5
5
  require %(aws-sdk-dynamodb)
6
6
  require %(aws-sdk-s3)
7
- require %(terraform-synthesizer)
7
+ require %(json)
8
8
 
9
9
  class ConfigCommand < PangeaCommand
10
10
  usage do
11
- desc %(manage configuration)
11
+ desc %(manage configuration)
12
12
  program %(pangea)
13
13
  command %(config)
14
14
  end
@@ -30,6 +30,10 @@ class ConfigCommand < PangeaCommand
30
30
  HELP
31
31
  end
32
32
 
33
+ #############################################################################
34
+ # helpers
35
+ #############################################################################
36
+
33
37
  # check if dynamodb table exists
34
38
  def table_exists?(table_name)
35
39
  dynamodb.describe_table({ table_name: table_name })
@@ -72,6 +76,12 @@ class ConfigCommand < PangeaCommand
72
76
  }
73
77
  end
74
78
 
79
+ # end helpers
80
+
81
+ #####################################################################
82
+ # catch pangea config <subcommand>
83
+ #####################################################################
84
+
75
85
  def run(argv)
76
86
  case argv[1].to_s
77
87
  when %(show)
@@ -95,21 +105,17 @@ class ConfigCommand < PangeaCommand
95
105
  module_dirs = %w[lib src test]
96
106
  modules = ctx[:modules]
97
107
 
98
- puts "modules:"
99
- puts JSON.pretty_generate(modules)
100
-
101
108
  modules.each_key do |mod_name|
102
109
  this_mod = modules[mod_name]
103
110
 
104
111
  if this_mod[:sandboxed]
105
112
  # TODO: setup sandboxed module
113
+ # sandbox should be a complete ruby executable space
106
114
  nil
107
115
  elsif this_mod[:path]
108
116
 
109
117
  lib_dir = File.join(this_mod[:path], %(lib))
110
118
  lib_files = Dir.glob(File.join(this_mod[:path], %(lib), %(**/*.rb)))
111
- puts lib_dir
112
- puts lib_files
113
119
 
114
120
  system(%(mkdir -p #{lib_dir})) unless Dir.exist?(lib_dir)
115
121
 
@@ -130,8 +136,6 @@ class ConfigCommand < PangeaCommand
130
136
 
131
137
  src_dir = File.join(this_mod[:path], %(src))
132
138
  src_files = Dir.glob(File.join(src_dir, %(**/*.rb)))
133
- puts src_dir
134
- puts src_files
135
139
 
136
140
  system(%(mkdir -p #{src_dir})) unless Dir.exist?(src_dir)
137
141
 
@@ -149,6 +153,11 @@ class ConfigCommand < PangeaCommand
149
153
 
150
154
  config[:namespace].each_key do |ns_name|
151
155
  ns = config[:namespace][ns_name]
156
+
157
+ #####################################################################
158
+ # process namespaces in configuraton
159
+ #####################################################################
160
+
152
161
  ns.each_key do |ctx_name|
153
162
  ctx = ns[ctx_name]
154
163
  next unless ctx[:state_config][:terraform][:s3]
@@ -166,7 +175,7 @@ class ConfigCommand < PangeaCommand
166
175
  )
167
176
  puts "Created table. Status: #{result.table_description.table_status}"
168
177
  rescue Aws::DynamoDB::Errors::ServiceError => e
169
- puts e.message.to_s
178
+ puts e.message
170
179
  end
171
180
  end
172
181
 
@@ -175,10 +184,11 @@ class ConfigCommand < PangeaCommand
175
184
  ###################################################################
176
185
  # s3 bucket setup
177
186
  ###################################################################
187
+
178
188
  bucket_name =
179
189
  ctx[:state_config][:terraform][:s3][:bucket]
180
190
  if bucket_exist?(bucket_name)
181
- puts "bucket already exists: #{bucket_name}"
191
+ nil
182
192
  else
183
193
  s3.create_bucket(bucket: bucket_name)
184
194
  end
@@ -198,7 +208,11 @@ class ConfigCommand < PangeaCommand
198
208
 
199
209
  # end setup directories
200
210
  end
211
+
212
+ # end process namespaces in configuraton
201
213
  end
202
214
  end
203
215
  end
216
+
217
+ # end catch pangea config <subcommand>
204
218
  end
@@ -7,6 +7,7 @@ require %(pangea/errors/project_not_found_error)
7
7
  require %(pangea/errors/no_infra_target_error)
8
8
  require %(pangea/errors/incorrect_subcommand_error)
9
9
  require %(pangea/say/init)
10
+ require %(pangea/modules)
10
11
  require %(terraform-synthesizer)
11
12
  require %(json)
12
13
 
@@ -25,10 +26,11 @@ class InfraCommand < PangeaCommand
25
26
  end
26
27
 
27
28
  argument :target do
28
- desc %(target like ${namespace}.${site}.${project})
29
+ desc %(target like ${namespace}.${site})
29
30
  end
30
31
 
31
32
  def run(argv)
33
+ Say.terminal %(planning!)
32
34
  parse(argv)
33
35
 
34
36
  # grab a config synth
@@ -40,12 +42,38 @@ class InfraCommand < PangeaCommand
40
42
  exit
41
43
  end
42
44
 
45
+ Say.terminal JSON.pretty_generate(cfg_synth)
46
+
43
47
  # preflight checks for the command execution
44
- check_run
45
- check_target(params[:target], cfg_synth)
48
+ # check_run
49
+ # check_target(params[:target], cfg_synth)
50
+
51
+ # targets = params[:target].split('.').map(&:to_sym)
52
+ # process_target(targets, cfg_synth)
53
+
54
+ ###########################################################################
55
+ # modules
56
+ # modules can be fetched from git or local path
57
+ # modules can have a virtual environment to execute in
58
+ ###########################################################################
59
+
60
+ namespaces = cfg_synth[:namespace].keys.map(&:to_sym)
61
+
62
+ namespaces.each do |namespace_name|
63
+ namespace = cfg_synth[:namespace][namespace_name]
64
+ context_names = namespace.keys.map(&:to_sym)
65
+
66
+ context_names.each do |cn|
67
+ context = namespace[cn]
68
+ modules = context[:modules]
69
+
70
+ modules.each do |mod|
71
+ PangeaModule.process(mod)
72
+ end
73
+ end
74
+ end
46
75
 
47
- targets = params[:target].split('.').map(&:to_sym)
48
- process_target(targets, cfg_synth)
76
+ ###########################################################################
49
77
 
50
78
  # provide some kind of default exit of the command execution
51
79
  exit
@@ -146,50 +174,49 @@ class InfraCommand < PangeaCommand
146
174
  # targets can be...
147
175
  # ${namespace}
148
176
  # ${namespace}.${site}
149
- # ${namespace}.${site}.${project}
150
177
  def check_target(target, config)
151
- raise NamespaceNotFoundError if target.nil?
152
-
153
- targets = target.split('.').map(&:to_sym)
154
- namespaces = config[:namespace].keys.map(&:to_sym)
155
- runtype = nil
156
- environments = []
157
-
158
- namespaces.each do |ns_name|
159
- environments.concat(config[:namespace][ns_name].keys.map(&:to_sym))
160
- end
161
-
162
- raise NamespaceNotFoundError unless namespaces.include?(targets[0])
163
-
164
- namespaces.each do |ns_name|
165
- environments.each do |e_name|
166
- sites = config[:namespace][ns_name][e_name][:sites] || []
167
-
168
- next if sites.empty?
169
-
170
- site_names = []
171
- sites.each do |site|
172
- site_names << site[:name]
173
- end
174
-
175
- raise SiteNotFoundError unless site_names.include?(targets[1].to_sym)
176
-
177
- projects = config[:namespace][ns_name][e_name][:projects] || []
178
-
179
- next if projects.empty?
180
-
181
- project_names = []
182
- projects.each do |project|
183
- project_names << project[:name]
184
- end
185
-
186
- raise ProjectNotFoundError \
187
- unless project_names
188
- .include?(
189
- targets[2].to_sym
190
- )
191
- end
192
- end
178
+ # raise NamespaceNotFoundError if target.nil?
179
+
180
+ # targets = target.split('.').map(&:to_sym)
181
+ # namespaces = config[:namespace].keys.map(&:to_sym)
182
+ # runtype = nil
183
+ # environments = []
184
+
185
+ # namespaces.each do |ns_name|
186
+ # environments.concat(config[:namespace][ns_name].keys.map(&:to_sym))
187
+ # end
188
+
189
+ # raise NamespaceNotFoundError unless namespaces.include?(targets[0])
190
+
191
+ # namespaces.each do |ns_name|
192
+ # environments.each do |e_name|
193
+ # sites = config[:namespace][ns_name][e_name][:sites] || []
194
+ #
195
+ # next if sites.empty?
196
+ #
197
+ # site_names = []
198
+ # sites.each do |site|
199
+ # site_names << site[:name]
200
+ # end
201
+ #
202
+ # raise SiteNotFoundError unless site_names.include?(targets[1].to_sym)
203
+ #
204
+ # projects = config[:namespace][ns_name][e_name][:projects] || []
205
+ #
206
+ # next if projects.empty?
207
+ #
208
+ # project_names = []
209
+ # projects.each do |project|
210
+ # project_names << project[:name]
211
+ # end
212
+ #
213
+ # raise ProjectNotFoundError \
214
+ # unless project_names
215
+ # .include?(
216
+ # targets[2].to_sym
217
+ # )
218
+ # end
219
+ # end
193
220
  end
194
221
 
195
222
  def check_run
@@ -0,0 +1,67 @@
1
+ ###############################################################################
2
+ # modules
3
+ # module for handling pangea modules
4
+ # pangea modules are execution units
5
+ # for terraform code.
6
+ ###############################################################################
7
+
8
+ module PangeaBase
9
+ BASE_DIR = File.join(
10
+ Dir.home,
11
+ %(.pangea)
12
+ )
13
+ end
14
+
15
+ module PangeaRbenv
16
+ include PangeaBase
17
+
18
+ BIN = %(rbenv).freeze
19
+
20
+ RBENV_DIR = File.join(
21
+ BASE_DIR,
22
+ %(rbenv)
23
+ )
24
+
25
+ VERSIONS_DIR = File.join(
26
+ RBENV_DIR,
27
+ %(versions)
28
+ )
29
+
30
+ class << self
31
+ def rbenv_installed?
32
+ `which rbenv`.strip != ''
33
+ end
34
+
35
+ def rbenv_install(_version)
36
+ system %(mkdir -p #{VERSIONS_DIR}) unless Dir.exist?(VERSIONS_DIR)
37
+ end
38
+ end
39
+ end
40
+
41
+ module PangeaModule
42
+ include PangeaBase
43
+
44
+ CACHE_DIR = File.join(
45
+ BASE_DIR,
46
+ %(cache)
47
+ )
48
+
49
+ RUBIES_DIR = File.join(
50
+ BASE_DIR,
51
+ %(rubies)
52
+ )
53
+
54
+ # SECTIONS = %i[
55
+ # lib
56
+ # src
57
+ # ].freeze
58
+
59
+ class << self
60
+ # entrypoint for module processing
61
+ def process(mod)
62
+ exit 1 unless mod.fetch(:sandboxed, false)
63
+ end
64
+ end
65
+ end
66
+
67
+ # end modules
@@ -0,0 +1,90 @@
1
+ ###############################################################################
2
+ # sandbox
3
+ #
4
+ # modules need an execution space which I'm naming sandboxes
5
+ # sandboxes will contain the ruby interpreter, associated packages
6
+ # and pangea DSL code for the execution of a single module
7
+ ###############################################################################
8
+
9
+ class SandboxRuby
10
+ attr_reader(*%i[base_dir name gemset version])
11
+
12
+ def initialize(base_dir:, name:, gemset:, version:)
13
+ @base_dir = base_dir
14
+ @version = version
15
+ @name = name
16
+ @gemset = gemset
17
+ end
18
+ end
19
+
20
+ class SandBox
21
+ attr_reader(*%i[base_dir name rubies])
22
+
23
+ def initialize(
24
+ name:,
25
+ base_dir: %(~/.pangea/sandbox),
26
+ rubies: []
27
+ )
28
+ @base_dir = base_dir
29
+ @name = name
30
+ @rubies = rubies
31
+
32
+ @rubies_dir = File.join(@base_dir, @name, %(rubies))
33
+
34
+ @ruby_build_cmd = %(ruby-build)
35
+ end
36
+
37
+ def prepare_sandbox
38
+ ensure_base_dir_exists
39
+ ensure_rubies_directories_exist
40
+ check_ruby_build_installed
41
+ ensure_rubies_installed
42
+ end
43
+
44
+ def clean_sandbox
45
+ system %(rm -rf #{base_dir})
46
+ end
47
+
48
+ private
49
+
50
+ def ensure_base_dir_exists
51
+ system %(mkdir -p #{base_dir}) unless Dir.exist?(base_dir)
52
+ end
53
+
54
+ def ensure_rubies_directories_exist
55
+ rubies.each do |ruby|
56
+ ruby_dir = File.join(@rubies_dir, ruby.version, ruby.gemset, ruby.name)
57
+ system %(mkdir -p #{ruby_dir}) unless Dir.exist?(ruby_dir)
58
+ end
59
+ end
60
+
61
+ def command_exists_on_path?(cmd)
62
+ system("which #{cmd} > /dev/null 2>&1")
63
+ end
64
+
65
+ def ruby_build_installed?
66
+ command_exists_on_path?(@ruby_build_cmd)
67
+ end
68
+
69
+ def ensure_rubies_installed
70
+ rubies.each do |ruby|
71
+ ruby_dir = File.join(@rubies_dir, ruby.version, ruby.gemset, ruby.name)
72
+ system %(#{@ruby_build_cmd} #{ruby.version} #{ruby_dir}) unless File.exist?(
73
+ File.join(
74
+ ruby_dir,
75
+ %(.installed_by_pangea)
76
+ )
77
+ )
78
+ system %(touch #{File.join(ruby_dir, %(.installed_by_pangea))}) unless File.exist?(
79
+ File.join(
80
+ ruby_dir,
81
+ %(.installed_by_pangea)
82
+ )
83
+ )
84
+ end
85
+ end
86
+
87
+ def check_ruby_build_installed
88
+ raise %(ruby-build not installed) unless ruby_build_installed?
89
+ end
90
+ end
@@ -1,3 +1,3 @@
1
1
  module Pangea
2
- VERSION = %(0.0.30).freeze
2
+ VERSION = %(0.0.34).freeze
3
3
  end
data/lib/pangea.rb ADDED
@@ -0,0 +1,11 @@
1
+ ###############################################################################
2
+ # non-cli top level commands
3
+ ###############################################################################
4
+
5
+ module Pangea
6
+ class << self
7
+ def ping
8
+ %(pong)
9
+ end
10
+ end
11
+ end
data/pangea.gemspec CHANGED
@@ -13,11 +13,14 @@ Gem::Specification.new do |spec|
13
13
  spec.summary = %(control rest apis declaratively with ruby)
14
14
  spec.homepage = %(https://github.com/drzln/#{spec.name})
15
15
  spec.license = %(MIT)
16
- spec.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
17
16
  spec.require_paths = [%(lib)]
18
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
18
  spec.required_ruby_version = %(>= #{`cat .ruby-version`})
20
19
 
20
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
21
+ f.match(%r{^(test|spec|features)/})
22
+ end
23
+
21
24
  %i[
22
25
  rubocop-rspec
23
26
  rubocop-rake
data/pangea.rb CHANGED
@@ -2,17 +2,19 @@ namespace :nexus, :atavan do
2
2
  long :atavan
3
3
  short :at
4
4
 
5
- state_config({
6
- terraform: {
7
- s3: {
8
- bucket: %(atavan-terraform-state),
9
- key: %(atavan/terraform.tfstate),
10
- region: %(us-west-2),
11
- dynamodb_table: %(atavan-terraform-lock),
12
- encrypt: true
5
+ state_config(
6
+ {
7
+ terraform: {
8
+ s3: {
9
+ bucket: %(atavan-terraform-state),
10
+ key: %(atavan/terraform.tfstate),
11
+ region: %(us-west-2),
12
+ dynamodb_table: %(atavan-terraform-lock),
13
+ encrypt: true
14
+ }
13
15
  }
14
16
  }
15
- })
17
+ )
16
18
 
17
19
  # environments(
18
20
  # {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pangea
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.30
4
+ version: 0.0.34
5
5
  platform: ruby
6
6
  authors:
7
7
  - drzthslnt@gmail.com
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-23 00:00:00.000000000 Z
11
+ date: 2023-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop-rspec
@@ -265,9 +265,7 @@ dependencies:
265
265
  description: control rest apis declaratively with ruby
266
266
  email:
267
267
  - drzthslnt@gmail.com
268
- executables:
269
- - pangea
270
- - stitches
268
+ executables: []
271
269
  extensions: []
272
270
  extra_rdoc_files: []
273
271
  files:
@@ -288,6 +286,7 @@ files:
288
286
  - flake.lock
289
287
  - flake.nix
290
288
  - gemset.nix
289
+ - lib/pangea.rb
291
290
  - lib/pangea/cli.rb
292
291
  - lib/pangea/cli/config.rb
293
292
  - lib/pangea/cli/constants.rb
@@ -302,6 +301,8 @@ files:
302
301
  - lib/pangea/errors/project_not_found_error.rb
303
302
  - lib/pangea/errors/site_not_found_error.rb
304
303
  - lib/pangea/log/init.rb
304
+ - lib/pangea/modules.rb
305
+ - lib/pangea/sandbox.rb
305
306
  - lib/pangea/say/init.rb
306
307
  - lib/pangea/shell/README.md
307
308
  - lib/pangea/shell/terraform.rb
@@ -314,8 +315,6 @@ files:
314
315
  - lib/pangea/version.rb
315
316
  - pangea.gemspec
316
317
  - pangea.rb
317
- - spec/cli/config_spec.rb
318
- - spec/synthesizer/config_spec.rb
319
318
  homepage: https://github.com/drzln/pangea
320
319
  licenses:
321
320
  - MIT
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require %(pangea/cli/config)
4
-
5
- describe Config do
6
- context %(#resolve_configuration) do
7
- defaults = { ignore_default_paths: true }
8
- it %(empty when paths ignored) do
9
- expect(
10
- Config.resolve_configurations(**defaults.merge(
11
- { extra_paths: [] }
12
- ))
13
- ).to be_empty
14
- end
15
- end
16
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require %(pangea/synthesizer/config)
4
-
5
- # describe ConfigSynthesizer do
6
- # context %(main) do
7
- # let(:synth) do
8
- # described_class.new
9
- # end
10
- #
11
- # it %(should compile small declaration and be hash) do
12
- # synth.synthesize do
13
- # namespace :nietztche, :thus_spoke_zarathustra do
14
- # superman(%(came from krypton))
15
- # overman(%(came from austria))
16
- # end
17
- # end
18
- # expect(synth.synthesis).to be_kind_of(Hash)
19
- # end
20
- #
21
- # it %(should raise an argument error with more than one arg per field) do
22
- # expect do
23
- # synth.synthesize do
24
- # namespace :socrates, :the_republic do
25
- # things(%(may), %(not), %(be), %(what), %(you), %(think))
26
- # end
27
- # end
28
- # end.to raise_error(TooManyFieldValuesError)
29
- # end
30
- #
31
- # it %(should have expected keys) do
32
- # synth.synthesize do
33
- # namespace :kafka, :metamorphasis do
34
- # change :inevitable
35
- # end
36
- # end
37
- # expect(
38
- # synth.synthesis[:namespace][:kafka][:metamorphasis][:change]
39
- # ).to be(:inevitable)
40
- # end
41
- # end
42
- # end