cody 0.1.0 → 0.7.0
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/.cody/buildspec.yml +8 -0
- data/.cody/project.rb +4 -0
- data/.cody/settings.yml +13 -0
- data/.gitignore +17 -10
- data/.gitmodules +9 -0
- data/.rspec +1 -1
- data/.ruby-version +1 -0
- data/CHANGELOG.md +59 -0
- data/Gemfile +3 -1
- data/Guardfile +19 -0
- data/LICENSE.txt +18 -17
- data/README.md +145 -18
- data/Rakefile +9 -2
- data/cody.gemspec +26 -12
- data/exe/cody +14 -0
- data/img/github-admin-settings-tab.png +0 -0
- data/lib/cody.rb +17 -1
- data/lib/cody/autoloader.rb +21 -0
- data/lib/cody/aws_services.rb +16 -0
- data/lib/cody/aws_services/helpers.rb +72 -0
- data/lib/cody/cli.rb +61 -0
- data/lib/cody/command.rb +82 -0
- data/lib/cody/completer.rb +159 -0
- data/lib/cody/completer/script.rb +6 -0
- data/lib/cody/completer/script.sh +10 -0
- data/lib/cody/core.rb +63 -0
- data/lib/cody/create.rb +12 -0
- data/lib/cody/default/settings.yml +3 -0
- data/lib/cody/delete.rb +27 -0
- data/lib/cody/deploy.rb +40 -0
- data/lib/cody/dsl/project.rb +119 -0
- data/lib/cody/dsl/project/ssm.rb +22 -0
- data/lib/cody/dsl/role.rb +50 -0
- data/lib/cody/dsl/schedule.rb +30 -0
- data/lib/cody/evaluate.rb +47 -0
- data/lib/cody/help.rb +9 -0
- data/lib/cody/help/completion.md +22 -0
- data/lib/cody/help/completion_script.md +3 -0
- data/lib/cody/help/deploy.md +32 -0
- data/lib/cody/help/init.md +71 -0
- data/lib/cody/help/start.md +12 -0
- data/lib/cody/init.rb +102 -0
- data/lib/cody/project.rb +72 -0
- data/lib/cody/role.rb +87 -0
- data/lib/cody/schedule.rb +102 -0
- data/lib/cody/sequence.rb +66 -0
- data/lib/cody/setting.rb +82 -0
- data/lib/cody/stack.rb +93 -0
- data/lib/cody/start.rb +69 -0
- data/lib/cody/update.rb +12 -0
- data/lib/cody/variables.rb +17 -0
- data/lib/cody/version.rb +2 -2
- data/lib/template/project/buildspec.yml +28 -0
- data/lib/template/project/project.rb.tt +29 -0
- data/lib/template/project/role.rb +2 -0
- data/lib/template/project/schedule.rb +3 -0
- data/lib/template/top/README.md +32 -0
- data/lib/template/top/settings.yml +9 -0
- data/lib/template/top/variables/base.rb +1 -0
- data/lib/template/top/variables/development.rb +1 -0
- data/lib/template/top/variables/production.rb +1 -0
- data/vendor/aws_data/CHANGELOG.md +7 -0
- data/vendor/aws_data/Gemfile +4 -0
- data/vendor/aws_data/LICENSE.txt +21 -0
- data/vendor/aws_data/README.md +42 -0
- data/vendor/aws_data/Rakefile +6 -0
- data/vendor/aws_data/aws_data.gemspec +30 -0
- data/{bin → vendor/aws_data/bin}/console +1 -1
- data/{bin → vendor/aws_data/bin}/setup +0 -0
- data/vendor/aws_data/lib/aws_data.rb +91 -0
- data/vendor/aws_data/lib/aws_data/version.rb +3 -0
- data/vendor/aws_data/spec/aws_data_spec.rb +5 -0
- data/vendor/aws_data/spec/spec_helper.rb +14 -0
- data/vendor/cfn-status/Gemfile +4 -0
- data/vendor/cfn-status/LICENSE.txt +21 -0
- data/vendor/cfn-status/README.md +56 -0
- data/vendor/cfn-status/Rakefile +6 -0
- data/vendor/cfn-status/bin/console +14 -0
- data/vendor/cfn-status/bin/setup +8 -0
- data/vendor/cfn-status/cfn-status.gemspec +30 -0
- data/vendor/cfn-status/lib/cfn/aws_service.rb +56 -0
- data/vendor/cfn-status/lib/cfn/status.rb +220 -0
- data/vendor/cfn-status/lib/cfn/status/version.rb +5 -0
- data/vendor/cfn-status/spec/cfn/status_spec.rb +81 -0
- data/vendor/cfn-status/spec/fixtures/cfn/stack-events-complete.json +1080 -0
- data/vendor/cfn-status/spec/fixtures/cfn/stack-events-in-progress.json +1080 -0
- data/vendor/cfn-status/spec/fixtures/cfn/stack-events-update-rollback-complete.json +1086 -0
- data/vendor/cfn-status/spec/spec_helper.rb +14 -0
- data/vendor/cfn_camelizer/CHANGELOG.md +10 -0
- data/vendor/cfn_camelizer/Gemfile +4 -0
- data/vendor/cfn_camelizer/LICENSE.txt +21 -0
- data/vendor/cfn_camelizer/README.md +40 -0
- data/vendor/cfn_camelizer/Rakefile +6 -0
- data/vendor/cfn_camelizer/bin/console +14 -0
- data/vendor/cfn_camelizer/bin/setup +8 -0
- data/vendor/cfn_camelizer/cfn_camelizer.gemspec +32 -0
- data/vendor/cfn_camelizer/lib/camelizer.yml +33 -0
- data/vendor/cfn_camelizer/lib/cfn_camelizer.rb +92 -0
- data/vendor/cfn_camelizer/lib/cfn_camelizer/version.rb +3 -0
- data/vendor/cfn_camelizer/spec/cfn_camelizer_spec.rb +79 -0
- data/vendor/cfn_camelizer/spec/spec_helper.rb +14 -0
- metadata +268 -21
- data/.travis.yml +0 -7
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'thor'
|
|
3
|
+
|
|
4
|
+
module Cody
|
|
5
|
+
class Sequence < Thor::Group
|
|
6
|
+
include AwsServices
|
|
7
|
+
include Thor::Actions
|
|
8
|
+
|
|
9
|
+
add_runtime_options! # force, pretend, quiet, skip options
|
|
10
|
+
# https://github.com/erikhuda/thor/blob/master/lib/thor/actions.rb#L49
|
|
11
|
+
|
|
12
|
+
def self.source_paths
|
|
13
|
+
[File.expand_path("../../template", __FILE__)]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
def override_source_paths(*paths)
|
|
18
|
+
# Using string with instance_eval because block doesnt have access to
|
|
19
|
+
# path at runtime.
|
|
20
|
+
self.class.instance_eval %{
|
|
21
|
+
def self.source_paths
|
|
22
|
+
#{paths.flatten.inspect}
|
|
23
|
+
end
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def sync_template_repo
|
|
28
|
+
unless git_installed?
|
|
29
|
+
abort "Unable to detect git installation on your system. Git needs to be installed in order to use the --template option."
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
template_path = "#{ENV['HOME']}/.cody/templates/#{full_repo_name}"
|
|
33
|
+
if File.exist?(template_path)
|
|
34
|
+
sh("cd #{template_path} && git pull")
|
|
35
|
+
else
|
|
36
|
+
FileUtils.mkdir_p(File.dirname(template_path))
|
|
37
|
+
sh("git clone #{repo_url} #{template_path}")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def full_repo_name
|
|
42
|
+
full_repo = options[:template].split("/")[-2..-1].join("/")
|
|
43
|
+
full_repo = full_repo.split(":").last
|
|
44
|
+
full_repo.sub(".git", "")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# normalize repo_url
|
|
48
|
+
def repo_url
|
|
49
|
+
template = options[:template]
|
|
50
|
+
if template.include?('github.com')
|
|
51
|
+
template # leave as is, user has provided full github url
|
|
52
|
+
else
|
|
53
|
+
"https://github.com/#{template}"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def git_installed?
|
|
58
|
+
system("type git > /dev/null")
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def sh(command)
|
|
62
|
+
puts "=> #{command}"
|
|
63
|
+
system(command)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
data/lib/cody/setting.rb
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
require 'render_me_pretty'
|
|
3
|
+
|
|
4
|
+
module Cody
|
|
5
|
+
class Setting
|
|
6
|
+
extend Memoist
|
|
7
|
+
def initialize(check_codebuild_project=true)
|
|
8
|
+
@check_codebuild_project = check_codebuild_project
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# data contains the settings.yml config. The order or precedence for settings
|
|
12
|
+
# is the project ufo/settings.yml and then the ~/.cody/settings.yml.
|
|
13
|
+
def data
|
|
14
|
+
Cody.check_codebuild_project! if @check_codebuild_project
|
|
15
|
+
return {} unless File.exist?(project_settings_path)
|
|
16
|
+
|
|
17
|
+
# project based settings files
|
|
18
|
+
project = load_file(project_settings_path)
|
|
19
|
+
|
|
20
|
+
user_file = "#{ENV['HOME']}/.cody/settings.yml"
|
|
21
|
+
user = File.exist?(user_file) ? YAML.load_file(user_file) : {}
|
|
22
|
+
|
|
23
|
+
default_file = File.expand_path("default/settings.yml", __dir__)
|
|
24
|
+
default = load_file(default_file)
|
|
25
|
+
|
|
26
|
+
all_envs = default.deep_merge(user.deep_merge(project))
|
|
27
|
+
all_envs = merge_base(all_envs)
|
|
28
|
+
data = all_envs[cb_env] || all_envs["base"] || {}
|
|
29
|
+
data.deep_symbolize_keys
|
|
30
|
+
end
|
|
31
|
+
memoize :data
|
|
32
|
+
|
|
33
|
+
# Resolves infinite problem since Cody.env can be determined from CODY_ENV or settings.yml files.
|
|
34
|
+
# When ufo is determined from settings it should not called Cody.env since that in turn calls
|
|
35
|
+
# Settings.new.data which can then cause an infinite loop.
|
|
36
|
+
def cb_env
|
|
37
|
+
path = "#{cb_root}/.cody/settings.yml"
|
|
38
|
+
if File.exist?(path)
|
|
39
|
+
settings = YAML.load_file(path)
|
|
40
|
+
env = settings.find do |_env, section|
|
|
41
|
+
section ||= {}
|
|
42
|
+
ENV['AWS_PROFILE'] && ENV['AWS_PROFILE'] == section['aws_profile']
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
cb_env = env.first if env
|
|
47
|
+
cb_env = ENV['CODY_ENV'] if ENV['CODY_ENV'] # highest precedence
|
|
48
|
+
cb_env || 'development'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
def load_file(path)
|
|
53
|
+
return Hash.new({}) unless File.exist?(path)
|
|
54
|
+
|
|
55
|
+
content = RenderMePretty.result(path)
|
|
56
|
+
data = YAML.load(content)
|
|
57
|
+
# If key is is accidentally set to nil it screws up the merge_base later.
|
|
58
|
+
# So ensure that all keys with nil value are set to {}
|
|
59
|
+
data.each do |env, _setting|
|
|
60
|
+
data[env] ||= {}
|
|
61
|
+
end
|
|
62
|
+
data
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# automatically add base settings to the rest of the environments
|
|
66
|
+
def merge_base(all_envs)
|
|
67
|
+
base = all_envs["base"] || {}
|
|
68
|
+
all_envs.each do |env, settings|
|
|
69
|
+
all_envs[env] = base.merge(settings) unless env == "base"
|
|
70
|
+
end
|
|
71
|
+
all_envs
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def project_settings_path
|
|
75
|
+
"#{cb_root}/.cody/settings.yml"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def cb_root
|
|
79
|
+
ENV["CODEBUILD_ROOT"] || Dir.pwd
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
data/lib/cody/stack.rb
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require "aws-sdk-cloudformation"
|
|
2
|
+
|
|
3
|
+
module Cody
|
|
4
|
+
class Stack
|
|
5
|
+
include AwsServices
|
|
6
|
+
|
|
7
|
+
def initialize(options)
|
|
8
|
+
@options = options
|
|
9
|
+
@project_name = @options[:project_name] || inferred_project_name
|
|
10
|
+
@stack_name = options[:stack_name] || inferred_stack_name(@project_name)
|
|
11
|
+
|
|
12
|
+
@full_project_name = project_name_convention(@project_name)
|
|
13
|
+
@template = {
|
|
14
|
+
"Description" => "CodeBuild Project: #{@full_project_name}",
|
|
15
|
+
"Resources" => {}
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def run
|
|
20
|
+
options = @options.merge(
|
|
21
|
+
project_name: @project_name,
|
|
22
|
+
full_project_name: @full_project_name,
|
|
23
|
+
)
|
|
24
|
+
project_builder = Project.new(options)
|
|
25
|
+
unless project_builder.exist?
|
|
26
|
+
puts "ERROR: Cody project does not exist: #{project_builder.project_path}".color(:red)
|
|
27
|
+
exit 1
|
|
28
|
+
return
|
|
29
|
+
end
|
|
30
|
+
project = project_builder.run
|
|
31
|
+
@template["Resources"].merge!(project)
|
|
32
|
+
|
|
33
|
+
if project["CodeBuild"]["Properties"]["ServiceRole"] == {"Ref"=>"IamRole"}
|
|
34
|
+
role = Role.new(options).run
|
|
35
|
+
@template["Resources"].merge!(role)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
schedule = Schedule.new(options).run
|
|
39
|
+
@template["Resources"].merge!(schedule) if schedule
|
|
40
|
+
|
|
41
|
+
template_path = "/tmp/codebuild.yml"
|
|
42
|
+
FileUtils.mkdir_p(File.dirname(template_path))
|
|
43
|
+
IO.write(template_path, YAML.dump(@template))
|
|
44
|
+
puts "Generated CloudFormation template at #{template_path.color(:green)}"
|
|
45
|
+
return if @options[:noop]
|
|
46
|
+
puts "Deploying stack #{@stack_name.color(:green)} with CodeBuild project #{@full_project_name.color(:green)}"
|
|
47
|
+
|
|
48
|
+
begin
|
|
49
|
+
perform
|
|
50
|
+
url_info
|
|
51
|
+
return unless @options[:wait]
|
|
52
|
+
status.wait
|
|
53
|
+
exit 2 unless status.success?
|
|
54
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
|
55
|
+
if e.message.include?("No updates") # No updates are to be performed.
|
|
56
|
+
puts "WARN: #{e.message}".color(:yellow)
|
|
57
|
+
else
|
|
58
|
+
puts "ERROR ValidationError: #{e.message}".color(:red)
|
|
59
|
+
exit 1
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
def url_info
|
|
66
|
+
stack = cfn.describe_stacks(stack_name: @stack_name).stacks.first
|
|
67
|
+
region = `aws configure get region`.strip rescue "us-east-1"
|
|
68
|
+
url = "https://console.aws.amazon.com/cloudformation/home?region=#{region}#/stacks"
|
|
69
|
+
puts "Stack name #{@stack_name.color(:yellow)} status #{stack["stack_status"].color(:yellow)}"
|
|
70
|
+
puts "Here's the CloudFormation url to check for more details #{url}"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def status
|
|
74
|
+
@status ||= Cfn::Status.new(@stack_name)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def rollback_complete?(stack)
|
|
78
|
+
stack.stack_status == 'ROLLBACK_COMPLETE'
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def find_stack(stack_name)
|
|
82
|
+
resp = cfn.describe_stacks(stack_name: stack_name)
|
|
83
|
+
resp.stacks.first
|
|
84
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
|
85
|
+
# example: Stack with id demo-web does not exist
|
|
86
|
+
if e.message =~ /Stack with/ && e.message =~ /does not exist/
|
|
87
|
+
nil
|
|
88
|
+
else
|
|
89
|
+
raise
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
data/lib/cody/start.rb
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
module Cody
|
|
2
|
+
class Start
|
|
3
|
+
include AwsServices
|
|
4
|
+
|
|
5
|
+
def initialize(options)
|
|
6
|
+
@options = options
|
|
7
|
+
@project_name = options[:project_name] || inferred_project_name
|
|
8
|
+
@full_project_name = project_name_convention(@project_name)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def run
|
|
12
|
+
source_version = @options[:branch] || @options[:source_version] || 'master'
|
|
13
|
+
params = {
|
|
14
|
+
project_name: project_name,
|
|
15
|
+
source_version: source_version
|
|
16
|
+
}
|
|
17
|
+
params[:environment_variables_override] = environment_variables_override if @options[:env_vars]
|
|
18
|
+
resp = codebuild.start_build(params)
|
|
19
|
+
puts "Build started for project: #{project_name}"
|
|
20
|
+
puts "Please check the CodeBuild console for the status."
|
|
21
|
+
puts "Cody Log Url:"
|
|
22
|
+
puts codebuild_log_url(resp.build.id)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def environment_variables_override
|
|
26
|
+
@options[:env_vars].map do |s|
|
|
27
|
+
k, v = s.split('=')
|
|
28
|
+
ssm = false
|
|
29
|
+
if /^ssm:(.*)/.match(v)
|
|
30
|
+
v = $1
|
|
31
|
+
ssm = true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
{
|
|
35
|
+
name: k,
|
|
36
|
+
value: v,
|
|
37
|
+
type: ssm ? "PARAMETER_STORE" : "PLAINTEXT"
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def project_name
|
|
43
|
+
if project_exists?(@full_project_name)
|
|
44
|
+
@full_project_name
|
|
45
|
+
elsif stack_exists?(@project_name) # allow `cody start STACK_NAME` to work too
|
|
46
|
+
resp = cfn.describe_stack_resources(stack_name: @project_name)
|
|
47
|
+
resource = resp.stack_resources.find do |r|
|
|
48
|
+
r.logical_resource_id == "CodeBuild"
|
|
49
|
+
end
|
|
50
|
+
resource.physical_resource_id # codebuild project name
|
|
51
|
+
else
|
|
52
|
+
puts "ERROR: Unable to find the codebuild project with either full_project_name: #{@full_project_name} or project_name: #{@project_name}".color(:red)
|
|
53
|
+
exit 1
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
def codebuild_log_url(build_id)
|
|
59
|
+
build_id = build_id.split(':').last
|
|
60
|
+
region = `aws configure get region`.strip rescue "us-east-1"
|
|
61
|
+
"https://#{region}.console.aws.amazon.com/codesuite/codebuild/projects/#{project_name}/build/#{project_name}%3A#{build_id}/log"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def project_exists?(name)
|
|
65
|
+
resp = codebuild.batch_get_projects(names: [name])
|
|
66
|
+
resp.projects.size > 0
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
data/lib/cody/update.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Cody
|
|
2
|
+
class Update < Stack
|
|
3
|
+
def perform
|
|
4
|
+
cfn.update_stack(
|
|
5
|
+
stack_name: @stack_name,
|
|
6
|
+
template_body: YAML.dump(@template),
|
|
7
|
+
capabilities: ["CAPABILITY_IAM"]
|
|
8
|
+
)
|
|
9
|
+
puts "Updating stack #{@stack_name}. Check CloudFormation console for status."
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Cody
|
|
2
|
+
module Variables
|
|
3
|
+
def load_variables
|
|
4
|
+
load_variables_file("base")
|
|
5
|
+
load_variables_file(Cody.env)
|
|
6
|
+
# Then load type scope variables, so they take higher precedence
|
|
7
|
+
load_variables_file("base", @options[:type])
|
|
8
|
+
load_variables_file(Cody.env, @options[:type])
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def load_variables_file(filename, type=nil)
|
|
12
|
+
items = ["#{Cody.root}/.cody", type, "variables/#{filename}.rb"].compact
|
|
13
|
+
path = items.join('/')
|
|
14
|
+
instance_eval(IO.read(path), path) if File.exist?(path)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/cody/version.rb
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module Cody
|
|
2
|
-
VERSION = "0.
|
|
3
|
-
end
|
|
2
|
+
VERSION = "0.7.0"
|
|
3
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
version: 0.2
|
|
2
|
+
|
|
3
|
+
# Example starter file
|
|
4
|
+
# Edit to fit your needs
|
|
5
|
+
|
|
6
|
+
phases:
|
|
7
|
+
install:
|
|
8
|
+
commands:
|
|
9
|
+
# - uname -a
|
|
10
|
+
# - pwd
|
|
11
|
+
# - ls
|
|
12
|
+
# - env | sort
|
|
13
|
+
# - ls /etc/*release*
|
|
14
|
+
# - cat /etc/*release*
|
|
15
|
+
# - whoami
|
|
16
|
+
# - bundle
|
|
17
|
+
build:
|
|
18
|
+
commands:
|
|
19
|
+
- echo Build started on `date`
|
|
20
|
+
- uptime
|
|
21
|
+
# - bundle exec rspec
|
|
22
|
+
# cache:
|
|
23
|
+
# paths:
|
|
24
|
+
# - /usr/local/bundle
|
|
25
|
+
# - /usr/local/lib/ruby/gems/2.5.0
|
|
26
|
+
# artifacts:
|
|
27
|
+
# files:
|
|
28
|
+
# - result.txt
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# For methods, refer to the properties of the CloudFormation CodeBuild::Project https://amzn.to/2UTeNlr
|
|
2
|
+
# For convenience methods, refer to the source https://github.com/tongueroo/cody/blob/master/lib/codebuild/dsl/project.rb
|
|
3
|
+
|
|
4
|
+
# name("example-project-name") # recommend leaving unset and codebuild will use a conventional name
|
|
5
|
+
github_url("<%= project_github_url %>")
|
|
6
|
+
linux_image("<%= lookup_managed_image(/ruby:/) %>")
|
|
7
|
+
environment_variables(
|
|
8
|
+
JETS_ENV: "test",
|
|
9
|
+
# API_KEY: "ssm:/codebuild/demo/api_key" # Example of ssm parameter
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
# Some useful helpers:
|
|
13
|
+
# puts "project_name #{project_name}" # IE: demo-web
|
|
14
|
+
# puts "full_project_name #{full_project_name}" # demo-web-development
|
|
15
|
+
|
|
16
|
+
# Uncomment to enable github webhook, the GitHub oauth token needs admin:repo_hook permissions
|
|
17
|
+
# Refer to https://cody.run/docs/github_oauth/
|
|
18
|
+
# triggers(webhook: true)
|
|
19
|
+
# Another example:
|
|
20
|
+
# Docs: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-projecttriggers.html
|
|
21
|
+
# {type: "EVENT", pattern: "PUSH"} is required
|
|
22
|
+
# Also, note the extra brackets: [[]] is actually the proper format. I know weird.
|
|
23
|
+
# triggers(
|
|
24
|
+
# webhook: true,
|
|
25
|
+
# filter_groups: [[{type: "HEAD_REF", pattern: "my-branch"}, {type: "EVENT", pattern: "PUSH"}]]
|
|
26
|
+
# )
|
|
27
|
+
|
|
28
|
+
# Shorthand to enable all local cache modes
|
|
29
|
+
# local_cache(true)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Cody Files
|
|
2
|
+
|
|
3
|
+
The files in folder are used by cody to build AWS CodeBuild projects. For more info, check out the [cody docs](https://cody.run). Here's a quick start.
|
|
4
|
+
|
|
5
|
+
## Install Tool
|
|
6
|
+
|
|
7
|
+
gem install cody
|
|
8
|
+
|
|
9
|
+
This installs the `cody` command to manage the AWS CodeBuild project.
|
|
10
|
+
|
|
11
|
+
## Update Project
|
|
12
|
+
|
|
13
|
+
To update the CodeBuild project:
|
|
14
|
+
|
|
15
|
+
Main services:
|
|
16
|
+
|
|
17
|
+
cody deploy demo
|
|
18
|
+
|
|
19
|
+
If you have multiple codebuild projects associated with the same repo, you can use the `--type` option. Example:
|
|
20
|
+
|
|
21
|
+
cody deploy demo --type deploy
|
|
22
|
+
|
|
23
|
+
## Start a Deploy
|
|
24
|
+
|
|
25
|
+
To start a CodeBuild build:
|
|
26
|
+
|
|
27
|
+
cody start demo
|
|
28
|
+
cody start demo --type deploy
|
|
29
|
+
|
|
30
|
+
To specify a branch:
|
|
31
|
+
|
|
32
|
+
cody start demo --type deploy -b feature
|