Switch remote deploy to vendored source builds
Move remote deployment to a vendored source bundle built on the target host via Docker so redeploys no longer require local cross-compilation or host Go installation. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
283
vendor/github.com/wailsapp/wails/v2/internal/project/project.go
generated
vendored
Normal file
283
vendor/github.com/wailsapp/wails/v2/internal/project/project.go
generated
vendored
Normal file
@@ -0,0 +1,283 @@
|
||||
package project
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
// Project holds the data related to a Wails project
|
||||
type Project struct {
|
||||
/*** Application Data ***/
|
||||
Name string `json:"name"`
|
||||
AssetDirectory string `json:"assetdir,omitempty"`
|
||||
|
||||
ReloadDirectories string `json:"reloaddirs,omitempty"`
|
||||
|
||||
BuildCommand string `json:"frontend:build"`
|
||||
InstallCommand string `json:"frontend:install"`
|
||||
|
||||
// Commands used in `wails dev`
|
||||
DevCommand string `json:"frontend:dev"`
|
||||
DevBuildCommand string `json:"frontend:dev:build"`
|
||||
DevInstallCommand string `json:"frontend:dev:install"`
|
||||
DevWatcherCommand string `json:"frontend:dev:watcher"`
|
||||
// The url of the external wails dev server. If this is set, this server is used for the frontend. Default ""
|
||||
FrontendDevServerURL string `json:"frontend:dev:serverUrl"`
|
||||
|
||||
// Directory to generate the API Module
|
||||
WailsJSDir string `json:"wailsjsdir"`
|
||||
|
||||
Version string `json:"version"`
|
||||
|
||||
/*** Internal Data ***/
|
||||
|
||||
// The path to the project directory
|
||||
Path string `json:"projectdir"`
|
||||
|
||||
// Build directory
|
||||
BuildDir string `json:"build:dir"`
|
||||
|
||||
// BuildTags Extra tags to process during build
|
||||
BuildTags string `json:"build:tags"`
|
||||
|
||||
// The output filename
|
||||
OutputFilename string `json:"outputfilename"`
|
||||
|
||||
// The type of application. EG: Desktop, Server, etc
|
||||
OutputType string
|
||||
|
||||
// The platform to target
|
||||
Platform string
|
||||
|
||||
// RunNonNativeBuildHooks will run build hooks though they are defined for a GOOS which is not equal to the host os
|
||||
RunNonNativeBuildHooks bool `json:"runNonNativeBuildHooks"`
|
||||
|
||||
// Build hooks for different targets, the hooks are executed in the following order
|
||||
// Key: GOOS/GOARCH - Executed at build level before/after a build of the specific platform and arch
|
||||
// Key: GOOS/* - Executed at build level before/after a build of the specific platform
|
||||
// Key: */* - Executed at build level before/after a build
|
||||
// The following keys are not yet supported.
|
||||
// Key: GOOS - Executed at platform level before/after all builds of the specific platform
|
||||
// Key: * - Executed at platform level before/after all builds of a platform
|
||||
// Key: [empty] - Executed at global level before/after all builds of all platforms
|
||||
PostBuildHooks map[string]string `json:"postBuildHooks"`
|
||||
PreBuildHooks map[string]string `json:"preBuildHooks"`
|
||||
|
||||
// The application author
|
||||
Author Author
|
||||
|
||||
// The application information
|
||||
Info Info
|
||||
|
||||
// Fully qualified filename
|
||||
filename string
|
||||
|
||||
// The debounce time for hot-reload of the built-in dev server. Default 100
|
||||
DebounceMS int `json:"debounceMS"`
|
||||
|
||||
// The address to bind the wails dev server to. Default "localhost:34115"
|
||||
DevServer string `json:"devServer"`
|
||||
|
||||
// Arguments that are forward to the application in dev mode
|
||||
AppArgs string `json:"appargs"`
|
||||
|
||||
// NSISType to be build
|
||||
NSISType string `json:"nsisType"`
|
||||
|
||||
// Garble
|
||||
Obfuscated bool `json:"obfuscated"`
|
||||
GarbleArgs string `json:"garbleargs"`
|
||||
|
||||
// Frontend directory
|
||||
FrontendDir string `json:"frontend:dir"`
|
||||
|
||||
// The timeout in seconds for Vite server detection. Default 10
|
||||
ViteServerTimeout int `json:"viteServerTimeout"`
|
||||
|
||||
Bindings Bindings `json:"bindings"`
|
||||
}
|
||||
|
||||
func (p *Project) GetFrontendDir() string {
|
||||
if filepath.IsAbs(p.FrontendDir) {
|
||||
return p.FrontendDir
|
||||
}
|
||||
return filepath.Join(p.Path, p.FrontendDir)
|
||||
}
|
||||
|
||||
func (p *Project) GetWailsJSDir() string {
|
||||
if filepath.IsAbs(p.WailsJSDir) {
|
||||
return p.WailsJSDir
|
||||
}
|
||||
return filepath.Join(p.Path, p.WailsJSDir)
|
||||
}
|
||||
|
||||
func (p *Project) GetBuildDir() string {
|
||||
if filepath.IsAbs(p.BuildDir) {
|
||||
return p.BuildDir
|
||||
}
|
||||
return filepath.Join(p.Path, p.BuildDir)
|
||||
}
|
||||
|
||||
func (p *Project) GetDevBuildCommand() string {
|
||||
if p.DevBuildCommand != "" {
|
||||
return p.DevBuildCommand
|
||||
}
|
||||
if p.DevCommand != "" {
|
||||
return p.DevCommand
|
||||
}
|
||||
return p.BuildCommand
|
||||
}
|
||||
|
||||
func (p *Project) GetDevInstallerCommand() string {
|
||||
if p.DevInstallCommand != "" {
|
||||
return p.DevInstallCommand
|
||||
}
|
||||
return p.InstallCommand
|
||||
}
|
||||
|
||||
func (p *Project) IsFrontendDevServerURLAutoDiscovery() bool {
|
||||
return p.FrontendDevServerURL == "auto"
|
||||
}
|
||||
|
||||
func (p *Project) Save() error {
|
||||
data, err := json.MarshalIndent(p, "", " ")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return os.WriteFile(p.filename, data, 0o755)
|
||||
}
|
||||
|
||||
func (p *Project) setDefaults() {
|
||||
if p.Path == "" {
|
||||
p.Path = lo.Must(os.Getwd())
|
||||
}
|
||||
if p.Version == "" {
|
||||
p.Version = "2"
|
||||
}
|
||||
// Create default name if not given
|
||||
if p.Name == "" {
|
||||
p.Name = "wailsapp"
|
||||
}
|
||||
if p.OutputFilename == "" {
|
||||
p.OutputFilename = p.Name
|
||||
}
|
||||
if p.FrontendDir == "" {
|
||||
p.FrontendDir = "frontend"
|
||||
}
|
||||
if p.WailsJSDir == "" {
|
||||
p.WailsJSDir = p.FrontendDir
|
||||
}
|
||||
if p.BuildDir == "" {
|
||||
p.BuildDir = "build"
|
||||
}
|
||||
if p.DebounceMS == 0 {
|
||||
p.DebounceMS = 100
|
||||
}
|
||||
if p.DevServer == "" {
|
||||
p.DevServer = "localhost:34115"
|
||||
}
|
||||
if p.ViteServerTimeout == 0 {
|
||||
p.ViteServerTimeout = 10
|
||||
}
|
||||
if p.NSISType == "" {
|
||||
p.NSISType = "multiple"
|
||||
}
|
||||
if p.Info.CompanyName == "" {
|
||||
p.Info.CompanyName = p.Name
|
||||
}
|
||||
if p.Info.ProductName == "" {
|
||||
p.Info.ProductName = p.Name
|
||||
}
|
||||
if p.Info.ProductVersion == "" {
|
||||
p.Info.ProductVersion = "1.0.0"
|
||||
}
|
||||
if p.Info.Copyright == nil {
|
||||
v := "Copyright........."
|
||||
p.Info.Copyright = &v
|
||||
}
|
||||
if p.Info.Comments == nil {
|
||||
v := "Built using Wails (https://wails.io)"
|
||||
p.Info.Comments = &v
|
||||
}
|
||||
|
||||
// Fix up OutputFilename
|
||||
switch runtime.GOOS {
|
||||
case "windows":
|
||||
if !strings.HasSuffix(p.OutputFilename, ".exe") {
|
||||
p.OutputFilename += ".exe"
|
||||
}
|
||||
case "darwin", "linux":
|
||||
p.OutputFilename = strings.TrimSuffix(p.OutputFilename, ".exe")
|
||||
}
|
||||
}
|
||||
|
||||
// Author stores details about the application author
|
||||
type Author struct {
|
||||
Name string `json:"name"`
|
||||
Email string `json:"email"`
|
||||
}
|
||||
|
||||
type Info struct {
|
||||
CompanyName string `json:"companyName"`
|
||||
ProductName string `json:"productName"`
|
||||
ProductVersion string `json:"productVersion"`
|
||||
Copyright *string `json:"copyright"`
|
||||
Comments *string `json:"comments"`
|
||||
FileAssociations []FileAssociation `json:"fileAssociations"`
|
||||
Protocols []Protocol `json:"protocols"`
|
||||
}
|
||||
|
||||
type FileAssociation struct {
|
||||
Ext string `json:"ext"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
IconName string `json:"iconName"`
|
||||
Role string `json:"role"`
|
||||
}
|
||||
|
||||
type Protocol struct {
|
||||
Scheme string `json:"scheme"`
|
||||
Description string `json:"description"`
|
||||
Role string `json:"role"`
|
||||
}
|
||||
|
||||
type Bindings struct {
|
||||
TsGeneration TsGeneration `json:"ts_generation"`
|
||||
}
|
||||
|
||||
type TsGeneration struct {
|
||||
Prefix string `json:"prefix"`
|
||||
Suffix string `json:"suffix"`
|
||||
OutputType string `json:"outputType"`
|
||||
}
|
||||
|
||||
// Parse the given JSON data into a Project struct
|
||||
func Parse(projectData []byte) (*Project, error) {
|
||||
project := &Project{}
|
||||
err := json.Unmarshal(projectData, project)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
project.setDefaults()
|
||||
return project, nil
|
||||
}
|
||||
|
||||
// Load the project from the current working directory
|
||||
func Load(projectPath string) (*Project, error) {
|
||||
projectFile := filepath.Join(projectPath, "wails.json")
|
||||
rawBytes, err := os.ReadFile(projectFile)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result, err := Parse(rawBytes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.filename = projectFile
|
||||
return result, nil
|
||||
}
|
||||
Reference in New Issue
Block a user