Configure the matrix job directory settings using GitHub labels.
Create a json file in the following format. Specify the label name as key and target directory as value.
The config file name or directory can be specified, but .deploy_target.json
is used by default.
{
"target:develop": [
"envs/development"
],
"target:staging": [
"envs/staging"
],
"target:production": [
"envs/production"
],
"target:all" : [
"envs/development",
"envs/staging",
"envs/production"
]
}
If the jq
and gh
commands are installed, the following commands are useful.
export REPO=<OWNER>/<REPO_NAME>
export COLOR=5319E7
cat .deploy_target.json | jq -r 'keys | .[]' | xargs -I @ gh label create @ --color $COLOR --repo $REPO
ref. https://cli.github.com/manual/gh_label_create
Example
$ cat .deploy_target.json | jq -r 'keys | .[]' | xargs -I @ gh label create @ --color $COLOR --repo $REPO
✓ Label "target:all" created in ponkio-o/select-target-action
✓ Label "target:develop" created in ponkio-o/select-target-action
✓ Label "target:production" created in ponkio-o/select-target-action
✓ Label "target:staging" created in ponkio-o/select-target-action
Please refer to following doc.
https://docs.github.com/en/issues/using-labels-and-milestones-to-track-work/managing-labels#creating-a-label
GitHub Actions are configured as follows:
name: Terraform PR check
on:
pull_request:
types: [opened]
branches:
- main
jobs:
select_target:
name: Select target
runs-on: ubuntu-latest
outputs:
targets: ${{ steps.sta.outputs.targets }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Select target
id: sta
uses: ponkio-o/select-target-action@main
plan:
needs: [select_target]
name: Plan
runs-on: ubuntu-latest
strategy:
matrix:
target: ${{fromJson(needs.select_target.outputs.targets)}}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup terraform
uses: hashicorp/setup-terraform@v1
- name: Terraform plan
working-directory: ${{ matrix.target }}
run: terraform plan -input=false -no-color
...
The directories set in the key of the given label are merged and returned as an array.
Assign labels to the Pull Request. You can also select multiple labels.
If you have directories that you want to run by default, you can set them to the "default" key. It can be used in conjunction with other labels, and if valid labels are selected, it will take precedence.
{
"default" : [
"envs/development",
"envs/staging",
"envs/production"
]
}
All inputs are optional.
Name | Description | Default |
---|---|---|
config_file |
Path to configuration file | .deploy_target.json |
token |
GITHUB_TOKEN or PersonalAccessToken(PAT) |
GITHUB_TOKEN |
The working directory outputs as an array.
Name | Description |
---|---|
targets |
The working directories are output as an array |
Example:
["envs/development","envs/staging","envs/production"]