[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 <postmaster@gusted.xyz>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9918
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
This commit is contained in:
forgejo-backport-action 2025-10-31 08:28:08 +01:00 committed by Earl Warren
parent 3bc1ae21ac
commit a50968d0de
2 changed files with 60 additions and 0 deletions

View file

@ -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

View file

@ -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)
})
}