k_director 0.6.2 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml 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 }}