0
0
mirror of https://github.com/go-gitea/gitea.git synced 2026-02-22 21:53:17 +01:00
gitea/tools/test-e2e.sh
silverwind f6037c90d3
Rework e2e test setup for full isolation
Always start an isolated ephemeral Gitea instance with its own temp
directory, SQLite database, and config file. This addresses review
feedback that using the developer's existing instance is unreliable.

- Rewrite test-e2e.sh to create a temp workdir, find a free port,
  write a minimal app.ini, start the server, and clean up on exit
- Build a separate gitea-e2e binary using TEST_TAGS (includes sqlite)
- Simplify CI workflow: remove manual app.ini, server start, and
  redundant build steps
- Rename all env vars to use GITEA_TEST_E2E_* prefix
- Rename test user from "e2e" to "e2e-user"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 03:59:33 +01:00

91 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# Create isolated work directory
WORK_DIR=$(mktemp -d)
# Find a random free port
FREE_PORT=$(node -e "const s=require('net').createServer();s.listen(0,'127.0.0.1',()=>{console.log(s.address().port);s.close()})")
cleanup() {
if [ -n "${SERVER_PID:-}" ]; then
kill "$SERVER_PID" 2>/dev/null || true
wait "$SERVER_PID" 2>/dev/null || true
fi
rm -rf "$WORK_DIR"
}
trap cleanup EXIT
# Write config file for isolated instance
mkdir -p "$WORK_DIR/custom/conf"
cat > "$WORK_DIR/custom/conf/app.ini" <<EOF
[database]
DB_TYPE = sqlite3
PATH = $WORK_DIR/data/gitea.db
[server]
HTTP_PORT = $FREE_PORT
ROOT_URL = http://localhost:$FREE_PORT
STATIC_ROOT_PATH = $(pwd)
[security]
INSTALL_LOCK = true
[service]
ENABLE_CAPTCHA = false
[log]
MODE = console
LEVEL = Warn
EOF
export GITEA_WORK_DIR="$WORK_DIR"
# Start Gitea server
echo "Starting Gitea server on port $FREE_PORT (workdir: $WORK_DIR)..."
if [ -n "${GITEA_TEST_E2E_DEBUG:-}" ]; then
"./$EXECUTABLE" web &
else
"./$EXECUTABLE" web > "$WORK_DIR/server.log" 2>&1 &
fi
SERVER_PID=$!
# Wait for server to be reachable
E2E_URL="http://localhost:$FREE_PORT"
MAX_WAIT=120
ELAPSED=0
while ! curl -sf --max-time 5 "$E2E_URL" > /dev/null 2>&1; do
if ! kill -0 "$SERVER_PID" 2>/dev/null; then
echo "error: Gitea server process exited unexpectedly. Server log:" >&2
cat "$WORK_DIR/server.log" 2>/dev/null >&2 || true
exit 1
fi
if [ "$ELAPSED" -ge "$MAX_WAIT" ]; then
echo "error: Gitea server not reachable after ${MAX_WAIT}s. Server log:" >&2
cat "$WORK_DIR/server.log" 2>/dev/null >&2 || true
exit 1
fi
sleep 2
ELAPSED=$((ELAPSED + 2))
done
echo "Gitea server is ready at $E2E_URL"
# Create admin test user
GITEA_TEST_E2E_USER="e2e-user"
GITEA_TEST_E2E_EMAIL="e2e-user@e2e.gitea.com"
GITEA_TEST_E2E_PASSWORD="password"
"./$EXECUTABLE" admin user create \
--username "$GITEA_TEST_E2E_USER" \
--email "$GITEA_TEST_E2E_EMAIL" \
--password "$GITEA_TEST_E2E_PASSWORD" \
--must-change-password=false \
--admin
export GITEA_TEST_E2E_URL="$E2E_URL"
export GITEA_TEST_E2E_USER
export GITEA_TEST_E2E_EMAIL
export GITEA_TEST_E2E_PASSWORD
pnpm exec playwright test "$@"