From df472119e747270341fe9f425eb62106aab52ac3 Mon Sep 17 00:00:00 2001 From: Supra4E8C Date: Sat, 20 Dec 2025 12:34:45 +0800 Subject: [PATCH] feat: add commit-based release notes, usage loading spinner, and 60s logs timeout --- .github/workflows/release.yml | 58 ++++++++++++++++++++-------- src/components/ui/LoadingSpinner.tsx | 10 ++++- src/pages/UsagePage.module.scss | 9 +++-- src/pages/UsagePage.tsx | 2 +- src/services/api/logs.ts | 8 +++- src/utils/constants.ts | 1 + 6 files changed, 62 insertions(+), 26 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7579e8b..25c052d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,6 +15,9 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + with: + fetch-depth: 0 + fetch-tags: true - name: Setup Node.js uses: actions/setup-node@v4 @@ -36,27 +39,48 @@ jobs: mv index.html management.html ls -lh management.html + - name: Generate release notes + run: | + set -euo pipefail + current_tag="${GITHUB_REF_NAME}" + previous_tag="$(git tag --list 'v*' --sort=-v:refname | grep -v "^${current_tag}$" | head -n 1 || true)" + if [ -n "${previous_tag}" ]; then + range="${previous_tag}..${current_tag}" + title="Changes since ${previous_tag}" + else + range="${current_tag}" + title="Changes" + fi + + { + echo "## CLI Proxy API Management Center - ${current_tag}" + echo + echo "### Download and Usage" + echo "1. Download the \`management.html\` file" + echo "2. Open it directly in your browser" + echo "3. All assets (CSS, JavaScript, images) are bundled into this single file" + echo + echo "### Features" + echo "- Single file, no external dependencies required" + echo "- Complete management interface for CLI Proxy API" + echo "- Support for local and remote connections" + echo "- Multi-language support (Chinese/English)" + echo "- Dark/Light theme support" + echo + echo "### ${title}" + echo + git log --pretty=format:"- %h %s" "${range}" + echo + echo + echo "---" + echo "🤖 Generated with GitHub Actions" + } > release-notes.md + - name: Create Release uses: softprops/action-gh-release@v1 with: files: dist/management.html - body: | - ## CLI Proxy API Management Center - ${{ github.ref_name }} - - ### Download and Usage - 1. Download the `management.html` file - 2. Open it directly in your browser - 3. All assets (CSS, JavaScript, images) are bundled into this single file - - ### Features - - Single file, no external dependencies required - - Complete management interface for CLI Proxy API - - Support for local and remote connections - - Multi-language support (Chinese/English) - - Dark/Light theme support - - --- - 🤖 Generated with GitHub Actions + body_path: release-notes.md draft: false prerelease: false env: diff --git a/src/components/ui/LoadingSpinner.tsx b/src/components/ui/LoadingSpinner.tsx index 1ab9274..2247b7b 100644 --- a/src/components/ui/LoadingSpinner.tsx +++ b/src/components/ui/LoadingSpinner.tsx @@ -1,7 +1,13 @@ -export function LoadingSpinner({ size = 20 }: { size?: number }) { +export function LoadingSpinner({ + size = 20, + className = '' +}: { + size?: number; + className?: string; +}) { return (
- + {t('common.loading')}
diff --git a/src/services/api/logs.ts b/src/services/api/logs.ts index fc5861a..dc28183 100644 --- a/src/services/api/logs.ts +++ b/src/services/api/logs.ts @@ -3,6 +3,7 @@ */ import { apiClient } from './client'; +import { LOGS_TIMEOUT_MS } from '@/utils/constants'; export interface LogsQuery { after?: number; @@ -25,14 +26,17 @@ export interface ErrorLogsResponse { } export const logsApi = { - fetchLogs: (params: LogsQuery = {}): Promise => apiClient.get('/logs', { params }), + fetchLogs: (params: LogsQuery = {}): Promise => + apiClient.get('/logs', { params, timeout: LOGS_TIMEOUT_MS }), clearLogs: () => apiClient.delete('/logs'), - fetchErrorLogs: (): Promise => apiClient.get('/request-error-logs'), + fetchErrorLogs: (): Promise => + apiClient.get('/request-error-logs', { timeout: LOGS_TIMEOUT_MS }), downloadErrorLog: (filename: string) => apiClient.getRaw(`/request-error-logs/${encodeURIComponent(filename)}`, { responseType: 'blob', + timeout: LOGS_TIMEOUT_MS }), }; diff --git a/src/utils/constants.ts b/src/utils/constants.ts index c744a48..ef2594c 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -18,6 +18,7 @@ export const LOG_REFRESH_DELAY_MS = 500; // 日志相关 export const MAX_LOG_LINES = 2000; export const LOG_FETCH_LIMIT = 2500; +export const LOGS_TIMEOUT_MS = 60 * 1000; // 认证文件分页 export const DEFAULT_AUTH_FILES_PAGE_SIZE = 20;