pangea 0.0.30 → 0.0.34

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 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