Instead of trying to use workflow runner tools (act/act_runner), the script now directly runs the docker-compose command that CI uses. This is: - More accurate (exact same command as CI) - Simpler (no additional tools needed) - Faster (no workflow interpretation overhead) - Easier to debug (direct access to service logs) The CI workflow literally runs `docker compose -f docker-compose.ci.yml`, so running that locally is the most accurate way to test. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
86 lines
2.9 KiB
Markdown
86 lines
2.9 KiB
Markdown
# Development Scripts
|
|
|
|
## test-ci-locally.sh
|
|
|
|
Tests the CI workflow locally by running the **exact same docker-compose command** that the Gitea Actions workflow runs.
|
|
|
|
### Purpose
|
|
|
|
When CI tests fail, this script reproduces the exact CI environment locally to debug issues without repeatedly pushing to trigger CI runs. It runs `docker-compose.ci.yml` with the same parameters as the CI workflow, so you're testing in an identical environment.
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
./scripts/test-ci-locally.sh
|
|
```
|
|
|
|
Or run docker-compose directly (this is what the script does):
|
|
|
|
```bash
|
|
docker compose -f docker-compose.ci.yml --profile test up \
|
|
--abort-on-container-exit \
|
|
--exit-code-from magnitude
|
|
```
|
|
|
|
### What it does
|
|
|
|
1. Checks that `.env` file exists
|
|
2. Runs `docker compose -f docker-compose.ci.yml --profile test up`
|
|
3. This starts all services:
|
|
- **surrealdb**: In-memory database with health check
|
|
- **nextjs**: Node.js container running `pnpm dev` with health check
|
|
- **magnitude**: Playwright container running the test suite
|
|
4. Waits for tests to complete
|
|
5. Exits with magnitude's exit code
|
|
6. Shows service logs on failure
|
|
7. Cleans up containers and volumes
|
|
|
|
### Requirements
|
|
|
|
- Docker and docker-compose installed
|
|
- `.env` file with test credentials
|
|
|
|
### Services Architecture
|
|
|
|
The script starts a containerized test environment with proper health checks and dependencies:
|
|
|
|
```
|
|
magnitude (Playwright container - runs tests)
|
|
↓ depends on (waits for health check)
|
|
nextjs (Node.js container - runs pnpm dev)
|
|
↓ depends on (waits for health check)
|
|
surrealdb (SurrealDB container - in-memory mode)
|
|
```
|
|
|
|
All services share the same network:
|
|
- Next.js accesses SurrealDB via `ws://surrealdb:8000/rpc`
|
|
- Magnitude accesses Next.js via `http://localhost:3000`
|
|
|
|
### Why This Approach?
|
|
|
|
This is simpler and more accurate than using workflow runner tools like `act` or `act_runner` because:
|
|
|
|
1. **Identical to CI**: The CI workflow (`.gitea/workflows/magnitude.yml`) literally runs this docker-compose command, so you're testing the exact same thing
|
|
2. **No Additional Tools**: Doesn't require `act`, `act_runner`, or any workflow execution tools
|
|
3. **Direct Debugging**: Runs the actual test commands directly, making it easier to see what's happening
|
|
4. **Faster**: No overhead from workflow interpretation or runner setup
|
|
|
|
### Debugging CI Failures
|
|
|
|
If Gitea Actions fail:
|
|
|
|
1. Check the workflow logs for errors in Gitea UI
|
|
2. Run `./scripts/test-ci-locally.sh` to reproduce **exactly**
|
|
3. The script will show the same output as CI
|
|
4. Debug with docker-compose logs if needed:
|
|
```bash
|
|
docker compose -f docker-compose.ci.yml logs surrealdb
|
|
docker compose -f docker-compose.ci.yml logs nextjs
|
|
docker compose -f docker-compose.ci.yml logs magnitude
|
|
```
|
|
5. Fix issues locally
|
|
6. Run script again to verify fix
|
|
7. Commit and push once tests pass locally
|
|
|
|
This is **much** faster than debugging via CI push cycles and gives you identical results!
|