gha_config 0.10 → 0.11
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/.github/workflow-src +7 -0
- data/.github/workflows/CI.yml +68 -0
- data/.gitignore +41 -0
- data/.rubocop.yml +13 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +38 -0
- data/bin/gha_config +19 -0
- data/gha_config.gemspec +23 -0
- data/lib/gha_config.rb +5 -0
- data/lib/gha_config/config.rb +13 -0
- data/lib/gha_config/parser.rb +36 -0
- data/lib/gha_config/version.rb +5 -0
- data/lib/gha_config/writer.rb +63 -0
- metadata +18 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 494d88f660f4f7b6aac5ab217afa7afb34e6c88c09ec357c811aca471ca19c8f
|
|
4
|
+
data.tar.gz: 1306d388bec13893965e811a8349a34e7b44b8fbc5be2bbe18a064d07a98931f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5b572dd14a4804d5ea444955d0b859acb920024d1341bee55d84b634a63d961c9199e31f10fc7416e05ee9c9381d88b77be073b3b6185c902e9038cbbc81da75
|
|
7
|
+
data.tar.gz: 7c1621af6526c97f81698d8499a9289e8353901ca52a49c071a8341eaa38a03bc8cea5880488694fab5f6b09cfe94570f8e51586e25f3624e233fb009dd608a8
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on: push
|
|
4
|
+
|
|
5
|
+
env:
|
|
6
|
+
HOME: /home/circleci
|
|
7
|
+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
8
|
+
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
|
|
9
|
+
AWS_REGION: ${{ secrets.AWS_REGION }}
|
|
10
|
+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
11
|
+
DEPLOYMENT_TYPE: ${{ secrets.DEPLOYMENT_TYPE }}
|
|
12
|
+
ECR_REPOSITORY: ${{ secrets.ECR_REPOSITORY }}
|
|
13
|
+
ECS_CLUSTER_PROD: ${{ secrets.ECS_CLUSTER_PROD }}
|
|
14
|
+
ECS_CLUSTER_STG: ${{ secrets.ECS_CLUSTER_STG }}
|
|
15
|
+
ECS_SERVICE_PROD: ${{ secrets.ECS_SERVICE_PROD }}
|
|
16
|
+
ECS_SERVICE_STG: ${{ secrets.ECS_SERVICE_STG }}
|
|
17
|
+
SERVICE_NAME: ${{ secrets.SERVICE_NAME }}
|
|
18
|
+
SERVICE_PROFILE: ${{ secrets.SERVICE_PROFILE }}
|
|
19
|
+
SERVICE_TOKEN: ${{ secrets.SERVICE_TOKEN }}
|
|
20
|
+
WISHABI_ENVIRONMENT: ${{ secrets.WISHABI_ENVIRONMENT }}
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
build:
|
|
24
|
+
runs-on: [ubuntu, runner-fleet]
|
|
25
|
+
container:
|
|
26
|
+
image: ghcr.io/wishabi/ci-build-environment:ruby-3.0-buster
|
|
27
|
+
credentials:
|
|
28
|
+
username: ${{ github.repository_owner }}
|
|
29
|
+
password: ${{ secrets.GHCR_TOKEN }}
|
|
30
|
+
|
|
31
|
+
steps:
|
|
32
|
+
- name: Checkout code
|
|
33
|
+
uses: actions/checkout@v2
|
|
34
|
+
- name: Bundle cache
|
|
35
|
+
uses: actions/cache@v1
|
|
36
|
+
with:
|
|
37
|
+
path: vendor/bundle
|
|
38
|
+
key: rails-{{ arch }}-{{ checksum "Gemfile.lock" }}
|
|
39
|
+
restore-keys: rails-{{ arch }}-
|
|
40
|
+
- name: Bundle install
|
|
41
|
+
run: |
|
|
42
|
+
sudo chmod 1777 -R /home/circleci/.bundle && bundle config path 'vendor/bundle' && bundle install --jobs=4
|
|
43
|
+
|
|
44
|
+
deploy-gem:
|
|
45
|
+
runs-on: [ubuntu, runner-fleet]
|
|
46
|
+
needs: [build]
|
|
47
|
+
container:
|
|
48
|
+
image: ghcr.io/wishabi/ci-build-environment:ruby-3.0-buster
|
|
49
|
+
credentials:
|
|
50
|
+
username: ${{ github.repository_owner }}
|
|
51
|
+
password: ${{ secrets.GHCR_TOKEN }}
|
|
52
|
+
if: github.ref == 'refs/heads/main'
|
|
53
|
+
steps:
|
|
54
|
+
- name: Checkout code
|
|
55
|
+
uses: actions/checkout@v2
|
|
56
|
+
- name: Bundle cache
|
|
57
|
+
uses: actions/cache@v1
|
|
58
|
+
with:
|
|
59
|
+
path: vendor/bundle
|
|
60
|
+
key: rails-{{ arch }}-{{ checksum "Gemfile.lock" }}
|
|
61
|
+
restore-keys: rails-{{ arch }}-
|
|
62
|
+
- name: Bundle install
|
|
63
|
+
run: |
|
|
64
|
+
sudo chmod 1777 -R /home/circleci/.bundle && bundle config path 'vendor/bundle' && bundle install --jobs=4
|
|
65
|
+
- name: Deploy to production
|
|
66
|
+
run: |
|
|
67
|
+
chmod +x ./deploy/artifactory.sh && ./deploy/artifactory.sh
|
|
68
|
+
|
data/.gitignore
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Created by .ignore support plugin (hsz.mobi)
|
|
2
|
+
### Ruby template
|
|
3
|
+
*.gem
|
|
4
|
+
*.rbc
|
|
5
|
+
/.config
|
|
6
|
+
/coverage/
|
|
7
|
+
/InstalledFiles
|
|
8
|
+
/pkg/
|
|
9
|
+
/spec/reports/
|
|
10
|
+
/spec/examples.txt
|
|
11
|
+
/test/tmp/
|
|
12
|
+
/test/version_tmp/
|
|
13
|
+
/tmp/
|
|
14
|
+
/log/
|
|
15
|
+
|
|
16
|
+
# Used by dotenv library to load environment variables.
|
|
17
|
+
# .env
|
|
18
|
+
|
|
19
|
+
## Documentation cache and generated files:
|
|
20
|
+
/.yardoc/
|
|
21
|
+
/_yardoc/
|
|
22
|
+
/doc/
|
|
23
|
+
/rdoc/
|
|
24
|
+
|
|
25
|
+
## Environment normalization:
|
|
26
|
+
/.bundle/
|
|
27
|
+
/vendor/bundle
|
|
28
|
+
/lib/bundler/man/
|
|
29
|
+
|
|
30
|
+
# for a library or gem, you might want to ignore these files since the code is
|
|
31
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
32
|
+
# Gemfile.lock
|
|
33
|
+
# .ruby-version
|
|
34
|
+
# .ruby-gemset
|
|
35
|
+
|
|
36
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
|
37
|
+
.rvmrc
|
|
38
|
+
|
|
39
|
+
test.sqlite3
|
|
40
|
+
|
|
41
|
+
.idea
|
data/.rubocop.yml
ADDED
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.0.0
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.11] - 2021-07-15
|
|
9
|
+
- First public version.
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
gha_config (0.11)
|
|
5
|
+
|
|
6
|
+
GEM
|
|
7
|
+
remote: https://flipplib.jfrog.io/flipplib/api/gems/flipp-gems/
|
|
8
|
+
specs:
|
|
9
|
+
ast (2.4.2)
|
|
10
|
+
parallel (1.20.1)
|
|
11
|
+
parser (3.0.1.1)
|
|
12
|
+
ast (~> 2.4.1)
|
|
13
|
+
rainbow (3.0.0)
|
|
14
|
+
regexp_parser (2.1.1)
|
|
15
|
+
rexml (3.2.5)
|
|
16
|
+
rubocop (0.90.0)
|
|
17
|
+
parallel (~> 1.10)
|
|
18
|
+
parser (>= 2.7.1.1)
|
|
19
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
20
|
+
regexp_parser (>= 1.7)
|
|
21
|
+
rexml
|
|
22
|
+
rubocop-ast (>= 0.3.0, < 1.0)
|
|
23
|
+
ruby-progressbar (~> 1.7)
|
|
24
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
|
25
|
+
rubocop-ast (0.8.0)
|
|
26
|
+
parser (>= 2.7.1.5)
|
|
27
|
+
ruby-progressbar (1.11.0)
|
|
28
|
+
unicode-display_width (1.7.0)
|
|
29
|
+
|
|
30
|
+
PLATFORMS
|
|
31
|
+
ruby
|
|
32
|
+
|
|
33
|
+
DEPENDENCIES
|
|
34
|
+
gha_config!
|
|
35
|
+
rubocop
|
|
36
|
+
|
|
37
|
+
BUNDLED WITH
|
|
38
|
+
2.2.21
|
data/bin/gha_config
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#! /usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'yaml'
|
|
5
|
+
require 'active_support/all'
|
|
6
|
+
require 'fileutils'
|
|
7
|
+
|
|
8
|
+
require_relative '../lib/gha_config/parser'
|
|
9
|
+
require_relative '../lib/gha_config/writer'
|
|
10
|
+
require_relative '../lib/gha_config/config'
|
|
11
|
+
|
|
12
|
+
file = ARGV[1] || '.github/workflow-src/CI.yml'
|
|
13
|
+
unless File.exist?(file)
|
|
14
|
+
puts "File #{file} does not exist!"
|
|
15
|
+
exit(1)
|
|
16
|
+
end
|
|
17
|
+
results = GhaConfig::Parser.parse(file)
|
|
18
|
+
GhaConfig::Writer.write(results, '.github/workflows/CI.yml')
|
|
19
|
+
puts "Wrote results to .github/workflows/CI.yml"
|
data/gha_config.gemspec
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
+
require 'gha_config/version'
|
|
6
|
+
|
|
7
|
+
Gem::Specification.new do |spec|
|
|
8
|
+
spec.name = 'gha_config'
|
|
9
|
+
spec.version = GhaConfig::VERSION
|
|
10
|
+
spec.authors = ['Daniel Orner']
|
|
11
|
+
spec.email = ['daniel.orner@flipp.com']
|
|
12
|
+
spec.summary = 'Process GitHub Action workflow files'
|
|
13
|
+
spec.description = 'Write a longer description. Optional.'
|
|
14
|
+
spec.homepage = ''
|
|
15
|
+
spec.required_ruby_version = '>= 2.3'
|
|
16
|
+
|
|
17
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
20
|
+
spec.require_paths = ['lib']
|
|
21
|
+
|
|
22
|
+
spec.add_development_dependency('rubocop')
|
|
23
|
+
end
|
data/lib/gha_config.rb
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'byebug'
|
|
2
|
+
|
|
3
|
+
module GhaConfig
|
|
4
|
+
module Parser
|
|
5
|
+
def self.parse(input_file)
|
|
6
|
+
input = File.read(input_file)
|
|
7
|
+
input.gsub!(/(^|\n)on:/, %(\n"on":))
|
|
8
|
+
hash = YAML.safe_load(input)
|
|
9
|
+
config = GhaConfig::Config.new
|
|
10
|
+
config.defaults = hash.delete('_defaults_') || []
|
|
11
|
+
config.env = hash.delete('env') || {}
|
|
12
|
+
|
|
13
|
+
hash['jobs'] = replace_defaults(config, hash['jobs'])
|
|
14
|
+
config.parsed_config = hash
|
|
15
|
+
config
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.replace_defaults(config, hash)
|
|
19
|
+
if hash.is_a?(Array)
|
|
20
|
+
return hash.map { |v| self.replace_defaults(config, v)}.flatten
|
|
21
|
+
elsif hash.is_a?(Hash)
|
|
22
|
+
return hash.map { |k, v| [k, self.replace_defaults(config, v)] }.to_h
|
|
23
|
+
end
|
|
24
|
+
return hash unless hash.is_a?(String) && hash =~ /_.*_/
|
|
25
|
+
val = config.defaults[hash]
|
|
26
|
+
return hash if val.nil?
|
|
27
|
+
if val.is_a?(Array)
|
|
28
|
+
val.map { |v| self.replace_defaults(config, v) }.flatten
|
|
29
|
+
else
|
|
30
|
+
self.replace_defaults(config, val)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module GhaConfig
|
|
2
|
+
module Writer
|
|
3
|
+
def self.write(config, output_file)
|
|
4
|
+
output_hash = {}
|
|
5
|
+
output_hash['name'] = 'CI'
|
|
6
|
+
output_hash['on'] = config.parsed_config['on']
|
|
7
|
+
|
|
8
|
+
output_hash['env'] = config.env.
|
|
9
|
+
merge({
|
|
10
|
+
'HOME' => '/home/circleci',
|
|
11
|
+
'AWS_ACCESS_KEY_ID' => '${{ secrets.AWS_ACCESS_KEY_ID }}',
|
|
12
|
+
'AWS_ACCOUNT_ID' => '${{ secrets.AWS_ACCOUNT_ID }}',
|
|
13
|
+
'AWS_REGION' => '${{ secrets.AWS_REGION }}',
|
|
14
|
+
'AWS_SECRET_ACCESS_KEY' => '${{ secrets.AWS_SECRET_ACCESS_KEY }}',
|
|
15
|
+
'DEPLOYMENT_TYPE' => '${{ secrets.DEPLOYMENT_TYPE }}',
|
|
16
|
+
'ECR_REPOSITORY' => '${{ secrets.ECR_REPOSITORY }}',
|
|
17
|
+
'ECS_CLUSTER_PROD' => '${{ secrets.ECS_CLUSTER_PROD }}',
|
|
18
|
+
'ECS_CLUSTER_STG' => '${{ secrets.ECS_CLUSTER_STG }}',
|
|
19
|
+
'ECS_SERVICE_PROD' => '${{ secrets.ECS_SERVICE_PROD }}',
|
|
20
|
+
'ECS_SERVICE_STG' => '${{ secrets.ECS_SERVICE_STG }}',
|
|
21
|
+
'SERVICE_NAME' => '${{ secrets.SERVICE_NAME }}',
|
|
22
|
+
'SERVICE_PROFILE' => '${{ secrets.SERVICE_PROFILE }}',
|
|
23
|
+
'SERVICE_TOKEN' => '${{ secrets.SERVICE_TOKEN }}',
|
|
24
|
+
'WISHABI_ENVIRONMENT' => '${{ secrets.WISHABI_ENVIRONMENT }}'
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
output_hash['jobs'] = {}
|
|
28
|
+
config.parsed_config['jobs'].each do |name, job|
|
|
29
|
+
new_job = {
|
|
30
|
+
'runs-on' => '[ubuntu, runner-fleet]'
|
|
31
|
+
}
|
|
32
|
+
job['runs-on'] = '[ubuntu, runner-fleet]'
|
|
33
|
+
job['steps'].unshift({
|
|
34
|
+
'name' => 'Checkout code',
|
|
35
|
+
'uses' => 'actions/checkout@v2'
|
|
36
|
+
})
|
|
37
|
+
job['needs'] = "[#{job['needs'].join(', ')}]" if job['needs'].is_a?(Array)
|
|
38
|
+
new_job.merge!(job)
|
|
39
|
+
output_hash['jobs'][name] = new_job
|
|
40
|
+
end
|
|
41
|
+
output = output_hash.to_yaml
|
|
42
|
+
output = cleanup(output)
|
|
43
|
+
File.write(output_file, output)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.cleanup(out)
|
|
47
|
+
out = out.sub("---\n", '')
|
|
48
|
+
out = out.gsub(/'on'/, 'on') # replace 'on' with on
|
|
49
|
+
out = out.gsub(/: ''/, ':') # replace : '' with :
|
|
50
|
+
out = out.gsub(/\n(\S)/) { "\n\n#{$1}" } # add empty line before top level keys
|
|
51
|
+
out = out.gsub(/"\[/, '[')
|
|
52
|
+
out = out.gsub(/\]"/, ']') # change "[...]" to [...]
|
|
53
|
+
|
|
54
|
+
first, last = out.split("\njobs:")
|
|
55
|
+
first = first.gsub(/"/, '') # remove quotes from env block
|
|
56
|
+
last = last.gsub(/\n (\S)/) { "\n\n #{$1}" } # add empty line before job keys
|
|
57
|
+
out = first + "\njobs:" + last
|
|
58
|
+
|
|
59
|
+
out
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: gha_config
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '0.
|
|
4
|
+
version: '0.11'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Daniel Orner
|
|
@@ -27,11 +27,27 @@ dependencies:
|
|
|
27
27
|
description: Write a longer description. Optional.
|
|
28
28
|
email:
|
|
29
29
|
- daniel.orner@flipp.com
|
|
30
|
-
executables:
|
|
30
|
+
executables:
|
|
31
|
+
- gha_config
|
|
31
32
|
extensions: []
|
|
32
33
|
extra_rdoc_files: []
|
|
33
34
|
files:
|
|
35
|
+
- ".github/workflow-src"
|
|
36
|
+
- ".github/workflows/CI.yml"
|
|
37
|
+
- ".gitignore"
|
|
38
|
+
- ".rubocop.yml"
|
|
39
|
+
- ".ruby-version"
|
|
40
|
+
- CHANGELOG.md
|
|
41
|
+
- Gemfile
|
|
42
|
+
- Gemfile.lock
|
|
34
43
|
- README.md
|
|
44
|
+
- bin/gha_config
|
|
45
|
+
- gha_config.gemspec
|
|
46
|
+
- lib/gha_config.rb
|
|
47
|
+
- lib/gha_config/config.rb
|
|
48
|
+
- lib/gha_config/parser.rb
|
|
49
|
+
- lib/gha_config/version.rb
|
|
50
|
+
- lib/gha_config/writer.rb
|
|
35
51
|
homepage: ''
|
|
36
52
|
licenses: []
|
|
37
53
|
metadata: {}
|