feat: Add BETA role checks and include user roles #81
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: API Load Test | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| jobs: | |
| load-test: | |
| name: Incremental Load Test (1 CPU / 4GB) | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 30 | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Create Docker network | |
| run: docker network create loadtest-net | |
| - name: Build API image | |
| run: docker build -t job-tracker:loadtest . | |
| - name: Start MariaDB (test) | |
| run: | | |
| docker run -d \ | |
| --name loadtest-db \ | |
| --network loadtest-net \ | |
| -e MARIADB_ROOT_PASSWORD=root \ | |
| -e MARIADB_DATABASE=jobtracker \ | |
| -e MARIADB_USER=jobtracker \ | |
| -e MARIADB_PASSWORD=jobtracker \ | |
| mariadb:11 | |
| - name: Wait for MariaDB | |
| run: | | |
| for i in {1..30}; do | |
| if docker exec loadtest-db mariadb-admin ping -h 127.0.0.1 -uroot -proot --silent; then | |
| echo "MariaDB is ready" | |
| exit 0 | |
| fi | |
| echo "Waiting for MariaDB... ($i/30)" | |
| sleep 2 | |
| done | |
| echo "MariaDB did not become ready in time" | |
| exit 1 | |
| - name: Start API with server-like limits (1 CPU / 4GB) | |
| run: | | |
| docker run -d \ | |
| --name loadtest-api \ | |
| --network loadtest-net \ | |
| --cpus=1 \ | |
| --memory=4g \ | |
| --memory-swap=4g \ | |
| -p 8080:8080 \ | |
| -p 8081:8081 \ | |
| -e DB_URL="jdbc:mariadb://loadtest-db:3306/jobtracker?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useUnicode=true" \ | |
| -e DB_USERNAME="jobtracker" \ | |
| -e DB_PASSWORD="jobtracker" \ | |
| -e JWT_SECRET="LoadTestSecretKeyThatIsAtLeast256BitsLongAndOnlyForGithubActions" \ | |
| -e CORS_ALLOWED_ORIGINS="http://localhost:3000,http://localhost:5173" \ | |
| -e OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317" \ | |
| -e PROMETHEUS_URL="http://localhost:9090" \ | |
| -e MANAGEMENT_TRACING_ENABLED=false \ | |
| -e OTEL_TRACES_EXPORTER=none \ | |
| job-tracker:loadtest | |
| - name: Wait for API health | |
| shell: bash | |
| run: | | |
| for attempt in {1..30}; do | |
| if curl -s -o /dev/null -w "%{http_code}" http://localhost:8081/actuator/health | grep -q -E "200"; then | |
| break | |
| elif curl -s -X POST -H "Content-Type: application/json" -d '{"email":"ci@teste.com", "password":"senha"}' -o /dev/null -w "%{http_code}" http://localhost:8080/api/v1/auth/login | grep -q -E "200|400|401|403"; then | |
| break | |
| fi | |
| sleep 5 | |
| done | |
| if [ $attempt -eq 30 ]; then | |
| docker compose -f docker-compose.test.yml logs | |
| exit 1 | |
| fi | |
| - name: Run incremental k6 load test | |
| run: | | |
| chmod -R 777 "${{ github.workspace }}/load-tests" | |
| docker run --rm \ | |
| --network host \ | |
| --user $(id -u):$(id -g) \ | |
| -e BASE_URL="http://127.0.0.1:8080" \ | |
| -e LOAD_TEST_EMAIL="loadtest@example.com" \ | |
| -e LOAD_TEST_PASSWORD="LoadTest#123" \ | |
| -v "${{ github.workspace }}/load-tests:/load-tests" \ | |
| grafana/k6:0.50.0 \ | |
| run /load-tests/api-load-test.js --summary-export=/load-tests/summary.json | |
| - name: Upload k6 reports | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: k6-load-test-results | |
| path: | | |
| load-tests/summary.json | |
| load-tests/report.html | |
| - name: Show API logs on failure | |
| if: failure() | |
| run: docker logs loadtest-api || true | |
| - name: Stop containers | |
| if: always() | |
| run: | | |
| docker rm -f loadtest-api loadtest-db || true | |
| docker network rm loadtest-net || true |