cli/pkg/release/publishers/publisher.go

69 lines
2 KiB
Go
Raw Normal View History

// Package publishers provides release publishing implementations.
package publishers
import (
"context"
"github.com/host-uk/core/pkg/build"
)
// Release represents a release to be published.
type Release struct {
// Version is the semantic version string (e.g., "v1.2.3").
Version string
// Artifacts are the built release artifacts.
Artifacts []build.Artifact
// Changelog is the generated markdown changelog.
Changelog string
// ProjectDir is the root directory of the project.
ProjectDir string
}
// PublisherConfig holds configuration for a publisher.
type PublisherConfig struct {
// Type is the publisher type (e.g., "github", "linuxkit", "docker").
Type string
// Prerelease marks the release as a prerelease.
Prerelease bool
// Draft creates the release as a draft.
Draft bool
// Extended holds publisher-specific configuration.
Extended any
}
// ReleaseConfig holds release configuration needed by publishers.
type ReleaseConfig interface {
GetRepository() string
GetProjectName() string
}
// Publisher defines the interface for release publishers.
type Publisher interface {
// Name returns the publisher's identifier.
Name() string
// Publish publishes the release to the target.
// If dryRun is true, it prints what would be done without executing.
Publish(ctx context.Context, release *Release, pubCfg PublisherConfig, relCfg ReleaseConfig, dryRun bool) error
}
// NewRelease creates a Release from the release package's Release type.
// This is a helper to convert between packages.
func NewRelease(version string, artifacts []build.Artifact, changelog, projectDir string) *Release {
return &Release{
Version: version,
Artifacts: artifacts,
Changelog: changelog,
ProjectDir: projectDir,
}
}
// NewPublisherConfig creates a PublisherConfig.
func NewPublisherConfig(pubType string, prerelease, draft bool, extended any) PublisherConfig {
return PublisherConfig{
Type: pubType,
Prerelease: prerelease,
Draft: draft,
Extended: extended,
}
}