mirror of
https://github.com/storytold/terraform-aws-observability-accelerator.git
synced 2026-10-24 08:15:22 +00:00
Plan examples workflow (#53)
Co-authored-by: Bonthu <vabonthu@c889f3b8acd3.ant.amazon.com>
This commit is contained in:
@@ -0,0 +1,25 @@
|
|||||||
|
import json
|
||||||
|
import glob
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
def get_examples():
|
||||||
|
"""
|
||||||
|
Get all Terraform example root directories using their respective `versions.tf`;
|
||||||
|
returning a string formatted json array of the example directories minus those that are excluded
|
||||||
|
"""
|
||||||
|
exclude = {
|
||||||
|
'', # Add examples here to exclude from terraform plan
|
||||||
|
}
|
||||||
|
|
||||||
|
projects = {
|
||||||
|
x.replace('/versions.tf', '')
|
||||||
|
for x in glob.glob('examples/**/versions.tf', recursive=True)
|
||||||
|
if not re.match(r'^.+/_', x)
|
||||||
|
}
|
||||||
|
|
||||||
|
print(json.dumps(list(projects.difference(exclude))))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
get_examples()
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
name: plan-examples
|
||||||
|
|
||||||
|
on:
|
||||||
|
# Review https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ and better understand the risks of using pull_request_target before making major changes to this workflow.
|
||||||
|
pull_request_target:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
getExampleDirectories:
|
||||||
|
name: Get example directories
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
# Do not remove environment setup without considering changes to pull_request_target and checkout of PR, as it may lead to checks running automatically against malicious code in PRs.
|
||||||
|
environment: Observability Test
|
||||||
|
# Skip running on forks since it won't have access to secrets
|
||||||
|
if: github.repository == 'aws-observability/terraform-aws-observability-accelerator'
|
||||||
|
outputs:
|
||||||
|
directories: ${{ steps.dirs.outputs.directories }}
|
||||||
|
steps:
|
||||||
|
# Be careful not to change this to explicit checkout from PR ref/code, as below we run a python code that may change from the PR code.
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Get Terraform directories for evaluation
|
||||||
|
id: dirs
|
||||||
|
run: |
|
||||||
|
DIRS=$(python3 .github/workflows/plan-examples.py)
|
||||||
|
echo "::set-output name=directories::$DIRS"
|
||||||
|
|
||||||
|
plan:
|
||||||
|
name: Plan examples
|
||||||
|
needs: getExampleDirectories
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
# Skip running on forks since it won't have access to secrets
|
||||||
|
if: github.repository == 'aws-observability/terraform-aws-observability-accelerator'
|
||||||
|
|
||||||
|
# These permissions are needed to interact with GitHub's OIDC Token endpoint.
|
||||||
|
permissions:
|
||||||
|
id-token: write
|
||||||
|
contents: read
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
directory: ${{ fromJson(needs.getExampleDirectories.outputs.directories) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Remove default Terraform
|
||||||
|
run: rm -rf $(which terraform)
|
||||||
|
|
||||||
|
- name: checkout-merge
|
||||||
|
if: "contains(github.event_name, 'pull_request')"
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
ref: refs/pull/${{github.event.pull_request.number}}/merge
|
||||||
|
|
||||||
|
- name: checkout
|
||||||
|
if: "!contains(github.event_name, 'pull_request')"
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- uses: dorny/paths-filter@v2
|
||||||
|
id: changes
|
||||||
|
with:
|
||||||
|
# Need to check not only the example directory
|
||||||
|
# but also the supporting module(s) code
|
||||||
|
# for plans (not for pre-commit)
|
||||||
|
filters: |
|
||||||
|
src:
|
||||||
|
- '${{ matrix.directory }}/**/*.(tf|yml|yaml)'
|
||||||
|
- 'modules/**/*.(tf|yml|yaml)'
|
||||||
|
- '*.tf'
|
||||||
|
|
||||||
|
- name: Configure AWS credentials from Test account
|
||||||
|
uses: aws-actions/configure-aws-credentials@v1
|
||||||
|
if: steps.changes.outputs.src== 'true'
|
||||||
|
with:
|
||||||
|
role-to-assume: ${{ secrets.ROLE_TO_ASSUME }}
|
||||||
|
aws-region: us-west-2
|
||||||
|
role-duration-seconds: 3600
|
||||||
|
role-session-name: GithubActions-Session
|
||||||
|
|
||||||
|
- name: Terraform Job
|
||||||
|
uses: hashicorp/setup-terraform@v2
|
||||||
|
if: steps.changes.outputs.src== 'true'
|
||||||
|
with:
|
||||||
|
terraform_version: 1.0.0
|
||||||
|
|
||||||
|
- if: steps.changes.outputs.src== 'true'
|
||||||
|
run: terraform version
|
||||||
|
|
||||||
|
- name: Terraform Init
|
||||||
|
if: steps.changes.outputs.src== 'true'
|
||||||
|
run: terraform init -reconfigure
|
||||||
|
working-directory: ${{ matrix.directory }}
|
||||||
|
|
||||||
|
- name: Terraform Plan
|
||||||
|
if: steps.changes.outputs.src== 'true'
|
||||||
|
working-directory: ${{ matrix.directory }}
|
||||||
|
run: terraform plan -no-color
|
||||||
@@ -44,10 +44,6 @@ jobs:
|
|||||||
- name: Remove default Terraform
|
- name: Remove default Terraform
|
||||||
run: rm -rf $(which terraform)
|
run: rm -rf $(which terraform)
|
||||||
|
|
||||||
- name: Should fail
|
|
||||||
continue-on-error: true
|
|
||||||
run: terraform version
|
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
@@ -80,25 +76,22 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
directory: ${{ matrix.directory }}
|
directory: ${{ matrix.directory }}
|
||||||
|
|
||||||
- name: Pre-commit Terraform 1.1.0 #${{ steps.minMax.outputs.minVersion }}
|
- name: Pre-commit Terraform ${{ steps.minMax.outputs.minVersion }}
|
||||||
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.6.0
|
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.6.0
|
||||||
# Run only validate pre-commit check on min version supported
|
# Run only validate pre-commit check on min version supported
|
||||||
if: ${{ matrix.directory != '.' && steps.changes.outputs.src== 'true' }}
|
if: ${{ matrix.directory != '.' && steps.changes.outputs.src== 'true' }}
|
||||||
with:
|
with:
|
||||||
terraform-version: 1.1.0 # ${{ steps.minMax.outputs.minVersion }}
|
terraform-version: ${{ steps.minMax.outputs.minVersion }}
|
||||||
args: 'terraform_validate --color=always --show-diff-on-failure --files ${{ matrix.directory }}/*'
|
args: 'terraform_validate --color=always --show-diff-on-failure --files ${{ matrix.directory }}/*'
|
||||||
|
|
||||||
- name: Pre-commit Terraform 1.1.0 #${{ steps.minMax.outputs.minVersion }}
|
- name: Pre-commit Terraform ${{ steps.minMax.outputs.minVersion }}
|
||||||
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.6.0
|
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.6.0
|
||||||
# Run only validate pre-commit check on min version supported
|
# Run only validate pre-commit check on min version supported
|
||||||
if: ${{ matrix.directory == '.' && steps.changes.outputs.src== 'true' }}
|
if: ${{ matrix.directory == '.' && steps.changes.outputs.src== 'true' }}
|
||||||
with:
|
with:
|
||||||
terraform-version: 1.1.0 #${{ steps.minMax.outputs.minVersion }}
|
terraform-version: ${{ steps.minMax.outputs.minVersion }}
|
||||||
args: 'terraform_validate --color=always --show-diff-on-failure --files $(ls *.tf)'
|
args: 'terraform_validate --color=always --show-diff-on-failure --files $(ls *.tf)'
|
||||||
|
|
||||||
- if: steps.changes.outputs.src== 'true'
|
|
||||||
run: terraform version
|
|
||||||
|
|
||||||
preCommitMaxVersion:
|
preCommitMaxVersion:
|
||||||
name: Max TF pre-commit
|
name: Max TF pre-commit
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -107,10 +100,6 @@ jobs:
|
|||||||
- name: Remove default Terraform
|
- name: Remove default Terraform
|
||||||
run: rm -rf $(which terraform)
|
run: rm -rf $(which terraform)
|
||||||
|
|
||||||
- name: Should fail
|
|
||||||
continue-on-error: true
|
|
||||||
run: terraform version
|
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
@@ -142,14 +131,10 @@ jobs:
|
|||||||
uses: clowdhaus/terraform-min-max@v1.0.7
|
uses: clowdhaus/terraform-min-max@v1.0.7
|
||||||
if: steps.changes.outputs.src== 'true'
|
if: steps.changes.outputs.src== 'true'
|
||||||
|
|
||||||
# TODO - remove hardcoded version once optional attributes are resolved/removed
|
- name: Pre-commit Terraform ${{ steps.minMax.outputs.maxVersion }}
|
||||||
- name: Pre-commit Terraform 1.2.9 # ${{ steps.minMax.outputs.maxVersion }}
|
|
||||||
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.6.0
|
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.6.0
|
||||||
if: steps.changes.outputs.src== 'true'
|
if: steps.changes.outputs.src== 'true'
|
||||||
with:
|
with:
|
||||||
terraform-version: 1.2.9 # ${{ steps.minMax.outputs.maxVersion }}
|
terraform-version: ${{ steps.minMax.outputs.maxVersion }}
|
||||||
terraform-docs-version: ${{ env.TERRAFORM_DOCS_VERSION }}
|
terraform-docs-version: ${{ env.TERRAFORM_DOCS_VERSION }}
|
||||||
tflint-version: ${{ env.TFLINT_VERSION }}
|
tflint-version: ${{ env.TFLINT_VERSION }}
|
||||||
|
|
||||||
- if: steps.changes.outputs.src== 'true'
|
|
||||||
run: terraform version
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
name: 'Stale issue & PR handler'
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@main
|
||||||
|
id: stale
|
||||||
|
with:
|
||||||
|
ascending: true
|
||||||
|
close-issue-message: 'Issue closed due to inactivity.'
|
||||||
|
close-pr-message: 'Pull request closed due to inactivity.'
|
||||||
|
days-before-close: 10
|
||||||
|
days-before-stale: 30
|
||||||
|
stale-issue-label: stale
|
||||||
|
stale-pr-label: stale
|
||||||
|
# Not stale if have this labels
|
||||||
|
exempt-issue-labels: 'bug,enhancement'
|
||||||
|
exempt-pr-labels: 'bug,enhancement'
|
||||||
|
operations-per-run: 100
|
||||||
|
stale-issue-message: |
|
||||||
|
This issue has been automatically marked as stale because it has been open 30 days
|
||||||
|
with no activity. Remove stale label or comment or this issue will be closed in 10 days
|
||||||
|
stale-pr-message: |
|
||||||
|
This PR has been automatically marked as stale because it has been open 30 days
|
||||||
|
with no activity. Remove stale label or comment or this PR will be closed in 10 days
|
||||||
Reference in New Issue
Block a user