Skip to content
Closed

Prod #4528

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
4ec920b
feat: 前端更新:修改vite配置的后端地址
ThisIsUniqueName Apr 20, 2026
3380e7c
feat:文档入口修改
ThisIsUniqueName Apr 21, 2026
d0223d0
fix 解决跨域问题
ThisIsUniqueName Apr 21, 2026
9e9fd44
feat: 图标更换,文档跳转模式修改
ThisIsUniqueName Apr 22, 2026
04d900d
Merge remote-tracking branch 'origin/main' into gqapi_release
ThisIsUniqueName Apr 24, 2026
8a15dd7
fix:解决首次进入平台名称展示错误的bug
ThisIsUniqueName Apr 27, 2026
6012953
test
ccasmy1314 Apr 27, 2026
60856b5
Merge branch 'main' into gqapi_release
ThisIsUniqueName Apr 27, 2026
4bb62de
release: 版本升至v0.13.1,打包优化
ThisIsUniqueName Apr 27, 2026
783e9ba
Revert "test"
ccasmy1314 Apr 27, 2026
049c6d2
Merge remote-tracking branch 'origin/gqapi_release' into gqapi_release
ccasmy1314 Apr 27, 2026
2768269
Merge branch 'main' into gqapi_release
ThisIsUniqueName Apr 28, 2026
8c325b6
Merge branch 'gqapi_release' of https://github.com/GQ-API/gq-api into…
ThisIsUniqueName Apr 28, 2026
1b42859
release: 升级版本号至v0.13.2
ThisIsUniqueName Apr 28, 2026
a4364d7
build: 新增全流程打包脚本:1. 切换分支,2. 拉取代码,3. 打包前端dist,4. 打包docker镜像 5. 推送镜像
ThisIsUniqueName Apr 28, 2026
a2a7992
build:修改打包脚本(替换远程镜像库)
ThisIsUniqueName Apr 28, 2026
322e03d
fix: 去除模型充值价格显示开关,build:新增github自动化打包配置
ThisIsUniqueName Apr 28, 2026
768572a
build: 自动化打包配置修改
ThisIsUniqueName Apr 28, 2026
be12aa5
build: 修改自动打包脚本
ThisIsUniqueName Apr 28, 2026
41fb36e
build: 自动打包脚本
ThisIsUniqueName Apr 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
238 changes: 238 additions & 0 deletions .github/workflows/docker-build-push.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@
# =============================================================================
# GQ API Docker 镜像构建与推送工作流
# =============================================================================
# 功能说明:
# 当 gqapi_release 分支有新代码提交时,自动构建 Docker 镜像并推送到 Docker Hub
# 版本号从项目根目录的 VERSION 文件读取
#
# 触发条件:
# 1. 推送代码到 gqapi_release 分支
# 2. 手动触发(workflow_dispatch)
#
# 输出镜像:
# - {DOCKER_HUB_USERNAME}/gq-api:{version} (如 v0.13.2)
# - {DOCKER_HUB_USERNAME}/gq-api:latest
#
# 前置条件:
# 需要在 GitHub 仓库 Settings → Secrets and variables → Actions 中配置:
# - DOCKER_HUB_USERNAME: Docker Hub 用户名
# - DOCKER_HUB_ACCESS_TOKEN: Docker Hub Access Token
# - SMTP_SERVER: SMTP 服务器地址(如 smtp.qq.com)
# - SMTP_PORT: SMTP 端口(如 465)
# - SMTP_USERNAME: SMTP 用户名(邮箱地址)
# - SMTP_PASSWORD: SMTP 密码/授权码
# - NOTIFY_EMAIL: 接收通知的邮箱地址
# =============================================================================

name: Build and Push Docker Image

# -----------------------------------------------------------------------------
# 触发条件配置
# -----------------------------------------------------------------------------
on:
# 当推送到 gqapi_release 分支时触发
push:
branches:
- gqapi_release
# 允许在 GitHub Actions 页面手动触发
workflow_dispatch:

# -----------------------------------------------------------------------------
# 任务定义
# -----------------------------------------------------------------------------
jobs:
# ---------------------------------------------------------------------------
# Job 1: 构建并推送 Docker 镜像
# ---------------------------------------------------------------------------
build-and-push:
# 使用 Ubuntu 最新版本作为运行环境
runs-on: ubuntu-latest

# 指定使用 gq-api-dockerhub 环境的 secrets
environment: gq-api-dockerhub

# 配置权限
# - contents: read - 读取仓库代码
# - packages: write - 推送镜像到容器仓库
permissions:
contents: read
packages: write

# 输出变量供后续任务使用
outputs:
version: ${{ steps.version.outputs.version }}

# -------------------------------------------------------------------------
# 构建步骤
# -------------------------------------------------------------------------
steps:
# 步骤 1:检出代码
# 从 GitHub 仓库拉取最新代码到工作目录
- name: Checkout code
uses: actions/checkout@v4

# 步骤 2:读取版本号
# 从项目根目录的 VERSION 文件读取版本号(如 v0.13.2)
# 输出变量:version - 用于后续步骤的镜像标签
- name: Read version from VERSION file
id: version
run: |
VERSION=$(cat VERSION)
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Building version: $VERSION"
Comment on lines +77 to +82

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Fail fast when VERSION is missing or empty before tagging images.

At Line 80-82, VERSION is consumed without validation. An empty/malformed value can break tag generation or publish unexpected tags.

Suggested hardening
-      - name: Read version from VERSION file
+      - name: Read version from VERSION file
         id: version
         run: |
-          VERSION=$(cat VERSION)
+          if [ ! -f VERSION ]; then
+            echo "::error::VERSION file not found"
+            exit 1
+          fi
+          VERSION="$(tr -d '\r\n' < VERSION)"
+          if [ -z "$VERSION" ]; then
+            echo "::error::VERSION file is empty"
+            exit 1
+          fi
           echo "version=$VERSION" >> $GITHUB_OUTPUT
           echo "Building version: $VERSION"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/docker-build-push.yml around lines 77 - 82, The step with
id "version" reads VERSION into the shell variable VERSION and writes it to
$GITHUB_OUTPUT but doesn't validate it; update that step to verify the VERSION
file exists and the VERSION variable is non-empty (trim whitespace) and exit
non-zero if not, before writing "version=$VERSION" to $GITHUB_OUTPUT or
proceeding to build/tag steps so the workflow fails fast on missing or empty
VERSION.


# 步骤 3:调试 - 检查 Secrets 配置
# 安全地检查 secrets 是否已配置(不打印实际值)
- name: Debug - Check Secrets
run: |
echo "=== Checking Docker Hub Secrets ==="
echo "DOCKER_HUB_USERNAME length: ${#DOCKER_HUB_USERNAME}"
if [ -n "$DOCKER_HUB_USERNAME" ]; then echo "DOCKER_HUB_USERNAME: SET"; else echo "DOCKER_HUB_USERNAME: NOT SET"; fi
echo "DOCKER_HUB_ACCESS_TOKEN length: ${#DOCKER_HUB_ACCESS_TOKEN}"
if [ -n "$DOCKER_HUB_ACCESS_TOKEN" ]; then echo "DOCKER_HUB_ACCESS_TOKEN: SET"; else echo "DOCKER_HUB_ACCESS_TOKEN: NOT SET"; fi
env:
DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }}
DOCKER_HUB_ACCESS_TOKEN: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}

# 步骤 4:设置 Docker Buildx
# Buildx 是 Docker 的扩展构建工具,支持多平台构建和缓存
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

# 步骤 5:登录 Docker Hub
# 使用配置的 secrets 进行身份验证
# secrets.DOCKER_HUB_USERNAME - Docker Hub 用户名
# secrets.DOCKER_HUB_ACCESS_TOKEN - Docker Hub 访问令牌
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}

# 步骤 6:构建并推送 Docker 镜像
# - context: . 表示使用当前目录(Dockerfile 所在目录)
# - push: true 表示构建完成后自动推送到 Docker Hub
# - tags: 镜像标签,包含版本号标签和 latest 标签
# - cache: 使用 GitHub Actions 缓存加速后续构建
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
${{ secrets.DOCKER_HUB_USERNAME }}/gq-api:${{ steps.version.outputs.version }}
${{ secrets.DOCKER_HUB_USERNAME }}/gq-api:latest
Comment on lines +123 to +124

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Preserve new-api / QuantumNous identifiers in Docker and CI/CD references.

The new image tags and CI/CD messaging replace project identity references with gq-api / GQ API in deployment workflow paths. This conflicts with the repository constraint for Docker/CI naming and can break downstream automation expecting new-api naming.

Based on learnings: Applies to /Dockerfile,/.dockerignore,/docker,/docker-compose*.yml : Do NOT modify, delete, replace, or remove any references, mentions, branding, metadata, or attributions related to new-api or QuantumNous in Docker image names, CI/CD references, and deployment configurations.

Also applies to: 177-200

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/docker-build-push.yml around lines 123 - 124, Replace the
hardcoded "gq-api" image name used in the workflow tag lines with the required
project identifier ("new-api" or "QuantumNous") so CI/CD and downstream
automation keep expected naming; specifically update the two tag strings that
currently read "${{ secrets.DOCKER_HUB_USERNAME }}/gq-api:${{
steps.version.outputs.version }}" and "${{ secrets.DOCKER_HUB_USERNAME
}}/gq-api:latest" to use "${{ secrets.DOCKER_HUB_USERNAME }}/new-api:${{
steps.version.outputs.version }}" and "${{ secrets.DOCKER_HUB_USERNAME
}}/new-api:latest" (also scan other Docker/CI-related symbols like Dockerfile,
.dockerignore, docker-compose.* and any remaining occurrences of "gq-api" and
restore "new-api" / "QuantumNous" where branding/identifiers were removed).

# 启用 GitHub Actions 缓存,加速后续构建
cache-from: type=gha
cache-to: type=gha,mode=max

# 步骤 7:输出构建摘要
# 在 GitHub Actions 运行页面显示构建结果信息
- name: Summary
run: |
echo "### Docker Image Published" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- **Version**: \`${{ steps.version.outputs.version }}\`" >> $GITHUB_STEP_SUMMARY
echo "- **Tags**:" >> $GITHUB_STEP_SUMMARY
echo " - \`${{ secrets.DOCKER_HUB_USERNAME }}/gq-api:${{ steps.version.outputs.version }}\`" >> $GITHUB_STEP_SUMMARY
echo " - \`${{ secrets.DOCKER_HUB_USERNAME }}/gq-api:latest\`" >> $GITHUB_STEP_SUMMARY

# ---------------------------------------------------------------------------
# Job 2: 构建后处理 - 发送邮件通知
# ---------------------------------------------------------------------------
# always() 确保无论构建成功还是失败都会执行邮件通知
post-build:
runs-on: ubuntu-latest
needs: build-and-push
if: always()

# 指定使用 gq-api-dockerhub 环境的 secrets
environment: gq-api-dockerhub

steps:
# 获取构建任务的状态
- name: Get build status
id: status
run: |
if [ "${{ needs.build-and-push.result }}" == "success" ]; then
echo "status=成功 ✅" >> $GITHUB_OUTPUT
echo "color=#28a745" >> $GITHUB_OUTPUT
else
echo "status=失败 ❌" >> $GITHUB_OUTPUT
echo "color=#dc3545" >> $GITHUB_OUTPUT
fi

# 发送邮件通知
# 使用 dawidd6/action-send-mail 发送邮件
- name: Send email notification
uses: dawidd6/action-send-mail@v3
with:
# SMTP 服务器配置
server_address: ${{ secrets.SMTP_SERVER }}
server_port: ${{ secrets.SMTP_PORT }}
# SMTP 认证信息
username: ${{ secrets.SMTP_USERNAME }}
password: ${{ secrets.SMTP_PASSWORD }}
# 邮件内容
subject: "GQ API Docker 构建通知 - ${{ steps.status.outputs.status }}"
to: ${{ secrets.NOTIFY_EMAIL }}
from: GQ API CI/CD
# 邮件正文(HTML 格式)
html_body: |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
.container { max-width: 600px; margin: 0 auto; padding: 20px; }
.header { background: ${{ steps.status.outputs.color }}; color: white; padding: 20px; text-align: center; border-radius: 5px 5px 0 0; }
.content { background: #f9f9f9; padding: 20px; border: 1px solid #ddd; border-radius: 0 0 5px 5px; }
.info-table { width: 100%; border-collapse: collapse; margin-top: 15px; }
.info-table td { padding: 10px; border-bottom: 1px solid #ddd; }
.info-table td:first-child { font-weight: bold; width: 120px; }
.footer { margin-top: 20px; font-size: 12px; color: #666; text-align: center; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h2>🚀 GQ API Docker 构建通知</h2>
</div>
<div class="content">
<p>构建状态:<strong style="color: ${{ steps.status.outputs.color }}">{{ steps.status.outputs.status }}</strong></p>
<table class="info-table">
<tr>
<td>版本号</td>
<td>${{ needs.build-and-push.outputs.version || 'N/A' }}</td>
</tr>
<tr>
<td>分支</td>
<td>${{ github.ref_name }}</td>
</tr>
<tr>
<td>触发者</td>
<td>${{ github.actor }}</td>
</tr>
<tr>
<td>提交信息</td>
<td>${{ github.event.head_commit.message }}</td>
</tr>
<tr>
<td>构建时间</td>
<td>${{ github.event.head_commit.timestamp }}</td>
Comment on lines +219 to +223

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Use fallback metadata for manual dispatch notifications.

At Line 219 and Line 223, github.event.head_commit.* may be empty for workflow_dispatch, causing blank email fields.

Suggested fallback values
-                      <td>${{ github.event.head_commit.message }}</td>
+                      <td>${{ github.event.head_commit.message || github.sha }}</td>
...
-                      <td>${{ github.event.head_commit.timestamp }}</td>
+                      <td>${{ github.event.head_commit.timestamp || github.run_started_at }}</td>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/docker-build-push.yml around lines 219 - 223, The workflow
uses github.event.head_commit.message and github.event.head_commit.timestamp
which can be empty for workflow_dispatch; update the template to use expresssion
fallbacks (e.g. github.event.head_commit.message ||
github.event.inputs.commit_message || github.sha for the message, and
github.event.head_commit.timestamp || github.event.inputs.timestamp ||
github.event.created_at for the timestamp) so manual dispatches show meaningful
values; modify the two table cells that reference
github.event.head_commit.message and github.event.head_commit.timestamp to use
these fallback expressions.

</tr>
</table>
<p style="margin-top: 20px;">
<a href="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
style="background: #0366d6; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px;">
查看构建详情
</a>
</p>
</div>
<div class="footer">
此邮件由 GitHub Actions 自动发送
</div>
</div>
</body>
</html>
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ build
*.db-journal
logs
web/dist
web/node_modules
VERSION
.env
one-api
new-api
Expand Down
3 changes: 3 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ RUN go build -ldflags "-s -w -X 'github.com/QuantumNous/new-api/common.Version=$

FROM debian:bookworm-slim@sha256:f06537653ac770703bc45b4b113475bd402f451e85223f0f2837acbf89ab020a

RUN sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || \
sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list 2>/dev/null || true

RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates tzdata libasan8 wget \
&& rm -rf /var/lib/apt/lists/* \
Expand Down
1 change: 1 addition & 0 deletions VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
v0.13.2
2 changes: 1 addition & 1 deletion common/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (

var StartTime = time.Now().Unix() // unit: second
var Version = "v0.0.0" // this hard coding will be replaced automatically when building, no need to manually change
var SystemName = "New API"
var SystemName = "GQ API"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

SystemName rebrand violates repository branding constraints.

This replaces a protected project identity string.

🔧 Suggested fix
-var SystemName = "GQ API"
+var SystemName = "New API"

Based on learnings: Applies to **/*.go — do NOT modify, delete, replace, or remove references/branding related to new-api or QuantumNous.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@common/constants.go` at line 15, The SystemName variable was changed to "GQ
API", which violates protected branding rules; change the SystemName constant
back to the repository's protected identity string (restore SystemName to
"new-api") so the variable SystemName uses the original branding value instead
of "GQ API".

var Footer = ""
var Logo = ""
var TopUpLink = ""
Expand Down
2 changes: 1 addition & 1 deletion electron/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ function createWindow() {
nodeIntegration: false,
contextIsolation: true
},
title: 'New API',
title: 'GQ API',
icon: path.join(__dirname, 'icon.png')
});

Expand Down
Loading
Loading