Move release mechanics behind the public facade

This commit is contained in:
2026-10-06 00:58:22 +00:00
parent b4d348dd1f
commit 4dee2841e0
10 changed files with 78 additions and 80 deletions

View File

@@ -7,6 +7,7 @@ import (
"path/filepath"
"strings"
internalbuild "gitea.maximumdirect.net/eric/ReleaseKit/internal/build"
"gitea.maximumdirect.net/eric/ReleaseKit/internal/candidate"
"gitea.maximumdirect.net/eric/ReleaseKit/internal/git"
"gitea.maximumdirect.net/eric/ReleaseKit/internal/gitea"
@@ -23,23 +24,12 @@ const (
Unknown State = "unknown"
)
type BuildIdentity struct {
RepositoryDir string
CandidateCommit string
SourceVerified bool
Version string
MainPackage string
BinaryName string
Targets []string
}
type Request struct {
RepositoryDir string
Product string
Version string
Destination gitea.Destination
Build *BuildIdentity
Assets []gitea.ExpectedAsset
Build *internalbuild.Result
}
type Result struct {
@@ -76,11 +66,18 @@ func Deliver(ctx context.Context, request Request) (Result, error) {
if source.Head != source.TagCommit {
return result, fmt.Errorf("checkout HEAD %s does not match tag %s commit %s", source.Head, request.Version, source.TagCommit)
}
if err := validateBuild(repositoryDir, source.TagCommit, request.Version, request.Build, request.Assets); err != nil {
var assets []gitea.ExpectedAsset
if request.Build != nil {
assets, err = declaredBuildAssets(*request.Build)
if err != nil {
return result, err
}
}
if err := validateBuild(repositoryDir, source.TagCommit, request.Version, request.Build, assets); err != nil {
return result, err
}
if len(request.Assets) > 0 {
if err := gitea.VerifyLocalAssets(request.Assets); err != nil {
if len(assets) > 0 {
if err := gitea.VerifyLocalAssets(assets); err != nil {
return result, fmt.Errorf("verify build assets: %w", err)
}
}
@@ -104,17 +101,17 @@ func Deliver(ctx context.Context, request Request) (Result, error) {
return result, err
}
result.ReleaseURL = releaseResult.Release.URL
if len(request.Assets) == 0 {
if len(assets) == 0 {
result.State = Complete
return result, nil
}
inspection, err := (gitea.Client{}).InspectAssets(ctx, request.Destination, releaseResult.Release.ID, request.Assets)
inspection, err := (gitea.Client{}).InspectAssets(ctx, request.Destination, releaseResult.Release.ID, assets)
if err != nil {
result.State = NotAttempted
if releaseResult.WriteAttempted {
result.State = Partial
}
result.Uncertain = assetIdentities(request.Assets)
result.Uncertain = assetIdentities(assets)
return result, err
}
uploadResult, uploadErr := (gitea.Client{}).UploadMissing(ctx, request.Destination, releaseResult.Release.ID, inspection)
@@ -130,7 +127,7 @@ func Deliver(ctx context.Context, request Request) (Result, error) {
return result, uploadErr
}
func validateBuild(repositoryDir, commit, version string, build *BuildIdentity, assets []gitea.ExpectedAsset) error {
func validateBuild(repositoryDir, commit, version string, build *internalbuild.Result, assets []gitea.ExpectedAsset) error {
if build == nil {
if len(assets) != 0 {
return errors.New("assets require a build identity")