pipedream 0.1.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/.cody/buildspec.yml +9 -0
  3. data/.cody/project.rb +4 -0
  4. data/.gitignore +16 -11
  5. data/.gitmodules +9 -0
  6. data/.rspec +1 -1
  7. data/CHANGELOG.md +34 -0
  8. data/Gemfile +3 -1
  9. data/Gemfile.lock +112 -0
  10. data/Guardfile +19 -0
  11. data/LICENSE.txt +18 -17
  12. data/README.md +55 -21
  13. data/Rakefile +10 -2
  14. data/exe/pipe +14 -0
  15. data/exe/pipedream +14 -0
  16. data/lib/pipedream/autoloader.rb +21 -0
  17. data/lib/pipedream/aws_services/helpers.rb +71 -0
  18. data/lib/pipedream/aws_services.rb +20 -0
  19. data/lib/pipedream/build.rb +13 -0
  20. data/lib/pipedream/cli.rb +60 -0
  21. data/lib/pipedream/command.rb +82 -0
  22. data/lib/pipedream/completer/script.rb +6 -0
  23. data/lib/pipedream/completer/script.sh +10 -0
  24. data/lib/pipedream/completer.rb +159 -0
  25. data/lib/pipedream/core.rb +63 -0
  26. data/lib/pipedream/create.rb +12 -0
  27. data/lib/pipedream/delete.rb +27 -0
  28. data/lib/pipedream/deploy.rb +40 -0
  29. data/lib/pipedream/dsl/pipeline/approve.rb +34 -0
  30. data/lib/pipedream/dsl/pipeline/codebuild.rb +57 -0
  31. data/lib/pipedream/dsl/pipeline/github.rb +42 -0
  32. data/lib/pipedream/dsl/pipeline.rb +37 -0
  33. data/lib/pipedream/dsl/role.rb +50 -0
  34. data/lib/pipedream/dsl/schedule.rb +30 -0
  35. data/lib/pipedream/dsl/sns.rb +15 -0
  36. data/lib/pipedream/dsl/ssm.rb +22 -0
  37. data/lib/pipedream/dsl/webhook.rb +27 -0
  38. data/lib/pipedream/evaluate.rb +47 -0
  39. data/lib/pipedream/help/completion.md +22 -0
  40. data/lib/pipedream/help/completion_script.md +3 -0
  41. data/lib/pipedream/help/deploy.md +54 -0
  42. data/lib/pipedream/help/start.md +20 -0
  43. data/lib/pipedream/help.rb +9 -0
  44. data/lib/pipedream/init.rb +68 -0
  45. data/lib/pipedream/pipeline/s3_bucket.rb +88 -0
  46. data/lib/pipedream/pipeline.rb +61 -0
  47. data/lib/pipedream/role.rb +181 -0
  48. data/lib/pipedream/schedule.rb +99 -0
  49. data/lib/pipedream/sequence.rb +66 -0
  50. data/lib/pipedream/setting.rb +82 -0
  51. data/lib/pipedream/sns.rb +43 -0
  52. data/lib/pipedream/stack.rb +95 -0
  53. data/lib/pipedream/start.rb +84 -0
  54. data/lib/pipedream/update.rb +12 -0
  55. data/lib/pipedream/version.rb +1 -1
  56. data/lib/pipedream/webhook.rb +60 -0
  57. data/lib/pipedream.rb +18 -1
  58. data/lib/template/.pipedream/pipeline.rb.tt +40 -0
  59. data/lib/template/.pipedream/schedule.rb +3 -0
  60. data/lib/template/.pipedream/settings.yml +9 -0
  61. data/lib/template/.pipedream/sns.rb +14 -0
  62. data/pipedream.gemspec +25 -14
  63. data/vendor/aws_data/CHANGELOG.md +7 -0
  64. data/vendor/aws_data/Gemfile +4 -0
  65. data/vendor/aws_data/Gemfile.lock +48 -0
  66. data/vendor/aws_data/LICENSE.txt +21 -0
  67. data/vendor/aws_data/README.md +42 -0
  68. data/vendor/aws_data/Rakefile +6 -0
  69. data/vendor/aws_data/aws_data.gemspec +30 -0
  70. data/{bin → vendor/aws_data/bin}/console +1 -1
  71. data/{bin → vendor/aws_data/bin}/setup +0 -0
  72. data/vendor/aws_data/lib/aws_data/version.rb +3 -0
  73. data/vendor/aws_data/lib/aws_data.rb +91 -0
  74. data/vendor/aws_data/spec/aws_data_spec.rb +5 -0
  75. data/vendor/aws_data/spec/spec_helper.rb +14 -0
  76. data/vendor/cfn-status/Gemfile +4 -0
  77. data/vendor/cfn-status/Gemfile.lock +49 -0
  78. data/vendor/cfn-status/LICENSE.txt +21 -0
  79. data/vendor/cfn-status/README.md +56 -0
  80. data/vendor/cfn-status/Rakefile +6 -0
  81. data/vendor/cfn-status/bin/console +14 -0
  82. data/vendor/cfn-status/bin/setup +8 -0
  83. data/vendor/cfn-status/cfn-status.gemspec +30 -0
  84. data/vendor/cfn-status/lib/cfn/aws_service.rb +56 -0
  85. data/vendor/cfn-status/lib/cfn/status/version.rb +5 -0
  86. data/vendor/cfn-status/lib/cfn/status.rb +220 -0
  87. data/vendor/cfn-status/spec/cfn/status_spec.rb +81 -0
  88. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-complete.json +1080 -0
  89. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-in-progress.json +1080 -0
  90. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-update-rollback-complete.json +1086 -0
  91. data/vendor/cfn-status/spec/spec_helper.rb +14 -0
  92. data/vendor/cfn_camelizer/CHANGELOG.md +10 -0
  93. data/vendor/cfn_camelizer/Gemfile +4 -0
  94. data/vendor/cfn_camelizer/LICENSE.txt +21 -0
  95. data/vendor/cfn_camelizer/README.md +40 -0
  96. data/vendor/cfn_camelizer/Rakefile +6 -0
  97. data/vendor/cfn_camelizer/bin/console +14 -0
  98. data/vendor/cfn_camelizer/bin/setup +8 -0
  99. data/vendor/cfn_camelizer/cfn_camelizer.gemspec +32 -0
  100. data/vendor/cfn_camelizer/lib/camelizer.yml +27 -0
  101. data/vendor/cfn_camelizer/lib/cfn_camelizer/version.rb +3 -0
  102. data/vendor/cfn_camelizer/lib/cfn_camelizer.rb +92 -0
  103. data/vendor/cfn_camelizer/spec/cfn_camelizer_spec.rb +79 -0
  104. data/vendor/cfn_camelizer/spec/spec_helper.rb +14 -0
  105. metadata +295 -23
  106. data/.travis.yml +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d845cc6b9635330178a537c0d676418b0e560fbff964480fdbe216aeab336217
4
- data.tar.gz: 9ef15aa0546d855726d48b526fa957a3456a61648841a2ae9f470bc867f95ada
3
+ metadata.gz: b5b217e3b797c3eac2f721a6637b1997e218222a6d316417c620e05145c1bfe6
4
+ data.tar.gz: '094476da993744df62614378996cc12481c911f6e39dc8a89a1baeee4030475d'
5
5
  SHA512:
6
- metadata.gz: 677a0bac2343ec95f582ccb79e7943ff1a0b60556644bd6a504c4711367155867d8eab57cd0a0897fea5c3a6269374b85caed08638615147bac32ae2df2287b0
7
- data.tar.gz: 8bb8f2444f7648ff7bcb11209c6b6aabf94b9a3586a2179165b28fedd6aaf337588cd22dade0fadad41237dcf9dd65d2915e985ce891e1272c47344da7ca2840
6
+ metadata.gz: 55404fd9abf77988a759c6b8d51a0b9dd64299ec12a03cda6836900b7cba5c11937fcd359bbeb14dd335b7fe4b30b77dfed9cd471669f5c7d376eb8e1f4055c5
7
+ data.tar.gz: f40b5c333e86b9b662f7863ef803dddd6737c7896931930305ebe638eff0643666737ff4f0001acf3d69f481cd0ac949be6df05f312dc884a621066d1057c653
@@ -0,0 +1,9 @@
1
+ version: 0.2
2
+
3
+ phases:
4
+ build:
5
+ commands:
6
+ - echo Build started on `date`
7
+ - sed -i '/BUNDLED WITH/Q' Gemfile.lock # hack to fix bundler issue: allow different versions of bundler to work
8
+ - bundle
9
+ - bundle exec rspec
data/.cody/project.rb ADDED
@@ -0,0 +1,4 @@
1
+ github_url("https://github.com/tongueroo/pipedream")
2
+ linux_image("aws/codebuild/ruby:2.5.3-1.7.0")
3
+ triggers(webhook: true)
4
+ local_cache(false)
data/.gitignore CHANGED
@@ -1,11 +1,16 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
-
10
- # rspec failure tracking
11
- .rspec_status
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ _yardoc
7
+ coverage
8
+ doc/
9
+ InstalledFiles
10
+ lib/bundler/man
11
+ pkg
12
+ rdoc
13
+ spec/reports
14
+ test/tmp
15
+ test/version_tmp
16
+ tmp
data/.gitmodules ADDED
@@ -0,0 +1,9 @@
1
+ [submodule "vendor/cfn-status"]
2
+ path = vendor/cfn-status
3
+ url = https://github.com/tongueroo/cfn-status
4
+ [submodule "vendor/cfn_camelizer"]
5
+ path = vendor/cfn_camelizer
6
+ url = https://github.com/tongueroo/cfn_camelizer
7
+ [submodule "vendor/aws_data"]
8
+ path = vendor/aws_data
9
+ url = https://github.com/tongueroo/aws_data
data/.rspec CHANGED
@@ -1,3 +1,3 @@
1
- --format documentation
2
1
  --color
2
+ --format documentation
3
3
  --require spec_helper
data/CHANGELOG.md ADDED
@@ -0,0 +1,34 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
5
+
6
+ ## [0.4.0]
7
+ - rename to pipedream
8
+
9
+ ## [0.3.3]
10
+ - allow no settings.yml file
11
+
12
+ ## [0.3.2]
13
+ - update vendor/aws_data
14
+
15
+ ## [0.3.1]
16
+ - fix gem dependencies in vendor
17
+
18
+ ## [0.3.0]
19
+ - update docs and cli help
20
+
21
+ ## [0.2.1]
22
+ - fix different branch check
23
+
24
+ ## [0.2.0]
25
+ - DSL: pipeline, role, schedule, webhook, sns
26
+ - pipe deploy -b branch
27
+ - pipe start -b branch
28
+ - pipe cli commands: init deploy, start, delete
29
+ - ssm support
30
+ - codebuild\_prefix and codebuild\_suffix support
31
+ - auto-create s3 bucket for artifacts
32
+
33
+ ## [0.1.0]
34
+ - Initial release.
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in pipedream.gemspec
3
+ # Specify your gem dependencies in codepipe.gemspec
4
4
  gemspec
5
+
6
+ gem "codeclimate-test-reporter", group: :test, require: nil
data/Gemfile.lock ADDED
@@ -0,0 +1,112 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ pipedream (0.3.3)
5
+ activesupport
6
+ aws-sdk-cloudformation
7
+ aws-sdk-codepipeline
8
+ aws-sdk-s3
9
+ aws-sdk-ssm
10
+ cfn_camelizer
11
+ memoist
12
+ rainbow
13
+ render_me_pretty
14
+ thor
15
+ zeitwerk
16
+
17
+ GEM
18
+ remote: https://rubygems.org/
19
+ specs:
20
+ activesupport (6.0.0)
21
+ concurrent-ruby (~> 1.0, >= 1.0.2)
22
+ i18n (>= 0.7, < 2)
23
+ minitest (~> 5.1)
24
+ tzinfo (~> 1.1)
25
+ zeitwerk (~> 2.1, >= 2.1.8)
26
+ aws-eventstream (1.0.3)
27
+ aws-partitions (1.220.0)
28
+ aws-sdk-cloudformation (1.25.0)
29
+ aws-sdk-core (~> 3, >= 3.61.1)
30
+ aws-sigv4 (~> 1.1)
31
+ aws-sdk-codepipeline (1.25.0)
32
+ aws-sdk-core (~> 3, >= 3.61.1)
33
+ aws-sigv4 (~> 1.1)
34
+ aws-sdk-core (3.68.0)
35
+ aws-eventstream (~> 1.0, >= 1.0.2)
36
+ aws-partitions (~> 1.0)
37
+ aws-sigv4 (~> 1.1)
38
+ jmespath (~> 1.0)
39
+ aws-sdk-kms (1.24.0)
40
+ aws-sdk-core (~> 3, >= 3.61.1)
41
+ aws-sigv4 (~> 1.1)
42
+ aws-sdk-s3 (1.48.0)
43
+ aws-sdk-core (~> 3, >= 3.61.1)
44
+ aws-sdk-kms (~> 1)
45
+ aws-sigv4 (~> 1.1)
46
+ aws-sdk-ssm (1.56.0)
47
+ aws-sdk-core (~> 3, >= 3.61.1)
48
+ aws-sigv4 (~> 1.1)
49
+ aws-sigv4 (1.1.0)
50
+ aws-eventstream (~> 1.0, >= 1.0.2)
51
+ byebug (11.0.1)
52
+ cfn_camelizer (0.4.0)
53
+ activesupport
54
+ memoist
55
+ rainbow
56
+ cli_markdown (0.1.0)
57
+ codeclimate-test-reporter (1.0.9)
58
+ simplecov (<= 0.13)
59
+ concurrent-ruby (1.1.5)
60
+ diff-lcs (1.3)
61
+ docile (1.1.5)
62
+ i18n (1.6.0)
63
+ concurrent-ruby (~> 1.0)
64
+ jmespath (1.4.0)
65
+ json (2.2.0)
66
+ memoist (0.16.0)
67
+ minitest (5.12.2)
68
+ rainbow (3.0.0)
69
+ rake (13.0.0)
70
+ render_me_pretty (0.8.3)
71
+ activesupport
72
+ rainbow
73
+ tilt
74
+ rspec (3.8.0)
75
+ rspec-core (~> 3.8.0)
76
+ rspec-expectations (~> 3.8.0)
77
+ rspec-mocks (~> 3.8.0)
78
+ rspec-core (3.8.2)
79
+ rspec-support (~> 3.8.0)
80
+ rspec-expectations (3.8.4)
81
+ diff-lcs (>= 1.2.0, < 2.0)
82
+ rspec-support (~> 3.8.0)
83
+ rspec-mocks (3.8.1)
84
+ diff-lcs (>= 1.2.0, < 2.0)
85
+ rspec-support (~> 3.8.0)
86
+ rspec-support (3.8.2)
87
+ simplecov (0.13.0)
88
+ docile (~> 1.1.0)
89
+ json (>= 1.8, < 3)
90
+ simplecov-html (~> 0.10.0)
91
+ simplecov-html (0.10.2)
92
+ thor (0.20.3)
93
+ thread_safe (0.3.6)
94
+ tilt (2.0.10)
95
+ tzinfo (1.2.5)
96
+ thread_safe (~> 0.1)
97
+ zeitwerk (2.1.10)
98
+
99
+ PLATFORMS
100
+ ruby
101
+
102
+ DEPENDENCIES
103
+ bundler
104
+ byebug
105
+ cli_markdown
106
+ codeclimate-test-reporter
107
+ pipedream!
108
+ rake
109
+ rspec
110
+
111
+ BUNDLED WITH
112
+ 2.0.2
data/Guardfile ADDED
@@ -0,0 +1,19 @@
1
+ guard "bundler", cmd: "bundle" do
2
+ watch("Gemfile")
3
+ watch(/^.+\.gemspec/)
4
+ end
5
+
6
+ guard :rspec, cmd: "bundle exec rspec" do
7
+ require "guard/rspec/dsl"
8
+ dsl = Guard::RSpec::Dsl.new(self)
9
+
10
+ # RSpec files
11
+ rspec = dsl.rspec
12
+ watch(rspec.spec_helper) { rspec.spec_dir }
13
+ watch(rspec.spec_support) { rspec.spec_dir }
14
+ watch(rspec.spec_files)
15
+
16
+ # Ruby files
17
+ ruby = dsl.ruby
18
+ dsl.watch_spec_files_for(ruby.lib_files)
19
+ end
data/LICENSE.txt CHANGED
@@ -1,21 +1,22 @@
1
- The MIT License (MIT)
2
-
3
1
  Copyright (c) 2019 Tung Nguyen
4
2
 
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
11
12
 
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
14
15
 
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,39 +1,73 @@
1
- # Pipedream
1
+ # Pipedreamline
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/pipedream`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ ![Build Status](https://codebuild.us-west-2.amazonaws.com/badges?uuid=eyJlbmNyeXB0ZWREYXRhIjoiWk1FM0dldzE5MUM5R3VqVGxxTmRFb1JGNnkxQjJpTDYvajYrQk91YzErNjdNc1VYVElHM3V5ZEJXcStyMmZVc210WG8vUURSV2JST0ZpSWc5Y0pYR3k0PSIsIml2UGFyYW1ldGVyU3BlYyI6IldvYXhLMU8yS2pQdVRKbEoiLCJtYXRlcmlhbFNldFNlcmlhbCI6MX0%3D&branch=master)
4
+ [![Gem Version](https://badge.fury.io/rb/pipedream.png)](http://badge.fury.io/rb/pipedream)
4
5
 
5
- TODO: Delete this and the text above, and describe your gem
6
+ Pipe Dream provides a DSL to make it easy create a CodePipeline pipeline.
6
7
 
7
- ## Installation
8
+ Pipe Dream installs `pipedream` and `pipe` executables. Both of them do the same thing, `pipe` is just shorter to type.
8
9
 
9
- Add this line to your application's Gemfile:
10
+ The documentation site is at: [pipedream.run](https://pipedream.run/)
10
11
 
11
- ```ruby
12
- gem 'pipedream'
13
- ```
12
+ ## Quick Start
14
13
 
15
- And then execute:
14
+ pipe init
15
+ pipe deploy
16
+ pipe start
17
+ pipe delete
16
18
 
17
- $ bundle
19
+ ## Init and Structure
18
20
 
19
- Or install it yourself as:
21
+ First, run `pipe init` to generate a starter `.pipedream` folder structure.
20
22
 
21
- $ gem install pipedream
23
+ $ tree .pipedream
24
+ .pipedream
25
+ ├── pipeline.rb
26
+ └── schedule.rb
22
27
 
23
- ## Usage
28
+ File | Description
29
+ --- | ---
30
+ pipeline.rb | The CodePipeline pipeline written as a DSL. This is required. Here are the [Pipeline DSL docs](https://pipedream.run/docs/dsl/pipeline/)
31
+ schedule.rb | A CloudWatch scheduled event written as a DSL. Here are the [schedule.rb docs](https://pipedream.run/docs/dsl/schedule/)
24
32
 
25
- TODO: Write usage instructions here
33
+ ## DSL
26
34
 
27
- ## Development
35
+ .pipedream/pipeline.rb:
28
36
 
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
37
+ ```ruby
38
+ stage "Source" do
39
+ github(
40
+ source: "tongueroo/demo-ufo",
41
+ auth_token: ssm("/github/user/token")
42
+ )
43
+ end
44
+ stage "DeployStacks" do
45
+ codebuild "demo1" # action declaration
46
+ codebuild "demo2", "demo3" # will run in parallel
47
+ codebuild "demo4" # action declaration
48
+ end
49
+ ```
30
50
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
51
+ More [DSL docs](https://pipedream.run/docs/dsl/)
32
52
 
33
- ## Contributing
53
+ ## Installation
34
54
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/pipedream.
55
+ Add this line to your application's Gemfile:
56
+
57
+ gem "pipedream"
58
+
59
+ And then execute:
60
+
61
+ bundle
36
62
 
37
- ## License
63
+ Or install it yourself as:
64
+
65
+ gem install pipedream
66
+
67
+ ## Contributing
38
68
 
39
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
69
+ 1. Fork it
70
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
71
+ 3. Commit your changes (`git commit -am "Add some feature"`)
72
+ 4. Push to the branch (`git push origin my-new-feature`)
73
+ 5. Create new Pull Request
data/Rakefile CHANGED
@@ -1,6 +1,14 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
3
 
4
- RSpec::Core::RakeTask.new(:spec)
4
+ task default: :spec
5
5
 
6
- task :default => :spec
6
+ RSpec::Core::RakeTask.new
7
+
8
+ require_relative "lib/pipedream"
9
+ require "cli_markdown"
10
+ desc "Generates cli reference docs as markdown"
11
+ task :docs do
12
+ mkdir_p "docs/_includes"
13
+ CliMarkdown::Creator.create_all(cli_class: Pipedream::CLI, cli_name: "pipe")
14
+ end
data/exe/pipe ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Trap ^C
4
+ Signal.trap("INT") {
5
+ puts "\nCtrl-C detected. Exiting..."
6
+ sleep 0.1
7
+ exit
8
+ }
9
+
10
+ $:.unshift(File.expand_path("../../lib", __FILE__))
11
+ require "pipedream"
12
+ require "pipedream/cli"
13
+
14
+ Pipedream::CLI.start(ARGV)
data/exe/pipedream ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Trap ^C
4
+ Signal.trap("INT") {
5
+ puts "\nCtrl-C detected. Exiting..."
6
+ sleep 0.1
7
+ exit
8
+ }
9
+
10
+ $:.unshift(File.expand_path("../../lib", __FILE__))
11
+ require "pipedream"
12
+ require "pipedream/cli"
13
+
14
+ Pipedream::CLI.start(ARGV)
@@ -0,0 +1,21 @@
1
+ require "zeitwerk"
2
+
3
+ module Pipedream
4
+ class Autoloader
5
+ class Inflector < Zeitwerk::Inflector
6
+ def camelize(basename, _abspath)
7
+ map = { cli: "CLI", version: "VERSION" }
8
+ map[basename.to_sym] || super
9
+ end
10
+ end
11
+
12
+ class << self
13
+ def setup
14
+ loader = Zeitwerk::Loader.new
15
+ loader.inflector = Inflector.new
16
+ loader.push_dir(File.dirname(__dir__)) # lib
17
+ loader.setup
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,71 @@
1
+ module Pipedream::AwsServices
2
+ module Helpers
3
+ def stack_exists?(stack_name)
4
+ return false if ENV['TEST']
5
+
6
+ exist = nil
7
+ begin
8
+ # When the stack does not exist an exception is raised. Example:
9
+ # Aws::CloudFormation::Errors::ValidationError: Stack with id blah does not exist
10
+ cfn.describe_stacks(stack_name: stack_name)
11
+ exist = true
12
+ rescue Aws::CloudFormation::Errors::ValidationError => e
13
+ if e.message =~ /does not exist/
14
+ exist = false
15
+ elsif e.message.include?("'stackName' failed to satisfy constraint")
16
+ # Example of e.message when describe_stack with invalid stack name
17
+ # "1 validation error detected: Value 'instance_and_route53' at 'stackName' failed to satisfy constraint: Member must satisfy regular expression pattern: [a-zA-Z][-a-zA-Z0-9]*|arn:[-a-zA-Z0-9:/._+]*"
18
+ puts "Invalid stack name: #{stack_name}"
19
+ puts "Full error message: #{e.message}"
20
+ exit 1
21
+ else
22
+ raise # re-raise exception because unsure what other errors can happen
23
+ end
24
+ end
25
+ exist
26
+ end
27
+
28
+ def pipeline_name_convention(name_base)
29
+ items = [@pipeline_name, @options[:type], Pipedream.env_extra]
30
+ items.insert(2, Pipedream.env) if Pipedream.settings.dig(:stack_naming, :append_env)
31
+ items.reject(&:blank?).compact.join("-")
32
+ end
33
+
34
+ def inferred_pipeline_name
35
+ # Essentially the project's parent folder
36
+ File.basename(Dir.pwd).gsub('_','-').gsub(/\.+/,'-').gsub(/[^0-9a-zA-Z,-]/, '')
37
+ end
38
+
39
+ # Examples:
40
+ #
41
+ # myapp-ci-deploy # with Settings stack_naming append_env set to false.
42
+ # myapp-ci-deploy-development
43
+ # myapp-ci-deploy-development-2
44
+ #
45
+ def inferred_stack_name(pipeline_name)
46
+ items = [pipeline_name, @options[:type], Pipedream.env_extra, "pipe"]
47
+ items.insert(2, Pipedream.env) if Pipedream.settings.dig(:stack_naming, :append_env)
48
+ items.reject(&:blank?).compact.join("-")
49
+ end
50
+
51
+ def are_you_sure?(stack_name, action)
52
+ if @options[:sure]
53
+ sure = 'y'
54
+ else
55
+ message = case action
56
+ when :update
57
+ "Are you sure you want to want to update the #{stack_name.color(:green)} stack with the changes? (y/N)"
58
+ when :delete
59
+ "Are you sure you want to want to delete the #{stack_name.color(:green)} stack? (y/N)"
60
+ end
61
+ puts message
62
+ sure = $stdin.gets
63
+ end
64
+
65
+ unless sure =~ /^y/
66
+ puts "Whew! Exiting without running #{action}."
67
+ exit 0
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,20 @@
1
+ require "aws-sdk-codepipeline"
2
+ require "aws-sdk-cloudformation"
3
+
4
+ module Pipedream
5
+ module AwsServices
6
+ include Helpers
7
+
8
+ def codepipeline
9
+ @codepipeline ||= Aws::CodePipeline::Client.new
10
+ end
11
+
12
+ def cfn
13
+ @cfn ||= Aws::CloudFormation::Client.new
14
+ end
15
+
16
+ def s3
17
+ @s3 ||= Aws::S3::Client.new
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,13 @@
1
+ module Pipedream
2
+ class Build
3
+ def initialize(options)
4
+ @options = options
5
+ end
6
+
7
+ def run
8
+ puts "build"
9
+ options = @options
10
+ Pipeline.new(options).run
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,60 @@
1
+ module Pipedream
2
+ class CLI < Command
3
+ class_option :verbose, type: :boolean
4
+ class_option :noop, type: :boolean
5
+
6
+ desc "init", "Initialize project with .codepipline files"
7
+ long_desc Help.text(:init)
8
+ Init.cli_options.each do |args|
9
+ option(*args)
10
+ end
11
+ register(Init, "init", "init", "Set up initial .codepipline files.")
12
+
13
+ common_options = Proc.new do
14
+ option :stack_name, desc: "Override the generated stack name. If you use this you must always specify it"
15
+ option :wait, type: :boolean, default: true, desc: "Wait for operation to complete"
16
+ end
17
+
18
+ desc "deploy PIPELINE_NAME", "Deploy pipeline."
19
+ long_desc Help.text(:deploy)
20
+ option :branch, aliases: "b", desc: "git branch" # important to default to nil
21
+ common_options.call
22
+ def deploy(pipeline_name=nil)
23
+ Deploy.new(options.merge(pipeline_name: pipeline_name)).run
24
+ end
25
+
26
+ desc "start", "Start codebuild project."
27
+ long_desc Help.text(:start)
28
+ option :sure, desc: "Bypass are you sure prompt"
29
+ option :branch, aliases: "b", desc: "git branch" # important to default to nil
30
+ common_options.call
31
+ def start(pipeline_name=nil)
32
+ Start.new(options.merge(pipeline_name: pipeline_name)).run
33
+ end
34
+
35
+ desc "delete", "Delete codebuild project."
36
+ long_desc Help.text(:delete)
37
+ option :sure, desc: "Bypass are you sure prompt"
38
+ common_options.call
39
+ def delete(pipeline_name=nil)
40
+ Delete.new(options.merge(pipeline_name: pipeline_name)).run
41
+ end
42
+
43
+ desc "completion *PARAMS", "Prints words for auto-completion."
44
+ long_desc Help.text("completion")
45
+ def completion(*params)
46
+ Completer.new(CLI, *params).run
47
+ end
48
+
49
+ desc "completion_script", "Generates a script that can be eval to setup auto-completion."
50
+ long_desc Help.text("completion_script")
51
+ def completion_script
52
+ Completer::Script.generate
53
+ end
54
+
55
+ desc "version", "prints version"
56
+ def version
57
+ puts VERSION
58
+ end
59
+ end
60
+ end