mirror of
https://github.com/RayLabsHQ/gitea-mirror.git
synced 2026-03-14 06:23:01 +03:00
* feat: add E2E testing infrastructure with fake GitHub, Playwright, and CI workflow - Add fake GitHub API server (tests/e2e/fake-github-server.ts) with management API for seeding test data - Add Playwright E2E test suite covering full mirror workflow: service health checks, user registration, config, sync, verify - Add Docker Compose for E2E Gitea instance - Add orchestrator script (run-e2e.sh) with cleanup - Add GitHub Actions workflow (e2e-tests.yml) with Gitea service container - Make GITHUB_API_URL configurable via env var for testing - Add npm scripts: test:e2e, test:e2e:ci, test:e2e:keep, test:e2e:cleanup * feat: add real git repos + backup config testing to E2E suite - Create programmatic test git repos (create-test-repos.ts) with real commits, branches (main, develop, feature/*), and tags (v1.0.0, v1.1.0) - Add git-server container to docker-compose serving bare repos via dumb HTTP protocol so Gitea can actually clone them - Update fake GitHub server to emit reachable clone_url fields pointing to the git-server container (configurable via GIT_SERVER_URL env var) - Add management endpoint POST /___mgmt/set-clone-url for runtime config - Update E2E spec with real mirroring verification: * Verify repos appear in Gitea with actual content * Check branches, tags, commits, file content * Verify 4/4 repos mirrored successfully - Add backup configuration test suite: * Enable/disable backupBeforeSync config * Toggle blockSyncOnBackupFailure * Trigger re-sync with backup enabled and verify activities * Verify config persistence across changes - Update CI workflow to use docker compose (not service containers) matching the local run-e2e.sh approach - Update cleanup.sh for git-repos directory and git-server port - All 22 tests passing with real git content verification * refactor: split E2E tests into focused files + add force-push tests Split the monolithic e2e.spec.ts (1335 lines) into 5 focused spec files and a shared helpers module: helpers.ts — constants, GiteaAPI, auth, saveConfig, utilities 01-health.spec.ts — service health checks (4 tests) 02-mirror-workflow.spec.ts — full first-mirror journey (8 tests) 03-backup.spec.ts — backup config toggling (6 tests) 04-force-push.spec.ts — force-push simulation & backup verification (9 tests) 05-sync-verification.spec.ts — dynamic repos, content integrity, reset (5 tests) The force-push tests are the critical addition: F0: Record original state (commit SHAs, file content) F1: Rewrite source repo history (simulate force-push) F2: Sync to Gitea WITHOUT backup F3: Verify data loss — LICENSE file gone, README overwritten F4: Restore source, re-mirror to clean state F5: Enable backup, force-push again, sync through app F6: Verify Gitea reflects the force-push F7: Verify backup system was invoked (snapshot activities logged) F8: Restore source repo for subsequent tests Also added to helpers.ts: - GiteaAPI.getBranch(), .getCommit(), .triggerMirrorSync() - getRepositoryIds(), triggerMirrorJobs(), triggerSyncRepo() All 32 tests passing. * Try to fix actions * Try to fix the other action * Add debug info to check why e2e action is failing * More debug info * Even more debug info * E2E fix attempt #1 * E2E fix attempt #2 * more debug again * E2E fix attempt #3 * E2E fix attempt #4 * Remove a bunch of debug info * Hopefully fix backup bug * Force backups to succeed
106 lines
3.0 KiB
YAML
106 lines
3.0 KiB
YAML
# E2E testing environment
|
|
# Spins up a Gitea instance and a git HTTP server for integration testing.
|
|
#
|
|
# The git-server container serves bare git repositories created by
|
|
# create-test-repos.ts via the "dumb HTTP" protocol so that Gitea can
|
|
# actually clone them during mirror operations.
|
|
#
|
|
# Usage: podman-compose -f tests/e2e/docker-compose.e2e.yml up -d
|
|
|
|
services:
|
|
gitea-e2e:
|
|
image: docker.io/gitea/gitea:1.22
|
|
container_name: gitea-e2e
|
|
environment:
|
|
- USER_UID=1000
|
|
- USER_GID=1000
|
|
- GITEA__database__DB_TYPE=sqlite3
|
|
- GITEA__database__PATH=/data/gitea/gitea.db
|
|
- GITEA__server__DOMAIN=localhost
|
|
- GITEA__server__ROOT_URL=http://localhost:3333/
|
|
- GITEA__server__HTTP_PORT=3000
|
|
- GITEA__server__SSH_DOMAIN=localhost
|
|
- GITEA__server__START_SSH_SERVER=false
|
|
- GITEA__security__INSTALL_LOCK=true
|
|
- GITEA__service__DISABLE_REGISTRATION=false
|
|
- GITEA__service__REQUIRE_SIGNIN_VIEW=false
|
|
- GITEA__api__ENABLE_SWAGGER=false
|
|
- GITEA__log__MODE=console
|
|
- GITEA__log__LEVEL=Warn
|
|
- GITEA__mirror__ENABLED=true
|
|
- GITEA__mirror__DEFAULT_INTERVAL=1m
|
|
- GITEA__mirror__MIN_INTERVAL=1m
|
|
# Allow migrations from any domain including the git-server container
|
|
- GITEA__migrations__ALLOWED_DOMAINS=*
|
|
- GITEA__migrations__ALLOW_LOCAL_NETWORKS=true
|
|
- GITEA__migrations__SKIP_TLS_VERIFY=true
|
|
ports:
|
|
- "3333:3000"
|
|
volumes:
|
|
- e2e-gitea-data:/data
|
|
depends_on:
|
|
git-server:
|
|
condition: service_started
|
|
healthcheck:
|
|
test:
|
|
[
|
|
"CMD",
|
|
"wget",
|
|
"--no-verbose",
|
|
"--tries=1",
|
|
"--spider",
|
|
"http://localhost:3000/",
|
|
]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 30
|
|
start_period: 10s
|
|
tmpfs:
|
|
- /tmp
|
|
networks:
|
|
- e2e-net
|
|
|
|
# Lightweight HTTP server that serves bare git repositories.
|
|
# Repos are created on the host by create-test-repos.ts and bind-mounted
|
|
# into this container. Gitea clones from http://git-server/<owner>/<name>.git
|
|
# using the "dumb HTTP" protocol (repos have git update-server-info run).
|
|
git-server:
|
|
image: docker.io/alpine:3.19
|
|
container_name: git-server
|
|
command:
|
|
- sh
|
|
- -c
|
|
- |
|
|
apk add --no-cache darkhttpd >/dev/null 2>&1
|
|
echo "[git-server] Serving repos from /repos on port 80"
|
|
ls -la /repos/ 2>/dev/null || echo "[git-server] WARNING: /repos is empty"
|
|
exec darkhttpd /repos --port 80 --no-listing --log /dev/stdout
|
|
volumes:
|
|
- ./git-repos:/repos:ro
|
|
ports:
|
|
- "4590:80"
|
|
healthcheck:
|
|
test:
|
|
[
|
|
"CMD",
|
|
"wget",
|
|
"--no-verbose",
|
|
"--tries=1",
|
|
"--spider",
|
|
"http://localhost:80/manifest.json",
|
|
]
|
|
interval: 3s
|
|
timeout: 3s
|
|
retries: 15
|
|
start_period: 5s
|
|
networks:
|
|
- e2e-net
|
|
|
|
networks:
|
|
e2e-net:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
e2e-gitea-data:
|
|
driver: local
|