diff --git a/main.go b/main.go index 8da279e..11dab61 100644 --- a/main.go +++ b/main.go @@ -52,7 +52,7 @@ func main() { owner := ctx.RepositoryOwner repo := strings.Split(ctx.Repository, "/")[1] - rel, err := createRelease(ctx, c, owner, repo, gitea.CreateReleaseOption{ + rel, err := createOrGetRelease(ctx, c, owner, repo, gitea.CreateReleaseOption{ TagName: ctx.RefName, IsDraft: draft, IsPrerelease: preRelease, @@ -129,13 +129,22 @@ func getFiles(parentDir, files string) ([]string, error) { return fileList, nil } -func createRelease(ctx *gha.GitHubContext, c *gitea.Client, owner, repo string, opts gitea.CreateReleaseOption) (*gitea.Release, error) { - // Create the release - release, _, err := c.CreateRelease(owner, repo, opts) - if err != nil { - return nil, fmt.Errorf("failed to create release: %w", err) +func createOrGetRelease(ctx *gha.GitHubContext, c *gitea.Client, owner, repo string, opts gitea.CreateReleaseOption) (*gitea.Release, error) { + // Get the release by tag + release, resp, err := c.GetReleaseByTag(owner, repo, opts.TagName) + if err == nil { + return release, nil + } + errMessage := fmt.Errorf("failed to get release for tag: %s with error: %w", opts.TagName, err) + if resp.StatusCode != 404 { + return nil, errMessage + } + fmt.Printf("%s trying to create it\n", errMessage) + // Create the release + release, _, err = c.CreateRelease(owner, repo, opts) + if err != nil { + return nil, fmt.Errorf("failed to create release: %w and %s", err, errMessage) } - return release, nil }