From c776d4771483301032daf0ac8d63180e45d4ba81 Mon Sep 17 00:00:00 2001 From: Ondrej Belusky Date: Wed, 25 Feb 2026 08:19:41 +0100 Subject: [PATCH] nats-upload: support just cleaning --- .gitignore | 1 + main.go | 91 ++++++++++++++++++++++++++++-------------------------- 2 files changed, 48 insertions(+), 44 deletions(-) diff --git a/.gitignore b/.gitignore index 4d47125..31697a8 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ go.work.sum ./bin bin +nats-upload diff --git a/main.go b/main.go index 0e0808c..fa64808 100644 --- a/main.go +++ b/main.go @@ -28,11 +28,12 @@ func main() { skipNotify = flag.Bool("skip-notify", getEnvBool("INPUT_SKIP_NOTIFY", false), "Skip publishing update notification") cleanup = flag.Int("cleanup", getEnvInt("INPUT_CLEANUP", 0), "Keep only N most recent versions (0 disables cleanup)") cleanupAll = flag.Bool("cleanup-all", getEnvBool("INPUT_CLEANUP_ALL", false), "Cleanup all binaries, not just current one") + justClean = flag.Bool("just-clean", getEnvBool("INPUT_JUST_CLEAN", false), "Dont upload, just cleanup old versions") ) flag.Parse() - if *directory == "" { - log.Fatal("Directory path is required") + if *directory == "" && *cleanup == 0 && *justClean == false { + log.Fatal("Directory path is required or cleanup must be enabled") } ctx := context.Background() @@ -60,56 +61,58 @@ func main() { log.Printf("Created object store: %s", *bucketName) } - err = filepath.Walk(*directory, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - - if info.IsDir() { - return nil - } - - data, err := os.ReadFile(path) - if err != nil { - return fmt.Errorf("failed to read %s: %w", path, err) - } - - relPath, err := filepath.Rel(*directory, path) - if err != nil { - return fmt.Errorf("failed to get relative path: %w", err) - } - - objectKey := relPath - if *prefix != "" { - objectKey = strings.TrimPrefix(relPath, *prefix) - } - - objectKey = filepath.ToSlash(objectKey) - - if *binaryName == "" { - parts := strings.Split(objectKey, "/") - if len(parts) >= 2 { - *binaryName = parts[0] + if *directory != "" && *justClean == false { + err = filepath.Walk(*directory, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err } - } - log.Printf("Uploading %s as %s (%d bytes)", path, objectKey, len(data)) + if info.IsDir() { + return nil + } + + data, err := os.ReadFile(path) + if err != nil { + return fmt.Errorf("failed to read %s: %w", path, err) + } + + relPath, err := filepath.Rel(*directory, path) + if err != nil { + return fmt.Errorf("failed to get relative path: %w", err) + } + + objectKey := relPath + if *prefix != "" { + objectKey = strings.TrimPrefix(relPath, *prefix) + } + + objectKey = filepath.ToSlash(objectKey) + + if *binaryName == "" { + parts := strings.Split(objectKey, "/") + if len(parts) >= 2 { + *binaryName = parts[0] + } + } + + log.Printf("Uploading %s as %s (%d bytes)", path, objectKey, len(data)) + + _, err = store.PutBytes(ctx, objectKey, data) + if err != nil { + return fmt.Errorf("failed to upload %s: %w", path, err) + } + + log.Printf("✓ Uploaded %s", objectKey) + return nil + }) - _, err = store.PutBytes(ctx, objectKey, data) if err != nil { - return fmt.Errorf("failed to upload %s: %w", path, err) + log.Fatalf("Failed to upload files: %v", err) } - log.Printf("✓ Uploaded %s", objectKey) - return nil - }) - - if err != nil { - log.Fatalf("Failed to upload files: %v", err) + log.Printf("Successfully uploaded all files from %s to NATS object store '%s'", *directory, *bucketName) } - log.Printf("Successfully uploaded all files from %s to NATS object store '%s'", *directory, *bucketName) - if *cleanup > 0 { log.Printf("Cleaning up old versions, keeping %d most recent", *cleanup) err = cleanupOldVersions(ctx, store, *binaryName, *cleanup, *cleanupAll)