GitHub Action
Select target action
Configure the matrix job directory in GitHub Label.
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=ponkio-o/select-target-action
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:
set-matrix:
name: Set matrix job
runs-on: ubuntu-latest
outputs:
workdir: ${{ steps.set_matrix.outputs.matrix-workdir }}
steps:
- name: checkout
uses: actions/checkout@v3
- name: Set matrix
id: set_matrix
uses: ponkio-o/select-target-action@main
plan:
needs: [set-matrix]
name: Plan
runs-on: ubuntu-latest
strategy:
matrix:
workdir: ${{fromJson(needs.set-matrix.outputs.workdir)}}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup terraform
uses: hashicorp/setup-terraform@v1
- name: Terraform plan
working-directory: ${{ matrix.workdir }}
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 a label to the Pull Request. Multiple lables can be assigned.
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.
["envs/dev","envs/stg","envs/prod"]