Files
ARUNAVO RAY e862714d6a fix(db): self-heal sso_providers duplicate-column crash on upgrade (#312) (#313)
Migration 0013 runs as a single transaction that rebuilds `organizations`
and then `ALTER TABLE sso_providers ADD saml_config` / `ADD domain_verified`.
On instances where those columns were already created outside Drizzle (declared
in schema.ts and added via db:push / an SSO-register round-trip on an
intermediate build), the ADD throws "duplicate column name: saml_config". That
rolls back the entire 0013 transaction, so 0013 is never recorded in
`__drizzle_migrations` and is retried — failing identically — on every boot,
crash-looping the server.

Add a pre-migrate repair (mirroring the existing repairFailedMigrations() for
the 0009 case): when 0013 is unrecorded but the columns already exist, preserve
any real SAML provider config, drop the stranded columns so the canonical 0013
runs in full (organizations rebuild included), then restore the preserved
values once the columns are re-added. No-op on fresh installs, clean upgrades,
and already-migrated databases.

This lets affected instances recover automatically on the next boot after
upgrading — no manual SQLite surgery required.

- src/lib/db/migration-repairs.ts: repairDuplicateSsoColumns + restoreSsoDataAfter0013
- src/lib/db/index.ts: wire both around migrate()
- scripts/validate-migrations.ts: cover the broken-upgrade + data-preservation path
2026-06-05 18:41:46 +05:30
..
2025-05-18 09:31:23 +05:30
2025-07-11 01:17:54 +05:30
2025-07-11 01:17:54 +05:30
2025-06-17 10:30:33 +05:30
2025-06-17 10:30:33 +05:30
2025-07-11 01:17:54 +05:30
2026-02-24 09:45:06 +05:30
2025-06-17 10:30:33 +05:30
2025-08-29 17:04:48 +05:30
2025-07-11 01:04:50 +05:30
2025-08-28 08:34:27 +05:30

Scripts Directory

This folder contains utility scripts for database management, event management, Docker builds, and LXC container deployment.

Database Management

Database Management Tool (manage-db.ts)

This is a consolidated database management tool that handles all database-related operations. It combines the functionality of the previous separate scripts into a single, more intelligent script that can check, fix, and initialize the database as needed.

Features

  • Check Mode: Validates the existence and integrity of the database
  • Init Mode: Creates the database only if it doesn't already exist
  • Fix Mode: Corrects database file location issues
  • Reset Users Mode: Removes all users and their data
  • Auto Mode: Automatically checks, fixes, and initializes the database if needed

Running the Database Management Tool

You can execute the database management tool using your package manager with various commands:

# Checks database status (default action if no command is specified)
bun run manage-db

# Check database status
bun run check-db

# Initialize the database (only if it doesn't exist)
bun run init-db

# Fix database location issues
bun run fix-db

# Automatic check, fix, and initialize if needed
bun run db-auto

# Reset all users (for testing signup flow)
bun run reset-users

# Remove database files completely
bun run cleanup-db

# Complete setup (install dependencies and initialize database)
bun run setup

# Start development server with a fresh database
bun run dev:clean

# Start production server with a fresh database
bun run start:fresh

Database File Location

The database file should be located in the ./data/gitea-mirror.db directory. If the file is found in the root directory, the fix mode will move it to the correct location.

Event Management

The following scripts help manage events in the SQLite database:

Note

: For a more user-friendly approach, you can use the cleanup button in the Activity Log page of the web interface to delete all activities with a single click.

Remove Duplicate Events (remove-duplicate-events.ts)

Specifically removes duplicate events based on deduplication keys without affecting old events.

# Remove duplicate events for all users
bun scripts/remove-duplicate-events.ts

# Remove duplicate events for a specific user
bun scripts/remove-duplicate-events.ts <userId>

Fix Interrupted Jobs (fix-interrupted-jobs.ts)

Fixes interrupted jobs that might be preventing cleanup by marking them as failed.

# Fix all interrupted jobs
bun scripts/fix-interrupted-jobs.ts

# Fix interrupted jobs for a specific user
bun scripts/fix-interrupted-jobs.ts <userId>

Use this script if you're having trouble cleaning up activities due to "interrupted" jobs that won't delete.

Startup Recovery (startup-recovery.ts)

Runs job recovery during application startup to handle any interrupted jobs from previous runs.

# Run startup recovery (normal mode)
bun scripts/startup-recovery.ts

# Force recovery even if recent attempt was made
bun scripts/startup-recovery.ts --force

# Set custom timeout (default: 30000ms)
bun scripts/startup-recovery.ts --timeout=60000

# Using npm scripts
bun run startup-recovery
bun run startup-recovery-force

This script is automatically run by the Docker entrypoint during container startup. It ensures that any jobs interrupted by container restarts or application crashes are properly recovered or marked as failed.

Deployment Scripts

Docker Deployment

  • build-docker.sh: Builds the Docker image for the application
  • docker-diagnostics.sh: Provides diagnostic information for Docker deployments

LXC Container Deployment

Two deployment options are available for LXC containers:

  1. Proxmox VE (online): Using the community-maintained script by Tobias (CrazyWolf13)

  2. gitea-mirror-lxc-local.sh: For offline/LAN-only deployment on a developer laptop

    • Pushes your local checkout + Bun ZIP to the container
    • Useful for testing without internet access

For detailed instructions on LXC deployment, see README-lxc.md.