Skip to content

feat: Add a check for monogodb uri corruption (#19) #35

feat: Add a check for monogodb uri corruption (#19)

feat: Add a check for monogodb uri corruption (#19) #35

name: Smoke Test Services
on:
push:
branches:
- main
paths:
- 'on-prem/docker-compose.*.yml'
- 'on-prem/templates/**'
- 'on-prem/scripts/**'
- 'on-prem/.env.example'
pull_request:
paths:
- 'on-prem/docker-compose.*.yml'
- 'on-prem/templates/**'
- 'on-prem/scripts/**'
- 'on-prem/.env.example'
workflow_dispatch:
jobs:
smoke-test:
name: API Smoke Test
runs-on: ubuntu-latest
permissions:
id-token: write # Required for OIDC
contents: read # Required for checkout
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::761136292957:role/GitHubActions-CurrentsDevDocker-ECRPull
aws-region: us-east-1
- name: Login to Currents ECR
uses: aws-actions/amazon-ecr-login@v2
with:
registries: "513558712013"
- name: Setup environment
working-directory: on-prem
run: ./scripts/setup.sh --env-only --force
# ==========================================================================
# Start services
# ==========================================================================
- name: Start infrastructure services
working-directory: on-prem
run: docker compose -f docker-compose.full.yml up -d redis mongodb
- name: Wait for Redis
working-directory: on-prem
run: ./scripts/smoke-test/wait-for-redis.sh
- name: Wait for MongoDB
working-directory: on-prem
run: ./scripts/smoke-test/wait-for-mongodb.sh
- name: Start application services
working-directory: on-prem
run: docker compose -f docker-compose.full.yml up -d scheduler api
- name: Wait for API
working-directory: on-prem
run: ./scripts/smoke-test/wait-for-api.sh
- name: Wait for root user
working-directory: on-prem
run: ./scripts/smoke-test/wait-for-root-user.sh
- name: Seed database
id: seed
working-directory: on-prem
run: |
echo "Seeding database with test data..."
eval $(./scripts/smoke-test/seed-database.sh)
echo "api_key=${API_KEY}" >> $GITHUB_OUTPUT
echo "project_id=${PROJECT_ID}" >> $GITHUB_OUTPUT
# ==========================================================================
# API Tests - Part 1: Create and Fetch
# ==========================================================================
- name: "API Test: Create action"
id: create_action
working-directory: on-prem
run: |
eval $(./scripts/smoke-test/api-test-create.sh "${{ steps.seed.outputs.api_key }}" "${{ steps.seed.outputs.project_id }}")
echo "action_id=${ACTION_ID}" >> $GITHUB_OUTPUT
echo "test_name=${TEST_NAME}" >> $GITHUB_OUTPUT
- name: "API Test: Fetch action"
working-directory: on-prem
run: ./scripts/smoke-test/api-test-fetch.sh "${{ steps.seed.outputs.api_key }}" "${{ steps.create_action.outputs.action_id }}" "${{ steps.create_action.outputs.test_name }}"
# ==========================================================================
# Backup/Restore Test
# ==========================================================================
- name: Create MongoDB backup
working-directory: on-prem
run: |
source .env
echo "Creating MongoDB backup..."
docker compose -f docker-compose.full.yml exec -T mongodb mongodump \
-u "$MONGODB_USERNAME" -p "$MONGODB_PASSWORD" --authenticationDatabase admin \
--archive=/data/db/backup.archive
docker compose -f docker-compose.full.yml cp mongodb:/data/db/backup.archive ./mongodb-backup.archive
echo "✅ Backup created"
- name: Stop services and destroy data
working-directory: on-prem
run: |
docker compose -f docker-compose.full.yml down -v --remove-orphans
sudo rm -rf data
echo "✅ Data destroyed"
- name: Restart infrastructure services
working-directory: on-prem
run: |
mkdir -p data/mongodb data/redis data/startup
docker compose -f docker-compose.full.yml up -d redis mongodb
- name: Wait for MongoDB (after restart)
working-directory: on-prem
run: ./scripts/smoke-test/wait-for-mongodb.sh
- name: Restore MongoDB backup
working-directory: on-prem
run: |
source .env
echo "Restoring MongoDB backup..."
docker compose -f docker-compose.full.yml cp ./mongodb-backup.archive mongodb:/data/db/backup.archive
docker compose -f docker-compose.full.yml exec -T mongodb mongorestore \
-u "$MONGODB_USERNAME" -p "$MONGODB_PASSWORD" --authenticationDatabase admin \
--archive=/data/db/backup.archive --drop
docker compose -f docker-compose.full.yml exec -T mongodb rm /data/db/backup.archive
echo "✅ Backup restored"
- name: Restart application services
working-directory: on-prem
run: docker compose -f docker-compose.full.yml up -d scheduler api
- name: Wait for API (after restore)
working-directory: on-prem
run: ./scripts/smoke-test/wait-for-api.sh
# ==========================================================================
# API Tests - Part 2: Verify restore and cleanup
# ==========================================================================
- name: "API Test: Fetch action (after restore)"
working-directory: on-prem
run: ./scripts/smoke-test/api-test-fetch.sh "${{ steps.seed.outputs.api_key }}" "${{ steps.create_action.outputs.action_id }}" "${{ steps.create_action.outputs.test_name }}"
- name: "API Test: Delete action"
working-directory: on-prem
run: ./scripts/smoke-test/api-test-delete.sh "${{ steps.seed.outputs.api_key }}" "${{ steps.create_action.outputs.action_id }}"
- name: Test summary
run: |
echo "=========================================="
echo "✅ All tests passed!"
echo "=========================================="
echo "Verified:"
echo " - POST /actions (create)"
echo " - GET /actions (read)"
echo " - MongoDB backup/restore"
echo " - GET /actions (read after restore)"
echo " - DELETE /actions (delete)"
- name: Cleanup
if: always()
working-directory: on-prem
run: |
docker compose -f docker-compose.full.yml down -v --remove-orphans
rm -f mongodb-backup.archive