mirror of
https://github.com/MengMengCode/CLICD.git
synced 2026-08-08 14:34:49 +08:00
release: v1.0.6
This commit is contained in:
@@ -35,6 +35,15 @@ jobs:
|
|||||||
go-version: "1.22.x"
|
go-version: "1.22.x"
|
||||||
cache-dependency-path: backend/go.sum
|
cache-dependency-path: backend/go.sum
|
||||||
|
|
||||||
|
- name: Set version from tag
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
if [[ "$GITHUB_REF" == refs/tags/v* ]]; then
|
||||||
|
echo "CLICD_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
|
||||||
|
else
|
||||||
|
echo "CLICD_VERSION=dev" >> $GITHUB_ENV
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
shell: bash
|
shell: bash
|
||||||
run: bash build.sh
|
run: bash build.sh
|
||||||
|
|||||||
@@ -63,3 +63,4 @@ backend/tmp/
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
linux.txt
|
linux.txt
|
||||||
|
push-release.ps1
|
||||||
|
|||||||
@@ -404,6 +404,44 @@ func fetchLatestRelease(repo string) (*githubRelease, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
req.Header.Set("Accept", "application/vnd.github+json")
|
req.Header.Set("Accept", "application/vnd.github+json")
|
||||||
|
setGitHubRequestHeaders(req)
|
||||||
|
|
||||||
|
client := &http.Client{Timeout: 20 * time.Second}
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
if fallback, fallbackErr := fetchLatestReleaseFallback(repo); fallbackErr == nil {
|
||||||
|
return fallback, nil
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
body, _ := io.ReadAll(io.LimitReader(resp.Body, 512))
|
||||||
|
apiErr := fmt.Errorf("GitHub API 返回 %s: %s", resp.Status, strings.TrimSpace(string(body)))
|
||||||
|
if fallback, fallbackErr := fetchLatestReleaseFallback(repo); fallbackErr == nil {
|
||||||
|
if resp.StatusCode == http.StatusForbidden || resp.StatusCode == http.StatusTooManyRequests {
|
||||||
|
fmt.Println("GitHub API 被限流,已切换到备用检查方式。")
|
||||||
|
} else {
|
||||||
|
fmt.Println("GitHub API 不可用,已切换到备用检查方式。")
|
||||||
|
}
|
||||||
|
return fallback, nil
|
||||||
|
}
|
||||||
|
return nil, apiErr
|
||||||
|
}
|
||||||
|
|
||||||
|
var release githubRelease
|
||||||
|
if err := json.NewDecoder(resp.Body).Decode(&release); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &release, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func fetchLatestReleaseFallback(repo string) (*githubRelease, error) {
|
||||||
|
req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("https://github.com/%s/releases/latest", repo), nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
req.Header.Set("User-Agent", "clicd-updater/"+version.Current())
|
req.Header.Set("User-Agent", "clicd-updater/"+version.Current())
|
||||||
|
|
||||||
client := &http.Client{Timeout: 20 * time.Second}
|
client := &http.Client{Timeout: 20 * time.Second}
|
||||||
@@ -412,17 +450,54 @@ func fetchLatestRelease(repo string) (*githubRelease, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
if resp.StatusCode >= 400 {
|
||||||
if resp.StatusCode != http.StatusOK {
|
return nil, fmt.Errorf("GitHub releases/latest 返回 %s", resp.Status)
|
||||||
body, _ := io.ReadAll(io.LimitReader(resp.Body, 512))
|
|
||||||
return nil, fmt.Errorf("GitHub API 返回 %s: %s", resp.Status, strings.TrimSpace(string(body)))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var release githubRelease
|
tag := latestTagFromPath(resp.Request.URL.Path)
|
||||||
if err := json.NewDecoder(resp.Body).Decode(&release); err != nil {
|
if tag == "" {
|
||||||
return nil, err
|
return nil, fmt.Errorf("无法从 GitHub releases/latest 跳转结果解析最新版本")
|
||||||
|
}
|
||||||
|
|
||||||
|
const assetName = "clicd-linux-amd64.tar.gz"
|
||||||
|
return &githubRelease{
|
||||||
|
TagName: tag,
|
||||||
|
Name: tag,
|
||||||
|
HTMLURL: fmt.Sprintf("https://github.com/%s/releases/tag/%s", repo, tag),
|
||||||
|
Assets: []struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
BrowserDownloadURL string `json:"browser_download_url"`
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
Name: assetName,
|
||||||
|
BrowserDownloadURL: fmt.Sprintf("https://github.com/%s/releases/latest/download/%s", repo, assetName),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func latestTagFromPath(path string) string {
|
||||||
|
const marker = "/releases/tag/"
|
||||||
|
idx := strings.Index(path, marker)
|
||||||
|
if idx < 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
tag := strings.TrimSpace(path[idx+len(marker):])
|
||||||
|
if slash := strings.Index(tag, "/"); slash >= 0 {
|
||||||
|
tag = tag[:slash]
|
||||||
|
}
|
||||||
|
return tag
|
||||||
|
}
|
||||||
|
|
||||||
|
func setGitHubRequestHeaders(req *http.Request) {
|
||||||
|
req.Header.Set("User-Agent", "clicd-updater/"+version.Current())
|
||||||
|
token := strings.TrimSpace(os.Getenv("CLICD_GITHUB_TOKEN"))
|
||||||
|
if token == "" {
|
||||||
|
token = strings.TrimSpace(os.Getenv("GITHUB_TOKEN"))
|
||||||
|
}
|
||||||
|
if token != "" {
|
||||||
|
req.Header.Set("Authorization", "Bearer "+token)
|
||||||
}
|
}
|
||||||
return &release, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func findReleaseAsset(release *githubRelease, name string) string {
|
func findReleaseAsset(release *githubRelease, name string) string {
|
||||||
@@ -495,7 +570,7 @@ func downloadFile(url, dest string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
req.Header.Set("User-Agent", "clicd-updater/"+version.Current())
|
setGitHubRequestHeaders(req)
|
||||||
client := &http.Client{Timeout: 10 * time.Minute}
|
client := &http.Client{Timeout: 10 * time.Minute}
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package version
|
package version
|
||||||
|
|
||||||
var (
|
var (
|
||||||
Version = "dev"
|
Version = "1.0.6"
|
||||||
Repo = "MengMengCode/CLICD"
|
Repo = "MengMengCode/CLICD"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -11,3 +11,4 @@ func Current() string {
|
|||||||
}
|
}
|
||||||
return Version
|
return Version
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user