diff --git a/.github/workflows/cdk.yml b/.github/workflows/cdk.yml new file mode 100644 index 0000000..709854d --- /dev/null +++ b/.github/workflows/cdk.yml @@ -0,0 +1,86 @@ +name: Deploy using CDK + +on: + push: + paths-ignore: + - 'README.md' + branches: + - main + pull_request: + branches: + - main + schedule: + # “At 00:00 on Sunday.” + - cron: "0 0 * * 0" + workflow_dispatch: + +jobs: + cdk: + name: Setup infrastructure using CDK + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 20 + + - name: Install CDK + run: | + npm install -g aws-cdk-local aws-cdk + cdklocal --version + + - name: Install dependencies + run: | + cd cdk + pip3 install -r requirements.txt + + - name: Start LocalStack + uses: LocalStack/setup-localstack@v0.2.3 + with: + image-tag: 'latest' + use-pro: 'true' + configuration: DEBUG=1 + install-awslocal: 'true' + env: + LOCALSTACK_API_KEY: ${{ secrets.LOCALSTACK_API_KEY }} + + - name: Deploy using CDK + run: | + cd cdk && cdklocal bootstrap + cd .. + AWS_CMD=awslocal CDK_CMD=cdklocal bash ./bin/deploy_cdk.sh + + - name: List the resources + run: | + awslocal lambda list-functions + awslocal sqs list-queues + awslocal dynamodb list-tables + awslocal s3 ls + + - 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@v3 + with: + name: diagnose.json.gz + path: ./diagnose.json.gz