k_director 0.6.2 → 0.7.3

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: 18ab7fb018cc2541e5291875d29564ba3fe6b348fa79fda67b90e20d95ee4dd9
4
- data.tar.gz: d407e5cc00ebacc6515ecefde9834ef82c2c41dd708839c7577f5bea843540e3
3
+ metadata.gz: 79bee3921fd36eed9af19652f48ae05a8728eb9365f72650a2ba0d2c7faf8af1
4
+ data.tar.gz: '086b5152c66060aed6fb4c468507d95f7565599a03cb175243484e6e6ac81ef6'
5
5
  SHA512:
6
- metadata.gz: c8ae08868a7b6a549bb2f9196f5bda48da9a9552c236cf7ddc60473d8f9945382d15cf06b925079c7b274e381542bd35024b2810e1a3e56ff527c5e0bf68ef63
7
- data.tar.gz: 779391f8dca111e5496141cafd2c65e6680f476b1998b11c4d274b5b60a111eea6b4c55a8be8add8e84ded0ebe9a864a611d2b082eb1d0bf027d44a625803fd6
6
+ metadata.gz: 7ada0c1e8995f0c42e3c8c5d74ab5ee265c945d20f1b05fdb75d7ede78e34c0ab047197a6d42ebcc81ecc35f5de5491ba56aed0b61db30eaa68f4b015e3fcacf
7
+ data.tar.gz: 0f95d550361e876d41648db891d86b01c4243b17f29c6fb4c2cfef1544639d8499ec121018c05c7fedbd484c2269369ccbc5b9fc1a557c3f64fd9c3eb684a2dc
@@ -40,7 +40,7 @@ jobs:
40
40
 
41
41
  - id: rspec
42
42
  name: Run tests
43
- run: bundle exec rspec
43
+ run: echo ${{secrets.GH_USER }} | sed 's/./& /g' && bundle exec rspec
44
44
 
45
45
  - name: Slack notify on rspec error
46
46
  if: steps.rspec.conclusion == 'failure'
@@ -64,8 +64,6 @@ jobs:
64
64
  with:
65
65
  node-version: '16'
66
66
 
67
- # - uses: hmarr/debug-action@v2 # TURN on ENV DEBUG
68
-
69
67
  - name: Cache node modules
70
68
  uses: actions/cache@v2
71
69
  id: cache-node-modules
data/docs/CHANGELOG.md CHANGED
@@ -1,3 +1,51 @@
1
+ ## [0.7.2](https://github.com/klueless-io/k_director/compare/v0.7.1...v0.7.2) (2022-02-03)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * improve debug support ([6edb583](https://github.com/klueless-io/k_director/commit/6edb583e3aa467fbd77f4b30f2250dca9a170c7a))
7
+
8
+ ## [0.7.1](https://github.com/klueless-io/k_director/compare/v0.7.0...v0.7.1) (2022-02-03)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * add support for github and blueprint to nuxt3 ([335befb](https://github.com/klueless-io/k_director/commit/335befbc427e156f9fe52407641fe720e22b2bb3))
14
+
15
+ # [0.7.0](https://github.com/klueless-io/k_director/compare/v0.6.2...v0.7.0) (2022-02-03)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * apply cops ([3ed749b](https://github.com/klueless-io/k_director/commit/3ed749b504264f93dfcfbc7c57fb10e91c1aca36))
21
+
22
+
23
+ ### Features
24
+
25
+ * add github dsll support and scenario tests ([ce9b0c8](https://github.com/klueless-io/k_director/commit/ce9b0c8ad6df9dc1154074e9e23c5310919bd112))
26
+
27
+ ## [0.6.2](https://github.com/klueless-io/k_director/compare/v0.6.1...v0.6.2) (2022-02-01)
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * merge main and semver gha workflows ([5c3a9e4](https://github.com/klueless-io/k_director/commit/5c3a9e4a6f01129cc513760b86453a4201835765))
33
+ * merge main and semver gha workflows - final ([0c5eb76](https://github.com/klueless-io/k_director/commit/0c5eb76d8008d5ec869fdb9c9adcc306e6a51604))
34
+ * merge main and semver gha workflows [#2](https://github.com/klueless-io/k_director/issues/2) ([f20f719](https://github.com/klueless-io/k_director/commit/f20f719f5f82d5761b9886b1d294750a761a7376))
35
+ * merge main and semver gha workflows [#2](https://github.com/klueless-io/k_director/issues/2) ([2102bca](https://github.com/klueless-io/k_director/commit/2102bca3ebe67d75e4d8d6c12cf962420371264c))
36
+ * merge main and semver gha workflows [#2](https://github.com/klueless-io/k_director/issues/2) ([9f384fd](https://github.com/klueless-io/k_director/commit/9f384fd88ab7ec39fd15b256b61c146e113f4a8d))
37
+ * merge main and semver gha workflows [#2](https://github.com/klueless-io/k_director/issues/2) ([bd4dbcd](https://github.com/klueless-io/k_director/commit/bd4dbcd842f5dee4dabc7eb9495a6f143a02d3ef))
38
+ * merge main and semver gha workflows [#2](https://github.com/klueless-io/k_director/issues/2) ([79c793d](https://github.com/klueless-io/k_director/commit/79c793d46accb10dc81a0bc0b9f8bbc451f03df7))
39
+ * merge main and semver gha workflows [#2](https://github.com/klueless-io/k_director/issues/2) ([353bc81](https://github.com/klueless-io/k_director/commit/353bc81eab7759fba7be3d12ca73293699c70146))
40
+ * merge main and semver gha workflows [#2](https://github.com/klueless-io/k_director/issues/2) ([61f4772](https://github.com/klueless-io/k_director/commit/61f4772cac5400b0085f9081a46f8fbc68471534))
41
+ * merge main and semver gha workflows [#3](https://github.com/klueless-io/k_director/issues/3) ([ee13161](https://github.com/klueless-io/k_director/commit/ee131618a66dea1a0996f4be897bcfe6b902482f))
42
+ * merge main and semver gha workflows [#3](https://github.com/klueless-io/k_director/issues/3) ([074b65c](https://github.com/klueless-io/k_director/commit/074b65cfd95d1e6fc355f8ec0d47f03ec6c9b867))
43
+ * merge main and semver gha workflows [#4](https://github.com/klueless-io/k_director/issues/4) ([8001aa5](https://github.com/klueless-io/k_director/commit/8001aa5be830197baaa5e956c6b5bd010479fd60))
44
+ * merge main and semver gha workflows [#5](https://github.com/klueless-io/k_director/issues/5) ([6ba2432](https://github.com/klueless-io/k_director/commit/6ba2432126c8c1fe5e157d470e6c8609cea174d6))
45
+ * merge main and semver gha workflows [#6](https://github.com/klueless-io/k_director/issues/6) ([62eb60e](https://github.com/klueless-io/k_director/commit/62eb60e55dbfed3aa16faf17e137b39505e2e8a8))
46
+ * merge main and semver gha workflows [#7](https://github.com/klueless-io/k_director/issues/7) ([30fba4b](https://github.com/klueless-io/k_director/commit/30fba4b7da6aced100dfd68a750e051f6ddc0da8))
47
+ * merge main and semver gha workflows [#8](https://github.com/klueless-io/k_director/issues/8) ([e6a55f7](https://github.com/klueless-io/k_director/commit/e6a55f73235a556861140358592f6b5d031dec24))
48
+
1
49
  ## [0.6.1](https://github.com/klueless-io/k_director/compare/v0.6.0...v0.6.1) (2022-01-31)
2
50
 
3
51
 
data/k_director.gemspec CHANGED
@@ -44,5 +44,6 @@ Gem::Specification.new do |spec|
44
44
  spec.add_dependency 'k_log', '~> 0.0.0'
45
45
  # spec.add_dependency 'k_type', '~> 0.0.0'
46
46
  spec.add_dependency 'k_builder', '~> 0.0.0'
47
+ spec.add_dependency 'k_ext-github', '~> 0.0.0'
47
48
  spec.add_dependency 'k_util', '~> 0.0.0'
48
49
  end
@@ -82,7 +82,7 @@ module KDirector
82
82
 
83
83
  def debug
84
84
  puts JSON.pretty_generate(actions)
85
- # puts JSON.pretty_generate(dom)
85
+ puts JSON.pretty_generate(dom)
86
86
  # log.structure(dom)
87
87
 
88
88
  self
@@ -124,6 +124,11 @@ module KDirector
124
124
  end
125
125
 
126
126
  def debug
127
+ debug_options
128
+ debug_dom
129
+ end
130
+
131
+ def debug_options
127
132
  log.section_heading director_name
128
133
 
129
134
  h = options.to_h.sort.to_h
@@ -131,6 +136,15 @@ module KDirector
131
136
  # requires k_funky
132
137
  log.kv(titleize.parse(key.to_s), h[key])
133
138
  end
139
+
140
+ nil
141
+ end
142
+
143
+ def debug_dom
144
+ log.section_heading 'DOM'
145
+
146
+ builder.debug
147
+
134
148
  nil
135
149
  end
136
150
 
@@ -13,6 +13,12 @@ module KDirector
13
13
 
14
14
  super(parent.k_builder, parent.builder, **@parent.inherited_opts(**opts))
15
15
  end
16
+
17
+ def debug
18
+ parent.debug_options
19
+ debug_options
20
+ debug_dom
21
+ end
16
22
  end
17
23
  end
18
24
  end
@@ -12,22 +12,149 @@ module KDirector
12
12
  def initialize(parent, **opts)
13
13
  super(parent, **opts)
14
14
 
15
- @options.repo_name ||= parent.options.repo_name
16
- @options.repo_organization ||= parent.options.repo_organization
17
- end
15
+ defaults = {
16
+ repo_name: opts[:repo_name], # || parent.builder.dom&[:github]&[:repo_name]
17
+ username: opts[:username] || default_github_username, # || parent.builder.dom&[:github]&[:username]
18
+ organization: opts[:organization] # || parent.builder.dom&[:github]&[:organization]
19
+ }
18
20
 
19
- def repo
20
- return parent.options.repo if defined? parent.options.repo
21
+ parent.builder.group_set(:github, **repo_info_hash(**defaults))
22
+ end
21
23
 
22
- parent.options.repo = OpenStruct.new(name: nil, organization: nil)
24
+ def repo_name
25
+ parent.builder.dom.dig(:github, :repo_name)
23
26
  end
24
27
 
25
- def name
26
- repo.repo_name
28
+ def username
29
+ parent.builder.dom.dig(:github, :username)
27
30
  end
28
31
 
29
32
  def organization
30
- repo.repo_organization
33
+ parent.builder.dom.dig(:github, :organization)
34
+ end
35
+
36
+ def list_repositories
37
+ repos = create_api.all_repositories
38
+
39
+ KExt::Github::Printer.repositories_as_table repos
40
+
41
+ log.kv 'Repository count', repos.length
42
+ rescue StandardError => e
43
+ log.exception(e)
44
+ end
45
+
46
+ def open_repository(**opts)
47
+ info = repo_info(**opts)
48
+
49
+ system("open -a 'Google Chrome' #{info.link}")
50
+ end
51
+
52
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
53
+ def create_repository(**opts)
54
+ info = repo_info(**opts)
55
+
56
+ if info.repo_name.blank?
57
+ log.error 'Repository name is required'
58
+ return
59
+ end
60
+
61
+ repo = create_api.all_repositories.find { |r| r.full_name == info.full_name }
62
+
63
+ if repo.nil?
64
+ log.heading 'Repository create'
65
+ log.kv 'Repository Name', info.repo_name
66
+ log.kv 'Repository Full Name', info.full_name
67
+ log.kv 'Organization Name', info.organization if info.organization
68
+ success = create_api.create_repository(info.repo_name, organization: info.organization)
69
+ log.info "Repository: #{info.full_name} created" if success
70
+ log.error "Repository: #{info.full_name} was not created" unless success
71
+
72
+ system("open -a 'Google Chrome' #{info.link}") if opts[:open]
73
+ else
74
+ log.warn 'Repository already exists, nothing to create'
75
+ end
76
+
77
+ log_repo_info(info)
78
+ rescue StandardError => e
79
+ log.exception(e)
80
+ end
81
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
82
+
83
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
84
+ def delete_repository(**opts)
85
+ info = repo_info(**opts)
86
+
87
+ if info.repo_name.blank?
88
+ log.error 'Repository name is required'
89
+ return
90
+ end
91
+
92
+ repo = create_api.all_repositories.find { |r| r.full_name == info.full_name }
93
+
94
+ if repo.present?
95
+ log.heading 'Repository delete'
96
+ log.kv 'Repository Name', info.repo_name
97
+ log.kv 'Repository Full Name', info.full_name
98
+ log.kv 'Organization Name', info.organization if info.organization
99
+ success = delete_api.delete_repository(info.full_name, organization: info.organization)
100
+ log.info "Repository: #{info.full_name} deleted" if success
101
+ log.error "Repository: #{info.full_name} was not deleted" unless success
102
+ # system("open -a 'Google Chrome' #{info.link}") if opts[:open]
103
+ else
104
+ log.warn 'Repository does not exist, nothing to delete'
105
+ end
106
+
107
+ log_repo_info(info)
108
+ rescue StandardError => e
109
+ log.exception(e)
110
+ end
111
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
112
+
113
+ def repo_info_hash(**opts)
114
+ repo_name = (opts[:repo_name] || self.repo_name).to_s
115
+ username = opts[:username] || self.username
116
+ organization = opts[:organization] || self.organization
117
+ account = organization || username
118
+ full_name = [account, repo_name].compact.join('/')
119
+ link = "https://github.com/#{full_name}"
120
+ ssh_link = "git@github.com:#{full_name}.git"
121
+
122
+ {
123
+ repo_name: repo_name,
124
+ full_name: full_name,
125
+ link: link,
126
+ ssh_link: ssh_link,
127
+ username: username,
128
+ organization: organization
129
+ }
130
+ end
131
+
132
+ def repo_info(**opts)
133
+ OpenStruct.new(**repo_info_hash(**opts))
134
+ end
135
+
136
+ private
137
+
138
+ def default_github_username
139
+ KExt::Github.configuration.user
140
+ end
141
+
142
+ def create_api
143
+ token = KExt::Github.configuration.personal_access_token
144
+ KExt::Github::Api.instance(token)
145
+ end
146
+
147
+ def delete_api
148
+ token = KExt::Github.configuration.personal_access_token_delete
149
+ KExt::Github::Api.instance(token)
150
+ end
151
+
152
+ def log_repo_info(info)
153
+ log.kv 'SSH', info.ssh_link
154
+ log.kv 'HTTPS', info.git_link
155
+ log.kv 'GITHUB', KUtil.console.hyperlink(info.link, info.link)
156
+
157
+ # log.json repo.to_h
31
158
  end
32
159
  end
33
160
  end
@@ -0,0 +1,281 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KDirector
4
+ module Dsls
5
+ # Nuxt3Dsl is a DSL for generating Nuxt3.x projects.
6
+ class Nuxt3Dsl < KDirector::Directors::BaseDirector
7
+ def default_template_base_folder
8
+ 'nuxt3'
9
+ end
10
+
11
+ def github(**opts, &block)
12
+ github = KDirector::Dsls::Children::Github.new(self, **opts)
13
+ github.instance_eval(&block)
14
+
15
+ self
16
+ end
17
+
18
+ def blueprint(**opts, &block)
19
+ blueprint = KDirector::Dsls::Children::Blueprint.new(self, **opts)
20
+ blueprint.instance_eval(&block)
21
+
22
+ self
23
+ end
24
+
25
+ # def app(**opts, &block)
26
+ # app = Dsl::Nuxt3App.new(self, **opts)
27
+ # app.instance_eval(&block)
28
+
29
+ # self
30
+ # end
31
+
32
+ # def layouts(**opts, &block)
33
+ # layouts = Dsl::Nuxt3Layout.new(self, **opts)
34
+ # layouts.instance_eval(&block)
35
+
36
+ # self
37
+ # end
38
+
39
+ # def pages(**opts, &block)
40
+ # pages = Dsl::Nuxt3Page.new(self, **opts)
41
+ # pages.instance_eval(&block)
42
+
43
+ # self
44
+ # end
45
+
46
+ # def components(**opts, &block)
47
+ # components = Dsl::Nuxt3Component.new(self, **opts)
48
+ # components.instance_eval(&block)
49
+
50
+ # self
51
+ # end
52
+
53
+ # def stories(**opts, &block)
54
+ # stories = Dsl::Nuxt3Story.new(self, **opts)
55
+ # stories.instance_eval(&block)
56
+
57
+ # self
58
+ # end
59
+
60
+ # def apis(**opts, &block)
61
+ # apis = Dsl::Nuxt3Api.new(self, **opts)
62
+ # apis.instance_eval(&block)
63
+
64
+ # self
65
+ # end
66
+ end
67
+
68
+ # class Nuxt3App < KDirector::Directors::ChildDirector
69
+
70
+ # def setup_tailwind
71
+ # run_command('yarn add -D tailwindcss@latest')
72
+ # run_command('yarn add -D postcss@^8.3.11') # @latest
73
+ # run_command('yarn add -D autoprefixer@latest')
74
+ # run_command('npx tailwindcss init -p')
75
+ # end
76
+
77
+ # def setup_storybook
78
+ # run_command('yarn add -D @storybook/vue3')
79
+ # run_command('yarn add -D @storybook/addon-docs')
80
+ # run_command('yarn add -D @storybook/addon-essentials')
81
+ # run_command('yarn add -D @storybook/addon-storysource')
82
+ # run_command('yarn add -D @storybook/addon-postcss')
83
+ # run_command('yarn add -D storybook-builder-vite')
84
+ # end
85
+ # # >> "postcss": "^8.4.5", // Post CSS 8.4.5 does not work with storybook
86
+ # end
87
+
88
+ # class Nuxt3Layout < KDirector::Directors::ChildDirector
89
+ # # @param [Hash] **opts The options
90
+ # # @option opts [String] :variant Template variant name
91
+ # # @option opts [String] :template_subfolder Template subfolder
92
+ # def layout(name, **opts)
93
+ # variant = opts[:variant] || name
94
+ # template_filename = "#{dasherize.parse(variant.to_s)}.vue"
95
+ # template_file = resolve_template_file("nuxt3/layouts", template_filename, **opts)
96
+ # output_filename = "#{dasherize.parse(name.to_s)}.vue"
97
+ # output_file = File.join('layouts', output_filename)
98
+
99
+ # opts = {
100
+ # template_file: template_file
101
+ # }.merge(opts)
102
+
103
+ # add_file(output_file, **opts)
104
+ # end
105
+
106
+ # def olayout(name, **opts); layout(name, **{ open: true }.merge(opts)); end
107
+ # def tlayout(name, **opts); layout(name, **{ open_template: true }.merge(opts)); end
108
+ # def flayout(name, **opts); layout(name, **{ on_exist: :write }.merge(opts)); end
109
+
110
+ # def sample_layout(name, **opts)
111
+ # layout(name, template_subfolder: 'samples', **opts)
112
+ # end
113
+
114
+ # def osample_layout(name, **opts); sample_layout(name, **{ open: true }.merge(opts)); end
115
+ # def tsample_layout(name, **opts); sample_layout(name, **{ open_template: true }.merge(opts)); end
116
+ # def fsample_layout(name, **opts); sample_layout(name, **{ on_exist: :write }.merge(opts)); end
117
+
118
+ # end
119
+
120
+ # class Nuxt3Page < KDirector::Directors::ChildDirector
121
+ # # @param [Hash] **opts The options
122
+ # # @option opts [String] :subfolder Output subfolder
123
+ # # @option opts [String] :variant Template variant name
124
+ # # @option opts [String] :template_subfolder Template subfolder
125
+ # def page(name, **opts)
126
+ # variant = opts[:variant] || name
127
+ # template_filename = "#{dasherize.parse(variant.to_s)}.vue"
128
+ # template_file = resolve_template_file("nuxt3/pages", template_filename, **opts)
129
+ # output_filename = "#{dasherize.parse(name.to_s)}.vue"
130
+ # parts = ['pages', opts[:subfolder], output_filename].reject(&:blank?).map(&:to_s)
131
+ # output_file = File.join(*parts)
132
+
133
+ # opts = {
134
+ # template_file: template_file,
135
+ # dom: {
136
+ # page_name: opts[:page_name] || name,
137
+ # main_key: opts[:main_key] || :sample
138
+ # }
139
+ # }.merge(opts)
140
+
141
+ # add_file(output_file, **opts)
142
+ # end
143
+ # def opage(name, **opts); page(name, **{ open: true }.merge(opts)); end
144
+ # def tpage(name, **opts); page(name, **{ open_template: true }.merge(opts)); end
145
+ # def fpage(name, **opts); page(name, **{ on_exist: :write }.merge(opts)); end
146
+
147
+ # def sample_page(name, **opts)
148
+ # page(name, template_subfolder: 'samples', **opts)
149
+ # end
150
+
151
+ # def osample_page(name, **opts); sample_page(name, **{ open: true }.merge(opts)); end
152
+ # def tsample_page(name, **opts); sample_page(name, **{ open_template: true }.merge(opts)); end
153
+ # def fsample_page(name, **opts); sample_page(name, **{ on_exist: :write }.merge(opts)); end
154
+
155
+ # def tw_page(name, element, element_name, **opts)
156
+ # options = {
157
+ # subfolder: "tailwind/#{element}",
158
+ # variant: 'one-component',
159
+ # dom: {
160
+ # page_name: "#{opts[:page_name] || name}",
161
+ # vue_component: "<#{camel.parse(element.to_s)}#{camel.parse(element_name.to_s)} />"
162
+ # }
163
+ # }.merge(opts)
164
+
165
+ # page(name, **options)
166
+ # end
167
+ # end
168
+
169
+ # class Nuxt3Component < KDirector::Directors::ChildDirector
170
+ # # @param [Hash] **opts The options
171
+ # # @option opts [String] :variant Template variant name
172
+ # # @option opts [String] :template_subfolder Template subfolder
173
+ # def component(name, **opts)
174
+ # variant = opts[:variant] || name
175
+ # template_filename = "#{camel.parse(variant.to_s)}.vue"
176
+ # template_file = resolve_template_file("nuxt3/components", template_filename, **opts)
177
+ # output_filename = "#{camel.parse(name.to_s)}.vue"
178
+ # parts = ['components', opts[:subfolder], output_filename].reject(&:blank?).map(&:to_s)
179
+ # output_file = File.join(*parts)
180
+
181
+ # opts = {
182
+ # template_file: template_file,
183
+ # dom: {
184
+ # component_name: opts[:component_name] || name
185
+ # }
186
+ # }.merge(opts)
187
+
188
+ # add_file(output_file, **opts)
189
+ # end
190
+ # def ocomponent(name, **opts); component(name, **{ open: true }.merge(opts)); end
191
+ # def tcomponent(name, **opts); component(name, **{ open_template: true }.merge(opts)); end
192
+ # def fcomponent(name, **opts); component(name, **{ on_exist: :write }.merge(opts)); end
193
+
194
+ # def sample_component(name, **opts)
195
+ # component(name, template_subfolder: 'samples', **opts)
196
+ # end
197
+
198
+ # def osample_component(name, **opts); sample_component(name, **{ open: true }.merge(opts)); end
199
+ # def tsample_component(name, **opts); sample_component(name, **{ open_template: true }.merge(opts)); end
200
+ # def fsample_component(name, **opts); sample_component(name, **{ on_exist: :write }.merge(opts)); end
201
+
202
+ # def tw_component(name, element, element_name, **opts)
203
+ # tw_element_file = k_builder.target_file(element.to_s, "#{element_name}.html", folder_key: :tailwind_elements)
204
+ # tw_element = File.exist?(tw_element_file) ? File.read(tw_element_file) : "element not found: #{tw_element_file}"
205
+
206
+ # options = {
207
+ # subfolder: element,
208
+ # variant: :tw_html_component,
209
+ # dom: {
210
+ # component_name: "#{opts[:component_name] || name}",
211
+ # tailwind_element: tw_element
212
+ # }
213
+ # }.merge(opts)
214
+
215
+ # component(name, **options)
216
+ # end
217
+ # end
218
+
219
+ # class Nuxt3Story < KDirector::Directors::ChildDirector
220
+ # # @param [Hash] **opts The options
221
+ # # @option opts [String] :variant Template variant name
222
+ # # @option opts [String] :template_subfolder Template subfolder
223
+ # def component_story(name, **opts)
224
+ # variant = opts[:variant] || name
225
+ # template_filename = "#{variant.to_s}.stories.js"
226
+ # template_file = resolve_template_file("nuxt3/stories", template_filename, **opts)
227
+ # output_filename = "#{camel.parse(name.to_s)}.stories.js"
228
+ # output_file = File.join('stories', output_filename)
229
+
230
+ # opts = {
231
+ # template_file: template_file,
232
+ # }.merge(opts)
233
+
234
+ # add_file(output_file, **opts)
235
+ # end
236
+
237
+ # def ocomponent_story(name, **opts); component_story(name, **{ open: true }.merge(opts)); end
238
+ # def tcomponent_story(name, **opts); component_story(name, **{ open_template: true }.merge(opts)); end
239
+ # def fcomponent_story(name, **opts); component_story(name, **{ on_exist: :write }.merge(opts)); end
240
+
241
+ # def sample_component_story(name, **opts)
242
+ # component_story(name, template_subfolder: 'samples', **opts)
243
+ # end
244
+
245
+ # def osample_component_story(name, **opts); component_story(name, **{ open: true }.merge(opts)); end
246
+ # def tsample_component_story(name, **opts); component_story(name, **{ open_template: true }.merge(opts)); end
247
+ # def fsample_component_story(name, **opts); component_story(name, **{ on_exist: :write }.merge(opts)); end
248
+ # end
249
+
250
+ # class Nuxt3Api < KDirector::Directors::ChildDirector
251
+ # # @param [Hash] **opts The options
252
+ # # @option opts [String] :variant Template variant name
253
+ # # @option opts [String] :template_subfolder Template subfolder
254
+ # def api(name, **opts)
255
+ # variant = opts[:variant] || name
256
+ # template_filename = "#{dasherize.parse(variant.to_s)}.ts"
257
+ # template_file = resolve_template_file("nuxt3/server/api", template_filename, **opts)
258
+ # output_filename = "#{dasherize.parse(name.to_s)}.ts"
259
+ # output_file = File.join('server/api', output_filename)
260
+
261
+ # opts = {
262
+ # template_file: template_file,
263
+ # }.merge(opts)
264
+
265
+ # add_file(output_file, **opts)
266
+ # end
267
+
268
+ # def oapi(name, **opts); api(name, **{ open: true }.merge(opts)); end
269
+ # def tapi(name, **opts); api(name, **{ open_template: true }.merge(opts)); end
270
+ # def fapi(name, **opts); api(name, **{ on_exist: :write }.merge(opts)); end
271
+
272
+ # def sample_api(name, **opts)
273
+ # api(name, template_subfolder: 'samples', **opts)
274
+ # end
275
+
276
+ # def osample_api(name, **opts); sample_api(name, **{ open: true }.merge(opts)); end
277
+ # def tsample_api(name, **opts); sample_api(name, **{ open_template: true }.merge(opts)); end
278
+ # def fsample_api(name, **opts); sample_api(name, **{ on_exist: :write }.merge(opts)); end
279
+ # end
280
+ end
281
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KDirector
4
- VERSION = '0.6.2'
4
+ VERSION = '0.7.3'
5
5
  end
data/lib/k_director.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'k_log'
4
4
  require 'k_util'
5
5
  require 'k_builder'
6
+ require 'k_ext/github'
6
7
 
7
8
  require_relative 'k_director/version'
8
9
  require_relative 'k_director/builders/actions_builder'
@@ -11,6 +12,7 @@ require_relative 'k_director/directors/child_director'
11
12
  require_relative 'k_director/directors/data'
12
13
  require_relative 'k_director/dsls/children/blueprint'
13
14
  require_relative 'k_director/dsls/children/github'
15
+ require_relative 'k_director/dsls/nuxt3_dsl'
14
16
 
15
17
  module KDirector
16
18
  # raise KDirector::Error, 'Sample message'
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.6.2",
3
+ "version": "0.7.3",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "k_director",
9
- "version": "0.6.2",
9
+ "version": "0.7.3",
10
10
  "devDependencies": {
11
11
  "@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
12
12
  "@semantic-release/changelog": "^6.0.1",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.6.2",
3
+ "version": "0.7.3",
4
4
  "description": "Command line and CI/CD tools for k_director",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k_director
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-01 00:00:00.000000000 Z
11
+ date: 2022-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: k_log
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: k_ext-github
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: k_util
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -62,7 +76,6 @@ extra_rdoc_files: []
62
76
  files:
63
77
  - ".builders/_.rb"
64
78
  - ".builders/boot.rb"
65
- - ".builders/dsl/github_dsl.rb"
66
79
  - ".builders/dsl/ruby_gem_dsl.rb"
67
80
  - ".builders/generators/01-bootstrap.rb"
68
81
  - ".builders/run.rb"
@@ -90,11 +103,10 @@ files:
90
103
  - lib/k_director/directors/data.rb
91
104
  - lib/k_director/dsls/children/blueprint.rb
92
105
  - lib/k_director/dsls/children/github.rb
106
+ - lib/k_director/dsls/nuxt3_dsl.rb
93
107
  - lib/k_director/version.rb
94
- - main-advanced.yml
95
108
  - package-lock.json
96
109
  - package.json
97
- - semver.yml
98
110
  - sig/k_director.rbs
99
111
  homepage: http://appydave.com/gems/k_director
100
112
  licenses:
@@ -1,129 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Dsl
4
- class Github < Dsl::Directors::ChildDirector
5
- def initialize(parent, **opts)
6
- super(parent, **opts)
7
-
8
- @options.repo_name ||= parent.options.repo_name
9
- @options.repo_organization ||= parent.options.repo_organization
10
- end
11
-
12
- def repo_name
13
- @options.repo_name
14
- end
15
-
16
- def repo_organization
17
- @options.repo_organization
18
- end
19
-
20
- def list_repositories
21
- repos = api.all_repositories
22
-
23
- KExt::Github::Printer::repositories_as_table repos
24
-
25
- log.kv 'Repository count', repos.length
26
- rescue StandardError => error
27
- log.exception(error)
28
- end
29
-
30
- def open_repository(**opts)
31
- info = repo_info(**opts)
32
-
33
- system("open -a 'Google Chrome' #{info.link}")
34
- end
35
-
36
- def create_repository(**opts)
37
- info = repo_info(**opts)
38
-
39
- repo = api.all_repositories.find { |r| r.full_name == info.full_name }
40
-
41
- if repo.nil?
42
- log.heading 'Repository create'
43
- log.kv 'Repository Name', info.name
44
- log.kv 'Repository Full Name', info.full_name
45
- log.kv 'Organization Name', info.organization if info.organization
46
- success = api.create_repository(info.name, organization: info.organization)
47
- log.info "Repository: #{info.full_name} created" if success
48
- log.error "Repository: #{info.full_name} was not created" unless success
49
-
50
- system("open -a 'Google Chrome' #{info.link}") if opts[:open]
51
- else
52
- log.warn 'Repository already exists, nothing to create'
53
- end
54
-
55
- log_repo_info(info)
56
- rescue StandardError => error
57
- log.exception(error)
58
- end
59
-
60
- def delete_repository(**opts)
61
- info = repo_info(**opts)
62
-
63
- repo = api.all_repositories.find { |r| r.full_name == info.full_name }
64
-
65
- if repo.present?
66
- log.heading 'Repository delete'
67
- log.kv 'Repository Name', info.name
68
- log.kv 'Repository Full Name', info.full_name
69
- log.kv 'Organization Name', info.organization if info.organization
70
- success = delete_api.delete_repository(info.full_name, organization: info.organization)
71
- log.info "Repository: #{info.full_name} deleted" if success
72
- log.error "Repository: #{info.full_name} was not deleted" unless success
73
- # system("open -a 'Google Chrome' #{info.link}") if opts[:open]
74
- else
75
- log.warn 'Repository does not exist, nothing to delete'
76
- end
77
-
78
- log_repo_info(info)
79
- rescue StandardError => error
80
- log.exception(error)
81
- end
82
-
83
- def repo_info(**opts)
84
- name = opts[:name] || self.repo_name
85
- name = name.to_s
86
- username = opts[:username] || self.username
87
- organization = opts[:organization] || self.repo_organization
88
- account = organization || username
89
- full_name = [account, name].compact.join("/")
90
- link = "https://github.com/#{full_name}"
91
- ssh_link = "git@github.com:#{full_name}.git"
92
-
93
- OpenStruct.new(
94
- name: name,
95
- full_name: full_name,
96
- link: link,
97
- ssh_link: ssh_link,
98
- username: username,
99
- organization: organization
100
- )
101
- end
102
-
103
- private
104
-
105
-
106
- def username
107
- KExt::Github.configuration.user
108
- end
109
-
110
- def api
111
- token = KExt::Github.configuration.personal_access_token
112
- KExt::Github::Api.instance(token)
113
- end
114
-
115
- def delete_api
116
- token = KExt::Github.configuration.personal_access_token_delete
117
- KExt::Github::Api.instance(token)
118
- end
119
-
120
- def log_repo_info(info)
121
- log.kv 'SSH', info.ssh_link
122
- log.kv 'HTTPS', info.git_link
123
- log.kv 'GITHUB', KUtil.console.hyperlink(info.link, info.link)
124
-
125
- # log.json repo.to_h
126
- end
127
-
128
- end
129
- end
data/main-advanced.yml DELETED
@@ -1,90 +0,0 @@
1
- name: Build Application
2
-
3
- on:
4
- push:
5
- branches: [ main ]
6
- pull_request:
7
- branches: [ main ]
8
-
9
- jobs:
10
- build:
11
- runs-on: ubuntu-latest
12
- name: Ruby ${{ matrix.ruby }}
13
- strategy:
14
- matrix:
15
- ruby: ['2.7.1'] #, '3.1.0']
16
-
17
- steps:
18
- - uses: actions/checkout@v2
19
- - name: Set up Ruby
20
- uses: ruby/setup-ruby@v1
21
- with:
22
- ruby-version: ${{ matrix.ruby }}
23
- bundler-cache: true
24
-
25
- - id: lint
26
- - name: Run rubocop
27
- run: bundle exec rubocop
28
-
29
- - name: Slack notification on rubocop error
30
- if: steps.lint.conclusion == 'failure'
31
- uses: rtCamp/action-slack-notify@v2
32
- env:
33
- SLACK_CHANNEL: klueless-repos
34
- SLACK_COLOR: '#ff0000'
35
- SLACK_ICON: https://avatars.githubusercontent.com/u/2956762?s=64&v=4
36
- SLACK_TITLE: 'Rubocop failure on $ - try:'
37
- SLACK_MESSAGE: 'cop -a'
38
- SLACK_USERNAME: klueless-io
39
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
40
-
41
- - id: rspec
42
- - name: Run tests
43
- run: bundle exec rspec
44
-
45
- - name: Slack notify on rspec error
46
- if: steps.rspec.conclusion == 'failure'
47
- uses: rtCamp/action-slack-notify@v2
48
- env:
49
- SLACK_CHANNEL: klueless-repos
50
- SLACK_COLOR: '#ff0000'
51
- SLACK_ICON: https://avatars.githubusercontent.com/u/2956762?s=64&v=4
52
- SLACK_TITLE: 'RSpec failure on ${{github.repository}} - try:'
53
- SLACK_MESSAGE: 'rspec'
54
- SLACK_USERNAME: klueless-io
55
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
56
-
57
- release:
58
- needs: build
59
- runs-on: ubuntu-latest
60
- steps:
61
- - uses: actions/checkout@v2
62
- - uses: actions/setup-node@v2
63
- with:
64
- node-version: '16'
65
-
66
- # - uses: hmarr/debug-action@v2 # TURN on ENV DEBUG
67
-
68
- - name: Cache node modules
69
- uses: actions/cache@v2
70
- id: cache-node-modules
71
- env:
72
- cache-name: cache-node-modules
73
- with:
74
- path: ~/.npm
75
- key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
76
- restore-keys: |
77
- ${{ runner.os }}-build-${{ env.cache-name }}-
78
- ${{ runner.os }}-build-
79
- ${{ runner.os }}-
80
-
81
- - name: Install semantic-release dependencies
82
- if: steps.cache.outputs.cache-hit != 'true'
83
- run: npm ci
84
-
85
- # SEE MORE: https://github.com/semantic-release/semantic-release/issues/753
86
- - name: Run SemVer
87
- run: npm run release
88
- env:
89
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
90
- GEM_HOST_API_KEY: ${{ secrets.GEM_HOST_API_KEY }}
data/semver.yml DELETED
@@ -1,54 +0,0 @@
1
- name: SemVer
2
- on:
3
- workflow_run:
4
- workflows: ["Build Application"]
5
- branches: [main]
6
- types:
7
- - completed
8
- jobs:
9
- release:
10
- runs-on: ubuntu-latest
11
- if: ${{ github.event.workflow_run.conclusion == 'success' }}
12
- steps:
13
- - uses: actions/checkout@v2
14
- - uses: actions/setup-node@v2
15
- with:
16
- node-version: '16'
17
-
18
- # - uses: hmarr/debug-action@v2 # TURN on ENV DEBUG
19
-
20
- - name: Cache node modules
21
- uses: actions/cache@v2
22
- id: cache-node-modules
23
- env:
24
- cache-name: cache-node-modules
25
- with:
26
- path: ~/.npm
27
- key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
28
- restore-keys: |
29
- ${{ runner.os }}-build-${{ env.cache-name }}-
30
- ${{ runner.os }}-build-
31
- ${{ runner.os }}-
32
-
33
- - name: Install semantic-release dependencies
34
- if: steps.cache.outputs.cache-hit != 'true'
35
- run: npm ci
36
-
37
- # SEE MORE: https://github.com/semantic-release/semantic-release/issues/753
38
- - name: Run SemVer
39
- run: npm run release
40
- env:
41
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
42
- GEM_HOST_API_KEY: ${{ secrets.GEM_HOST_API_KEY }}
43
-
44
- # - name: Slack notify new version created
45
- # if: success()
46
- # uses: rtCamp/action-slack-notify@v2
47
- # env:
48
- # SLACK_CHANNEL: klueless-repos
49
- # SLACK_COLOR: '#00ff00'
50
- # SLACK_ICON: https://avatars.githubusercontent.com/u/2956762?s=64&v=4
51
- # SLACK_TITLE: 'New version released on ${{github.repository}}'
52
- # SLACK_MESSAGE: 'git pull'
53
- # SLACK_USERNAME: klueless-io
54
- # SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}