105 lines
2.7 KiB
Go
105 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
"path/filepath"
|
|
"runtime"
|
|
|
|
"github.com/Eriyc/rules_wails/pkg/wails3kit/updates"
|
|
updatesdarwin "github.com/Eriyc/rules_wails/pkg/wails3kit/updates/platform/darwin"
|
|
updateslinux "github.com/Eriyc/rules_wails/pkg/wails3kit/updates/platform/linux"
|
|
updateswindows "github.com/Eriyc/rules_wails/pkg/wails3kit/updates/platform/windows"
|
|
httpmanifest "github.com/Eriyc/rules_wails/pkg/wails3kit/updates/providers/httpmanifest"
|
|
filestore "github.com/Eriyc/rules_wails/pkg/wails3kit/updates/storage/file"
|
|
)
|
|
|
|
const (
|
|
productID = "com.eriyc.updater-example"
|
|
currentVersion = "0.1.0"
|
|
)
|
|
|
|
type updaterSettings struct {
|
|
ManifestURL string
|
|
Token string
|
|
}
|
|
|
|
func currentAppDescriptor() (updates.AppDescriptor, error) {
|
|
executablePath, err := os.Executable()
|
|
if err != nil {
|
|
return updates.AppDescriptor{}, err
|
|
}
|
|
workingDirectory, err := os.Getwd()
|
|
if err != nil {
|
|
return updates.AppDescriptor{}, err
|
|
}
|
|
|
|
return updates.AppDescriptor{
|
|
ProductID: productID,
|
|
CurrentVersion: currentVersion,
|
|
Channel: updates.ChannelStable,
|
|
OS: runtime.GOOS,
|
|
Arch: runtime.GOARCH,
|
|
ExecutablePath: executablePath,
|
|
Args: os.Args[1:],
|
|
WorkingDirectory: workingDirectory,
|
|
}, nil
|
|
}
|
|
|
|
func loadUpdaterSettings() updaterSettings {
|
|
settings := updaterSettings{
|
|
ManifestURL: os.Getenv("UPDATER_MANIFEST_URL"),
|
|
Token: os.Getenv("UPDATER_TOKEN"),
|
|
}
|
|
if settings.ManifestURL == "" {
|
|
settings.ManifestURL = "http://127.0.0.1:18765/manifest.json"
|
|
}
|
|
if settings.Token == "" {
|
|
settings.Token = "test-token"
|
|
}
|
|
return settings
|
|
}
|
|
|
|
func newController(app updates.AppDescriptor) (*updates.Controller, error) {
|
|
settings := loadUpdaterSettings()
|
|
|
|
provider, err := httpmanifest.New(httpmanifest.Config{
|
|
ManifestURL: settings.ManifestURL,
|
|
HTTPClient: http.DefaultClient,
|
|
PrepareRequest: func(request *http.Request) error {
|
|
request.Header.Set("Authorization", "Bearer "+settings.Token)
|
|
return nil
|
|
},
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
platformInstaller, err := currentPlatformInstaller()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return updates.NewController(updates.Config{
|
|
App: app,
|
|
Provider: provider,
|
|
Downloader: updates.NewHTTPDownloader(http.DefaultClient),
|
|
Store: filestore.New(filepath.Join(os.TempDir(), "wails3kit-example", "snapshot.json")),
|
|
Platform: platformInstaller,
|
|
})
|
|
}
|
|
|
|
func currentPlatformInstaller() (updates.PlatformInstaller, error) {
|
|
switch runtime.GOOS {
|
|
case "darwin":
|
|
return updatesdarwin.New(), nil
|
|
case "linux":
|
|
return updateslinux.New(), nil
|
|
case "windows":
|
|
return updateswindows.New(), nil
|
|
default:
|
|
return nil, fmt.Errorf("unsupported platform: %s", runtime.GOOS)
|
|
}
|
|
}
|