From 5450c861d4355b7696ad5143e0019c2b41f2d320 Mon Sep 17 00:00:00 2001 From: Fredrik Ahlgren Date: Mon, 7 Sep 2026 12:42:22 +0200 Subject: [PATCH] fix(updater): split compose owner handling by platform Signed-off-by: Fredrik Ahlgren --- .changeset/calm-windows-owner.md | 5 +++++ go/cmd/ftw-updater/file_owner_other.go | 9 +++++++++ go/cmd/ftw-updater/file_owner_unix.go | 16 ++++++++++++++++ go/cmd/ftw-updater/retire_python.go | 7 ++----- 4 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 .changeset/calm-windows-owner.md create mode 100644 go/cmd/ftw-updater/file_owner_other.go create mode 100644 go/cmd/ftw-updater/file_owner_unix.go diff --git a/.changeset/calm-windows-owner.md b/.changeset/calm-windows-owner.md new file mode 100644 index 00000000..0815e049 --- /dev/null +++ b/.changeset/calm-windows-owner.md @@ -0,0 +1,5 @@ +--- +"ftw": patch +--- + +Build the updater on Windows while preserving Compose file ownership on Unix. diff --git a/go/cmd/ftw-updater/file_owner_other.go b/go/cmd/ftw-updater/file_owner_other.go new file mode 100644 index 00000000..02977b44 --- /dev/null +++ b/go/cmd/ftw-updater/file_owner_other.go @@ -0,0 +1,9 @@ +//go:build !unix + +package main + +import "os" + +// Non-Unix systems have no portable numeric owner to copy. The staged file +// keeps the owner and access rules assigned by the platform. +func preserveFileOwner(_ *os.File, _ os.FileInfo) error { return nil } diff --git a/go/cmd/ftw-updater/file_owner_unix.go b/go/cmd/ftw-updater/file_owner_unix.go new file mode 100644 index 00000000..9e20d141 --- /dev/null +++ b/go/cmd/ftw-updater/file_owner_unix.go @@ -0,0 +1,16 @@ +//go:build unix + +package main + +import ( + "os" + "syscall" +) + +func preserveFileOwner(file *os.File, info os.FileInfo) error { + stat, ok := info.Sys().(*syscall.Stat_t) + if !ok { + return nil + } + return file.Chown(int(stat.Uid), int(stat.Gid)) +} diff --git a/go/cmd/ftw-updater/retire_python.go b/go/cmd/ftw-updater/retire_python.go index e045d4df..0ba2aa1d 100644 --- a/go/cmd/ftw-updater/retire_python.go +++ b/go/cmd/ftw-updater/retire_python.go @@ -10,7 +10,6 @@ import ( "os/exec" "path/filepath" "strings" - "syscall" "time" "gopkg.in/yaml.v3" @@ -327,10 +326,8 @@ func replaceRetiredCompose(path string, data []byte) error { } defer os.Remove(f.Name()) defer f.Close() - if stat, ok := st.Sys().(*syscall.Stat_t); ok { - if err = f.Chown(int(stat.Uid), int(stat.Gid)); err != nil { - return err - } + if err = preserveFileOwner(f, st); err != nil { + return err } if err = f.Chmod(st.Mode().Perm()); err != nil { return err