Skip to content

feat(ci): integrate ci analytics #11

feat(ci): integrate ci analytics

feat(ci): integrate ci analytics #11

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
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 requests boto3 pytest localstack-sdk-python
pip install localstack-ci-extension-plugins/pytest_plugin
pip install localstack
- name: Prepare LocalStack
env:
API_ENDPOINT: 'https://api.staging.aws.localstack.cloud/v1'
LOCALSTACK_API_KEY: ${{ secrets.LOCALSTACK_API_KEY }}
run: |
localstack extensions dev enable ./localstack-ci-extension
- name: Start LocalStack
env:
LS_LOG: trace
DEBUG: 1
EXTENSION_DEV_MODE: 1
DOCKER_FLAGS: -e API_ENDPOINT=https://api.staging.aws.localstack.cloud/v1
API_ENDPOINT: 'https://api.staging.aws.localstack.cloud/v1'
LOCALSTACK_API_KEY: ${{ secrets.LOCALSTACK_API_KEY }}
LOCALSTACK_PROJECT_ID: ${{ secrets.LOCALSTACK_PROJECT_ID }}
LOCALSTACK_PIPELINE_ID: ${{ secrets.LOCALSTACK_PIPELINE_ID }}
run: localstack start
- 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 '[{
"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 '[{
"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