code.gitea.io/gitea@v1.22.3/routers/web/feed/release.go (about)

     1  // Copyright 2022 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package feed
     5  
     6  import (
     7  	"time"
     8  
     9  	"code.gitea.io/gitea/models/db"
    10  	repo_model "code.gitea.io/gitea/models/repo"
    11  	"code.gitea.io/gitea/services/context"
    12  
    13  	"github.com/gorilla/feeds"
    14  )
    15  
    16  // shows tags and/or releases on the repo as RSS / Atom feed
    17  func ShowReleaseFeed(ctx *context.Context, repo *repo_model.Repository, isReleasesOnly bool, formatType string) {
    18  	releases, err := db.Find[repo_model.Release](ctx, repo_model.FindReleasesOptions{
    19  		IncludeTags: !isReleasesOnly,
    20  		RepoID:      ctx.Repo.Repository.ID,
    21  	})
    22  	if err != nil {
    23  		ctx.ServerError("GetReleasesByRepoID", err)
    24  		return
    25  	}
    26  
    27  	var title string
    28  	var link *feeds.Link
    29  
    30  	if isReleasesOnly {
    31  		title = ctx.Locale.TrString("repo.release.releases_for", repo.FullName())
    32  		link = &feeds.Link{Href: repo.HTMLURL() + "/release"}
    33  	} else {
    34  		title = ctx.Locale.TrString("repo.release.tags_for", repo.FullName())
    35  		link = &feeds.Link{Href: repo.HTMLURL() + "/tags"}
    36  	}
    37  
    38  	feed := &feeds.Feed{
    39  		Title:       title,
    40  		Link:        link,
    41  		Description: repo.Description,
    42  		Created:     time.Now(),
    43  	}
    44  
    45  	feed.Items, err = releasesToFeedItems(ctx, releases, isReleasesOnly)
    46  	if err != nil {
    47  		ctx.ServerError("releasesToFeedItems", err)
    48  		return
    49  	}
    50  
    51  	writeFeed(ctx, feed, formatType)
    52  }