diff options
| author | Paul Buetow <paul@buetow.org> | 2025-07-13 22:52:50 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-07-13 22:52:50 +0300 |
| commit | 044a47095716c1953aab2495cc63201aeaba12bf (patch) | |
| tree | 5918880286b331a4d5373608ef572e8da5a5a357 | |
| parent | 09a333cdc72186d95c28933d15035f405e0d4ea9 (diff) | |
chore: bump version to 0.7.1v0.7.1
Bug fixes and improvements:
- Fix AI release notes now enabled by default
- Add better error handling for Codeberg release creation
- Add debugging for token loading in release management
- Handle Gitea API "Release is has no Tag" error gracefully
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
| -rw-r--r-- | internal/cli/release.go | 1 | ||||
| -rw-r--r-- | internal/release/release.go | 25 | ||||
| -rw-r--r-- | internal/version/version.go | 2 |
3 files changed, 23 insertions, 5 deletions
diff --git a/internal/cli/release.go b/internal/cli/release.go index 95794a6..d7601f4 100644 --- a/internal/cli/release.go +++ b/internal/cli/release.go @@ -142,6 +142,7 @@ func HandleCheckReleasesForRepos(cfg *config.Config, flags *Flags, repositories if token != "" { releaseManager.SetCodebergToken(token) + fmt.Printf(" Codeberg token loaded (length: %d)\n", len(token)) } else { fmt.Println("WARNING: No Codeberg token found - cannot create Codeberg releases") } diff --git a/internal/release/release.go b/internal/release/release.go index c4ef37a..ff84f4c 100644 --- a/internal/release/release.go +++ b/internal/release/release.go @@ -556,16 +556,21 @@ func (m *Manager) CreateCodebergRelease(owner, repo, tag, releaseNotes string) e body = fmt.Sprintf("Release %s", tag) } - release := Release{ - TagName: tag, - Name: tag, - Body: body, + // Codeberg uses Gitea API + // According to Gitea API docs, only tag_name is required + release := map[string]interface{}{ + "tag_name": tag, + "name": tag, // Use simple tag name like working releases + "body": body, + "draft": false, + "prerelease": false, } jsonData, err := json.Marshal(release) if err != nil { return err } + req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData)) if err != nil { @@ -574,6 +579,7 @@ func (m *Manager) CreateCodebergRelease(owner, repo, tag, releaseNotes string) e req.Header.Set("Authorization", "token "+m.codebergToken) req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "application/json") client := &http.Client{} resp, err := client.Do(req) @@ -584,6 +590,17 @@ func (m *Manager) CreateCodebergRelease(owner, repo, tag, releaseNotes string) e if resp.StatusCode != 201 { body, _ := io.ReadAll(resp.Body) + + // Special handling for known Gitea issue + if resp.StatusCode == 409 && strings.Contains(string(body), "Release is has no Tag") { + // This is a known Gitea bug - the tag exists but Gitea can't create a release for it + // Check if it's one of the problematic old tags + fmt.Printf("\nWARNING: Codeberg/Gitea returned 'Release is has no Tag' error for tag %s\n", tag) + fmt.Printf("This is a known issue with some old tags. The tag exists but cannot have a release created via API.\n") + fmt.Printf("You may need to create this release manually through the Codeberg web interface.\n\n") + return fmt.Errorf("cannot create release for tag %s due to Gitea API limitation", tag) + } + return fmt.Errorf("failed to create Codeberg release: %s - %s", resp.Status, string(body)) } diff --git a/internal/version/version.go b/internal/version/version.go index b56b512..d4e70be 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -7,7 +7,7 @@ import ( var ( // Version is the current version of gitsyncer - Version = "0.7.0" + Version = "0.7.1" // GitCommit is the git commit hash at build time GitCommit = "unknown" |
