build

package
v0.23.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 19, 2026 License: AGPL-3.0 Imports: 17 Imported by: 0

Documentation

Overview

Package build はクロスビルドのアダプタ境界(Builder)。

上位層は Builder インタフェースしか知らない。GoReleaser 依存はこのパッケージに閉じ、 (A)→(C) 独立移行時は nativeBuilder を実装して差し替えるだけにする。 GoReleaser はライブラリ import せず、pin したバイナリをサブプロセスで叩く。

Index

Constants

View Source
const ArtifactsFile = ".wharfy/artifacts.json"

ArtifactsFile は release が記録する成果物マニフェストの相対パス(.wharfy 配下)。 release(アップロード)と publish <ch>(マニフェスト書き込み)を切り離す土台: release が実 sha 付きの成果物一覧をここに残し、publish はビルドし直さず消費する。

Variables

This section is empty.

Functions

func RegistryHost added in v0.18.0

func RegistryHost(image string) string

RegistryHost は image 参照("ghcr.io/owner/name" 等)からレジストリのホストを取り出す。 ホストらしさは最初のセグメントに "." か ":" が在ることで判る(無ければ Docker Hub の暗黙参照)。

func SHA256File added in v0.22.0

func SHA256File(path string) (string, error)

SHA256File はファイルの実 sha256(16 進)。宣言値ではなく**そのバイト列**を数えるのが要点で、 成果物の記録も来歴の subject も、ここが出した値だけを載せる。

func SaveArtifacts added in v0.2.0

func SaveArtifacts(root, version string, arts []Artifact) error

SaveArtifacts は成果物一覧を .wharfy/artifacts.json に原子的に書く(temp+rename)。

Types

type Archiver

type Archiver interface {
	Archives(ctx context.Context, root, configPath string) ([]Artifact, error)
}

Archiver はアーカイブ(.tar.gz/.zip)生成境界。formula 等が archive の sha256 を要するため分ける。

type Artifact

type Artifact struct {
	OS     string `json:"os"`
	Arch   string `json:"arch"`
	Kind   string `json:"kind,omitempty"`
	Path   string `json:"path"`
	SHA256 string `json:"sha256,omitempty"`
}

Artifact はクロスビルドの成果物 1 つ(schemas/common.json の artifact と同形)。 Kind は BYO-bundle(GUI・依頼①)の種別(dmg/zip/appimage/deb/rpm 等)。空はバイナリ archive (既存の Go/prebuilt 経路)を意味する。cask/release がこれで成果物を振り分ける。

func ArchivePrebuilt added in v0.7.0

func ArchivePrebuilt(root, distDir, project, version, binaryName string, bins []PrebuiltBinary) ([]Artifact, error)

ArchivePrebuilt は各ビルド済みバイナリを配布アーカイブにまとめ、distDir(root からの相対)に置く。

  • 命名: <project>_<version>_<os>_<arch>.tar.gz(windows は .zip)。GoReleaser 既定と一致させる。 publish 側(formulaArchives/scoopArchives/install.sh)がこの名前で URL を組むため、一致が契約。
  • アーカイブ内の実行ファイル名: binaryName(windows は .exe を付す)。formula の `bin.install` と install.sh の展開先がこの名前を前提にする。

実アーカイブの sha256 を付けた Archive 成果物を返す(publish が formula/manifest の sha に使う)。

func PackagePrebuilt added in v0.7.0

func PackagePrebuilt(root, distDir string, spec PackageSpec, bins []PrebuiltBinary) ([]Artifact, error)

PackagePrebuilt は各 linux バイナリ(arch ごと)から deb/rpm を作り distDir に置く。 生成物名は <project>_<version>_linux_<arch><ext>(expectedPackages と一致・publish が上げる)。 実ファイルの sha256 を付けた成果物を返す。windows/darwin バイナリは対象外(linux のみ)。

func ValidateBundles added in v0.8.0

func ValidateBundles(root string, bundles []Bundle) ([]Artifact, error)

ValidateBundles は持ち込みバンドルの存在と(宣言があれば)sha256 を検証し、Artifact にする。 Path はそのまま残す(再 archive しない)。Kind を Artifact.Kind に載せて後段(cask/release)へ運ぶ。 prebuilt の PrebuiltBuilder.Build と対称だが、archive 化はしない点だけが違う。

type ArtifactSet added in v0.2.0

type ArtifactSet struct {
	Version   string     `json:"version"`
	Artifacts []Artifact `json:"artifacts"`
}

ArtifactSet は release が version とその成果物(実 sha256)を束ねて記録したもの。

func LoadArtifacts added in v0.2.0

func LoadArtifacts(root string) (ArtifactSet, bool, error)

LoadArtifacts は記録済み成果物を読む。無ければ found=false(エラーではない)。

type Builder

type Builder interface {
	Build(ctx context.Context, root, configPath string) ([]Artifact, error)
}

Builder はビルド境界。configPath は生成 GoReleaser 設定(.wharfy/goreleaser.yaml)。 root は利用者リポジトリのルート(サブプロセスの作業ディレクトリ)。

type Bundle added in v0.8.0

type Bundle struct {
	OS     string
	Arch   string
	Kind   string // dmg/zip/exe/msi/appimage/deb/rpm
	Path   string // 利用者 root からの相対パス
	SHA256 string // 宣言 sha(任意)。空でなければ実 sha と照合する
}

Bundle は解決済みの持ち込みバンドル 1 つ。config.Bundle の写し (build は下位ドメインで config を import しないため値だけ受け取る)。

type Containerizer

type Containerizer interface {
	Containers(ctx context.Context, root, configPath string) ([]Artifact, error)
}

Containerizer は OCI イメージのビルド&push 境界(container チャネル)。

type FailedError

type FailedError struct {
	Err    error
	Output string
}

FailedError はクロスビルド失敗(build_failed)。Output は診断のための末尾ログ。

func (*FailedError) Error

func (e *FailedError) Error() string

func (*FailedError) Unwrap

func (e *FailedError) Unwrap() error

type GoReleaserBuilder

type GoReleaserBuilder struct {
	Bin      string // 既定 "goreleaser"
	DistDir  string // root からの相対(生成設定の dist と一致させる)
	LookPath func(string) (string, error)
	Run      Runner
}

GoReleaserBuilder は MVP 実装。GoReleaser を `build --snapshot` でサブプロセス起動する。

func NewGoReleaserBuilder

func NewGoReleaserBuilder(distDir string) *GoReleaserBuilder

NewGoReleaserBuilder は本番用の既定(exec ベース)を差した Builder を返す。 distDir は config.DistDir を渡す(生成設定の dist と一致させるため呼び出し側で指定)。

func (*GoReleaserBuilder) Archives

func (b *GoReleaserBuilder) Archives(ctx context.Context, root, configPath string) ([]Artifact, error)

Archives は release-snapshot でアーカイブ(.tar.gz/.zip)まで作り、Archive 成果物を返す。 homebrew formula 等は archive の sha256 を要するため、build(バイナリのみ)とは別経路で作る。 --snapshot は tag 無し・dirty でも通り、発行はしない(ローカル生成のみ=preview 用)。

func (*GoReleaserBuilder) Build

func (b *GoReleaserBuilder) Build(ctx context.Context, root, configPath string) ([]Artifact, error)

func (*GoReleaserBuilder) Containers

func (b *GoReleaserBuilder) Containers(ctx context.Context, root, configPath string) ([]Artifact, error)

Containers は OCI イメージ(per-arch)をビルドし ghcr へ push、manifest list を作る。 goreleaser の docker pipe に任せる。docker デーモン + ghcr 認証が要る。

func (*GoReleaserBuilder) Packages

func (b *GoReleaserBuilder) Packages(ctx context.Context, root, configPath string) ([]Artifact, error)

Packages は nfpm の deb/rpm をローカルに作る。--skip=publish で GitHub には上げない (apt/rpm の発行先は hosted repo)。実タグの版でパッケージ化するため --snapshot は使わない。

func (*GoReleaserBuilder) Release

func (b *GoReleaserBuilder) Release(ctx context.Context, root, configPath string) ([]Artifact, error)

Release は**実リリース**。クリーンな tag + GITHUB_TOKEN が要る。アーカイブを GitHub Releases へアップロードし、その実アーカイブの Archive 成果物(実 sha256)を返す。 formula push は wharfy が所有するので --skip=homebrew で goreleaser には書かせない。

func (*GoReleaserBuilder) ReleaseAll

func (b *GoReleaserBuilder) ReleaseAll(ctx context.Context, root, configPath string, skipDocker bool) ([]Artifact, error)

ReleaseAll は 1 回の release で全成果物を作る(publish 一括用)。archive・install.sh(extra_files)・ nfpm を GitHub Releases へ上げ、container 設定があれば docker も build+push する(--skip=homebrew のみ。dockers ブロックが無ければ docker は noop)。Archive + Linux Package 成果物を返す。

type MultiReleaser

type MultiReleaser interface {
	ReleaseAll(ctx context.Context, root, configPath string, skipDocker bool) ([]Artifact, error)
}

MultiReleaser は全チャネル一括発行の境界。1 回の release で archive・nfpm・docker を まとめて作り/上げ、Archive + Linux Package 成果物を返す(publish 一括で多重 release を避ける)。 skipDocker=true で docker pipe を抑止(container を出さない/docker 不在のとき)。

type PackageSpec added in v0.7.0

type PackageSpec struct {
	Format      string // "deb" | "rpm"
	Ext         string // ".deb" | ".rpm"(生成物名に使う)
	Name        string // パッケージ名(= project)
	BinaryName  string // /usr/bin 配下の実行ファイル名
	Version     string
	Maintainer  string
	Description string
	Homepage    string
	License     string
	Depends     []string
	Recommends  []string
	Suggests    []string
	// Notice は配布者が書いた告知(D-3)。deb/rpm には注記専用の欄が無いので description に続ける。
	// post-install scriptlet は失敗するとインストールを壊すので使わない。
	Notice string
}

PackageSpec は 1 チャネル(apt→deb / rpm→rpm)のパッケージ生成指定。依存 3 区分は フォーマット固有(ディストロで名前が異なるため呼び出し側で解決して渡す)。

type Packager

type Packager interface {
	Packages(ctx context.Context, root, configPath string) ([]Artifact, error)
}

Packager は deb/rpm パッケージ生成境界(apt/rpm チャネル)。GitHub には触れず ローカルに nfpm パッケージを作り、その成果物(os/arch/path/sha256)を返す。

type PrebuiltBinary added in v0.7.0

type PrebuiltBinary struct {
	OS     string
	Arch   string
	Path   string // 利用者 root からの相対パス
	SHA256 string // 宣言 sha(任意)。空でなければ実 sha と照合する
}

PrebuiltBinary は解決済みのビルド済みバイナリ 1 つ。config.PrebuiltBinary の写し (build は下位ドメインで config を import しないため、値だけ受け取る)。

type PrebuiltBuilder added in v0.7.0

type PrebuiltBuilder struct {
	Binaries []PrebuiltBinary
}

PrebuiltBuilder は BYO-binary の Builder 実装(依頼①)。configPath は使わない (GoReleaser 設定は不要)。渡されたバイナリの存在と sha256 を検証し、Artifact にする。

func (*PrebuiltBuilder) Build added in v0.7.0

func (b *PrebuiltBuilder) Build(_ context.Context, root, _ string) ([]Artifact, error)

Build はビルドせず、持ち込みバイナリを検証して Binary 成果物にする(存在+sha256)。

type PrebuiltContainerizer added in v0.7.0

type PrebuiltContainerizer struct {
	Bin      string // 既定 "docker"
	LookPath func(string) (string, error)
	Run      Runner
}

PrebuiltContainerizer は docker buildx で BYO の OCI イメージを作る(末端差し替え)。

func NewPrebuiltContainerizer added in v0.7.0

func NewPrebuiltContainerizer() *PrebuiltContainerizer

NewPrebuiltContainerizer は本番用(exec ベース)を差した実体を返す。

func (*PrebuiltContainerizer) PushMultiArch added in v0.7.0

func (b *PrebuiltContainerizer) PushMultiArch(ctx context.Context, root, distDir, image, version, binaryName string, bins []PrebuiltBinary) error

PushMultiArch は image に :version と :latest のマルチアーキ OCI を build+push する。 bins のうち linux のみを対象にする。返り値はエラーのみ(成果物は registry 上)。

type RegistryLogin added in v0.18.0

type RegistryLogin struct {
	Bin      string // 既定 "docker"
	LookPath func(string) (string, error)
	Run      StdinRunner
}

RegistryLogin は push 先レジストリへの docker login。CI ではトークンを渡すだけで通るように、 wharfy 自身がログインする(手元の docker が既に認証済みでも、渡されたトークンで上書きする ——利用者が wharfy に渡した資格情報こそが、wharfy の使うべき資格情報)。

func NewRegistryLogin added in v0.18.0

func NewRegistryLogin() *RegistryLogin

NewRegistryLogin は本番用(exec ベース)を差した実体を返す。

func (*RegistryLogin) Login added in v0.18.0

func (l *RegistryLogin) Login(ctx context.Context, host, username, token string) error

Login は host に username/token でログインする。token が空なら何もしない(認証を要らない レジストリや、既存の資格情報に任せる経路を壊さないため)。

type Releaser

type Releaser interface {
	Release(ctx context.Context, root, configPath string) ([]Artifact, error)
}

Releaser は実リリース境界。アーカイブを GitHub Releases へ**アップロード**し、 その実アーカイブ(=配布される実体)の sha256 を返す。homebrew formula はこの実 checksum と実 URL を参照する必要があるため、snapshot(Archives)とは別経路にする。

type Runner

type Runner func(ctx context.Context, dir, name string, args ...string) ([]byte, error)

Runner はサブプロセス実行の差し替え点(テストで stub 化する=末端は差し替え可能)。 結合出力とエラーを返す。

type StdinRunner added in v0.18.0

type StdinRunner func(ctx context.Context, stdin, name string, args ...string) ([]byte, error)

StdinRunner は stdin を流せるコマンド実行(--password-stdin 用・テストで差し替え)。 Runner と別なのは、トークンを argv に載せない(ps に出さない)ため。

type UnavailableError

type UnavailableError struct {
	Bin string
	Err error
}

UnavailableError は下層ビルダが見つからない/起動不可(builder_unavailable)。

func (*UnavailableError) Error

func (e *UnavailableError) Error() string

func (*UnavailableError) Unwrap

func (e *UnavailableError) Unwrap() error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL