diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 93aab01..733da2e 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -89,7 +89,13 @@ jobs:
run: |
pnpm install
pnpm add @mihomo-party/sysproxy-win32-${{ matrix.arch }}-msvc
- pnpm prepare --${{ matrix.arch }}
+ - name: Update Version for Dev Build
+ if: github.event_name == 'workflow_dispatch'
+ env:
+ GITHUB_EVENT_NAME: workflow_dispatch
+ run: node scripts/update-version.mjs
+ - name: Prepare
+ run: pnpm prepare --${{ matrix.arch }}
- name: Build
env:
npm_config_arch: ${{ matrix.arch }}
@@ -159,7 +165,13 @@ jobs:
pnpm add @mihomo-party/sysproxy-win32-${{ matrix.arch }}-msvc
pnpm add -D electron@22.3.27
(Get-Content electron-builder.yml) -replace 'windows', 'win7' | Set-Content electron-builder.yml
- pnpm prepare --${{ matrix.arch }}
+ - name: Update Version for Dev Build
+ if: github.event_name == 'workflow_dispatch'
+ env:
+ GITHUB_EVENT_NAME: workflow_dispatch
+ run: node scripts/update-version.mjs
+ - name: Prepare
+ run: pnpm prepare --${{ matrix.arch }}
- name: Build
env:
npm_config_arch: ${{ matrix.arch }}
@@ -228,7 +240,13 @@ jobs:
pnpm install
pnpm add @mihomo-party/sysproxy-linux-${{ matrix.arch }}-gnu
sed -i "s/productName: Clash Party/productName: mihomo-party/" electron-builder.yml
- pnpm prepare --${{ matrix.arch }}
+ - name: Update Version for Dev Build
+ if: github.event_name == 'workflow_dispatch'
+ env:
+ GITHUB_EVENT_NAME: workflow_dispatch
+ run: node scripts/update-version.mjs
+ - name: Prepare
+ run: pnpm prepare --${{ matrix.arch }}
- name: Build
env:
npm_config_arch: ${{ matrix.arch }}
@@ -290,7 +308,13 @@ jobs:
run: |
pnpm install
pnpm add @mihomo-party/sysproxy-darwin-${{ matrix.arch }}
- pnpm prepare --${{ matrix.arch }}
+ - name: Update Version for Dev Build
+ if: github.event_name == 'workflow_dispatch'
+ env:
+ GITHUB_EVENT_NAME: workflow_dispatch
+ run: node scripts/update-version.mjs
+ - name: Prepare
+ run: pnpm prepare --${{ matrix.arch }}
- name: Build
env:
npm_config_arch: ${{ matrix.arch }}
@@ -376,7 +400,13 @@ jobs:
pnpm install
pnpm add @mihomo-party/sysproxy-darwin-${{ matrix.arch }}
pnpm add -D electron@32.2.2
- pnpm prepare --${{ matrix.arch }}
+ - name: Update Version for Dev Build
+ if: github.event_name == 'workflow_dispatch'
+ env:
+ GITHUB_EVENT_NAME: workflow_dispatch
+ run: node scripts/update-version.mjs
+ - name: Prepare
+ run: pnpm prepare --${{ matrix.arch }}
- name: Build
env:
npm_config_arch: ${{ matrix.arch }}
@@ -451,6 +481,11 @@ jobs:
run: npm install -g pnpm
- name: Install Dependencies
run: pnpm install
+ - name: Update Version for Dev Build
+ if: github.event_name == 'workflow_dispatch'
+ env:
+ GITHUB_EVENT_NAME: workflow_dispatch
+ run: node scripts/update-version.mjs
- name: Telegram Notification
if: startsWith(github.ref, 'refs/tags/v')
env:
diff --git a/package.json b/package.json
index 3a94569..83683f4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "mihomo-party",
- "version": "1.8.6-dev",
+ "version": "1.8.6",
"description": "Clash Party",
"main": "./out/main/index.js",
"author": "mihomo-party-org",
@@ -12,6 +12,7 @@
"typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false",
"typecheck": "npm run typecheck:node && npm run typecheck:web",
"prepare": "node scripts/prepare.mjs",
+ "prepare:dev": "node scripts/update-version.mjs && node scripts/prepare.mjs",
"updater": "node scripts/updater.mjs",
"checksum": "node scripts/checksum.mjs",
"telegram": "node scripts/telegram.mjs release",
@@ -20,8 +21,11 @@
"dev": "electron-vite dev",
"postinstall": "electron-builder install-app-deps",
"build:win": "electron-vite build && electron-builder --publish never --win",
+ "build:win:dev": "npm run prepare:dev && electron-vite build && electron-builder --publish never --win",
"build:mac": "electron-vite build && electron-builder --publish never --mac",
- "build:linux": "electron-vite build && electron-builder --publish never --linux"
+ "build:mac:dev": "npm run prepare:dev && electron-vite build && electron-builder --publish never --mac",
+ "build:linux": "electron-vite build && electron-builder --publish never --linux",
+ "build:linux:dev": "npm run prepare:dev && electron-vite build && electron-builder --publish never --linux"
},
"dependencies": {
"@electron-toolkit/preload": "^3.0.2",
diff --git a/scripts/telegram.mjs b/scripts/telegram.mjs
index a493817..79fac47 100644
--- a/scripts/telegram.mjs
+++ b/scripts/telegram.mjs
@@ -1,13 +1,16 @@
import axios from 'axios'
import { readFileSync } from 'fs'
+import { getProcessedVersion, isDevBuild, getDownloadUrl, generateDownloadLinksMarkdown, getGitCommitHash } from './version-utils.mjs'
const chat_id = '@MihomoPartyChannel'
const pkg = readFileSync('package.json', 'utf-8')
const changelog = readFileSync('changelog.md', 'utf-8')
-const { version } = JSON.parse(pkg)
+const { version: packageVersion } = JSON.parse(pkg)
+// 获取处理后的版本号
+const version = getProcessedVersion()
const releaseType = process.env.RELEASE_TYPE || process.argv[2] || 'release'
-const isDevRelease = releaseType === 'dev'
+const isDevRelease = releaseType === 'dev' || isDevBuild()
function convertMarkdownToTelegramHTML(content) {
return content
@@ -42,50 +45,34 @@ function convertMarkdownToTelegramHTML(content) {
let content = '';
if (isDevRelease) {
-
- const commitSha = process.env.GITHUB_SHA || 'unknown'
- const shortCommitSha = commitSha.substring(0, 7)
+ // 版本号中提取commit hash
+ const shortCommitSha = getGitCommitHash(true)
+ const commitSha = getGitCommitHash(false)
- content = `🚧 Clash Party Dev Build 开发版本发布\n\n`
+ content = `🚧 Clash Party Dev Build 开发版本发布\n\n`
content += `基于版本: ${version}\n`
- content += `提交哈希: ${shortCommitSha}\n\n`
+ content += `提交哈希: ${shortCommitSha}\n\n`
content += `更新日志:\n`
content += convertMarkdownToTelegramHTML(changelog)
content += '\n\n⚠️ 注意:这是开发版本,可能存在不稳定性,仅供测试使用\n'
} else {
// 正式版本通知
- content = `🌟 Clash Party v${version} 正式发布\n\n`
+ content = `🌟 Clash Party v${version} 正式发布\n\n`
content += convertMarkdownToTelegramHTML(changelog)
}
// 构建下载链接
-const downloadUrl = isDevRelease
- ? `https://github.com/mihomo-party-org/mihomo-party/releases/download/dev`
- : `https://github.com/mihomo-party-org/mihomo-party/releases/download/v${version}`
+const downloadUrl = getDownloadUrl(isDevRelease, version)
-content += '\n下载地址:\nWindows10/11:\n'
-content += `安装版:64位 | 32位 | ARM64\n`
-content += `便携版:64位 | 32位 | ARM64\n`
-content += '\nWindows7/8:\n'
-content += `安装版:64位 | 32位\n`
-content += `便携版:64位 | 32位\n`
-content += '\nmacOS 11+:\n'
-content += `PKG:Intel | Apple Silicon\n`
-content += '\nmacOS 10.15+:\n'
-content += `PKG:Intel | Apple Silicon\n`
-content += '\nLinux:\n'
-content += `DEB:64位 | ARM64\n`
-content += `RPM:64位 | ARM64`
+const downloadLinksMarkdown = generateDownloadLinksMarkdown(downloadUrl, version)
+content += convertMarkdownToTelegramHTML(downloadLinksMarkdown)
await axios.post(`https://api.telegram.org/bot${process.env.TELEGRAM_BOT_TOKEN}/sendMessage`, {
chat_id,
text: content,
link_preview_options: {
is_disabled: false,
- url: 'https://github.com/mihomo-party-org/mihomo-party',
+ url: 'https://github.com/mihomo-party-org/clash-party',
prefer_large_media: true
},
parse_mode: 'HTML'
diff --git a/scripts/update-version.mjs b/scripts/update-version.mjs
new file mode 100644
index 0000000..8f758e1
--- /dev/null
+++ b/scripts/update-version.mjs
@@ -0,0 +1,34 @@
+import { readFileSync, writeFileSync } from 'fs'
+import { getProcessedVersion, isDevBuild } from './version-utils.mjs'
+
+// 更新package.json中的版本号
+function updatePackageVersion() {
+ try {
+ const packagePath = 'package.json'
+ const packageContent = readFileSync(packagePath, 'utf-8')
+ const packageData = JSON.parse(packageContent)
+
+ // 获取处理后的版本号
+ const newVersion = getProcessedVersion()
+
+ console.log(`当前版本: ${packageData.version}`)
+ console.log(`${isDevBuild() ? 'Dev构建' : '正式构建'} - 新版本: ${newVersion}`)
+
+ packageData.version = newVersion
+
+ // 写回package.json
+ writeFileSync(packagePath, JSON.stringify(packageData, null, 2) + '\n')
+
+ console.log(`✅ package.json版本号已更新为: ${newVersion}`)
+
+ } catch (error) {
+ console.error('❌ 更新package.json版本号失败:', error.message)
+ process.exit(1)
+ }
+}
+
+if (import.meta.url === `file://${process.argv[1]}`) {
+ updatePackageVersion()
+}
+
+export { updatePackageVersion }
\ No newline at end of file
diff --git a/scripts/updater.mjs b/scripts/updater.mjs
index 4a180b8..de9e455 100644
--- a/scripts/updater.mjs
+++ b/scripts/updater.mjs
@@ -1,28 +1,23 @@
import yaml from 'yaml'
import { readFileSync, writeFileSync } from 'fs'
+import { getProcessedVersion, isDevBuild, getDownloadUrl, generateDownloadLinksMarkdown } from './version-utils.mjs'
const pkg = readFileSync('package.json', 'utf-8')
let changelog = readFileSync('changelog.md', 'utf-8')
-const { version } = JSON.parse(pkg)
-const downloadUrl = `https://github.com/mihomo-party-org/mihomo-party/releases/download/v${version}`
+const { version: packageVersion } = JSON.parse(pkg)
+
+// 获取处理后的版本号
+const version = getProcessedVersion()
+const isDev = isDevBuild()
+const downloadUrl = getDownloadUrl(isDev, version)
+
const latest = {
version,
changelog
}
-changelog += '\n### 下载地址:\n\n#### Windows10/11:\n\n'
-changelog += `- 安装版:[64位](${downloadUrl}/mihomo-party-windows-${version}-x64-setup.exe) | [32位](${downloadUrl}/mihomo-party-windows-${version}-ia32-setup.exe) | [ARM64](${downloadUrl}/mihomo-party-windows-${version}-arm64-setup.exe)\n\n`
-changelog += `- 便携版:[64位](${downloadUrl}/mihomo-party-windows-${version}-x64-portable.7z) | [32位](${downloadUrl}/mihomo-party-windows-${version}-ia32-portable.7z) | [ARM64](${downloadUrl}/mihomo-party-windows-${version}-arm64-portable.7z)\n\n`
-changelog += '\n#### Windows7/8:\n\n'
-changelog += `- 安装版:[64位](${downloadUrl}/mihomo-party-win7-${version}-x64-setup.exe) | [32位](${downloadUrl}/mihomo-party-win7-${version}-ia32-setup.exe)\n\n`
-changelog += `- 便携版:[64位](${downloadUrl}/mihomo-party-win7-${version}-x64-portable.7z) | [32位](${downloadUrl}/mihomo-party-win7-${version}-ia32-portable.7z)\n\n`
-changelog += '\n#### macOS 11+:\n\n'
-changelog += `- PKG:[Intel](${downloadUrl}/mihomo-party-macos-${version}-x64.pkg) | [Apple Silicon](${downloadUrl}/mihomo-party-macos-${version}-arm64.pkg)\n\n`
-changelog += '\n#### macOS 10.15+:\n\n'
-changelog += `- PKG:[Intel](${downloadUrl}/mihomo-party-catalina-${version}-x64.pkg) | [Apple Silicon](${downloadUrl}/mihomo-party-catalina-${version}-arm64.pkg)\n\n`
-changelog += '\n#### Linux:\n\n'
-changelog += `- DEB:[64位](${downloadUrl}/mihomo-party-linux-${version}-amd64.deb) | [ARM64](${downloadUrl}/mihomo-party-linux-${version}-arm64.deb)\n\n`
-changelog += `- RPM:[64位](${downloadUrl}/mihomo-party-linux-${version}-x86_64.rpm) | [ARM64](${downloadUrl}/mihomo-party-linux-${version}-aarch64.rpm)`
+// 使用统一的下载链接生成函数
+changelog += generateDownloadLinksMarkdown(downloadUrl, version)
changelog += '\n\n### 机场推荐:\n- 高性能海外机场,稳定首选:[https://狗狗加速.com](https://party.dginv.click/#/register?code=ARdo0mXx)'
diff --git a/scripts/version-utils.mjs b/scripts/version-utils.mjs
new file mode 100644
index 0000000..4592e54
--- /dev/null
+++ b/scripts/version-utils.mjs
@@ -0,0 +1,86 @@
+import { execSync } from 'child_process'
+import { readFileSync } from 'fs'
+
+ // 获取Git commit hash
+export function getGitCommitHash(short = true) {
+ try {
+ const command = short ? 'git rev-parse --short HEAD' : 'git rev-parse HEAD'
+ return execSync(command, { encoding: 'utf-8' }).trim()
+ } catch (error) {
+ console.warn('Failed to get git commit hash:', error.message)
+ return 'unknown'
+ }
+}
+
+ // 获取当前月份日期
+export function getCurrentMonthDate() {
+ const now = new Date()
+ const month = String(now.getMonth() + 1).padStart(2, '0')
+ const day = String(now.getDate()).padStart(2, '0')
+ return `${month}${day}`
+}
+
+ // 从package.json读取基础版本号
+export function getBaseVersion() {
+ try {
+ const pkg = readFileSync('package.json', 'utf-8')
+ const { version } = JSON.parse(pkg)
+ // 移除dev版本格式后缀
+ return version.replace('-dev', '').replace(/-\d{4}-[a-f0-9]{7}$/, '')
+ } catch (error) {
+ console.error('Failed to read package.json:', error.message)
+ return '1.0.0'
+ }
+}
+
+ // 生成dev版本号
+export function getDevVersion() {
+ const baseVersion = getBaseVersion()
+ const monthDate = getCurrentMonthDate()
+ const commitHash = getGitCommitHash(true)
+
+ return `${baseVersion}-${monthDate}-${commitHash}`
+}
+
+ // 检查当前环境是否为dev构建
+export function isDevBuild() {
+ return process.env.NODE_ENV === 'development' ||
+ process.argv.includes('--dev') ||
+ process.env.GITHUB_EVENT_NAME === 'workflow_dispatch'
+}
+
+ // 获取处理后的版本号
+export function getProcessedVersion() {
+ if (isDevBuild()) {
+ return getDevVersion()
+ } else {
+ return getBaseVersion()
+ }
+}
+
+ // 生成下载URL
+export function getDownloadUrl(isDev, version) {
+ if (isDev) {
+ return 'https://github.com/mihomo-party-org/clash-party/releases/download/dev'
+ } else {
+ return `https://github.com/mihomo-party-org/clash-party/releases/download/v${version}`
+ }
+}
+
+export function generateDownloadLinksMarkdown(downloadUrl, version) {
+ let links = '\n### 下载地址:\n\n#### Windows10/11:\n\n'
+ links += `- 安装版:[64位](${downloadUrl}/clash-party-windows-${version}-x64-setup.exe) | [32位](${downloadUrl}/clash-party-windows-${version}-ia32-setup.exe) | [ARM64](${downloadUrl}/clash-party-windows-${version}-arm64-setup.exe)\n\n`
+ links += `- 便携版:[64位](${downloadUrl}/clash-party-windows-${version}-x64-portable.7z) | [32位](${downloadUrl}/clash-party-windows-${version}-ia32-portable.7z) | [ARM64](${downloadUrl}/clash-party-windows-${version}-arm64-portable.7z)\n\n`
+ links += '\n#### Windows7/8:\n\n'
+ links += `- 安装版:[64位](${downloadUrl}/clash-party-win7-${version}-x64-setup.exe) | [32位](${downloadUrl}/clash-party-win7-${version}-ia32-setup.exe)\n\n`
+ links += `- 便携版:[64位](${downloadUrl}/clash-party-win7-${version}-x64-portable.7z) | [32位](${downloadUrl}/clash-party-win7-${version}-ia32-portable.7z)\n\n`
+ links += '\n#### macOS 11+:\n\n'
+ links += `- PKG:[Intel](${downloadUrl}/clash-party-macos-${version}-x64.pkg) | [Apple Silicon](${downloadUrl}/clash-party-macos-${version}-arm64.pkg)\n\n`
+ links += '\n#### macOS 10.15+:\n\n'
+ links += `- PKG:[Intel](${downloadUrl}/clash-party-catalina-${version}-x64.pkg) | [Apple Silicon](${downloadUrl}/clash-party-catalina-${version}-arm64.pkg)\n\n`
+ links += '\n#### Linux:\n\n'
+ links += `- DEB:[64位](${downloadUrl}/clash-party-linux-${version}-amd64.deb) | [ARM64](${downloadUrl}/clash-party-linux-${version}-arm64.deb)\n\n`
+ links += `- RPM:[64位](${downloadUrl}/clash-party-linux-${version}-x86_64.rpm) | [ARM64](${downloadUrl}/clash-party-linux-${version}-aarch64.rpm)`
+
+ return links
+}
\ No newline at end of file