diff options
| author | Paul Buetow <paul@buetow.org> | 2025-07-12 13:51:48 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-07-12 13:51:48 +0300 |
| commit | ceb164c6a8826db1e763aecca49098a8c2584b7f (patch) | |
| tree | a228040641666f4a6567e2d2e4544fd7daecc2e7 /cmd | |
| parent | 9d171e6b30a589240a16d8fef15e2195189e52a9 (diff) | |
feat: add automatic release checking and creation
- Add --check-releases flag for manual release checking
- Enable automatic release checking after sync operations by default
- Add --no-check-releases flag to disable automatic checking
- Add --auto-create-releases flag for unattended release creation
- Generate release notes from commit history
- Support version tag formats: vX.Y.Z, vX.Y, vX, X.Y.Z, X.Y, X
- Use tokens from gitsyncer config (with fallback to env vars and files)
- Show release notes preview before creating releases
- Group commits by type (features, fixes, other) in release notes
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/gitsyncer/main.go | 69 |
1 files changed, 48 insertions, 21 deletions
diff --git a/cmd/gitsyncer/main.go b/cmd/gitsyncer/main.go index f27cff6..d4a3e6f 100644 --- a/cmd/gitsyncer/main.go +++ b/cmd/gitsyncer/main.go @@ -6,6 +6,7 @@ import ( "path/filepath" "codeberg.org/snonux/gitsyncer/internal/cli" + "codeberg.org/snonux/gitsyncer/internal/config" "codeberg.org/snonux/gitsyncer/internal/state" ) @@ -23,6 +24,15 @@ func saveBatchRunState(flags *cli.Flags) { } } +// runReleaseCheckIfEnabled runs release checking after successful sync operations +func runReleaseCheckIfEnabled(cfg *config.Config, flags *cli.Flags) { + // Run release checks automatically unless disabled + if !flags.NoCheckReleases { + fmt.Println("\nChecking for missing releases...") + cli.HandleCheckReleases(cfg, flags) + } +} + func main() { // Parse command-line flags flags := cli.ParseFlags() @@ -102,10 +112,13 @@ func main() { // Handle sync operation if flags.SyncRepo != "" { exitCode := cli.HandleSync(cfg, flags) - if exitCode == 0 && flags.Showcase { - showcaseCode := cli.HandleShowcase(cfg, flags) - if showcaseCode != 0 { - os.Exit(showcaseCode) + if exitCode == 0 { + runReleaseCheckIfEnabled(cfg, flags) + if flags.Showcase { + showcaseCode := cli.HandleShowcase(cfg, flags) + if showcaseCode != 0 { + os.Exit(showcaseCode) + } } } os.Exit(exitCode) @@ -114,10 +127,13 @@ func main() { // Handle sync all operation if flags.SyncAll { exitCode := cli.HandleSyncAll(cfg, flags) - if exitCode == 0 && flags.Showcase { - showcaseCode := cli.HandleShowcase(cfg, flags) - if showcaseCode != 0 { - os.Exit(showcaseCode) + if exitCode == 0 { + runReleaseCheckIfEnabled(cfg, flags) + if flags.Showcase { + showcaseCode := cli.HandleShowcase(cfg, flags) + if showcaseCode != 0 { + os.Exit(showcaseCode) + } } } os.Exit(exitCode) @@ -127,10 +143,13 @@ func main() { if flags.SyncCodebergPublic { exitCode := cli.HandleSyncCodebergPublic(cfg, flags) if exitCode != 0 || !flags.SyncGitHubPublic { - if exitCode == 0 && flags.Showcase && !flags.SyncGitHubPublic { - showcaseCode := cli.HandleShowcase(cfg, flags) - if showcaseCode != 0 { - os.Exit(showcaseCode) + if exitCode == 0 { + runReleaseCheckIfEnabled(cfg, flags) + if flags.Showcase && !flags.SyncGitHubPublic { + showcaseCode := cli.HandleShowcase(cfg, flags) + if showcaseCode != 0 { + os.Exit(showcaseCode) + } } } os.Exit(exitCode) @@ -141,22 +160,30 @@ func main() { if flags.SyncGitHubPublic { exitCode := cli.HandleSyncGitHubPublic(cfg, flags) - // Run showcase generation if requested and sync was successful - if exitCode == 0 && flags.Showcase { - showcaseCode := cli.HandleShowcase(cfg, flags) - if showcaseCode != 0 { - os.Exit(showcaseCode) - } - } - - // Save batch run state if this was a successful batch run if exitCode == 0 { + // Run release checks after successful sync + runReleaseCheckIfEnabled(cfg, flags) + + // Run showcase generation if requested + if flags.Showcase { + showcaseCode := cli.HandleShowcase(cfg, flags) + if showcaseCode != 0 { + os.Exit(showcaseCode) + } + } + + // Save batch run state if this was a successful batch run saveBatchRunState(flags) } os.Exit(exitCode) } + // Handle check releases flag + if flags.CheckReleases { + os.Exit(cli.HandleCheckReleases(cfg, flags)) + } + // Handle standalone showcase mode (no sync operations specified) if flags.Showcase { fmt.Println("Running showcase generation for all repositories (clone-only mode)...") |
