diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 9890482..edefbb3 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -26,7 +26,82 @@ on: jobs: - run-it-tests-job: + run-terraform-deployment: + name: Run Terraform Deployment + runs-on: ${{ inputs.runner-os || 'ubuntu-latest' }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python 3.11 + id: setup-python + uses: actions/setup-python@v2 + with: + python-version: 3.11 + + - name: Install Terraform + uses: hashicorp/setup-terraform@v3 + + - name: Install Terraform Local + run: | + pip install --upgrade terraform-local + + - name: Set up Project + run: | + pip install -r requirements-dev.txt + + - name: Start LocalStack + uses: LocalStack/setup-localstack@v0.2.4 + with: + image-tag: 'latest' + use-pro: 'true' + configuration: LS_LOG=trace + install-awslocal: 'true' + env: + LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} + + - name: Build lambdas + run: | + bin/build_lambdas.sh + + - name: Deploy infrastructure + run: | + cd deployment/terraform + tflocal init + tflocal apply --auto-approve + + - name: Show localstack logs + if: always() + run: | + localstack logs + + - name: Send a Slack notification + if: failure() || github.event_name != 'pull_request' + uses: ravsamhq/notify-slack-action@v2 + with: + status: ${{ job.status }} + token: ${{ secrets.GITHUB_TOKEN }} + notification_title: "{workflow} has {status_message}" + message_format: "{emoji} *{workflow}* {status_message} in <{repo_url}|{repo}>" + footer: "Linked Repo <{repo_url}|{repo}> | <{run_url}|View Workflow run>" + notify_when: "failure" + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + + - name: Generate a Diagnostic Report + if: failure() + run: | + curl -s localhost:4566/_localstack/diagnose | gzip -cf > diagnose.json.gz + + - name: Upload the Diagnostic Report + if: failure() + uses: actions/upload-artifact@v4 + with: + name: diagnose.json.gz + path: ./diagnose.json.gz + + run-integration-tests-job: + name: Run Integration Tests runs-on: ${{ inputs.runner-os || 'ubuntu-latest' }} steps: - name: Checkout diff --git a/deployment/terraform/main.tf b/deployment/terraform/main.tf index a70c437..c647b4b 100644 --- a/deployment/terraform/main.tf +++ b/deployment/terraform/main.tf @@ -1,17 +1,3 @@ -terraform { - required_providers { - aws = { - source = "hashicorp/aws" - version = "<= 5.72.1" - } - } -} - -provider "aws" { - region = "us-east-1" - skip_requesting_account_id = true -} - locals { # TO-DO: The environment variable STAGE is required for Lambdas to connect to LocalStack endpoints. # The environment variable can be removed once Lambdas are adapted to support transparent endpoint injection. @@ -335,4 +321,4 @@ output "list_lambda_function_url" { output "cloudfront_url" { value = "Now open the Web app under: http://${aws_cloudfront_distribution.cdn.domain_name}" -} \ No newline at end of file +}