feat: Add a check for monogodb uri corruption (#19) #35
This file contains hidden or 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: 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 |