Преглед на файлове

Merge remote-tracking branch 'upstream/bmad-method' into bmad-method

yourname преди 1 месец
родител
ревизия
eee0f8c933
променени са 5 файла, в които са добавени 138 реда и са изтрити 95 реда
  1. 12 33
      .gitea/workflows/release.yaml
  2. 1 0
      .gitignore
  3. 56 0
      Dockerfile
  4. 0 26
      Dockerfile.release
  5. 69 36
      scripts/release_tag.sh

+ 12 - 33
.gitea/workflows/release.yaml

@@ -2,7 +2,7 @@ name: Docker Build and Push
 on:
   push:
     tags:
-      - 'release/*'  # 匹配所有release开头的标签,如release/v0.1.6
+      - 'v*'
 
 jobs:
   build-and-push:
@@ -23,18 +23,24 @@ jobs:
       - name: 设置 Docker Buildx
         uses: docker/setup-buildx-action@v3
       
-      - name: 从标签名中提取版本号
-        id: extract_version
+      - name: 提取版本号和处理仓库名
+        id: extract_info
         run: |
-          # 从标签名中提取版本号,例如从 release/v0.1.6 中提取 v0.1.6
+          # 从标签名中提取版本号(例如从 release/v0.1.6 中提取 v0.1.6)
           VERSION=$(echo "${{ gitea.ref_name }}" | sed 's|release/||')
           echo "VERSION=$VERSION" >> $GITHUB_ENV
+          
+          # 处理仓库名(替换斜杠为连字符,避免Docker标签错误)
+          REPO_NAME=$(echo "${{ gitea.repository }}" | sed 's|/|-|g')
+          echo "REPO_NAME=$REPO_NAME" >> $GITHUB_ENV
+          
           echo "提取的版本号:$VERSION"
+          echo "处理后的仓库名:$REPO_NAME"
       
       - name: 登录 Docker 注册表
         uses: docker/login-action@v3
         with:
-          registry: registry.cn-beijing.aliyuncs.com
+          registry: registry-vpc.cn-beijing.aliyuncs.com
           username: ${{ secrets.ALI_DOCKER_REGISTRY_USERNAME }}
           password: ${{ secrets.ALI_DOCKER_REGISTRY_PASSWORD }}
 
@@ -45,31 +51,4 @@ jobs:
           file: ./Dockerfile
           push: true
           tags: |
-            registry.cn-beijing.aliyuncs.com/d8dcloud/d8d-ai-design-prd:release-${{ env.VERSION }}
-      - name: 更新服务器上的 Docker 容器 
-        uses: appleboy/ssh-action@v1.2.2
-        with:
-          host: ${{ secrets.SERVER_HOST }}
-          port: ${{ secrets.SERVER_PORT }}
-          username: ${{ secrets.SERVER_USER }}
-          key: ${{ secrets.SERVER_SSH_KEY }}
-          script: |
-            # 进入项目目录
-            cd /mnt/k8s_home/app/d8d-fun-vite
-
-            
-            # 备份当前的 deployment.yaml 文件
-            cp deployment.yaml deployment.yaml.bak
-            
-            # 更新 deployment.yaml 中的镜像版本
-            sed -i "s|registry.cn-beijing.aliyuncs.com/d8dcloud/d8d-ai-design-prd:.*|registry.cn-beijing.aliyuncs.com/d8dcloud/d8d-ai-design-prd:release-${{ env.VERSION }}|g" deployment.yaml
-            
-            # 检查文件是否成功更新
-            echo "更新后的 deployment.yaml 内容:"
-            cat deployment.yaml
-            
-            # 更新
-            kubectl apply -f deployment.yaml
-            
-            # 显示d8d-fun-vite pod状态
-            kubectl get pods -n default -l app=d8d-fun-vite
+            registry-vpc.cn-beijing.aliyuncs.com/d8dcloud/d8d-user-release:${{ env.REPO_NAME }}-${{ env.VERSION }}

+ 1 - 0
.gitignore

@@ -47,6 +47,7 @@ coverage/
 
 # database backups
 backups/
+backups-prd/
 scripts/time_logger.sh
 loop.txt
 .nfs*

+ 56 - 0
Dockerfile

@@ -0,0 +1,56 @@
+# 使用指定基础镜像
+FROM docker.1ms.run/node:20.19.4
+
+# 设置软件源为清华大学镜像源
+RUN echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main non-free contrib" > /etc/apt/sources.list && \
+    echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main non-free contrib" >> /etc/apt/sources.list && \
+    echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main non-free contrib" >> /etc/apt/sources.list && \
+    echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main non-free contrib" >> /etc/apt/sources.list
+
+RUN apt update  --fix-missing && \
+    apt install -y curl wget
+
+# 安装 pnpm
+RUN npm install -g pnpm
+
+# 配置国内npm镜像
+RUN pnpm config set registry https://registry.npmmirror.com/
+RUN pnpm config set @jsr:registry https://npm.jsr.io
+
+# 添加PostgreSQL 17的官方仓库
+RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \
+    echo "deb http://apt.postgresql.org/pub/repos/apt/ bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list
+
+# 更新包列表并安装PostgreSQL 17客户端工具及其他常用工具(已添加jq)
+RUN apt update && \
+    apt install -y \
+    # PostgreSQL 17客户端工具
+    postgresql-client-17
+
+# 确认版本
+RUN pg_dump --version
+
+# 设置工作目录
+WORKDIR /workspace
+
+# 设置备份目录环境变量
+ENV BACKUP_DIR=/app/backups-prd/
+
+# 复制根目录配置文件
+COPY package.json pnpm-lock.yaml .npmrc ./
+
+# 安装依赖
+RUN pnpm install --frozen-lockfile
+
+# 复制项目文件
+COPY . .
+
+
+# 构建 web 应用
+RUN pnpm run build
+
+# 暴露端口(根据实际需要调整)
+EXPOSE 8080
+
+# 启动命令
+CMD ["sh", "-c", "pnpm run start"]

+ 0 - 26
Dockerfile.release

@@ -1,26 +0,0 @@
-# 使用指定基础镜像
-FROM node:20.18.3
-
-RUN apt-get update 
-RUN apt-get install -y python3 build-essential
-
-# 设置工作目录
-WORKDIR /app
-
-# 复制package.json .npmrc和package-lock.json
-COPY package.json .npmrc package-lock.json* ./
-
-# 安装依赖
-RUN npm install
-
-# 复制项目文件
-COPY . .
-
-# 构建项目
-RUN npm run build
-
-# 暴露端口(根据实际需要调整)
-EXPOSE 23972
-
-# 启动命令
-CMD ["npm", "run", "start"]

+ 69 - 36
scripts/release_tag.sh

@@ -1,55 +1,88 @@
 #!/bin/bash
 
-# 版本标签创建与推送脚本
-# 使用方法: ./release_tag.sh v0.0.3
-
-# 检查是否提供了版本号参数
-if [ -z "$1" ]; then
-    echo "错误: 请提供版本号作为参数"
-    echo "用法: $0 <版本号>"
-    echo "示例: $0 v1.2.3"
+# 发布脚本
+# 使用方法: ./release.sh <版本号>
+# 例如: ./release.sh 1.0.0
+# 查看标签: ./release.sh --list 或 ./release.sh -l
+
+set -e
+
+# 检查参数
+if [ $# -eq 0 ]; then
+    echo "错误: 请提供版本号"
+    echo "使用方法: $0 <版本号>"
+    echo "例如: $0 1.0.0"
+    echo ""
+    echo "📋 Gitea 最近10个标签:"
+    # 尝试获取远程标签,如果失败则使用本地标签
+    REMOTE_TAGS=$(git ls-remote --tags gitea 2>/dev/null | grep -v "\^{}" | cut -f 2 | sed 's|refs/tags/||')
+    if [ -z "$REMOTE_TAGS" ]; then
+        echo "⚠️  无法获取远程标签,显示本地最近10个标签:"
+        git tag --list | sort -V | tail -10
+    else
+        echo "$REMOTE_TAGS" | sort -V | uniq | tail -10
+    fi
     exit 1
 fi
 
-# 获取版本号参数
-VERSION=$1
+# 特殊参数: 查看所有标签
+if [ "$1" = "--list" ] || [ "$1" = "-l" ]; then
+    echo "📋 Gitea 所有标签:"
+    # 尝试获取远程标签,如果失败则使用本地标签
+    REMOTE_TAGS=$(git ls-remote --tags gitea 2>/dev/null | grep -v "\^{}" | cut -f 2 | sed 's|refs/tags/||')
+    if [ -z "$REMOTE_TAGS" ]; then
+        echo "⚠️  无法获取远程标签,显示本地标签:"
+        git tag --list | sort -V
+    else
+        echo "$REMOTE_TAGS" | sort -V | uniq
+    fi
+    exit 0
+fi
+
+VERSION="$1"
+TAG="v$VERSION"
 
-# 检查是否在 Git 仓库中
-if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
-    echo "错误: 当前目录不是 Git 仓库"
+# 验证版本号格式
+if ! [[ $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+    echo "错误: 版本号格式不正确,请使用语义化版本格式 (例如: 1.0.0)"
     exit 1
 fi
 
-# 检查是否有未提交的更改
+echo "🚀 开始发布 版本: $VERSION"
+
+# 检查工作目录是否干净
 if [ -n "$(git status --porcelain)" ]; then
-    echo "警告: 有未提交的更改,建议先提交"
-    read -p "是否继续? (y/n): " response
-    if [[ ! $response =~ ^[Yy]$ ]]; then
+    echo "⚠️  警告: 工作目录有未提交的更改"
+    git status
+    read -p "是否继续发布? [y/N] " -n 1 -r
+    echo
+    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
+        echo "发布已取消"
         exit 1
     fi
 fi
 
-# 检查远程仓库是否存在
-if ! git remote | grep -q "gitea"; then
-    echo "错误: 未找到名为 'gitea' 的远程仓库"
-    exit 1
-fi
+# 检查当前分支
+CURRENT_BRANCH=$(git branch --show-current)
+echo "🌿 当前分支: $CURRENT_BRANCH"
 
-# 创建并推送标签
-echo "正在创建标签: $VERSION"
-git tag "$VERSION"
+# 拉取最新代码
+echo "📥 拉取最新代码..."
+git pull gitea "$CURRENT_BRANCH"
 
-if [ $? -ne 0 ]; then
-    echo "错误: 创建标签失败"
-    exit 1
-fi
 
-echo "正在推送标签到 gitea 远程仓库..."
-git push gitea "$VERSION"
+# 创建标签
+echo "🏷️  创建标签 $TAG..."
+git tag "$TAG"
 
-if [ $? -ne 0 ]; then
-    echo "错误: 推送标签失败"
-    exit 1
-fi
+# 推送标签
+echo "📤 推送标签到远程仓库..."
+git push gitea "$TAG"
 
-echo "成功! 标签 $VERSION 已创建并推送到 gitea 远程仓库"
+echo ""
+echo "🎉 发布流程已启动!"
+echo "📋 版本: $VERSION"
+echo "🏷️  标签: $TAG"
+echo "🔗 GitHub Actions 将自动构建和发布 Docker 镜像"
+echo ""
+echo "📊 查看构建进度: $(git config --get remote.gitea.url | sed 's|^ssh://||' | sed 's|^git@||' | sed 's|:|/|' | sed 's|\.git$||')/actions"