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 labels to the Pull Request. You can also select multiple labels.
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"]