Move asset verification into the artifact package

This commit is contained in:
2026-11-01 17:55:53 +00:00
parent aa03a78476
commit 61a07bc950
11 changed files with 321 additions and 216 deletions

View File

@@ -9,6 +9,7 @@ import (
"path/filepath"
"strings"
"go.maximumdirect.net/releasekit/internal/artifact"
internalbuild "go.maximumdirect.net/releasekit/internal/build"
"go.maximumdirect.net/releasekit/internal/candidate"
"go.maximumdirect.net/releasekit/internal/git"
@@ -131,7 +132,7 @@ func Deliver(ctx context.Context, request Request) (Result, error) {
}
build = &built
}
var assets []gitea.ExpectedAsset
var assets []artifact.ExpectedAsset
if build != nil {
assets, err = declaredBuildAssets(*build)
if err != nil {
@@ -142,8 +143,12 @@ func Deliver(ctx context.Context, request Request) (Result, error) {
return result, err
}
if len(assets) > 0 {
if err := gitea.VerifyLocalAssets(assets); err != nil {
return result, fmt.Errorf("verify build assets: %w", err)
if err := artifact.VerifyLocalAssets(assets); err != nil {
kind := gitea.FailureInvalid
if errors.Is(err, artifact.ErrAssetConflict) {
kind = gitea.FailureConflict
}
return result, &gitea.Failure{Kind: kind, Operation: "verify build assets", Err: err}
}
}
if build != nil && len(build.Settings.Targets) != 0 {
@@ -196,7 +201,7 @@ func Deliver(ctx context.Context, request Request) (Result, error) {
return result, uploadErr
}
func validateBuild(identity releaseidentity.Identity, commit string, build *internalbuild.Result, assets []gitea.ExpectedAsset) error {
func validateBuild(identity releaseidentity.Identity, commit string, build *internalbuild.Result, assets []artifact.ExpectedAsset) error {
if build == nil {
if len(assets) != 0 {
return errors.New("assets require a build identity")
@@ -223,7 +228,7 @@ func validateBuild(identity releaseidentity.Identity, commit string, build *inte
if !build.SourceVerified {
return errors.New("build source was not verified as clean and unchanged during compilation")
}
if strings.TrimSpace(build.Settings.MainPackage) == "" || strings.TrimSpace(build.Settings.BinaryName) == "" || len(assets) != len(build.Settings.Targets)+1 || assets[len(assets)-1].Filename != gitea.ManifestFilename {
if strings.TrimSpace(build.Settings.MainPackage) == "" || strings.TrimSpace(build.Settings.BinaryName) == "" || len(assets) != len(build.Settings.Targets)+1 || assets[len(assets)-1].Filename != artifact.ManifestFilename {
return errors.New("build result does not contain the selected artifacts and complete checksum manifest")
}
return nil
@@ -245,7 +250,7 @@ func stateForError(err error, pageCreated bool) State {
return NotAttempted
}
func assetIdentities(assets []gitea.ExpectedAsset) []gitea.AssetIdentity {
func assetIdentities(assets []artifact.ExpectedAsset) []gitea.AssetIdentity {
result := make([]gitea.AssetIdentity, 0, len(assets))
for _, asset := range assets {
result = append(result, gitea.AssetIdentity{Filename: asset.Filename, SHA256: asset.SHA256})