mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-25 02:34:29 +00:00
206 lines
7.6 KiB
YAML
206 lines
7.6 KiB
YAML
name: Publish Prisma Migrations
|
|
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- 'schema.prisma' # Check root schema.prisma
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
publish-migrations:
|
|
runs-on: ubuntu-latest
|
|
services:
|
|
postgres:
|
|
image: postgres:14
|
|
env:
|
|
POSTGRES_DB: temp_db
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_PASSWORD: postgres
|
|
ports:
|
|
- 5432:5432
|
|
options: >-
|
|
--health-cmd pg_isready
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
|
|
# Add shadow database service
|
|
postgres_shadow:
|
|
image: postgres:14
|
|
env:
|
|
POSTGRES_DB: shadow_db
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_PASSWORD: postgres
|
|
ports:
|
|
- 5433:5432
|
|
options: >-
|
|
--health-cmd pg_isready
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.x'
|
|
|
|
- name: Install Dependencies
|
|
run: |
|
|
pip install prisma
|
|
pip install python-dotenv
|
|
|
|
- name: Generate Initial Migration if None Exists
|
|
env:
|
|
DATABASE_URL: "postgresql://postgres:postgres@localhost:5432/temp_db"
|
|
DIRECT_URL: "postgresql://postgres:postgres@localhost:5432/temp_db"
|
|
SHADOW_DATABASE_URL: "postgresql://postgres:postgres@localhost:5433/shadow_db"
|
|
run: |
|
|
mkdir -p deploy/migrations
|
|
echo 'provider = "postgresql"' > deploy/migrations/migration_lock.toml
|
|
|
|
if [ -z "$(ls -A deploy/migrations/2* 2>/dev/null)" ]; then
|
|
echo "No existing migrations found, creating baseline..."
|
|
VERSION=$(date +%Y%m%d%H%M%S)
|
|
mkdir -p deploy/migrations/${VERSION}_initial
|
|
|
|
echo "Generating initial migration..."
|
|
# Save raw output for debugging
|
|
prisma migrate diff \
|
|
--from-empty \
|
|
--to-schema-datamodel schema.prisma \
|
|
--shadow-database-url "${SHADOW_DATABASE_URL}" \
|
|
--script > deploy/migrations/${VERSION}_initial/raw_migration.sql
|
|
|
|
echo "Raw migration file content:"
|
|
cat deploy/migrations/${VERSION}_initial/raw_migration.sql
|
|
|
|
echo "Cleaning migration file..."
|
|
# Clean the file
|
|
sed '/^Installing/d' deploy/migrations/${VERSION}_initial/raw_migration.sql > deploy/migrations/${VERSION}_initial/migration.sql
|
|
|
|
# Verify the migration file
|
|
if [ ! -s deploy/migrations/${VERSION}_initial/migration.sql ]; then
|
|
echo "ERROR: Migration file is empty after cleaning"
|
|
echo "Original content was:"
|
|
cat deploy/migrations/${VERSION}_initial/raw_migration.sql
|
|
exit 1
|
|
fi
|
|
|
|
echo "Final migration file content:"
|
|
cat deploy/migrations/${VERSION}_initial/migration.sql
|
|
|
|
# Verify it starts with SQL
|
|
if ! head -n 1 deploy/migrations/${VERSION}_initial/migration.sql | grep -q "^--\|^CREATE\|^ALTER"; then
|
|
echo "ERROR: Migration file does not start with SQL command or comment"
|
|
echo "First line is:"
|
|
head -n 1 deploy/migrations/${VERSION}_initial/migration.sql
|
|
echo "Full content is:"
|
|
cat deploy/migrations/${VERSION}_initial/migration.sql
|
|
exit 1
|
|
fi
|
|
|
|
echo "Initial migration generated at $(date -u)" > deploy/migrations/${VERSION}_initial/README.md
|
|
fi
|
|
|
|
- name: Compare and Generate Migration
|
|
if: success()
|
|
env:
|
|
DATABASE_URL: "postgresql://postgres:postgres@localhost:5432/temp_db"
|
|
DIRECT_URL: "postgresql://postgres:postgres@localhost:5432/temp_db"
|
|
SHADOW_DATABASE_URL: "postgresql://postgres:postgres@localhost:5433/shadow_db"
|
|
run: |
|
|
# Create temporary migration workspace
|
|
mkdir -p temp_migrations
|
|
|
|
# Copy existing migrations (will not fail if directory is empty)
|
|
cp -r deploy/migrations/* temp_migrations/ 2>/dev/null || true
|
|
|
|
VERSION=$(date +%Y%m%d%H%M%S)
|
|
|
|
# Generate diff against existing migrations or empty state
|
|
prisma migrate diff \
|
|
--from-migrations temp_migrations \
|
|
--to-schema-datamodel schema.prisma \
|
|
--shadow-database-url "${SHADOW_DATABASE_URL}" \
|
|
--script > temp_migrations/migration_${VERSION}.sql
|
|
|
|
# Check if there are actual changes
|
|
if [ -s temp_migrations/migration_${VERSION}.sql ]; then
|
|
echo "Changes detected, creating new migration"
|
|
mkdir -p deploy/migrations/${VERSION}_schema_update
|
|
mv temp_migrations/migration_${VERSION}.sql deploy/migrations/${VERSION}_schema_update/migration.sql
|
|
echo "Migration generated at $(date -u)" > deploy/migrations/${VERSION}_schema_update/README.md
|
|
else
|
|
echo "No schema changes detected"
|
|
exit 0
|
|
fi
|
|
|
|
- name: Verify Migration
|
|
if: success()
|
|
env:
|
|
DATABASE_URL: "postgresql://postgres:postgres@localhost:5432/temp_db"
|
|
DIRECT_URL: "postgresql://postgres:postgres@localhost:5432/temp_db"
|
|
SHADOW_DATABASE_URL: "postgresql://postgres:postgres@localhost:5433/shadow_db"
|
|
run: |
|
|
# Create test database
|
|
psql "${SHADOW_DATABASE_URL}" -c 'CREATE DATABASE migration_test;'
|
|
|
|
# Apply all migrations in order to verify
|
|
for migration in deploy/migrations/*/migration.sql; do
|
|
echo "Applying migration: $migration"
|
|
psql "${SHADOW_DATABASE_URL}" -f $migration
|
|
done
|
|
|
|
# Add this step before create-pull-request to debug permissions
|
|
- name: Check Token Permissions
|
|
run: |
|
|
echo "Checking token permissions..."
|
|
curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
|
-H "Accept: application/vnd.github.v3+json" \
|
|
https://api.github.com/repos/BerriAI/litellm/collaborators
|
|
|
|
echo "\nChecking if token can create PRs..."
|
|
curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
|
-H "Accept: application/vnd.github.v3+json" \
|
|
https://api.github.com/repos/BerriAI/litellm
|
|
|
|
# Add this debug step before git push
|
|
- name: Debug Changed Files
|
|
run: |
|
|
echo "Files staged for commit:"
|
|
git diff --name-status --staged
|
|
|
|
echo "\nAll changed files:"
|
|
git status
|
|
|
|
- name: Create Pull Request
|
|
if: success()
|
|
uses: peter-evans/create-pull-request@v5
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
commit-message: "chore: update prisma migrations"
|
|
title: "Update Prisma Migrations"
|
|
body: |
|
|
Auto-generated migration based on schema.prisma changes.
|
|
|
|
Generated files:
|
|
- deploy/migrations/${VERSION}_schema_update/migration.sql
|
|
- deploy/migrations/${VERSION}_schema_update/README.md
|
|
branch: feat/prisma-migration-${{ env.VERSION }}
|
|
base: main
|
|
delete-branch: true
|
|
|
|
- name: Generate and Save Migrations
|
|
run: |
|
|
# Only add migration files
|
|
git add deploy/migrations/
|
|
git status # Debug what's being committed
|
|
git commit -m "chore: update prisma migrations"
|