mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-06 20:03:05 +08:00
- build-release 优先读取 GONAVI_VERSION 与 version/dev-version.txt - 新增共享测试版号文件,统一开发态与发布脚本版本来源 - internal/app 版本解析增加 dev-version 回退与回归测试 - macOS 发布改为 ZIP 归档,不再触发 create-dmg 与 Finder 排版 - 补充发布脚本调整的需求追踪文档
96 lines
2.3 KiB
Go
96 lines
2.3 KiB
Go
package app
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
var AppVersion = "0.0.0"
|
|
var AppBuildTime = ""
|
|
var developmentVersionPathResolver = defaultDevelopmentVersionPaths
|
|
var packageVersionPathResolver = defaultPackageVersionPaths
|
|
|
|
func getCurrentVersion() string {
|
|
version := strings.TrimSpace(AppVersion)
|
|
if version == "" || version == "0.0.0" {
|
|
if env := strings.TrimSpace(os.Getenv("GONAVI_VERSION")); env != "" {
|
|
version = env
|
|
} else if devVersion, err := readDevelopmentVersion(); err == nil && devVersion != "" {
|
|
version = devVersion
|
|
} else if pkgVersion, err := readPackageVersion(); err == nil && pkgVersion != "" {
|
|
version = pkgVersion
|
|
}
|
|
}
|
|
return normalizeVersion(version)
|
|
}
|
|
|
|
func defaultDevelopmentVersionPaths() []string {
|
|
paths := []string{
|
|
filepath.Join("version", "dev-version.txt"),
|
|
}
|
|
exe, err := os.Executable()
|
|
if err == nil {
|
|
base := filepath.Dir(exe)
|
|
paths = append(paths, filepath.Join(base, "version", "dev-version.txt"))
|
|
paths = append(paths, filepath.Join(base, "..", "version", "dev-version.txt"))
|
|
}
|
|
return paths
|
|
}
|
|
|
|
func defaultPackageVersionPaths() []string {
|
|
paths := []string{
|
|
filepath.Join("frontend", "package.json"),
|
|
}
|
|
exe, err := os.Executable()
|
|
if err == nil {
|
|
base := filepath.Dir(exe)
|
|
paths = append(paths, filepath.Join(base, "frontend", "package.json"))
|
|
paths = append(paths, filepath.Join(base, "..", "frontend", "package.json"))
|
|
}
|
|
return paths
|
|
}
|
|
|
|
func readDevelopmentVersion() (string, error) {
|
|
return readPlainVersionFromPaths(developmentVersionPathResolver())
|
|
}
|
|
|
|
func readPackageVersion() (string, error) {
|
|
return readJSONVersionFromPaths(packageVersionPathResolver())
|
|
}
|
|
|
|
func readPlainVersionFromPaths(paths []string) (string, error) {
|
|
for _, p := range paths {
|
|
data, err := os.ReadFile(p)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
if version := strings.TrimSpace(string(data)); version != "" {
|
|
return version, nil
|
|
}
|
|
}
|
|
|
|
return "", os.ErrNotExist
|
|
}
|
|
|
|
func readJSONVersionFromPaths(paths []string) (string, error) {
|
|
for _, p := range paths {
|
|
data, err := os.ReadFile(p)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
var payload struct {
|
|
Version string `json:"version"`
|
|
}
|
|
if err := json.Unmarshal(data, &payload); err != nil {
|
|
continue
|
|
}
|
|
if strings.TrimSpace(payload.Version) != "" {
|
|
return strings.TrimSpace(payload.Version), nil
|
|
}
|
|
}
|
|
|
|
return "", os.ErrNotExist
|
|
}
|