next-windfonts/.forgejo/workflows/database.yml
bo.yu 1c1c82ae07
Some checks are pending
CI / 代码检查和类型检查 (push) Waiting to run
CI / 构建应用 (push) Blocked by required conditions
CI / 安全扫描 (push) Waiting to run
Deploy / 构建并推送 Docker 镜像 (push) Waiting to run
Deploy / 部署到生产环境 (push) Blocked by required conditions
Deploy / 部署到测试环境 (push) Blocked by required conditions
Deploy / 部署通知 (push) Blocked by required conditions
ci: 添加 Forgejo Actions 工作流配置
添加 CI/CD 工作流配置文件,包括:
- ci.yml: 代码检查、构建和安全扫描
- deploy.yml: 构建 Docker 镜像和部署到不同环境
- database.yml: 数据库迁移、备份和回滚操作
- README.md: 工作流使用说明和配置指南
2025-09-17 17:18:03 +08:00

134 lines
No EOL
3.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: Database Migration
on:
workflow_dispatch:
inputs:
action:
description: '数据库操作'
required: true
default: 'migrate'
type: choice
options:
- migrate
- backup
- rollback
environment:
description: '目标环境'
required: true
default: 'production'
type: choice
options:
- production
- staging
- development
env:
NODE_VERSION: '20'
jobs:
database-migrate:
name: 数据库迁移
runs-on: docker
container:
image: node:20-alpine
if: github.event.inputs.action == 'migrate'
environment: ${{ github.event.inputs.environment }}
steps:
- name: 检出代码
uses: https://code.forgejo.org/actions/checkout@v4
- name: 安装依赖
run: |
yarn config set registry https://registry.npmmirror.com
yarn install --frozen-lockfile
- name: 数据库迁移
run: |
echo "执行数据库迁移..."
yarn drizzle-kit migrate
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
POSTGRES_HOST: ${{ secrets.POSTGRES_HOST }}
POSTGRES_PORT: ${{ secrets.POSTGRES_PORT }}
POSTGRES_DB: ${{ secrets.POSTGRES_DB }}
POSTGRES_USER: ${{ secrets.POSTGRES_USER }}
POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }}
- name: 验证迁移结果
run: |
echo "验证数据库迁移结果..."
# 可以添加数据库连接测试
node -e "
const { drizzle } = require('drizzle-orm/postgres-js');
const postgres = require('postgres');
const sql = postgres(process.env.DATABASE_URL);
const db = drizzle(sql);
console.log('数据库连接成功');
sql.end();
"
database-backup:
name: 数据库备份
runs-on: docker
container:
image: postgres:15-alpine
if: github.event.inputs.action == 'backup'
environment: ${{ github.event.inputs.environment }}
steps:
- name: 创建数据库备份
run: |
echo "创建数据库备份..."
BACKUP_FILE="backup_$(date +%Y%m%d_%H%M%S).sql"
pg_dump $DATABASE_URL > $BACKUP_FILE
echo "备份文件: $BACKUP_FILE"
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
- name: 上传备份文件
uses: https://code.forgejo.org/actions/upload-artifact@v4
with:
name: database-backup-${{ github.event.inputs.environment }}
path: "*.sql"
retention-days: 30
database-rollback:
name: 数据库回滚
runs-on: docker
container:
image: node:20-alpine
if: github.event.inputs.action == 'rollback'
environment: ${{ github.event.inputs.environment }}
steps:
- name: 检出代码
uses: https://code.forgejo.org/actions/checkout@v4
- name: 安装依赖
run: |
yarn config set registry https://registry.npmmirror.com
yarn install --frozen-lockfile
- name: 数据库回滚
run: |
echo "执行数据库回滚..."
# 注意drizzle-kit 可能不直接支持回滚,需要手动处理
echo "请手动执行回滚操作或使用备份恢复"
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
notify-result:
name: 通知结果
runs-on: docker
container:
image: alpine:latest
needs: [database-migrate, database-backup, database-rollback]
if: always()
steps:
- name: 发送通知
run: |
echo "数据库操作完成: ${{ github.event.inputs.action }}"
echo "环境: ${{ github.event.inputs.environment }}"
# 可以集成通知服务