summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-07-12 13:51:48 +0300
committerPaul Buetow <paul@buetow.org>2025-07-12 13:51:48 +0300
commitceb164c6a8826db1e763aecca49098a8c2584b7f (patch)
treea228040641666f4a6567e2d2e4544fd7daecc2e7 /cmd
parent9d171e6b30a589240a16d8fef15e2195189e52a9 (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.go69
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)...")