Skip to content

Commit

Permalink
feat(security-keys): Add localstack to github action for testing
Browse files Browse the repository at this point in the history
  • Loading branch information
renemontilva committed Jan 20, 2025
1 parent 80216e0 commit ed03dc0
Show file tree
Hide file tree
Showing 19 changed files with 355 additions and 229 deletions.
271 changes: 69 additions & 202 deletions .github/workflows/security-keys.yml
Original file line number Diff line number Diff line change
@@ -1,205 +1,72 @@
name: "Security Keys Layer: Unit Tests"
on:
pull_request:
branches:
- master
paths:
- apps-devstg/us-east-1/security-keys/**
- apps-devstg/us-east-2/security-keys/**
- apps-prd/us-east-1/security-keys/**
- data-science/us-east-1/security-keys/**
- management/us-east-1/security-keys/**
- network/us-east-1/security-keys/**
- network/us-eat-2/security-keys/**
- security/us-east-1/security-keys/**
- shared/us-east-1/security-keys/**
- shared/us-east-2/security-keys/**

pull_request:
branches:
- master
jobs:
apps-devstg:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.7.0
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
us-east-1:
- 'apps-devstg/us-east-1/security-keys/**'
us-east-2:
- 'apps-devstg/us-east-2/security-keys/**'
- name: Terraform Init on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: apps-devstg/us-east-1/security-keys
run: terraform init
- name: Run Unit Test on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: apps-devstg/us-east-1/security-keys
run: |
terraform test
- name: Terraform Init on us-east-2
if: steps.filter.outputs.us-east-2 == 'true'
working-directory: apps-devstg/us-east-2/security-keys
run: terraform init
- name: Run Unit Test on us-east-2
if: steps.filter.outputs.us-east-2 == 'true'
working-directory: apps-devstg/us-east-2/security-keys
run: |
terraform test
apps-prd:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.7.0
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
us-east-1:
- 'apps-prd/us-east-1/security-keys/**'
- name: Terraform Init on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: apps-prd/us-east-1/security-keys
run: terraform init
- name: Run Unit Test on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: apps-prd/us-east-1/security-keys
run: |
terraform test
data-science:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.7.0
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
us-east-1:
- 'data-science/us-east-1/security-keys/**'
- name: Terraform Init on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: data-science/us-east-1/security-keys
run: terraform init
- name: Run Unit Test on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: data-science/us-east-1/security-keys
run: |
terraform test
management:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.7.0
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
us-east-1:
- 'management/us-east-1/security-keys/**'
- name: Terraform Init on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: management/us-east-1/security-keys
run: terraform init
- name: Run Unit Test on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: management/us-east-1/security-keys
run: |
terraform test
network:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.7.0
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
us-east-1:
- 'network/us-east-1/security-keys/**'
us-east-2:
- 'network/us-east-2/security-keys/**'
- name: Terraform Init on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: network/us-east-1/security-keys
run: terraform init
- name: Run Unit Test on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: network/us-east-1/security-keys
run: |
terraform test
- name: Terraform Init on us-east-2
if: steps.filter.outputs.us-east-2 == 'true'
working-directory: network/us-east-2/security-keys
run: terraform init
- name: Run Unit Test on us-east-2
if: steps.filter.outputs.us-east-2 == 'true'
working-directory: network/us-east-2/security-keys
run: |
terraform test
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.7.0
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
us-east-1:
- 'security/us-east-1/security-keys/**'
- name: Terraform Init on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: security/us-east-1/security-keys
run: terraform init
- name: Run Unit Test on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: security/us-east-1/security-keys
run: |
terraform test
shared:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.7.0
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
us-east-1:
- 'shared/us-east-1/security-keys/**'
us-east-2:
- 'shared/us-east-2/security-keys/**'
- name: Terraform Init on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: shared/us-east-1/security-keys
run: terraform init
- name: Run Unit Test on us-east-1
if: steps.filter.outputs.us-east-1 == 'true'
working-directory: shared/us-east-1/security-keys
run: |
terraform test
- name: Terraform Init on us-east-2
if: steps.filter.outputs.us-east-2 == 'true'
working-directory: shared/us-east-2/security-keys
run: terraform init
- name: Run Unit Test on us-east-2
if: steps.filter.outputs.us-east-2 == 'true'
working-directory: shared/us-east-2/security-keys
run: |
terraform test
testing-security-keys:
strategy:
fail-fast: false
matrix:
terraform_versions:
- 1.7
- 1.8
accounts:
- layer: apps-devstg/us-east-1/security-keys
aws_profile: bb-apps-devstg-devops
aws_region: us-east-1
required_state_file: true
bucket: security
bucket_folder: identities
aws_profile_required_state_file: bb-security-devops
state_file_test_path: tests/terraform.tfstate.template
- layer: apps-devstg/us-east-2/security-keys
aws_profile: bb-apps-devstg-devops
aws_region: us-east-2
required_state_file: false
- layer: apps-prd/us-east-1/security-keys
aws_profile: bb-apps-prd-devops
aws_region: us-east-1
required_state_file: false
- layer: data-science/us-east-1/security-keys
aws_profile: bb-data-science-devops
aws_region: us-east-1
required_state_file: false
- layer: management/us-east-1/security-keys
aws_profile: bb-root-oaar
aws_region: us-east-1
required_state_file: false
- layer: network/us-east-1/security-keys
aws_profile: bb-network-devops
aws_region: us-east-1
required_state_file: false
- layer: network/us-east-2/security-keys
aws_profile: bb-network-devops
aws_region: us-east-2
required_state_file: false
- layer: security/us-east-1/security-keys
aws_profile: bb-security-devops
aws_region: us-east-1
required_state_file: false
- layer: shared/us-east-1/security-keys
aws_profile: bb-shared-devops
aws_region: us-east-1
required_state_file: false
- layer: shared/us-east-2/security-keys
aws_profile: bb-shared-devops
aws_region: us-east-2
required_state_file: false
name: security-keys-layer
uses: ./.github/workflows/testing-workflow.yml
with:
localstack_version: '3.7.2'
terraform_version: ${{ matrix.terraform_versions }}
aws_profile: ${{ matrix.accounts.aws_profile }}
aws_region: ${{ matrix.accounts.aws_region }}
required_state_file: ${{ matrix.accounts.required_state_file }}
state_file_test_path: ${{ matrix.accounts.state_file_test_path }}
bucket_name: ${{ matrix.accounts.bucket }}
bucket_folder: ${{ matrix.accounts.bucket_folder }}
aws_profile_required_state_file: ${{ matrix.accounts.aws_profile_required_state_file }}
working_directory: ${{ matrix.accounts.layer }}

112 changes: 112 additions & 0 deletions .github/workflows/testing-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
name: Testing Workflow

on:
workflow_call:
inputs:
localstack_version:
description: 'Localstack version'
required: true
type: string
default: '3.7.2'
terraform_version:
description: 'Terraform version'
required: true
type: string
default: '1.7.0'
aws_profile:
description: 'AWS profile for localstack'
required: true
type: string
aws_region:
description: 'AWS region for localstack'
required: false
type: string
default: 'us-east-1'
required_state_file:
description: 'If a terraform state file is required for testing'
required: true
type: boolean
default: false
state_file_test_path:
description: 'Path to the terraform state file in the tests folder'
required: false
type: string
bucket_name:
description: 'Name of the S3 bucket to store the terraform state file'
required: false
type: string
bucket_folder:
description: 'Folder in the S3 bucket to store the terraform state file'
required: false
type: string
aws_profile_required_state_file:
description: 'AWS profile of data terraform state for getting value of another layer'
required: false
type: string
working_directory:
description: 'Working directory for the terraform code'
required: true
type: string
jobs:
testing:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check tests folder
id: check-tests
working-directory: ${{ inputs.working_directory }}
run: |
if [ -d tests ]; then
echo "hasTests=true" >> $GITHUB_OUTPUT
else
echo "hasTests=false" >> $GITHUB_OUTPUT
fi
- uses: hashicorp/setup-terraform@v3
if: steps.check-tests.outputs.hasTests == 'true'
with:
terraform_version: ${{ inputs.terraform_version }}
- name: Install tflocal
if: steps.check-tests.outputs.hasTests == 'true'
run: |
pip install terraform-local
- uses: LocalStack/setup-localstack@v0.2.3
if: steps.check-tests.outputs.hasTests == 'true'
with:
image-tag: ${{ inputs.localstack_version }}
install-awslocal: true
- name: Configure AWS Credentials for Localstack
if: steps.check-tests.outputs.hasTests == 'true'
run: |
awslocal configure set aws_access_key_id fake --profile ${{ inputs.aws_profile }}
awslocal configure set aws_secret_access_key fake --profile ${{ inputs.aws_profile }}
awslocal configure set region ${{ inputs.aws_region }} --profile ${{ inputs.aws_profile }}
awslocal configure set endpoint_url http://localhost:4566 --profile ${{ inputs.aws_profile }}
- name: Configure AWS Credentials for Required State File
if: ${{ inputs.required_state_file && steps.check-tests.outputs.hasTests == 'true' }}
run: |
awslocal configure set aws_access_key_id fake --profile ${{ inputs.aws_profile_required_state_file }}
awslocal configure set aws_secret_access_key fake --profile ${{ inputs.aws_profile_required_state_file }}
awslocal configure set region ${{ inputs.aws_region }} --profile ${{ inputs.aws_profile_required_state_file }}
awslocal configure set endpoint_url http://localhost:4566 --profile ${{ inputs.aws_profile_required_state_file }}
- name: Create S3 Buckets
if: ${{ inputs.required_state_file && steps.check-tests.outputs.hasTests == 'true' }}
run: |
awslocal s3 mb s3://${{ inputs.bucket_name }} --region ${{ inputs.aws_region }}
- name: Copy Terraform State File for testing to S3 Bucket
if: ${{ inputs.required_state_file && steps.check-tests.outputs.hasTests == 'true' }}
run: |
awslocal s3 cp ${{ inputs.working_directory }}/${{ inputs.state_file_test_path}} s3://${{ inputs.bucket_name }}/${{inputs.bucket_folder }}/terraform.tfstate
- name: Terraform Init
if: steps.check-tests.outputs.hasTests == 'true'
working-directory: ${{ inputs.working_directory }}
run: tflocal init -upgrade
- name: Run Test
if: steps.check-tests.outputs.hasTests == 'true'
working-directory: ${{ inputs.working_directory }}
env:
AWS_DEFAULT_REGION: ${{ inputs.aws_region }}
AWS_ACCESS_KEY_ID: fake
AWS_SECRET_ACCESS_KEY: fake
run: |
cp ../../../config/common.tfvars.example ../../../config/common.tfvars
tflocal test -var-file=../../../config/common.tfvars -var-file=../../config/account.tfvars -var-file=../../config/backend.tfvars
Loading

0 comments on commit ed03dc0

Please sign in to comment.