gha_config 0.10

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +131 -0
  3. metadata +57 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b9d19ff5b1e9e5061ace6d37d397e5e7404525d6ce101b74cb9532db251d30b4
4
+ data.tar.gz: '09ec807d50a2b8c55e50ddc0691a577458a0a62967d540f67402e0c38b39a87a'
5
+ SHA512:
6
+ metadata.gz: d7973193d71d199bf15c9a858e7ab307fe6e6f58d606acdeb26127906f7f1125cf102236f9b62ecfcdb38fbc25548cfce640e33edd6318d1048235de1b9019f3
7
+ data.tar.gz: cfc3111a028a9bb696b51030aa66b9ccc62146153d312b31bc98f19114b3a18a8e432ad2f68347f09f6a433019aeab613b9bd06d66f8385dd91fca9e12bfb77f
data/README.md ADDED
@@ -0,0 +1,131 @@
1
+ # gha_config
2
+
3
+ This gem will process a templated file and output a GitHub Action workflow file specific to Flipp workflows. The idea is that you can maintain a small, lean config file without a lot of repetition and copy/pasting, and process it to export a "real" workflow file for GitHub to use.
4
+
5
+ ## Installation
6
+
7
+ You will need Ruby 2.3 or greater to run this (most Macs have this preinstalled). Make sure you have the latest version of Rubygems as well.
8
+
9
+ Install using `gem install gha_config`.
10
+
11
+ ## Usage
12
+
13
+ Create a file called `.github/workflow-src/CI.yml` in the base directory of your app. You can think of this file as a regular GitHub Action workflow file, except for two differences:
14
+
15
+ 1. Certain "global / always needed" steps and settings do not need to be added, as they will be auto-added after processing.
16
+ 2. The file supports special *template* keys which can be replaced later on.
17
+
18
+ Run the command with `gha_config` - it will output the file into `.github/workflows/CI.yml`.
19
+
20
+ ### Template keys
21
+
22
+ Template keys are very similar to [YAML anchors](http://blogs.perl.org/users/tinita/2019/05/reusing-data-with-yaml-anchors-aliases-and-merge-keys.html). Unfortunately GitHub does not support anchors, and in addition anchors have a weakness in that you cannot use them to extend arrays/lists.
23
+
24
+ Template keys all begin and end with underscores: `_`. You define template keys in a special `_defaults_` section in your config, and you can use them elsewhere.
25
+
26
+ Here's an example of a templated GitHub Action workflow file:
27
+
28
+ ```yaml
29
+ on:
30
+ pull_request:
31
+ push:
32
+ branches:
33
+ - master
34
+ - develop
35
+
36
+ defaults_:
37
+ _container_:
38
+ image: ghcr.io/wishabi/ci-build-environment:ruby-3.0-buster-node
39
+ credentials:
40
+ username: ${{ github.repository_owner }}
41
+ password: ${{ secrets.GHCR_TOKEN }}
42
+ _cache_:
43
+ - name: Bundle cache
44
+ uses: actions/cache@v2
45
+ with:
46
+ path: vendor/bundle
47
+ key: rails-${{ hashFiles('Gemfile.lock') }}
48
+ restore-keys: rails-
49
+ _teardown_:
50
+ - name: Slack webhook
51
+ env:
52
+ SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
53
+ uses: voxmedia/github-action-slack-notify-build@v2
54
+ if: failure()
55
+ _setup_:
56
+ - _cache_
57
+ - name: Bundle install
58
+ run: bundle install --jobs=4
59
+
60
+ jobs:
61
+ build:
62
+ container: _container_
63
+ steps:
64
+ - _setup_
65
+ - _teardown_
66
+ ```
67
+
68
+ The output of this file will look like this:
69
+ ```yaml
70
+ name: CI
71
+
72
+ on:
73
+ pull_request:
74
+ push:
75
+ branches:
76
+ - master
77
+ - develop
78
+
79
+ env:
80
+ HOME: /home/circleci
81
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
82
+ AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
83
+ AWS_REGION: ${{ secrets.AWS_REGION }}
84
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
85
+ DEPLOYMENT_TYPE: ${{ secrets.DEPLOYMENT_TYPE }}
86
+ ECR_REPOSITORY: ${{ secrets.ECR_REPOSITORY }}
87
+ ECS_CLUSTER_PROD: ${{ secrets.ECS_CLUSTER_PROD }}
88
+ ECS_CLUSTER_STG: ${{ secrets.ECS_CLUSTER_STG }}
89
+ ECS_SERVICE_PROD: ${{ secrets.ECS_SERVICE_PROD }}
90
+ ECS_SERVICE_STG: ${{ secrets.ECS_SERVICE_STG }}
91
+ SERVICE_NAME: ${{ secrets.SERVICE_NAME }}
92
+ SERVICE_PROFILE: ${{ secrets.SERVICE_PROFILE }}
93
+ SERVICE_TOKEN: ${{ secrets.SERVICE_TOKEN }}
94
+ WISHABI_ENVIRONMENT: ${{ secrets.WISHABI_ENVIRONMENT }}
95
+
96
+ jobs:
97
+
98
+ build:
99
+ runs-on: [ubuntu, runner-fleet]
100
+ container:
101
+ image: ghcr.io/wishabi/ci-build-environment:ruby-3.0-buster-node
102
+ credentials:
103
+ username: "${{ github.repository_owner }}"
104
+ password: "${{ secrets.GHCR_TOKEN }}"
105
+ steps:
106
+ - name: Checkout code
107
+ uses: actions/checkout@v2
108
+ - name: Bundle cache
109
+ uses: actions/cache@v2
110
+ with:
111
+ path: vendor/bundle
112
+ key: rails-${{ hashFiles('Gemfile.lock') }}
113
+ restore-keys: rails-
114
+ - name: Bundle install
115
+ run: bundle install --jobs=4
116
+ - name: Slack webhook
117
+ env:
118
+ SLACK_BOT_TOKEN: "${{ secrets.SLACK_BOT_TOKEN }}"
119
+ uses: voxmedia/github-action-slack-notify-build@v2
120
+ if: failure()
121
+ ```
122
+
123
+ In the future, we will likely auto-add the Flipp "global action" to each job once it's created.
124
+
125
+ Templates get expanded into their contents whenever they are used. Templates can also include templates (as you can see that the `setup` template includes the `cache` template). Finally, if a template is used inside a list of steps, the expansion will continue the list rather than nest it.
126
+
127
+ You can add this gem to your app Gemfile and re-run it whenever your "source workflow" changes.
128
+
129
+ ## Contributing
130
+
131
+ Pull requests are welcome!
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gha_config
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.10'
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Orner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-07-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubocop
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Write a longer description. Optional.
28
+ email:
29
+ - daniel.orner@flipp.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - README.md
35
+ homepage: ''
36
+ licenses: []
37
+ metadata: {}
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '2.3'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubygems_version: 3.2.21
54
+ signing_key:
55
+ specification_version: 4
56
+ summary: Process GitHub Action workflow files
57
+ test_files: []