mirror of
https://github.com/go-gitea/gitea.git
synced 2026-11-11 19:39:02 +00:00
Gitea picks the latest release by commit date, while GitHub keeps an explicit pointer, so repositories migrated from GitHub could show a different latest release than their source. Fixes https://github.com/go-gitea/gitea/issues/35273. - Add a "Set as Latest Release" checkbox and GitHub's `make_latest` API option. Without them, the newest stable release by commit date stays the latest. - Migrations from GitHub and Gitea carry over the source's latest release. - Migrated releases are dated by their commit like native ones, and equally dated ones keep the source's order. <img width="355" height="122" alt="Set as Latest Release checkbox" src="https://github.com/user-attachments/assets/d35f5324-7ae0-4e9f-b73c-d3c90496fb00" /> --------- Co-authored-by: silverwind <me@silverwind.io>
51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package migration
|
|
|
|
import (
|
|
"io"
|
|
"time"
|
|
)
|
|
|
|
// ReleaseAsset represents a release asset
|
|
type ReleaseAsset struct {
|
|
ID int64
|
|
Name string
|
|
|
|
// There was a field "ContentType (content_type)" because Some forges can provide that for assets,
|
|
// but we don't need it when migrating, so the field is omitted here.
|
|
|
|
Size *int
|
|
DownloadCount *int `yaml:"download_count"`
|
|
Created time.Time
|
|
Updated time.Time
|
|
|
|
DownloadURL *string `yaml:"download_url"` // SECURITY: It is the responsibility of downloader to make sure this is safe
|
|
// if DownloadURL is nil, the function should be invoked
|
|
DownloadFunc func() (io.ReadCloser, error) `yaml:"-"` // SECURITY: It is the responsibility of downloader to make sure this is safe
|
|
}
|
|
|
|
// Release represents a release
|
|
type Release struct {
|
|
TagName string `yaml:"tag_name"` // SECURITY: This must pass git.IsValidRefPattern
|
|
TargetCommitish string `yaml:"target_commitish"` // SECURITY: This must pass git.IsValidRefPattern
|
|
Name string
|
|
Body string
|
|
Draft bool
|
|
Prerelease bool
|
|
Latest bool
|
|
PublisherID int64 `yaml:"publisher_id"`
|
|
PublisherName string `yaml:"publisher_name"`
|
|
PublisherEmail string `yaml:"publisher_email"`
|
|
Assets []*ReleaseAsset
|
|
Created time.Time
|
|
Published time.Time
|
|
}
|
|
|
|
// GetExternalName ExternalUserMigrated interface
|
|
func (r *Release) GetExternalName() string { return r.PublisherName }
|
|
|
|
// GetExternalID ExternalUserMigrated interface
|
|
func (r *Release) GetExternalID() int64 { return r.PublisherID }
|