From a50968d0de138cefa2ff35acd4be9b227f0f4755 Mon Sep 17 00:00:00 2001 From: forgejo-backport-action Date: Fri, 31 Oct 2025 08:28:08 +0100 Subject: [PATCH] [v13.0/forgejo] fix: set tag message on tag addition (#9918) **Backport:** https://codeberg.org/forgejo/forgejo/pulls/9913 - When `SyncReleasesWithTags` is called, the code that synchronizes new tags to the database did not set the Note of the release to the tag's message. This was particularly noticeable when using the migration feature that tags have a empty description. - Resolves forgejo/forgejo#7647 Co-authored-by: Gusted Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9918 Reviewed-by: Earl Warren Co-authored-by: forgejo-backport-action Co-committed-by: forgejo-backport-action --- modules/repository/repo.go | 1 + modules/repository/repo_test.go | 59 +++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/modules/repository/repo.go b/modules/repository/repo.go index c86d48fe52..6143247681 100644 --- a/modules/repository/repo.go +++ b/modules/repository/repo.go @@ -164,6 +164,7 @@ func PushUpdateAddTag(ctx context.Context, repo *repo_model.Repository, gitRepo NumCommits: commitsCount, CreatedUnix: timeutil.TimeStamp(createdAt.Unix()), IsTag: true, + Note: tag.Message, } if author != nil { rel.PublisherID = author.ID diff --git a/modules/repository/repo_test.go b/modules/repository/repo_test.go index 45a650ba42..c1217bad41 100644 --- a/modules/repository/repo_test.go +++ b/modules/repository/repo_test.go @@ -1,14 +1,20 @@ // Copyright 2024 The Gitea Authors. All rights reserved. +// Copyright 2025 The Forgejo Authors. All rights reserved. // SPDX-License-Identifier: MIT package repository import ( + "os" + "path" "testing" + repo_model "forgejo.org/models/repo" + "forgejo.org/models/unittest" "forgejo.org/modules/git" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func Test_calcSync(t *testing.T) { @@ -74,3 +80,56 @@ func Test_calcSync(t *testing.T) { assert.Equal(t, *gitTags[1], *updates[0], "updates equal") } } + +func TestSyncReleasesWithTags(t *testing.T) { + require.NoError(t, unittest.PrepareTestDatabase()) + + // Can be any repository that doesn't have the git tag releases. + repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) + + t.Run("SHA1", func(t *testing.T) { + tmpDir := t.TempDir() + + require.NoError(t, git.InitRepository(t.Context(), tmpDir, false, git.Sha1ObjectFormat.Name())) + gitRepo, err := git.OpenRepository(t.Context(), tmpDir) + require.NoError(t, err) + defer gitRepo.Close() + + require.NoError(t, os.WriteFile(path.Join(tmpDir, "README.md"), []byte("testing the testing"), 0o666)) + require.NoError(t, git.AddChanges(tmpDir, true)) + require.NoError(t, git.CommitChanges(tmpDir, git.CommitChangesOptions{Message: "Add README"})) + require.NoError(t, gitRepo.CreateAnnotatedTag("v1.0.0", "First release \\o/", "HEAD")) + + require.NoError(t, SyncReleasesWithTags(t.Context(), repo, gitRepo)) + + release := unittest.AssertExistsAndLoadBean(t, &repo_model.Release{RepoID: repo.ID, TagName: "v1.0.0"}) + assert.Equal(t, "First release \\o/\n", release.Note) + assert.True(t, release.IsTag) + assert.EqualValues(t, 1, release.NumCommits) + }) + + t.Run("SHA256", func(t *testing.T) { + if !git.SupportHashSha256 { + t.Skip("skipping because installed Git version doesn't support SHA256") + } + + tmpDir := t.TempDir() + + require.NoError(t, git.InitRepository(t.Context(), tmpDir, false, git.Sha256ObjectFormat.Name())) + gitRepo, err := git.OpenRepository(t.Context(), tmpDir) + require.NoError(t, err) + defer gitRepo.Close() + + require.NoError(t, os.WriteFile(path.Join(tmpDir, "README.md"), []byte("testing the testing"), 0o666)) + require.NoError(t, git.AddChanges(tmpDir, true)) + require.NoError(t, git.CommitChanges(tmpDir, git.CommitChangesOptions{Message: "Add README"})) + require.NoError(t, gitRepo.CreateAnnotatedTag("v2.0.0", "Second release \\o/", "HEAD")) + + require.NoError(t, SyncReleasesWithTags(t.Context(), repo, gitRepo)) + + release := unittest.AssertExistsAndLoadBean(t, &repo_model.Release{RepoID: repo.ID, TagName: "v2.0.0"}) + assert.Equal(t, "Second release \\o/\n", release.Note) + assert.True(t, release.IsTag) + assert.EqualValues(t, 1, release.NumCommits) + }) +}