k_director 0.6.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.builders/generators/01-bootstrap.rb +1 -0
- data/.github/workflows/main.yml +52 -14
- data/docs/CHANGELOG.md +53 -0
- data/k_director.gemspec +1 -0
- data/lib/k_director/directors/base_director.rb +8 -2
- data/lib/k_director/dsls/children/github.rb +133 -9
- data/lib/k_director/dsls/nuxt3_dsl.rb +288 -0
- data/lib/k_director/version.rb +1 -1
- data/lib/k_director.rb +2 -0
- data/package-lock.json +2 -2
- data/package.json +1 -1
- metadata +17 -4
- data/.builders/dsl/github_dsl.rb +0 -129
- data/.github/workflows/semver.yml +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5939eff40d316d1567818484e3d6bed5ebea38b6252e6f8413773fb3b6237483
|
4
|
+
data.tar.gz: f1ac410aab5054420f5d1ed8231167b9a7c3f5fbb7f3c6e921f1e3a585e3bcc7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d22685499a5845dfe933e4d8f9bc2c6d8c4905c18f8e66cdae2c20a5c4fa9d57138c234dde2fe5a41d3ece4a874e1f0d18fe47159e17a623dcab8a7b435c18fe
|
7
|
+
data.tar.gz: 7eb329e8211d8fe6ea1eafdc4c52ee4da1b0fdfde538744625c2327379dd04c28bb346ec5fa3cb234f9efd314e1f53f209f64d522596e65de16e048f84a352b5
|
@@ -35,6 +35,7 @@ KManager.action :bootstrap do
|
|
35
35
|
# list_repositories
|
36
36
|
# open_repository # (:k_director)
|
37
37
|
# run_command('git init')
|
38
|
+
# k_director git:(main) gh repo edit -d "KDirector provides domain specific language (DSL) implementations for code generation"
|
38
39
|
end
|
39
40
|
.blueprint(
|
40
41
|
name: :bin_hook,
|
data/.github/workflows/main.yml
CHANGED
@@ -7,7 +7,7 @@ on:
|
|
7
7
|
branches: [ main ]
|
8
8
|
|
9
9
|
jobs:
|
10
|
-
|
10
|
+
build:
|
11
11
|
runs-on: ubuntu-latest
|
12
12
|
name: Ruby ${{ matrix.ruby }}
|
13
13
|
strategy:
|
@@ -22,32 +22,70 @@ jobs:
|
|
22
22
|
ruby-version: ${{ matrix.ruby }}
|
23
23
|
bundler-cache: true
|
24
24
|
|
25
|
-
-
|
26
|
-
|
25
|
+
- id: lint
|
26
|
+
name: Run rubocop
|
27
|
+
run: bundle exec rubocop
|
27
28
|
|
28
|
-
- name: Slack
|
29
|
-
if: failure
|
29
|
+
- name: Slack notification on rubocop error
|
30
|
+
if: steps.lint.conclusion == 'failure'
|
30
31
|
uses: rtCamp/action-slack-notify@v2
|
31
32
|
env:
|
32
33
|
SLACK_CHANNEL: klueless-repos
|
33
34
|
SLACK_COLOR: '#ff0000'
|
34
35
|
SLACK_ICON: https://avatars.githubusercontent.com/u/2956762?s=64&v=4
|
35
|
-
SLACK_TITLE: '
|
36
|
-
SLACK_MESSAGE: '
|
36
|
+
SLACK_TITLE: 'Rubocop failure on $ - try:'
|
37
|
+
SLACK_MESSAGE: 'cop -a'
|
37
38
|
SLACK_USERNAME: klueless-io
|
38
|
-
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
|
39
|
+
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
|
39
40
|
|
40
|
-
-
|
41
|
-
|
41
|
+
- id: rspec
|
42
|
+
name: Run tests
|
43
|
+
run: bundle exec rspec
|
42
44
|
|
43
|
-
- name: Slack
|
44
|
-
if: failure
|
45
|
+
- name: Slack notify on rspec error
|
46
|
+
if: steps.rspec.conclusion == 'failure'
|
45
47
|
uses: rtCamp/action-slack-notify@v2
|
46
48
|
env:
|
47
49
|
SLACK_CHANNEL: klueless-repos
|
48
50
|
SLACK_COLOR: '#ff0000'
|
49
51
|
SLACK_ICON: https://avatars.githubusercontent.com/u/2956762?s=64&v=4
|
50
|
-
SLACK_TITLE: '
|
51
|
-
SLACK_MESSAGE: '
|
52
|
+
SLACK_TITLE: 'RSpec failure on ${{github.repository}} - try:'
|
53
|
+
SLACK_MESSAGE: 'rspec'
|
52
54
|
SLACK_USERNAME: klueless-io
|
53
55
|
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
|
56
|
+
|
57
|
+
release:
|
58
|
+
needs: build
|
59
|
+
name: Update version and publish to RubyGems
|
60
|
+
runs-on: ubuntu-latest
|
61
|
+
steps:
|
62
|
+
- uses: actions/checkout@v2
|
63
|
+
- uses: actions/setup-node@v2
|
64
|
+
with:
|
65
|
+
node-version: '16'
|
66
|
+
|
67
|
+
# - uses: hmarr/debug-action@v2 # TURN on ENV DEBUG
|
68
|
+
|
69
|
+
- name: Cache node modules
|
70
|
+
uses: actions/cache@v2
|
71
|
+
id: cache-node-modules
|
72
|
+
env:
|
73
|
+
cache-name: cache-node-modules
|
74
|
+
with:
|
75
|
+
path: ~/.npm
|
76
|
+
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
77
|
+
restore-keys: |
|
78
|
+
${{ runner.os }}-build-${{ env.cache-name }}-
|
79
|
+
${{ runner.os }}-build-
|
80
|
+
${{ runner.os }}-
|
81
|
+
|
82
|
+
- name: Install semantic-release dependencies
|
83
|
+
if: steps.cache.outputs.cache-hit != 'true'
|
84
|
+
run: npm ci
|
85
|
+
|
86
|
+
# SEE MORE: https://github.com/semantic-release/semantic-release/issues/753
|
87
|
+
- name: Run SemVer
|
88
|
+
run: npm run release
|
89
|
+
env:
|
90
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
91
|
+
GEM_HOST_API_KEY: ${{ secrets.GEM_HOST_API_KEY }}
|
data/docs/CHANGELOG.md
CHANGED
@@ -1,3 +1,56 @@
|
|
1
|
+
# [0.7.0](https://github.com/klueless-io/k_director/compare/v0.6.2...v0.7.0) (2022-02-03)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* apply cops ([3ed749b](https://github.com/klueless-io/k_director/commit/3ed749b504264f93dfcfbc7c57fb10e91c1aca36))
|
7
|
+
|
8
|
+
|
9
|
+
### Features
|
10
|
+
|
11
|
+
* add github dsll support and scenario tests ([ce9b0c8](https://github.com/klueless-io/k_director/commit/ce9b0c8ad6df9dc1154074e9e23c5310919bd112))
|
12
|
+
|
13
|
+
## [0.6.2](https://github.com/klueless-io/k_director/compare/v0.6.1...v0.6.2) (2022-02-01)
|
14
|
+
|
15
|
+
|
16
|
+
### Bug Fixes
|
17
|
+
|
18
|
+
* merge main and semver gha workflows ([5c3a9e4](https://github.com/klueless-io/k_director/commit/5c3a9e4a6f01129cc513760b86453a4201835765))
|
19
|
+
* merge main and semver gha workflows - final ([0c5eb76](https://github.com/klueless-io/k_director/commit/0c5eb76d8008d5ec869fdb9c9adcc306e6a51604))
|
20
|
+
* 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))
|
21
|
+
* 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))
|
22
|
+
* 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))
|
23
|
+
* 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))
|
24
|
+
* 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))
|
25
|
+
* 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))
|
26
|
+
* 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))
|
27
|
+
* 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))
|
28
|
+
* 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))
|
29
|
+
* 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))
|
30
|
+
* 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))
|
31
|
+
* 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))
|
32
|
+
* 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))
|
33
|
+
* 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))
|
34
|
+
|
35
|
+
## [0.6.1](https://github.com/klueless-io/k_director/compare/v0.6.0...v0.6.1) (2022-01-31)
|
36
|
+
|
37
|
+
|
38
|
+
### Bug Fixes
|
39
|
+
|
40
|
+
* add data to base (plus settings) to director ([bee18a1](https://github.com/klueless-io/k_director/commit/bee18a1eda36d802611c5cf354031963daa82c69))
|
41
|
+
|
42
|
+
# [0.6.0](https://github.com/klueless-io/k_director/compare/v0.5.0...v0.6.0) (2022-01-31)
|
43
|
+
|
44
|
+
|
45
|
+
### Bug Fixes
|
46
|
+
|
47
|
+
* add improve group_set on action_builder ([b11ff25](https://github.com/klueless-io/k_director/commit/b11ff25475d48c07af67f3e82bff58ab903ae4a5))
|
48
|
+
|
49
|
+
|
50
|
+
### Features
|
51
|
+
|
52
|
+
* add data director class ([510d970](https://github.com/klueless-io/k_director/commit/510d9701480a57580b0cc4f4a58398ce7752a431))
|
53
|
+
|
1
54
|
# [0.5.0](https://github.com/klueless-io/k_director/compare/v0.4.1...v0.5.0) (2022-01-31)
|
2
55
|
|
3
56
|
|
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
|
@@ -34,8 +34,14 @@ module KDirector
|
|
34
34
|
@options.on_action ||= :queue # %i[queue execute]
|
35
35
|
end
|
36
36
|
|
37
|
-
def data(**opts)
|
38
|
-
KDirector::
|
37
|
+
def data(name = nil, **opts)
|
38
|
+
KDirector::Directors::Data.new(self, name, **opts)
|
39
|
+
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
def settings(**opts)
|
44
|
+
KDirector::Directors::Data.new(self, :settings, **opts)
|
39
45
|
|
40
46
|
self
|
41
47
|
end
|
@@ -12,22 +12,146 @@ module KDirector
|
|
12
12
|
def initialize(parent, **opts)
|
13
13
|
super(parent, **opts)
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
defaults = {
|
16
|
+
repo_name: opts[:repo_name], # || parent.builder.dom&[:github]&[:repo_name]
|
17
|
+
user: opts[:user] || default_github_user, # || parent.builder.dom&[:github]&[:user]
|
18
|
+
organization: opts[:organization] # || parent.builder.dom&[:github]&[:organization]
|
19
|
+
}
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
+
parent.builder.group_set(:github, **defaults)
|
22
|
+
end
|
21
23
|
|
22
|
-
|
24
|
+
def repo_name
|
25
|
+
parent.builder.dom[:github][:repo_name]
|
23
26
|
end
|
24
27
|
|
25
|
-
def
|
26
|
-
|
28
|
+
def user
|
29
|
+
parent.builder.dom[:github][:user]
|
27
30
|
end
|
28
31
|
|
29
32
|
def organization
|
30
|
-
|
33
|
+
parent.builder.dom[: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(**opts)
|
114
|
+
repo_name = opts[:name] || self.repo_name
|
115
|
+
repo_name = repo_name.to_s
|
116
|
+
username = opts[:username] || user
|
117
|
+
organization = opts[:organization] || self.organization
|
118
|
+
account = organization || username
|
119
|
+
full_name = [account, repo_name].compact.join('/')
|
120
|
+
link = "https://github.com/#{full_name}"
|
121
|
+
ssh_link = "git@github.com:#{full_name}.git"
|
122
|
+
|
123
|
+
OpenStruct.new(
|
124
|
+
repo_name: repo_name,
|
125
|
+
full_name: full_name,
|
126
|
+
link: link,
|
127
|
+
ssh_link: ssh_link,
|
128
|
+
username: username,
|
129
|
+
organization: organization
|
130
|
+
)
|
131
|
+
end
|
132
|
+
|
133
|
+
private
|
134
|
+
|
135
|
+
def default_github_user
|
136
|
+
KExt::Github.configuration.user
|
137
|
+
end
|
138
|
+
|
139
|
+
def create_api
|
140
|
+
token = KExt::Github.configuration.personal_access_token
|
141
|
+
KExt::Github::Api.instance(token)
|
142
|
+
end
|
143
|
+
|
144
|
+
def delete_api
|
145
|
+
token = KExt::Github.configuration.personal_access_token_delete
|
146
|
+
KExt::Github::Api.instance(token)
|
147
|
+
end
|
148
|
+
|
149
|
+
def log_repo_info(info)
|
150
|
+
log.kv 'SSH', info.ssh_link
|
151
|
+
log.kv 'HTTPS', info.git_link
|
152
|
+
log.kv 'GITHUB', KUtil.console.hyperlink(info.link, info.link)
|
153
|
+
|
154
|
+
# log.json repo.to_h
|
31
155
|
end
|
32
156
|
end
|
33
157
|
end
|
@@ -0,0 +1,288 @@
|
|
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 = Dsl::Github.new(self, **opts)
|
13
|
+
github.instance_eval(&block)
|
14
|
+
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def blueprint(**opts, &block)
|
19
|
+
blueprint = Dsl::RubyGemBlueprint.new(self, **opts)
|
20
|
+
blueprint.instance_eval(&block)
|
21
|
+
|
22
|
+
self
|
23
|
+
end
|
24
|
+
|
25
|
+
# def blueprint(**opts, &block)
|
26
|
+
# blueprint = Dsl::Blueprint.new(self, **opts)
|
27
|
+
# blueprint.instance_eval(&block)
|
28
|
+
|
29
|
+
# self
|
30
|
+
# end
|
31
|
+
|
32
|
+
# def app(**opts, &block)
|
33
|
+
# app = Dsl::Nuxt3App.new(self, **opts)
|
34
|
+
# app.instance_eval(&block)
|
35
|
+
|
36
|
+
# self
|
37
|
+
# end
|
38
|
+
|
39
|
+
# def layouts(**opts, &block)
|
40
|
+
# layouts = Dsl::Nuxt3Layout.new(self, **opts)
|
41
|
+
# layouts.instance_eval(&block)
|
42
|
+
|
43
|
+
# self
|
44
|
+
# end
|
45
|
+
|
46
|
+
# def pages(**opts, &block)
|
47
|
+
# pages = Dsl::Nuxt3Page.new(self, **opts)
|
48
|
+
# pages.instance_eval(&block)
|
49
|
+
|
50
|
+
# self
|
51
|
+
# end
|
52
|
+
|
53
|
+
# def components(**opts, &block)
|
54
|
+
# components = Dsl::Nuxt3Component.new(self, **opts)
|
55
|
+
# components.instance_eval(&block)
|
56
|
+
|
57
|
+
# self
|
58
|
+
# end
|
59
|
+
|
60
|
+
# def stories(**opts, &block)
|
61
|
+
# stories = Dsl::Nuxt3Story.new(self, **opts)
|
62
|
+
# stories.instance_eval(&block)
|
63
|
+
|
64
|
+
# self
|
65
|
+
# end
|
66
|
+
|
67
|
+
# def apis(**opts, &block)
|
68
|
+
# apis = Dsl::Nuxt3Api.new(self, **opts)
|
69
|
+
# apis.instance_eval(&block)
|
70
|
+
|
71
|
+
# self
|
72
|
+
# end
|
73
|
+
end
|
74
|
+
|
75
|
+
# class Nuxt3App < KDirector::Directors::ChildDirector
|
76
|
+
|
77
|
+
# def setup_tailwind
|
78
|
+
# run_command('yarn add -D tailwindcss@latest')
|
79
|
+
# run_command('yarn add -D postcss@^8.3.11') # @latest
|
80
|
+
# run_command('yarn add -D autoprefixer@latest')
|
81
|
+
# run_command('npx tailwindcss init -p')
|
82
|
+
# end
|
83
|
+
|
84
|
+
# def setup_storybook
|
85
|
+
# run_command('yarn add -D @storybook/vue3')
|
86
|
+
# run_command('yarn add -D @storybook/addon-docs')
|
87
|
+
# run_command('yarn add -D @storybook/addon-essentials')
|
88
|
+
# run_command('yarn add -D @storybook/addon-storysource')
|
89
|
+
# run_command('yarn add -D @storybook/addon-postcss')
|
90
|
+
# run_command('yarn add -D storybook-builder-vite')
|
91
|
+
# end
|
92
|
+
# # >> "postcss": "^8.4.5", // Post CSS 8.4.5 does not work with storybook
|
93
|
+
# end
|
94
|
+
|
95
|
+
# class Nuxt3Layout < KDirector::Directors::ChildDirector
|
96
|
+
# # @param [Hash] **opts The options
|
97
|
+
# # @option opts [String] :variant Template variant name
|
98
|
+
# # @option opts [String] :template_subfolder Template subfolder
|
99
|
+
# def layout(name, **opts)
|
100
|
+
# variant = opts[:variant] || name
|
101
|
+
# template_filename = "#{dasherize.parse(variant.to_s)}.vue"
|
102
|
+
# template_file = resolve_template_file("nuxt3/layouts", template_filename, **opts)
|
103
|
+
# output_filename = "#{dasherize.parse(name.to_s)}.vue"
|
104
|
+
# output_file = File.join('layouts', output_filename)
|
105
|
+
|
106
|
+
# opts = {
|
107
|
+
# template_file: template_file
|
108
|
+
# }.merge(opts)
|
109
|
+
|
110
|
+
# add_file(output_file, **opts)
|
111
|
+
# end
|
112
|
+
|
113
|
+
# def olayout(name, **opts); layout(name, **{ open: true }.merge(opts)); end
|
114
|
+
# def tlayout(name, **opts); layout(name, **{ open_template: true }.merge(opts)); end
|
115
|
+
# def flayout(name, **opts); layout(name, **{ on_exist: :write }.merge(opts)); end
|
116
|
+
|
117
|
+
# def sample_layout(name, **opts)
|
118
|
+
# layout(name, template_subfolder: 'samples', **opts)
|
119
|
+
# end
|
120
|
+
|
121
|
+
# def osample_layout(name, **opts); sample_layout(name, **{ open: true }.merge(opts)); end
|
122
|
+
# def tsample_layout(name, **opts); sample_layout(name, **{ open_template: true }.merge(opts)); end
|
123
|
+
# def fsample_layout(name, **opts); sample_layout(name, **{ on_exist: :write }.merge(opts)); end
|
124
|
+
|
125
|
+
# end
|
126
|
+
|
127
|
+
# class Nuxt3Page < KDirector::Directors::ChildDirector
|
128
|
+
# # @param [Hash] **opts The options
|
129
|
+
# # @option opts [String] :subfolder Output subfolder
|
130
|
+
# # @option opts [String] :variant Template variant name
|
131
|
+
# # @option opts [String] :template_subfolder Template subfolder
|
132
|
+
# def page(name, **opts)
|
133
|
+
# variant = opts[:variant] || name
|
134
|
+
# template_filename = "#{dasherize.parse(variant.to_s)}.vue"
|
135
|
+
# template_file = resolve_template_file("nuxt3/pages", template_filename, **opts)
|
136
|
+
# output_filename = "#{dasherize.parse(name.to_s)}.vue"
|
137
|
+
# parts = ['pages', opts[:subfolder], output_filename].reject(&:blank?).map(&:to_s)
|
138
|
+
# output_file = File.join(*parts)
|
139
|
+
|
140
|
+
# opts = {
|
141
|
+
# template_file: template_file,
|
142
|
+
# dom: {
|
143
|
+
# page_name: opts[:page_name] || name,
|
144
|
+
# main_key: opts[:main_key] || :sample
|
145
|
+
# }
|
146
|
+
# }.merge(opts)
|
147
|
+
|
148
|
+
# add_file(output_file, **opts)
|
149
|
+
# end
|
150
|
+
# def opage(name, **opts); page(name, **{ open: true }.merge(opts)); end
|
151
|
+
# def tpage(name, **opts); page(name, **{ open_template: true }.merge(opts)); end
|
152
|
+
# def fpage(name, **opts); page(name, **{ on_exist: :write }.merge(opts)); end
|
153
|
+
|
154
|
+
# def sample_page(name, **opts)
|
155
|
+
# page(name, template_subfolder: 'samples', **opts)
|
156
|
+
# end
|
157
|
+
|
158
|
+
# def osample_page(name, **opts); sample_page(name, **{ open: true }.merge(opts)); end
|
159
|
+
# def tsample_page(name, **opts); sample_page(name, **{ open_template: true }.merge(opts)); end
|
160
|
+
# def fsample_page(name, **opts); sample_page(name, **{ on_exist: :write }.merge(opts)); end
|
161
|
+
|
162
|
+
# def tw_page(name, element, element_name, **opts)
|
163
|
+
# options = {
|
164
|
+
# subfolder: "tailwind/#{element}",
|
165
|
+
# variant: 'one-component',
|
166
|
+
# dom: {
|
167
|
+
# page_name: "#{opts[:page_name] || name}",
|
168
|
+
# vue_component: "<#{camel.parse(element.to_s)}#{camel.parse(element_name.to_s)} />"
|
169
|
+
# }
|
170
|
+
# }.merge(opts)
|
171
|
+
|
172
|
+
# page(name, **options)
|
173
|
+
# end
|
174
|
+
# end
|
175
|
+
|
176
|
+
# class Nuxt3Component < KDirector::Directors::ChildDirector
|
177
|
+
# # @param [Hash] **opts The options
|
178
|
+
# # @option opts [String] :variant Template variant name
|
179
|
+
# # @option opts [String] :template_subfolder Template subfolder
|
180
|
+
# def component(name, **opts)
|
181
|
+
# variant = opts[:variant] || name
|
182
|
+
# template_filename = "#{camel.parse(variant.to_s)}.vue"
|
183
|
+
# template_file = resolve_template_file("nuxt3/components", template_filename, **opts)
|
184
|
+
# output_filename = "#{camel.parse(name.to_s)}.vue"
|
185
|
+
# parts = ['components', opts[:subfolder], output_filename].reject(&:blank?).map(&:to_s)
|
186
|
+
# output_file = File.join(*parts)
|
187
|
+
|
188
|
+
# opts = {
|
189
|
+
# template_file: template_file,
|
190
|
+
# dom: {
|
191
|
+
# component_name: opts[:component_name] || name
|
192
|
+
# }
|
193
|
+
# }.merge(opts)
|
194
|
+
|
195
|
+
# add_file(output_file, **opts)
|
196
|
+
# end
|
197
|
+
# def ocomponent(name, **opts); component(name, **{ open: true }.merge(opts)); end
|
198
|
+
# def tcomponent(name, **opts); component(name, **{ open_template: true }.merge(opts)); end
|
199
|
+
# def fcomponent(name, **opts); component(name, **{ on_exist: :write }.merge(opts)); end
|
200
|
+
|
201
|
+
# def sample_component(name, **opts)
|
202
|
+
# component(name, template_subfolder: 'samples', **opts)
|
203
|
+
# end
|
204
|
+
|
205
|
+
# def osample_component(name, **opts); sample_component(name, **{ open: true }.merge(opts)); end
|
206
|
+
# def tsample_component(name, **opts); sample_component(name, **{ open_template: true }.merge(opts)); end
|
207
|
+
# def fsample_component(name, **opts); sample_component(name, **{ on_exist: :write }.merge(opts)); end
|
208
|
+
|
209
|
+
# def tw_component(name, element, element_name, **opts)
|
210
|
+
# tw_element_file = k_builder.target_file(element.to_s, "#{element_name}.html", folder_key: :tailwind_elements)
|
211
|
+
# tw_element = File.exist?(tw_element_file) ? File.read(tw_element_file) : "element not found: #{tw_element_file}"
|
212
|
+
|
213
|
+
# options = {
|
214
|
+
# subfolder: element,
|
215
|
+
# variant: :tw_html_component,
|
216
|
+
# dom: {
|
217
|
+
# component_name: "#{opts[:component_name] || name}",
|
218
|
+
# tailwind_element: tw_element
|
219
|
+
# }
|
220
|
+
# }.merge(opts)
|
221
|
+
|
222
|
+
# component(name, **options)
|
223
|
+
# end
|
224
|
+
# end
|
225
|
+
|
226
|
+
# class Nuxt3Story < KDirector::Directors::ChildDirector
|
227
|
+
# # @param [Hash] **opts The options
|
228
|
+
# # @option opts [String] :variant Template variant name
|
229
|
+
# # @option opts [String] :template_subfolder Template subfolder
|
230
|
+
# def component_story(name, **opts)
|
231
|
+
# variant = opts[:variant] || name
|
232
|
+
# template_filename = "#{variant.to_s}.stories.js"
|
233
|
+
# template_file = resolve_template_file("nuxt3/stories", template_filename, **opts)
|
234
|
+
# output_filename = "#{camel.parse(name.to_s)}.stories.js"
|
235
|
+
# output_file = File.join('stories', output_filename)
|
236
|
+
|
237
|
+
# opts = {
|
238
|
+
# template_file: template_file,
|
239
|
+
# }.merge(opts)
|
240
|
+
|
241
|
+
# add_file(output_file, **opts)
|
242
|
+
# end
|
243
|
+
|
244
|
+
# def ocomponent_story(name, **opts); component_story(name, **{ open: true }.merge(opts)); end
|
245
|
+
# def tcomponent_story(name, **opts); component_story(name, **{ open_template: true }.merge(opts)); end
|
246
|
+
# def fcomponent_story(name, **opts); component_story(name, **{ on_exist: :write }.merge(opts)); end
|
247
|
+
|
248
|
+
# def sample_component_story(name, **opts)
|
249
|
+
# component_story(name, template_subfolder: 'samples', **opts)
|
250
|
+
# end
|
251
|
+
|
252
|
+
# def osample_component_story(name, **opts); component_story(name, **{ open: true }.merge(opts)); end
|
253
|
+
# def tsample_component_story(name, **opts); component_story(name, **{ open_template: true }.merge(opts)); end
|
254
|
+
# def fsample_component_story(name, **opts); component_story(name, **{ on_exist: :write }.merge(opts)); end
|
255
|
+
# end
|
256
|
+
|
257
|
+
# class Nuxt3Api < KDirector::Directors::ChildDirector
|
258
|
+
# # @param [Hash] **opts The options
|
259
|
+
# # @option opts [String] :variant Template variant name
|
260
|
+
# # @option opts [String] :template_subfolder Template subfolder
|
261
|
+
# def api(name, **opts)
|
262
|
+
# variant = opts[:variant] || name
|
263
|
+
# template_filename = "#{dasherize.parse(variant.to_s)}.ts"
|
264
|
+
# template_file = resolve_template_file("nuxt3/server/api", template_filename, **opts)
|
265
|
+
# output_filename = "#{dasherize.parse(name.to_s)}.ts"
|
266
|
+
# output_file = File.join('server/api', output_filename)
|
267
|
+
|
268
|
+
# opts = {
|
269
|
+
# template_file: template_file,
|
270
|
+
# }.merge(opts)
|
271
|
+
|
272
|
+
# add_file(output_file, **opts)
|
273
|
+
# end
|
274
|
+
|
275
|
+
# def oapi(name, **opts); api(name, **{ open: true }.merge(opts)); end
|
276
|
+
# def tapi(name, **opts); api(name, **{ open_template: true }.merge(opts)); end
|
277
|
+
# def fapi(name, **opts); api(name, **{ on_exist: :write }.merge(opts)); end
|
278
|
+
|
279
|
+
# def sample_api(name, **opts)
|
280
|
+
# api(name, template_subfolder: 'samples', **opts)
|
281
|
+
# end
|
282
|
+
|
283
|
+
# def osample_api(name, **opts); sample_api(name, **{ open: true }.merge(opts)); end
|
284
|
+
# def tsample_api(name, **opts); sample_api(name, **{ open_template: true }.merge(opts)); end
|
285
|
+
# def fsample_api(name, **opts); sample_api(name, **{ on_exist: :write }.merge(opts)); end
|
286
|
+
# end
|
287
|
+
end
|
288
|
+
end
|
data/lib/k_director/version.rb
CHANGED
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.
|
3
|
+
"version": "0.7.1",
|
4
4
|
"lockfileVersion": 2,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "k_director",
|
9
|
-
"version": "0.
|
9
|
+
"version": "0.7.1",
|
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
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.
|
4
|
+
version: 0.7.1
|
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-
|
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,14 +76,12 @@ 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"
|
69
82
|
- ".githooks/commit-msg"
|
70
83
|
- ".githooks/pre-commit"
|
71
84
|
- ".github/workflows/main.yml"
|
72
|
-
- ".github/workflows/semver.yml"
|
73
85
|
- ".gitignore"
|
74
86
|
- ".releaserc.json"
|
75
87
|
- ".rspec"
|
@@ -91,6 +103,7 @@ files:
|
|
91
103
|
- lib/k_director/directors/data.rb
|
92
104
|
- lib/k_director/dsls/children/blueprint.rb
|
93
105
|
- lib/k_director/dsls/children/github.rb
|
106
|
+
- lib/k_director/dsls/nuxt3_dsl.rb
|
94
107
|
- lib/k_director/version.rb
|
95
108
|
- package-lock.json
|
96
109
|
- package.json
|
data/.builders/dsl/github_dsl.rb
DELETED
@@ -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
|
@@ -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 }}
|