kurgan 0.3.0 → 0.4.0

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: 2ed9790e405062d96996a8ee171a7d3ac0cfdaf675b458f3cb38015e936c01b3
4
- data.tar.gz: '09e6b0290f9ad301146292353f5235dafd1023f2198ea5d160a1ddba3ca74b11'
3
+ metadata.gz: 488e05edbe120ded7cbfb9dbaa7b751fc4cc168192d4ac63e31d107481073587
4
+ data.tar.gz: c57b6526b9b8e69b73c7089619337d6e2cc4575d9f72a8a65a36850b02b32881
5
5
  SHA512:
6
- metadata.gz: 9b7bdf67f194e510c687775b3c1a89b5b24aee7aca3fc93b2ecd61ae05efe19861b60935d6c8e99666f6b18ad4f922556bee3f7a27c9020f2df7c05801c044d2
7
- data.tar.gz: 9aaceb7c925e2e7cfbfb389b157348d4b4d6aff625962415430547d709e3699d0b6b7a5f1d421d6c7ae4e5c62f4ef74e824d4c0440393fa0bd8bf0e752bd1d48
6
+ metadata.gz: df9a706171fd7bd1d722cb43f9e8bac729514fb2fec973d47a03d342e453e39817f31aa9271029dca782948f4f6129e9f4c9a38b4c3e31ab149a31d44cccf1b3
7
+ data.tar.gz: 05d00def80a4cd83c51feab7b94602b27e29cb2c4de1526577d5016391ae2afd2fe465d63c02f56d034a124072caaec3a8dc9da89f18b0a5cac3c07f4492ee94
data/Gemfile.lock CHANGED
@@ -1,14 +1,34 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kurgan (0.2.2)
4
+ kurgan (0.3.0)
5
+ faraday (~> 1, < 2)
6
+ terminal-table (~> 1, < 2)
5
7
  thor (~> 0.19)
6
8
 
7
9
  GEM
8
10
  remote: https://rubygems.org/
9
11
  specs:
12
+ faraday (1.4.3)
13
+ faraday-em_http (~> 1.0)
14
+ faraday-em_synchrony (~> 1.0)
15
+ faraday-excon (~> 1.1)
16
+ faraday-net_http (~> 1.0)
17
+ faraday-net_http_persistent (~> 1.1)
18
+ multipart-post (>= 1.2, < 3)
19
+ ruby2_keywords (>= 0.0.4)
20
+ faraday-em_http (1.0.0)
21
+ faraday-em_synchrony (1.0.0)
22
+ faraday-excon (1.1.0)
23
+ faraday-net_http (1.0.1)
24
+ faraday-net_http_persistent (1.2.0)
25
+ multipart-post (2.1.1)
10
26
  rake (13.0.1)
27
+ ruby2_keywords (0.0.5)
28
+ terminal-table (1.8.0)
29
+ unicode-display_width (~> 1.1, >= 1.1.1)
11
30
  thor (0.20.3)
31
+ unicode-display_width (1.7.0)
12
32
 
13
33
  PLATFORMS
14
34
  ruby
@@ -19,4 +39,4 @@ DEPENDENCIES
19
39
  rake (~> 13.0)
20
40
 
21
41
  BUNDLED WITH
22
- 2.0.1
42
+ 2.1.4
data/README.md CHANGED
@@ -1,20 +1,244 @@
1
1
  # Kurgan
2
2
  ---
3
+ ![build workflow](https://github.com/theonestack/kurgan/actions/workflows/build-gem.yml/badge.svg)
4
+ ![release workflow](https://github.com/theonestack/kurgan/actions/workflows/release-gem.yml/badge.svg)
3
5
 
4
- [![Build Status](https://travis-ci.com/theonestack/kurgan.svg?branch=master)](https://travis-ci.com/theonestack/kurgan) [![Join the chat at https://gitter.im/theonestack/cfhighlander](https://badges.gitter.im/theonestack/cfhighlander.svg)](https://gitter.im/theonestack/cfhighlander?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
6
+ Command line tool to create and manage CfHighlander projects and components
5
7
 
6
- Tool to manage CfHighlander stacks
8
+ ## Setup
9
+
10
+ ```sh
11
+ gem install kurgan
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ ### Help
17
+
18
+ view all available commands
7
19
 
8
20
  ```bash
21
+ ➜ kurgan help
9
22
  Commands:
10
- kurgan --version, -v # print the version
11
- kurgan add [component] # Adds a new component to an existing CfHighlander project
12
- kurgan component [name] # Generates a new CfHighlander component
13
- kurgan help [COMMAND] # Describe available commands or one specific command
14
- kurgan list # List available components and latest version from theonestack github
15
- kurgan project [name] # Generates a new CfHighlander project
23
+ kurgan --version, -v # print the version
24
+ kurgan add [component] # Adds a new component to an existing CfHighlander project
25
+ kurgan component [name] # Generates a new CfHighlander component
26
+ kurgan extend [component] # Generates a files to extend a component in a CfHighlander project
27
+ kurgan help [COMMAND] # Describe available commands or one specific command
28
+ kurgan inspect # inspect a cfhighlander files of it's components
29
+ kurgan list # list all components in the onestack
30
+ kurgan project [name] # Generates a new CfHighlander project
31
+ kurgan search [component] # search for a component and it's release history
32
+ kurgan test [name] # Create a new test case for a component
33
+ ```
34
+
35
+ help can also be used on commands to see available options and usage
36
+
37
+ ```bash
38
+ ➜ kurgan help project
39
+ Usage:
40
+ kurgan project [name]
41
+
42
+ Options:
43
+ -p, [--project=PROJECT] # Create a pre-canned project
44
+ # Default: empty
45
+ # Possible values: empty, vpc, ecs
46
+
47
+ Generates a new CfHighlander project
48
+ ```
49
+
50
+ ### Create a New Project
51
+
52
+ A CfHighlander project allows you to configure and compile a group of components to generate you Cloudformation stack.
53
+
54
+ To create a new project run the `project` command with the name of your new project and fill in the prompts
55
+
56
+ ```sh
57
+ ➜ kurgan project myproject
58
+ directory name (myproject)
59
+ create myproject
60
+ template description (myproject)
61
+ create myproject/myproject.cfhighlander.rb
62
+ create myproject/myproject.config.yaml
63
+ git init project? y
64
+ run git init myproject from "."
65
+ Initialized empty Git repository in /Users/gus/src/testbed/hl/myproject/.git/
66
+ create myproject/.gitignore
67
+ create myproject/README.md
68
+ Setup a CI pipeline? y
69
+ CI flavour [github, jenkins, travis, codebuild] jenkins
70
+ create myproject/Jenkinsfile
71
+ ```
72
+
73
+ cd into the new directory and you'll see the following project structure
74
+
75
+ ```txt
76
+ .
77
+ ├── Jenkinsfile # depending on CI flavour this will be different
78
+ ├── README.md
79
+ ├── myproject.cfhighlander.rb
80
+ └── myproject.config.yaml
81
+ ```
82
+
83
+
84
+ ### Add a Component to a Project
85
+
86
+ To add a component to your nproject use the `add` command along with the component name with optional component version and friendly name
87
+
88
+ ```sh
89
+ ➜ myproject git:(master) ✗ kurgan add vpc-v2 --name network --version 0.7.0
90
+ adding vpc-v2@0.7.0 to the myproject project
91
+ insert myproject.cfhighlander.rb
92
+ create network.config.yaml
93
+ ```
94
+
95
+ this will create a yaml config file for the new component configuration and add the component to the `myproject.cfhighlander.rb` file
96
+
97
+ ```rb
98
+ CfhighlanderTemplate do
99
+ Name 'myproject'
100
+ Description "myproject"
101
+ Component name: 'network', template: 'vpc-v2@0.7.0'
102
+ end
103
+ ```
104
+
105
+
106
+ ### Extend a Component in a Project
107
+
108
+ Extending a component allows you to add resources to an existing component whilest still allowing you to update the component.
109
+
110
+ to extend a component use the `extend` command along with the component name with optional component version and friendly name
111
+
112
+ ```sh
113
+ ➜ myproject git:(master) ✗ kurgan extend aurora-mysql --name database --version 3.3.0
114
+ create database
115
+ extending aurora-mysql@3.3.0 to the myproject project
116
+ create database/database.cfhighlander.rb
117
+ create database/database.config.yaml
118
+ create database/database.cfndsl.rb
119
+ insert myproject.cfhighlander.rb
120
+ ```
121
+
122
+ this will create a new sub directory with a cfhighlander file containing the component you're extending, a cfndsl file to add your resources and a config.yaml for configuration
123
+
124
+ ```txt
125
+ .
126
+ ├── Jenkinsfile
127
+ ├── README.md
128
+ ├── database
129
+ │   ├── database.cfhighlander.rb
130
+ │   ├── database.cfndsl.rb
131
+ │   └── database.config.yaml
132
+ ├── myproject.cfhighlander.rb
133
+ ├── myproject.config.yaml
134
+ └── network.config.yaml
16
135
  ```
17
136
 
137
+ ```rb
138
+ CfhighlanderTemplate do
139
+ Name 'database'
140
+ Extends 'aurora-mysql@3.3.0'
141
+ end
142
+ ```
143
+
144
+
145
+ ### Inspect a Project
146
+
147
+ To see a list of components used by a project including versions and latest available version use the `inspect` command.
148
+
149
+ ```sh
150
+ ➜ myproject git:(master) ✗ kurgan inspect
151
+ +-----------+-----------+----------------+
152
+ | Project: myproject |
153
+ +-----------+-----------+----------------+
154
+ | Component | Version | Latest Release |
155
+ +-----------+-----------+----------------+
156
+ | vpc-v2 | 0.7.0 | 0.7.0 |
157
+ +-----------+-----------+----------------+
158
+ ```
159
+
160
+
161
+ ### Create a New Component
162
+
163
+ Components are the basic building blocks of CfHighlander, containing cloudformation resources that can be templated and reused across multiple project.
164
+
165
+ To create a new project use the `component` command with the name of your new component and fill in the prompts
166
+
167
+ ```txt
168
+ ➜ kurgan component rds-mysql
169
+ directory name (hl-component-rds-mysql)
170
+ create hl-component-rds-mysql
171
+ template description (rds-mysql - #{component_version})
172
+ create hl-component-rds-mysql/rds-mysql.cfhighlander.rb
173
+ create hl-component-rds-mysql/rds-mysql.config.yaml
174
+ git init project? y
175
+ run git init hl-component-rds-mysql from "."
176
+ Initialized empty Git repository in /Users/gus/src/testbed/hl/hl-component-rds-mysql/.git/
177
+ create hl-component-rds-mysql/.gitignore
178
+ create hl-component-rds-mysql/README.md
179
+ Setup a CI pipeline? y
180
+ CI flavour [github, jenkins, travis, codebuild] github
181
+ create hl-component-rds-mysql/.github/workflows/spec.yaml
182
+ create hl-component-rds-mysql/rds-mysql.cfndsl.rb
183
+ create hl-component-rds-mysql/tests/default.test.yaml
184
+ Use MIT license? y
185
+ create hl-component-rds-mysql/LICENSE
186
+ ```
187
+
188
+ the following folder structure is generated
189
+
190
+ ```txt
191
+ .
192
+ ├── LICENSE
193
+ ├── README.md
194
+ ├── rds-mysql.cfhighlander.rb
195
+ ├── rds-mysql.cfndsl.rb
196
+ ├── rds-mysql.config.yaml
197
+ └── tests
198
+ └── default.test.yaml
199
+ ```
200
+
201
+
202
+ ### Add tests to a Component
203
+
204
+ Kurgan can be used to add configuration tests to a component as well as generating spec tests based upon the cloudformation generated by a configuration test.
205
+
206
+ to create a new config test run the test command along with the name of the test
207
+
208
+ ```sh
209
+ ➜ hl-component-rds-mysql git:(master) ✗ kurgan test mytest
210
+ create tests/mytest.test.yaml
211
+ created config test case tests/mytest.test.yaml
212
+ ```
213
+
214
+ A test.yaml file is created in the tests directory, add in you test and run the `cfhighlander test` command to execute the test
215
+
216
+ Once the cftest has successfully passed you can then generate a spec test from the cloudformation template generated by the test in the `out/tests/<test-name>/` directory
217
+
218
+ To generate the spec test use the `test` command again with the name of the test and pass the `--type spec` flag
219
+
220
+ ```sh
221
+ ➜ hl-component-rds-mysql git:(master) ✗ kurgan test mytest --type spec
222
+ create spec/mytest_spec.rb
223
+ created spec test spec/mytest_spec.rb
224
+ ```
225
+
226
+
227
+ ### Searching for Components
228
+
229
+ to list all available components on the onestack use the `list` command
230
+
231
+ ```sh
232
+ ➜ kurgan list
233
+ ```
234
+
235
+ to search for a components releases use the `search [component]` command
236
+
237
+ ```sh
238
+ ➜ kurgan search vpc
239
+ ```
240
+
241
+
18
242
  ## License
19
243
 
20
244
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/kurgan.gemspec CHANGED
@@ -31,6 +31,8 @@ Gem::Specification.new do |spec|
31
31
  spec.require_paths = ["lib"]
32
32
 
33
33
  spec.add_dependency "thor", "~> 0.19"
34
+ spec.add_dependency "terminal-table", '~> 1', '<2'
35
+ spec.add_dependency "faraday", '~> 1', '<2'
34
36
 
35
37
  spec.add_development_dependency "bundler", "~> 2.0"
36
38
  spec.add_development_dependency "rake", "~> 13.0"
data/lib/kurgan.rb CHANGED
@@ -7,6 +7,9 @@ require "kurgan/component"
7
7
  require "kurgan/add"
8
8
  require "kurgan/test"
9
9
  require "kurgan/list"
10
+ require "kurgan/extend"
11
+ require "kurgan/search"
12
+ require "kurgan/inspect"
10
13
 
11
14
  module Kurgan
12
15
  class Cli < Thor
@@ -26,18 +29,20 @@ module Kurgan
26
29
  register Kurgan::Add, 'add', 'add [component]', 'Adds a new component to an existing CfHighlander project'
27
30
  tasks["add"].options = Kurgan::Add.class_options
28
31
 
32
+ register Kurgan::Extend, 'extend', 'extend [component]', 'Generates a files to extend a component in a CfHighlander project'
33
+ tasks["extend"].options = Kurgan::Extend.class_options
34
+
29
35
  register Kurgan::Test, 'test', 'test [name]', 'Create a new test case for a component'
30
36
  tasks["test"].options = Kurgan::Test.class_options
31
37
 
32
- desc "list", "List available components and latest version from theonestack github"
33
- method_option :filter, aliases: '-f', type: :string, desc: "filter components by service type"
34
- method_option :component, aliases: '-c', type: :string, desc: "list all versions for matched components"
35
- method_option :update, aliases: '-u', type: :boolean, lazy_default: true, default: false, desc: "Update components list"
36
- def list
37
- cmd = Kurgan::List.new(options)
38
- cmd.execute
39
- end
38
+ register Kurgan::List, 'list', 'list', 'list all components in the onestack'
39
+ tasks["list"].options = Kurgan::List.class_options
40
+
41
+ register Kurgan::Search, 'search', 'search [component]', "search for a component and it's release history"
42
+ tasks["search"].options = Kurgan::Search.class_options
40
43
 
44
+ register Kurgan::Inspect, 'inspect', 'inspect', "inspect a cfhighlander files of it's components"
45
+ tasks["inspect"].options = Kurgan::Inspect.class_options
41
46
 
42
47
  end
43
48
  end
@@ -27,6 +27,10 @@ module Kurgan
27
27
  template('templates/cfndsl.rb.tt', "#{@dir}/#{name}.cfndsl.rb")
28
28
  end
29
29
 
30
+ def create_readme
31
+ template "templates/README.md.component.tt", "#{@dir}/README.md"
32
+ end
33
+
30
34
  def create_default_config_test
31
35
  @test_name = 'default'
32
36
  template('templates/test.yaml.tt', "#{@dir}/tests/#{@test_name}.test.yaml")
@@ -0,0 +1,47 @@
1
+ module Kurgan
2
+ class Extend < Thor::Group
3
+ include Thor::Actions
4
+
5
+ argument :component
6
+
7
+ class_option :name, aliases: :n, type: :string
8
+ class_option :version, aliases: :v, type: :string
9
+
10
+ def self.source_root
11
+ File.dirname(__FILE__)
12
+ end
13
+
14
+ def get_cfhighlander_template
15
+ @cfhighlander_template = Dir['*.cfhighlander.rb'][0]
16
+ if @cfhighlander_template.nil?
17
+ raise "No cfhighlander.rb file found in #{Dir.pwd}, are you in a cfhighlander project folder?"
18
+ end
19
+ end
20
+
21
+ def get_component_name
22
+ @name = options[:name] || component
23
+ end
24
+
25
+ def create_sub_dir_for_extended_component
26
+ empty_directory @name
27
+ end
28
+
29
+ def get_template_version
30
+ @template = options[:version] ? "#{component}@#{options[:version]}" : component
31
+ say "extending #{@template} to the #{@cfhighlander_template.split('.')[0]} project"
32
+ end
33
+
34
+ def create_cfhighlander_files
35
+ opts = {template: @template, name: @name}
36
+ template('templates/cfhighlander.extend.rb.tt', "#{@name}/#{@name}.cfhighlander.rb", opts)
37
+ template('templates/config.yaml.tt', "#{@name}/#{@name}.config.yaml")
38
+ template('templates/cfndsl.rb.tt', "#{@name}/#{@name}.cfndsl.rb")
39
+ end
40
+
41
+ def add_component
42
+ insert_into_file @cfhighlander_template, "\tComponent name: '#{@name}', template: '#{@name}'\n\n", :before => /^end/
43
+ end
44
+
45
+ end
46
+ end
47
+
@@ -0,0 +1,34 @@
1
+ require 'faraday'
2
+ require 'json'
3
+
4
+ module Kurgan
5
+ class GitHub
6
+
7
+ GITHUB_URL = "https://api.github.com"
8
+ GITHUB_ORG = "theonestack"
9
+
10
+ def self.get_repos
11
+ url = "#{GITHUB_URL}/orgs/#{GITHUB_ORG}/repos"
12
+ response = Faraday.get(url, {type: 'public', per_page: 100}, {'Accept' => 'Accept: application/vnd.github.v3+json'})
13
+
14
+ if response.status != 200
15
+ return nil
16
+ end
17
+
18
+ repos = JSON.parse(response.body, symbolize_names: true)
19
+ return repos.select {|repo| repo[:name].start_with?('hl-component')}
20
+ end
21
+
22
+ def self.get_releases(component)
23
+ url = "#{GITHUB_URL}/repos/#{GITHUB_ORG}/hl-component-#{component}/releases"
24
+ response = Faraday.get(url, {}, {'Accept' => 'Accept: application/vnd.github.v3+json'})
25
+
26
+ if response.status != 200
27
+ return nil
28
+ end
29
+
30
+ return JSON.parse(response.body, symbolize_names: true)
31
+ end
32
+
33
+ end
34
+ end
data/lib/kurgan/init.rb CHANGED
@@ -36,35 +36,39 @@ module Kurgan
36
36
 
37
37
  def create_cfhighlander_template
38
38
  opts = {parameters: @parameters, components: @components, description: @description}
39
- template('templates/cfhighlander.rb.tt', "#{@dir}/#{name}.cfhighlander.rb", opts)
39
+ template 'templates/cfhighlander.rb.tt', "#{@dir}/#{name}.cfhighlander.rb", opts
40
40
  end
41
41
 
42
42
  def create_config_yaml
43
43
  template 'templates/config.yaml.tt', "#{@dir}/#{name}.config.yaml"
44
44
  end
45
45
 
46
+ def create_readme
47
+ template "templates/README.md.project.tt", "#{@dir}/README.md"
48
+ end
49
+
46
50
  def git_init
47
- if yes?("git init project?")
51
+ if yes? "git init project?"
48
52
  run "git init #{@dir}"
49
53
  template 'templates/gitignore.tt', "#{@dir}/.gitignore"
50
- template "templates/README.md.tt", "#{@dir}/README.md"
51
54
  else
52
55
  say "Skipping git init", :yellow
53
56
  end
54
57
  end
55
58
 
56
59
  def ci_init
57
- if yes?("Setup a CI pipeline?")
58
- ci = ask "CI flavour", limited_to: ['github', 'jenkins', 'travis', 'codebuild']
60
+ if yes? "Setup a CI pipeline?"
61
+ ci = ask "CI flavour", limited_to: ['github', 'jenkins', 'codebuild']
59
62
  case ci
60
63
  when 'github'
61
- template('templates/github_actions.yaml.tt', "#{@dir}/.github/workflows/rspec.yaml")
64
+ template 'templates/github_actions.yaml.tt', "#{@dir}/.github/workflows/rspec.yaml"
65
+ insert_into_file "#{@dir}/README.md",
66
+ "![cftest](https://github.com/theonestack/hl-component-#{name}/actions/workflows/rspec.yaml/badge.svg)\n\n",
67
+ :after => /^# #{name} CfHighlander Component\n\n/
62
68
  when 'jenkins'
63
- template('templates/Jenkinsfile.tt', "#{@dir}/Jenkinsfile")
64
- when 'travis'
65
- template('templates/travis.yml.tt', "#{@dir}/.travis.yml")
69
+ template 'templates/Jenkinsfile.tt', "#{@dir}/Jenkinsfile"
66
70
  when 'codebuild'
67
- template('templates/codebuild.yaml.tt', "#{@dir}/.codebuild.yaml")
71
+ template 'templates/codebuild.yaml.tt', "#{@dir}/.codebuild.yaml"
68
72
  end
69
73
  else
70
74
  say "Skipping CI setup", :yellow
@@ -0,0 +1,50 @@
1
+ require "thor"
2
+ require 'terminal-table'
3
+
4
+ module Kurgan
5
+ class Inspect < Thor::Group
6
+ include Thor::Actions
7
+
8
+ def get_cfhighlander_template
9
+ @cfhighlander_rb = Dir['*.cfhighlander.rb'][0]
10
+ if @cfhighlander_rb.nil?
11
+ raise "No cfhighlander.rb file found in #{Dir.pwd}"
12
+ end
13
+ end
14
+
15
+ def get_project_name
16
+ @project_name = @cfhighlander_rb.split('.').first
17
+ end
18
+
19
+ def get_components
20
+ cfhighlander_file = File.read(@cfhighlander_rb)
21
+ raw_components = cfhighlander_file.scan(/template:\s?(.*?)\s/).flatten
22
+
23
+ @components = raw_components.map do |template_str|
24
+ template = template_str.strip.gsub(/("|'|,)/, '').split(/(@|#)/)
25
+ { template: template.first, version: (template.size > 1 ? template.last : "not found") }
26
+ end
27
+ end
28
+
29
+ def check_versions
30
+ @components.each do |comp|
31
+ releases = Kurgan::GitHub.get_releases(comp[:template])
32
+ if !releases.nil? && releases.any?
33
+ latest_release = releases.sort_by { |r| r[:tag_name] }.reverse.first
34
+ comp[:latest_release] = latest_release[:tag_name]
35
+ else
36
+ comp[:latest_release] = 'not found'
37
+ end
38
+ end
39
+ end
40
+
41
+ def display
42
+ puts Terminal::Table.new(
43
+ :title => "Project: #{@project_name}",
44
+ :headings => ['Component', 'Version', 'Latest Release'],
45
+ :rows => @components.map {|comp| [comp[:template], comp[:version], comp[:latest_release]] }
46
+ )
47
+ end
48
+
49
+ end
50
+ end
data/lib/kurgan/list.rb CHANGED
@@ -1,59 +1,24 @@
1
- require 'open-uri'
2
- require 'fileutils'
1
+ require "thor"
2
+ require 'terminal-table'
3
+ require 'kurgan/github'
3
4
 
4
5
  module Kurgan
5
- class List
6
+ class List < Thor::Group
7
+ include Thor::Actions
6
8
 
7
- def initialize(options)
8
- @filter = options[:filter]
9
- @component = options[:component]
10
- if options[:update] || !File.exists?(Kurgan.components_file)
11
- update_component_list
9
+ def get_repos
10
+ repos = Kurgan::GitHub.get_repos()
11
+ if repos.nil?
12
+ abort "Error: Somthing went wrong with connecting to the github api"
12
13
  end
13
- content = File.read(Kurgan.components_file)
14
- @components = JSON.parse(content)['components']
14
+ @hl_repos = repos.map {|repo| [repo[:name], repo[:url], repo[:updated_at]]}
15
15
  end
16
16
 
17
- def execute
18
- puts "\n\s\s============================="
19
- puts "\s\s## CfHighlander Components ##"
20
- puts "\s\s=============================\n\n"
21
- if @component
22
- return component
23
- elsif @filter
24
- return filter
25
- else
26
- return all
27
- end
28
- end
29
-
30
- def component
31
- components = @components.select { |comp| comp['name'].include? @component }
32
- abort "no match for component #{@component}" if !components.any?
33
- components.each { |comp| puts "\s\s\s\s#{comp['name']} (#{comp['versions'].join(', ')})" }
34
- end
35
-
36
- def filter
37
- components = @components.select { |comp| comp['filter'].include? @filter }
38
- abort "no match for filter #{@filter}" if !components.any?
39
- components.each { |comp| format(comp['name'],comp['latest']) }
40
- end
41
-
42
- def all
43
- @components.each { |comp| format(comp['name'],comp['latest']) }
44
- end
45
-
46
- def format(name,version)
47
- version = version != "" ? version : 'latest'
48
- puts "\s\s\s\s#{name}@#{version}"
49
- end
50
-
51
- def update_component_list
52
- puts "Updating components list"
53
- FileUtils.mkdir_p File.dirname(Kurgan.components_file)
54
- content = open('https://s3-ap-southeast-2.amazonaws.com/cfhighlander-component-specification/components.json').read
55
- File.open(Kurgan.components_file, 'w') { |f| f.puts content }
56
- puts "Succesfully updated components list #{Kurgan.components_file}"
17
+ def display
18
+ puts Terminal::Table.new(
19
+ :headings => ['Component', 'Git URL', 'Last Updated'],
20
+ :rows => @hl_repos.sort
21
+ )
57
22
  end
58
23
 
59
24
  end
@@ -0,0 +1,33 @@
1
+ require "thor"
2
+ require 'terminal-table'
3
+ require 'kurgan/github'
4
+
5
+ module Kurgan
6
+ class Search < Thor::Group
7
+ include Thor::Actions
8
+
9
+ argument :component
10
+
11
+ def get_releases
12
+ releases = Kurgan::GitHub.get_releases(component)
13
+ if releases.nil?
14
+ abort "ERROR: unable to find component in theonestack"
15
+ end
16
+
17
+ if releases.any?
18
+ @rows = releases.map {|release| [release[:tag_name], release[:name], release[:published_at], release[:html_url]]}
19
+ else
20
+ tags = Kurgan::GitHub.get_tags(component)
21
+ end
22
+ end
23
+
24
+ def display
25
+ puts Terminal::Table.new(
26
+ :title => "Component: #{component}",
27
+ :headings => ['Version', 'name', 'Published', 'URL'],
28
+ :rows => @rows.sort.reverse
29
+ )
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,77 @@
1
+ # <%= name %> CfHighlander Component
2
+
3
+ <!--- add component description --->
4
+
5
+ ```bash
6
+ kurgan add <%= name %>
7
+ ```
8
+
9
+ ## Requirements
10
+
11
+ ## Parameters
12
+
13
+ | Name | Use | Default | Global | Type | Allowed Values |
14
+ | ---- | --- | ------- | ------ | ---- | -------------- |
15
+
16
+
17
+ ## Configuration
18
+
19
+ <!--- add component config examples --->
20
+
21
+ ```yaml
22
+ example_config: test
23
+ ```
24
+
25
+ ## Outputs/Exports
26
+
27
+ | Name | Value | Exported |
28
+ | ---- | ----- | -------- |
29
+
30
+
31
+ ## Development
32
+
33
+ ```bash
34
+ gem install cfhighlander
35
+ ```
36
+
37
+ or via docker
38
+
39
+ ```bash
40
+ docker pull theonestack/cfhighlander
41
+ ```
42
+
43
+ ### Testing
44
+
45
+ Generate cftest
46
+
47
+ ```bash
48
+ kurgan test example
49
+ ```
50
+
51
+ Run cftest
52
+
53
+ ```bash
54
+ cfhighlander cftest -t tests/example.test.yaml
55
+ ```
56
+
57
+ or run all tests
58
+
59
+ ```bash
60
+ cfhighlander cftest
61
+ ```
62
+
63
+ Generate spec tests
64
+
65
+ ```bash
66
+ kurgan test example --type spec
67
+ ```
68
+
69
+ run spec tests
70
+
71
+ ```bash
72
+ gem install rspec
73
+ ```
74
+
75
+ ```bash
76
+ rspec
77
+ ```
@@ -1,4 +1,4 @@
1
- # <%= name %> CfHighlander <%= @type %>
1
+ # <%= name %> CfHighlander Project
2
2
 
3
3
  ## Cfhighlander Setup
4
4
 
@@ -0,0 +1,4 @@
1
+ CfhighlanderTemplate do
2
+ Name '<%= config[:name] %>'
3
+ Extends '<%= config[:template] %>'
4
+ end
@@ -1,6 +1,3 @@
1
1
  CloudFormation do
2
2
  ## Add your cfndsl resources here
3
- SNS_Topic(:Topic) {
4
- TopicName topic_name if defined? topic_name
5
- }
6
3
  end
@@ -1,3 +1,3 @@
1
1
  module Kurgan
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/list.rb ADDED
@@ -0,0 +1,25 @@
1
+ require "thor"
2
+ require 'faraday'
3
+ require 'json'
4
+ require 'terminal-table'
5
+
6
+ module Kurgan
7
+ class List < Thor::Group
8
+ include Thor::Actions
9
+
10
+ def get_repos
11
+ url = 'https://api.github.com/orgs/theonestack/repos'
12
+ response = Faraday.get(url, {type: 'public', per_page: 100}, {'Accept' => 'Accept: application/vnd.github.v3+json'})
13
+ repos = JSON.parse(response.body, symbolize_names: true)
14
+ @hl_repos = repos.select {|repo| repo[:name].start_with?('hl-component')}.map {|repo| [repo[:name], repo[:url], repo[:updated_at]]}
15
+ end
16
+
17
+ def display
18
+ puts Terminal::Table.new(
19
+ :headings => ['Component', 'Git URL', 'Last Updated'],
20
+ :rows => @hl_repos.sort
21
+ )
22
+ end
23
+
24
+ end
25
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kurgan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guslington
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-29 00:00:00.000000000 Z
11
+ date: 2021-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -24,6 +24,46 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.19'
27
+ - !ruby/object:Gem::Dependency
28
+ name: terminal-table
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '2'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '1'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '2'
47
+ - !ruby/object:Gem::Dependency
48
+ name: faraday
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1'
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '2'
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '1'
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '2'
27
67
  - !ruby/object:Gem::Dependency
28
68
  name: bundler
29
69
  requirement: !ruby/object:Gem::Requirement
@@ -73,13 +113,19 @@ files:
73
113
  - lib/kurgan.rb
74
114
  - lib/kurgan/add.rb
75
115
  - lib/kurgan/component.rb
116
+ - lib/kurgan/extend.rb
117
+ - lib/kurgan/github.rb
76
118
  - lib/kurgan/globals.rb
77
119
  - lib/kurgan/init.rb
120
+ - lib/kurgan/inspect.rb
78
121
  - lib/kurgan/list.rb
79
122
  - lib/kurgan/projects.rb
123
+ - lib/kurgan/search.rb
80
124
  - lib/kurgan/templates/Jenkinsfile.tt
81
125
  - lib/kurgan/templates/MITLICENSE
82
- - lib/kurgan/templates/README.md.tt
126
+ - lib/kurgan/templates/README.md.component.tt
127
+ - lib/kurgan/templates/README.md.project.tt
128
+ - lib/kurgan/templates/cfhighlander.extend.rb.tt
83
129
  - lib/kurgan/templates/cfhighlander.rb.tt
84
130
  - lib/kurgan/templates/cfndsl.rb.tt
85
131
  - lib/kurgan/templates/codebuild.yaml.tt
@@ -88,9 +134,9 @@ files:
88
134
  - lib/kurgan/templates/gitignore.tt
89
135
  - lib/kurgan/templates/test.spec.tt
90
136
  - lib/kurgan/templates/test.yaml.tt
91
- - lib/kurgan/templates/travis.yml.tt
92
137
  - lib/kurgan/test.rb
93
138
  - lib/kurgan/version.rb
139
+ - list.rb
94
140
  homepage: http://iamkurgan.com
95
141
  licenses:
96
142
  - MIT
@@ -1,15 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.5
4
- install:
5
- - gem install cfhighlander cfn-nag
6
- before_script:
7
- - cfndsl -u
8
- <%- if @type == 'component' -%>
9
- script:
10
- - if [ "${TRAVIS_PULL_REQUEST}" != "false" ]; then cfhighlander cftest --no-validate; else cfhighlander cftest; fi
11
- - cfn_nag_scan -i out/tests
12
- <%- elsif @type == 'project' -%>
13
- script:
14
- - cfcompile
15
- <%- end -%>