mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 02:15:48 +02:00
feat(ota): add dev channel
This commit is contained in:
parent
6a832937e3
commit
38f4b55fcf
4 changed files with 105 additions and 3 deletions
5
.github/build/build_info.json
vendored
5
.github/build/build_info.json
vendored
|
@ -16,5 +16,10 @@
|
||||||
"darwin": {
|
"darwin": {
|
||||||
"amd64": {"arch": "o64", "name": "macos-64"},
|
"amd64": {"arch": "o64", "name": "macos-64"},
|
||||||
"arm64": {"arch": "oa64", "name": "macos-arm64-v8a"}
|
"arm64": {"arch": "oa64", "name": "macos-arm64-v8a"}
|
||||||
|
},
|
||||||
|
"windows": {
|
||||||
|
"386": {"arch": "i686", "name": "windows-32"},
|
||||||
|
"amd64": {"arch": "x86_64", "name": "windows-64"},
|
||||||
|
"arm64": {"arch": "aarch64", "name": "windows-arm64-v8a"}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -193,6 +193,9 @@ async function performUpgrade() {
|
||||||
<ASelectOption key="prerelease">
|
<ASelectOption key="prerelease">
|
||||||
{{ $gettext('Pre-release') }}
|
{{ $gettext('Pre-release') }}
|
||||||
</ASelectOption>
|
</ASelectOption>
|
||||||
|
<ASelectOption key="dev">
|
||||||
|
{{ $gettext('Dev') }}
|
||||||
|
</ASelectOption>
|
||||||
</ASelect>
|
</ASelect>
|
||||||
</AFormItem>
|
</AFormItem>
|
||||||
<template v-if="!loading">
|
<template v-if="!loading">
|
||||||
|
|
77
internal/version/dev_build.go
Normal file
77
internal/version/dev_build.go
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
package version
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
GithubDevCommitAPI = "https://api.github.com/repos/0xJacky/nginx-ui/commits/dev?per_page=1"
|
||||||
|
CloudflareWorkerAPI = "https://nginx-ui-proxy.langgood.com"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TCommit struct {
|
||||||
|
SHA string `json:"sha"`
|
||||||
|
Commit struct {
|
||||||
|
Message string `json:"message"`
|
||||||
|
Committer struct {
|
||||||
|
Date time.Time `json:"date"`
|
||||||
|
} `json:"committer"`
|
||||||
|
} `json:"commit"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func getDevBuild() (data TRelease, err error) {
|
||||||
|
resp, err := http.Get(GithubDevCommitAPI)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
body, err := io.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
commit := TCommit{}
|
||||||
|
err = json.Unmarshal(body, &commit)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(commit.SHA) < 7 {
|
||||||
|
err = errors.New("invalid commit SHA")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
shortSHA := commit.SHA[:7]
|
||||||
|
|
||||||
|
resp, err = http.Get(fmt.Sprintf("%s/dev-builds/%s", CloudflareWorkerAPI, shortSHA))
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
body, err = io.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
assets := []TReleaseAsset{}
|
||||||
|
err = json.Unmarshal(body, &assets)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
data = TRelease{
|
||||||
|
TagName: "sha-" + shortSHA,
|
||||||
|
Name: shortSHA,
|
||||||
|
Body: commit.Commit.Message,
|
||||||
|
Type: ReleaseTypeDev,
|
||||||
|
PublishedAt: commit.Commit.Committer.Date,
|
||||||
|
Assets: assets,
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
|
@ -14,6 +14,14 @@ const (
|
||||||
GithubReleasesListAPI = "https://api.github.com/repos/0xJacky/nginx-ui/releases"
|
GithubReleasesListAPI = "https://api.github.com/repos/0xJacky/nginx-ui/releases"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ReleaseType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
ReleaseTypeStable ReleaseType = "stable"
|
||||||
|
ReleaseTypePrerelease ReleaseType = "prerelease"
|
||||||
|
ReleaseTypeDev ReleaseType = "dev"
|
||||||
|
)
|
||||||
|
|
||||||
type TReleaseAsset struct {
|
type TReleaseAsset struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
BrowserDownloadUrl string `json:"browser_download_url"`
|
BrowserDownloadUrl string `json:"browser_download_url"`
|
||||||
|
@ -26,6 +34,7 @@ type TRelease struct {
|
||||||
PublishedAt time.Time `json:"published_at"`
|
PublishedAt time.Time `json:"published_at"`
|
||||||
Body string `json:"body"`
|
Body string `json:"body"`
|
||||||
Prerelease bool `json:"prerelease"`
|
Prerelease bool `json:"prerelease"`
|
||||||
|
Type ReleaseType `json:"type"`
|
||||||
Assets []TReleaseAsset `json:"assets"`
|
Assets []TReleaseAsset `json:"assets"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +67,7 @@ func getLatestRelease() (data TRelease, err error) {
|
||||||
err = errors.Wrap(err, "service.getLatestRelease json.Unmarshal err")
|
err = errors.Wrap(err, "service.getLatestRelease json.Unmarshal err")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
data.Type = ReleaseTypeStable
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +102,7 @@ func getLatestPrerelease() (data TRelease, err error) {
|
||||||
if release.Prerelease && release.PublishedAt.After(latestDate) {
|
if release.Prerelease && release.PublishedAt.After(latestDate) {
|
||||||
data = release
|
data = release
|
||||||
latestDate = release.PublishedAt
|
latestDate = release.PublishedAt
|
||||||
|
data.Type = ReleaseTypePrerelease
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,12 +115,12 @@ func GetRelease(channel string) (data TRelease, err error) {
|
||||||
return TRelease{}, err
|
return TRelease{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
switch channel {
|
switch ReleaseType(channel) {
|
||||||
default:
|
default:
|
||||||
fallthrough
|
fallthrough
|
||||||
case "stable":
|
case ReleaseTypeStable:
|
||||||
return stableRelease, nil
|
return stableRelease, nil
|
||||||
case "prerelease":
|
case ReleaseTypePrerelease:
|
||||||
preRelease, err := getLatestPrerelease()
|
preRelease, err := getLatestPrerelease()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return TRelease{}, err
|
return TRelease{}, err
|
||||||
|
@ -120,5 +131,11 @@ func GetRelease(channel string) (data TRelease, err error) {
|
||||||
return preRelease, nil
|
return preRelease, nil
|
||||||
}
|
}
|
||||||
return stableRelease, nil
|
return stableRelease, nil
|
||||||
|
case ReleaseTypeDev:
|
||||||
|
devRelease, err := getDevBuild()
|
||||||
|
if err != nil {
|
||||||
|
return TRelease{}, err
|
||||||
|
}
|
||||||
|
return devRelease, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue