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