Skip to content

feat(ci): integrate ci analytics #37

feat(ci): integrate ci analytics

feat(ci): integrate ci analytics #37

name: Run Integration Tests
on:
push:
branches:
- main
pull_request:
branches:
- main
schedule:
# “At 00:00 on Sunday.”
- cron: "0 0 * * 0"
workflow_dispatch:
inputs:
runner-os:
default: ubuntu-latest
type: choice
options:
- ubuntu-latest
env:
LOCALSTACK_API_KEY: ${{ secrets.LOCALSTACK_API_KEY }}
LOCALSTACK_PROJECT_ID: ${{ secrets.LOCALSTACK_PROJECT_ID }}
LOCALSTACK_PIPELINE_ID: ${{ secrets.LOCALSTACK_PIPELINE_ID }}
jobs:
integration-test-job:
name: Run integration tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Checkout CI Extension
uses: actions/checkout@v4
with:
token: ${{ secrets.GH_PULL_TOKEN }}
repository: localstack/localstack-ci-extension
path: localstack-ci-extension
- name: Checkout CI Extension Plugin
uses: actions/checkout@v4
with:
token: ${{ secrets.GH_PULL_TOKEN }}
repository: localstack/localstack-ci-extension-plugins
path: localstack-ci-extension-plugins
- name: Set up Python 3.11
id: setup-python
uses: actions/setup-python@v2
with:
python-version: 3.11
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Set up Dependencies
run: |
pip install localstack requests boto3 pytest localstack-sdk-python awscli-local
pip install localstack-ci-extension-plugins/pytest_plugin
cd localstack-ci-extension && pip install -e . && cd -
- name: Prepare LocalStack
run: |
LOCALSTACK_API_KEY=$LOCALSTACK_API_KEY \
API_ENDPOINT=https://api.staging.aws.localstack.cloud/v1 \
localstack extensions dev enable ./localstack-ci-extension
- name: Start LocalStack
run: |
DEBUG=1 \
LOCALSTACK_API_KEY=$LOCALSTACK_API_KEY \
LOCALSTACK_PROJECT_ID=$LOCALSTACK_PROJECT_ID \
LOCALSTACK_PIPELINE_ID=$LOCALSTACK_PIPELINE_ID \
DOCKER_FLAGS="-e API_ENDPOINT=https://api.staging.aws.localstack.cloud/v1" \
API_ENDPOINT=https://api.staging.aws.localstack.cloud/v1 \
DNS_NAME_PATTERNS_TO_RESOLVE_UPSTREAM="*cianalyticsbucket*" \
EXTENSION_DEV_MODE=1 \
localstack start -d
- name: Wait for LocalStack to be ready
run: |
echo "Waiting for LocalStack CI extension to activate..."
for i in {1..10}; do
if localstack logs | grep -q "activated CI Extension"; then
echo "CI extension activated. Proceeding..."
exit 0
fi
sleep 5
done
echo "CI extension not activated in time. Failing..."
exit 1
- name: Deploy infrastructure
run: |
START_TIME=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")
bash bin/deploy.sh
END_TIME=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")
curl -X POST http://localhost:4566/_localstack/extensions/ci/steps \
-H "Content-Type: application/json" \
-d '{
"steps": [
{
"step_id": "deploy",
"name": "Deploy Infrastructure",
"step_type" : "deploy",
"state": "passed",
"time_start": "'"$START_TIME"'",
"time_end": "'"$END_TIME"'"
}
]
}'
START_TIME=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")
bash bin/seed.sh
END_TIME=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")
curl -X POST http://localhost:4566/_localstack/extensions/ci/steps \
-H "Content-Type: application/json" \
-d '{
"steps": [
{
"step_id": "seed",
"name": "Seed Data",
"step_type" : "deploy",
"state": "passed",
"time_start": "'"$START_TIME"'",
"time_end": "'"$END_TIME"'"
}
]
}'
- name: Run Tests
env:
AWS_DEFAULT_REGION: us-east-1
AWS_REGION: us-east-1
AWS_ACCESS_KEY_ID: test
AWS_SECRET_ACCESS_KEY: test
run: |
pytest tests
- name: Show localstack logs
if: always()
run: |
localstack logs
- 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