66 lines
2.1 KiB
Go
66 lines
2.1 KiB
Go
|
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"flag"
|
||
|
|
"fmt"
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
"regexp"
|
||
|
|
"strings"
|
||
|
|
)
|
||
|
|
|
||
|
|
type metadataRule struct{ path, pattern, version string }
|
||
|
|
|
||
|
|
// syncMetadata updates version fields only. Regenerating Wails build templates
|
||
|
|
// during a release used to overwrite customized platform packaging tasks.
|
||
|
|
func syncMetadata(root, version string) error {
|
||
|
|
if !regexp.MustCompile(`^[0-9]+\.[0-9]+\.[0-9]+(?:-[A-Za-z0-9.-]+)?$`).MatchString(version) {
|
||
|
|
return fmt.Errorf("invalid release version")
|
||
|
|
}
|
||
|
|
core := strings.SplitN(version, "-", 2)[0]
|
||
|
|
rules := []metadataRule{
|
||
|
|
{"build/windows/info.json", `("(?:file_version|product_version|FileVersion|ProductVersion)"\s*:\s*")[^"]*(")`, core},
|
||
|
|
{"build/windows/wails.exe.manifest", `(<assemblyIdentity[^>]*version=")[^"]*(")`, core + ".0"},
|
||
|
|
{"build/windows/nsis/wails_tools.nsh", `(!define INFO_PRODUCTVERSION ")[^"]*(")`, core},
|
||
|
|
{"build/darwin/Info.plist", `(<key>CFBundle(?:ShortVersionString|Version)</key>\s*<string>)[^<]*(</string>)`, version},
|
||
|
|
{"build/darwin/Info.dev.plist", `(<key>CFBundle(?:ShortVersionString|Version)</key>\s*<string>)[^<]*(</string>)`, version},
|
||
|
|
{"build/linux/nfpm/nfpm.yaml", `(?m)(^version:\s*")[^"]*(")`, version},
|
||
|
|
}
|
||
|
|
updates := make(map[string][]byte)
|
||
|
|
for _, rule := range rules {
|
||
|
|
file := filepath.Join(root, filepath.FromSlash(rule.path))
|
||
|
|
data, err := os.ReadFile(file)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
pattern := regexp.MustCompile(rule.pattern)
|
||
|
|
if !pattern.Match(data) {
|
||
|
|
return fmt.Errorf("missing version field in %s", rule.path)
|
||
|
|
}
|
||
|
|
updates[file] = pattern.ReplaceAll(data, []byte("${1}"+rule.version+"${2}"))
|
||
|
|
}
|
||
|
|
for file, data := range updates {
|
||
|
|
info, err := os.Stat(file)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
if err = os.WriteFile(file, data, info.Mode().Perm()); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func runMetadata(args []string) {
|
||
|
|
flags := flag.NewFlagSet("sync-metadata", flag.ExitOnError)
|
||
|
|
root := flags.String("root", ".", "project root")
|
||
|
|
_ = flags.Parse(args)
|
||
|
|
version, err := readVersion(filepath.Join(*root, "build", "config.yml"))
|
||
|
|
if err != nil {
|
||
|
|
exitErr(err)
|
||
|
|
}
|
||
|
|
if err = syncMetadata(*root, version); err != nil {
|
||
|
|
exitErr(err)
|
||
|
|
}
|
||
|
|
}
|