feat(ci): integrate ci analytics #43
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: project_2dc06b1a-1222-4b0f-aad2-f2c967aa2296 | |
LOCALSTACK_PIPELINE_ID: pipeline_08678615-5c69-4da9-9a7a-b8a87e19e949 | |
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: | | |
make install | |
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" : "step", | |
"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" : "step", | |
"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 |