-
Notifications
You must be signed in to change notification settings - Fork 27
137 lines (122 loc) · 4.31 KB
/
ci-pull-request.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
name: CI - Pull Request
on:
pull_request:
paths:
- '**.tf'
- '**.md'
- '.pre-commit-config.yaml'
# only direct-push to master for small tasks such as markdown modifications and such
push:
branches:
- master
paths:
- '**.tf'
env:
GO_VERSION: "^1.17"
jobs:
getModules:
name: Get root directories
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Python
uses: actions/setup-python@v2
- name: Build matrix
id: matrix
run: |
DIRS=$(python -c "import json; import glob; print(json.dumps([x.replace('/versions.tf', '') for x in glob.glob('./**/versions.tf', recursive=True)]))")
echo "::set-output name=directories::$DIRS"
outputs:
directories: ${{ steps.matrix.outputs.directories }}
# min Terraform version(s)
preCommitMinVersions:
name: Min TF validate
needs: getModules
runs-on: ubuntu-latest
strategy:
matrix:
directory: ${{ fromJson(needs.getModules.outputs.directories) }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Python
uses: actions/setup-python@v2
- name: Terraform min/max versions
id: minMax
uses: clowdhaus/[email protected]
with:
directory: ${{ matrix.directory }}
- name: Echo Terraform min/max versions
run: |
echo "min version for ${{ matrix.directory }}: ${{ steps.minMax.outputs.minVersion }}"
echo "max version for ${{ matrix.directory }}: ${{ steps.minMax.outputs.maxVersion }}"
- name: Install Terraform v${{ steps.minMax.outputs.minVersion }}
uses: hashicorp/setup-terraform@v1
with:
terraform_version: ${{ steps.minMax.outputs.minVersion }}
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: ${{ env.GO_VERSION }}
- name: Install pre-commit dependencies
run: |
pip install pre-commit
make deps
- name: Execute generate-terraform-providers for organizational
if: ${{ matrix.directory != '.' }}
run: |
pre-commit run generate_tf_providers -a
- name: Execute pre-commit min_version for non root path
# Run only validate pre-commit check on min version supported
if: ${{ matrix.directory != '.' }}
run: pre-commit run terraform_validate --color=always --show-diff-on-failure --files ${{ matrix.directory }}/*
- name: Execute pre-commit min_version for root path
# Run only validate pre-commit check on min version supported
if: ${{ matrix.directory == '.' }}
run: pre-commit run terraform_validate --color=always --show-diff-on-failure --files $(ls *.tf)
# pre-commit hook for teraform max versions
getTerraformMinMaxVersion:
name: Module max TF version
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Terraform min/max versions
id: minMax
uses: clowdhaus/[email protected]
outputs:
#minVersion: ${{ steps.minMax.outputs.minVersion }} #not used
maxVersion: ${{ steps.minMax.outputs.maxVersion }}
preCommitMaxVersion:
name: Max TF pre-commit
runs-on: ubuntu-latest
needs: getTerraformMinMaxVersion
strategy:
fail-fast: false
matrix:
version:
- ${{ needs.getTerraformMinMaxVersion.outputs.maxVersion }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Python
uses: actions/setup-python@v2
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: ${{ env.GO_VERSION }}
- name: Install Terraform v${{ matrix.version }}
uses: hashicorp/setup-terraform@v1
with:
terraform_version: ${{ matrix.version }}
- name: Install pre-commit dependencies
run: |
pip install pre-commit
make deps
- name: Clean pre-commit cache
run: pre-commit clean
- name: Execute pre-commit max_version
# Run all pre-commit checks on max version supported
if: ${{ matrix.version == needs.getTerraformMinMaxVersion.outputs.maxVersion }}
run: pre-commit run --color=always --show-diff-on-failure --all-files