From 33a59259792fbfdb6369c4d351bb37c1efb4dcad Mon Sep 17 00:00:00 2001 From: WeidiDeng Date: Thu, 30 May 2024 04:45:07 +0800 Subject: [PATCH] embed icon and version information to windows builds (#184) * embed icon and version information to windows builds * fix lint --- builder.go | 20 +++++ go.mod | 3 +- go.sum | 15 ++++ internal/utils/resource.go | 86 ++++++++++++++++++++++ internal/utils/resources/ico/caddy-bg.ico | Bin 0 -> 67646 bytes internal/utils/resources/ico/caddy.ico | Bin 0 -> 67646 bytes 6 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 internal/utils/resource.go create mode 100644 internal/utils/resources/ico/caddy-bg.ico create mode 100644 internal/utils/resources/ico/caddy.ico diff --git a/builder.go b/builder.go index 5e6f23c..40eec93 100644 --- a/builder.go +++ b/builder.go @@ -15,6 +15,7 @@ package xcaddy import ( + "bytes" "context" "fmt" "log" @@ -93,6 +94,25 @@ func (b Builder) Build(ctx context.Context, outputFile string) error { } defer buildEnv.Close() + // generating windows resources for embedding + if b.OS == "windows" { + // get version string, we need to parse the output to get the exact version instead tag, branch or commit + cmd := buildEnv.newGoBuildCommand(ctx, "list", "-m", buildEnv.caddyModulePath) + var buffer bytes.Buffer + cmd.Stdout = &buffer + err = buildEnv.runCommand(ctx, cmd) + if err != nil { + return err + } + + // output looks like: github.com/caddyserver/caddy/v2 v2.7.6 + version := strings.TrimSpace(strings.TrimPrefix(buffer.String(), buildEnv.caddyModulePath)) + err = utils.WindowsResource(version, outputFile, buildEnv.tempFolder) + if err != nil { + return err + } + } + if b.SkipBuild { log.Printf("[INFO] Skipping build as requested") diff --git a/go.mod b/go.mod index 4d94301..9925154 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,9 @@ module github.com/caddyserver/xcaddy -go 1.14 +go 1.16 require ( github.com/Masterminds/semver/v3 v3.2.1 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 + github.com/josephspurrier/goversioninfo v1.4.0 ) diff --git a/go.sum b/go.sum index aab87c3..a3d7699 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,19 @@ github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/akavel/rsrc v0.10.2 h1:Zxm8V5eI1hW4gGaYsJQUhxpjkENuG91ki8B4zCrvEsw= +github.com/akavel/rsrc v0.10.2/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/josephspurrier/goversioninfo v1.4.0 h1:Puhl12NSHUSALHSuzYwPYQkqa2E1+7SrtAPJorKK0C8= +github.com/josephspurrier/goversioninfo v1.4.0/go.mod h1:JWzv5rKQr+MmW+LvM412ToT/IkYDZjaclF2pKDss8IY= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/utils/resource.go b/internal/utils/resource.go new file mode 100644 index 0000000..e3a9b5f --- /dev/null +++ b/internal/utils/resource.go @@ -0,0 +1,86 @@ +package utils + +import ( + "embed" + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/Masterminds/semver/v3" + "github.com/josephspurrier/goversioninfo" +) + +//go:embed resources/* +var embedFS embed.FS + +// WindowsResource create a Windows resource system object +// for embedding into the Caddy binary. +// reference: https://github.com/rclone/rclone/blob/v1.66.0/bin/resource_windows.go +func WindowsResource(version, outputFile, tempDir string) error { + vi := &goversioninfo.VersionInfo{} + + // FixedFileInfo + vi.FixedFileInfo.FileOS = "040004" // VOS_NT_WINDOWS32 + vi.FixedFileInfo.FileType = "01" // VFT_APP + + semanticVersion, err := semver.NewVersion(version) + if err != nil { + return err + } + + basename := filepath.Base(outputFile) + ext := filepath.Ext(basename) + + // FixedFileInfo.FileVersion + vi.FixedFileInfo.FileVersion.Major = int(semanticVersion.Major()) + vi.FixedFileInfo.FileVersion.Minor = int(semanticVersion.Minor()) + vi.FixedFileInfo.FileVersion.Patch = int(semanticVersion.Patch()) + vi.FixedFileInfo.FileVersion.Build = 0 + // FixedFileInfo.ProductVersion + vi.FixedFileInfo.ProductVersion.Major = int(semanticVersion.Major()) + vi.FixedFileInfo.ProductVersion.Minor = int(semanticVersion.Minor()) + vi.FixedFileInfo.ProductVersion.Patch = int(semanticVersion.Patch()) + vi.FixedFileInfo.ProductVersion.Build = 0 + + // StringFileInfo + vi.StringFileInfo.CompanyName = "https://caddyserver.com/" + vi.StringFileInfo.ProductName = "Caddy" + vi.StringFileInfo.FileDescription = "Caddy" + vi.StringFileInfo.InternalName = strings.TrimSuffix(basename, ext) + vi.StringFileInfo.OriginalFilename = basename + vi.StringFileInfo.LegalCopyright = "The Caddy Authors" + vi.StringFileInfo.FileVersion = semanticVersion.String() + vi.StringFileInfo.ProductVersion = semanticVersion.String() + + // extract ico file from embed to an actual file + ico, err := embedFS.ReadFile("resources/ico/caddy.ico") + if err != nil { + return err + } + icoCopy, err := os.Create(filepath.Join(tempDir, "caddy.ico")) + if err != nil { + return err + } + // set ico path + vi.IconPath = icoCopy.Name() + _, err = icoCopy.Write(ico) + if err != nil { + return err + } + err = icoCopy.Close() + if err != nil { + return err + } + + // Build native structures from the configuration data + vi.Build() + + // Write the native structures as binary data to a buffer + vi.Walk() + + arch := GetGOARCH() + + // Write the binary data buffer to file + return vi.WriteSyso(filepath.Join(tempDir, fmt.Sprintf("resource_windows_%s.syso", arch)), arch) +} diff --git a/internal/utils/resources/ico/caddy-bg.ico b/internal/utils/resources/ico/caddy-bg.ico new file mode 100644 index 0000000000000000000000000000000000000000..6e5fd66e14e8bc2de772c821ba89409ddfa9141e GIT binary patch literal 67646 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 literal 0 HcmV?d00001 diff --git a/internal/utils/resources/ico/caddy.ico b/internal/utils/resources/ico/caddy.ico new file mode 100644 index 0000000000000000000000000000000000000000..1b9f6a2b415516905d2e274eafb567575faaf56c GIT binary patch literal 67646 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