Skip to content

Commit

Permalink
many: add new (optional) manifest.BuildOptions to manifest.NewBuild()
Browse files Browse the repository at this point in the history
  • Loading branch information
mvo5 committed Dec 1, 2023
1 parent 929f49b commit 48212ab
Show file tree
Hide file tree
Showing 17 changed files with 37 additions and 27 deletions.
2 changes: 1 addition & 1 deletion cmd/osbuild-playground/my-container.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func (img *MyContainer) InstantiateManifest(m *manifest.Manifest,
// Let's create a simple OCI container!

// configure a build pipeline
build := manifest.NewBuild(m, runner, repos)
build := manifest.NewBuild(m, runner, repos, nil)
build.Checkpoint()

// create a minimal non-bootable OS tree
Expand Down
2 changes: 1 addition & 1 deletion cmd/osbuild-playground/my-image.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func (img *MyImage) InstantiateManifest(m *manifest.Manifest,
// Let's create a simple raw image!

// configure a build pipeline
build := manifest.NewBuild(m, runner, repos)
build := manifest.NewBuild(m, runner, repos, nil)
build.Checkpoint()

// create an x86_64 platform with bios boot
Expand Down
2 changes: 1 addition & 1 deletion pkg/image/anaconda_live_installer.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func (img *AnacondaLiveInstaller) InstantiateManifest(m *manifest.Manifest,
repos []rpmmd.RepoConfig,
runner runner.Runner,
rng *rand.Rand) (*artifact.Artifact, error) {
buildPipeline := manifest.NewBuild(m, runner, repos)
buildPipeline := manifest.NewBuild(m, runner, repos, nil)
buildPipeline.Checkpoint()

livePipeline := manifest.NewAnacondaInstaller(m,
Expand Down
2 changes: 1 addition & 1 deletion pkg/image/anaconda_ostree_installer.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func (img *AnacondaOSTreeInstaller) InstantiateManifest(m *manifest.Manifest,
repos []rpmmd.RepoConfig,
runner runner.Runner,
rng *rand.Rand) (*artifact.Artifact, error) {
buildPipeline := manifest.NewBuild(m, runner, repos)
buildPipeline := manifest.NewBuild(m, runner, repos, nil)
buildPipeline.Checkpoint()

anacondaPipeline := manifest.NewAnacondaInstaller(m,
Expand Down
2 changes: 1 addition & 1 deletion pkg/image/anaconda_tar_installer.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func (img *AnacondaTarInstaller) InstantiateManifest(m *manifest.Manifest,
repos []rpmmd.RepoConfig,
runner runner.Runner,
rng *rand.Rand) (*artifact.Artifact, error) {
buildPipeline := manifest.NewBuild(m, runner, repos)
buildPipeline := manifest.NewBuild(m, runner, repos, nil)
buildPipeline.Checkpoint()

anacondaPipeline := manifest.NewAnacondaInstaller(m,
Expand Down
2 changes: 1 addition & 1 deletion pkg/image/archive.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func (img *Archive) InstantiateManifest(m *manifest.Manifest,
repos []rpmmd.RepoConfig,
runner runner.Runner,
rng *rand.Rand) (*artifact.Artifact, error) {
buildPipeline := manifest.NewBuild(m, runner, repos)
buildPipeline := manifest.NewBuild(m, runner, repos, nil)
buildPipeline.Checkpoint()

osPipeline := manifest.NewOS(m, buildPipeline, img.Platform, repos)
Expand Down
2 changes: 1 addition & 1 deletion pkg/image/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func (img *BaseContainer) InstantiateManifest(m *manifest.Manifest,
repos []rpmmd.RepoConfig,
runner runner.Runner,
rng *rand.Rand) (*artifact.Artifact, error) {
buildPipeline := manifest.NewBuild(m, runner, repos)
buildPipeline := manifest.NewBuild(m, runner, repos, nil)
buildPipeline.Checkpoint()

osPipeline := manifest.NewOS(m, buildPipeline, img.Platform, repos)
Expand Down
2 changes: 1 addition & 1 deletion pkg/image/disk.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func (img *DiskImage) InstantiateManifest(m *manifest.Manifest,
repos []rpmmd.RepoConfig,
runner runner.Runner,
rng *rand.Rand) (*artifact.Artifact, error) {
buildPipeline := manifest.NewBuild(m, runner, repos)
buildPipeline := manifest.NewBuild(m, runner, repos, nil)
buildPipeline.Checkpoint()

osPipeline := manifest.NewOS(m, buildPipeline, img.Platform, repos)
Expand Down
2 changes: 1 addition & 1 deletion pkg/image/export_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"github.com/osbuild/images/pkg/runner"
)

func MockManifestNewBuild(new func(m *manifest.Manifest, runner runner.Runner, repos []rpmmd.RepoConfig) *manifest.Build) (restore func()) {
func MockManifestNewBuild(new func(m *manifest.Manifest, runner runner.Runner, repos []rpmmd.RepoConfig, opts *manifest.BuildOptions) *manifest.Build) (restore func()) {
saved := manifestNewBuild
manifestNewBuild = new
return func() {
Expand Down
2 changes: 1 addition & 1 deletion pkg/image/ostree_archive.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func (img *OSTreeArchive) InstantiateManifest(m *manifest.Manifest,
repos []rpmmd.RepoConfig,
runner runner.Runner,
rng *rand.Rand) (*artifact.Artifact, error) {
buildPipeline := manifest.NewBuild(m, runner, repos)
buildPipeline := manifest.NewBuild(m, runner, repos, nil)
buildPipeline.Checkpoint()

osPipeline := manifest.NewOS(m, buildPipeline, img.Platform, repos)
Expand Down
2 changes: 1 addition & 1 deletion pkg/image/ostree_container.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func (img *OSTreeContainer) InstantiateManifest(m *manifest.Manifest,
repos []rpmmd.RepoConfig,
runner runner.Runner,
rng *rand.Rand) (*artifact.Artifact, error) {
buildPipeline := manifest.NewBuild(m, runner, repos)
buildPipeline := manifest.NewBuild(m, runner, repos, nil)
buildPipeline.Checkpoint()

osPipeline := manifest.NewOS(m, buildPipeline, img.Platform, repos)
Expand Down
3 changes: 1 addition & 2 deletions pkg/image/ostree_disk.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,7 @@ func (img *OSTreeDiskImage) InstantiateManifest(m *manifest.Manifest,
repos []rpmmd.RepoConfig,
runner runner.Runner,
rng *rand.Rand) (*artifact.Artifact, error) {
buildPipeline := manifestNewBuild(m, runner, repos)
buildPipeline.ContainerBuildable = img.ContainerBuildable
buildPipeline := manifestNewBuild(m, runner, repos, &manifest.BuildOptions{ContainerBuildable: img.ContainerBuildable})
buildPipeline.Checkpoint()

// don't support compressing non-raw images
Expand Down
14 changes: 8 additions & 6 deletions pkg/image/ostree_disk_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,16 @@ func TestOSTreeDiskImageManifestSetsContainerBuildable(t *testing.T) {
Name: "name",
}

var buildPipeline *manifest.Build
restore := image.MockManifestNewBuild(func(m *manifest.Manifest, r runner.Runner, repos []rpmmd.RepoConfig) *manifest.Build {
buildPipeline = manifest.NewBuild(m, r, repos)
return buildPipeline
var buildOpts []*manifest.BuildOptions
restore := image.MockManifestNewBuild(func(m *manifest.Manifest, r runner.Runner, repos []rpmmd.RepoConfig, opts *manifest.BuildOptions) *manifest.Build {
buildOpts = append(buildOpts, opts)
return manifest.NewBuild(m, r, repos, opts)
})
defer restore()

for _, containerBuildable := range []bool{true, false} {
buildOpts = nil

mf := manifest.New()
img := image.NewOSTreeDiskImageFromContainer(containerSource, ref)
require.NotNil(t, img)
Expand All @@ -52,8 +54,8 @@ func TestOSTreeDiskImageManifestSetsContainerBuildable(t *testing.T) {
_, err := img.InstantiateManifest(&mf, repos, r, rng)
require.Nil(t, err)
require.NotNil(t, img)
require.NotNil(t, buildPipeline)

require.Equal(t, buildPipeline.ContainerBuildable, containerBuildable)
require.Equal(t, len(buildOpts), 1)
require.Equal(t, buildOpts[0].ContainerBuildable, containerBuildable)
}
}
2 changes: 1 addition & 1 deletion pkg/image/ostree_simplified_installer.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func (img *OSTreeSimplifiedInstaller) InstantiateManifest(m *manifest.Manifest,
repos []rpmmd.RepoConfig,
runner runner.Runner,
rng *rand.Rand) (*artifact.Artifact, error) {
buildPipeline := manifest.NewBuild(m, runner, repos)
buildPipeline := manifest.NewBuild(m, runner, repos, nil)
buildPipeline.Checkpoint()

imageFilename := "image.raw.xz"
Expand Down
17 changes: 13 additions & 4 deletions pkg/manifest/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,30 @@ type Build struct {
repos []rpmmd.RepoConfig
packageSpecs []rpmmd.PackageSpec

// TODO: make private?
// Container buildable tweaks the buildroot to be container friendly,
containerBuildable bool
}

type BuildOptions struct {
// ContainerBuildable tweaks the buildroot to be container friendly,
// i.e. to not rely on an installed osbuild-selinux
ContainerBuildable bool
}

// NewBuild creates a new build pipeline from the repositories in repos
// and the specified packages.
func NewBuild(m *Manifest, runner runner.Runner, repos []rpmmd.RepoConfig) *Build {
func NewBuild(m *Manifest, runner runner.Runner, repos []rpmmd.RepoConfig, opts *BuildOptions) *Build {
if opts == nil {
opts = &BuildOptions{}
}

name := "build"
pipeline := &Build{
Base: NewBase(m, name, nil),
runner: runner,
dependents: make([]Pipeline, 0),
repos: filterRepos(repos, name),

containerBuildable: opts.ContainerBuildable,
}
m.addPipeline(pipeline)
return pipeline
Expand Down Expand Up @@ -114,7 +123,7 @@ func (p *Build) getSELinuxLabels() map[string]string {
switch pkg.Name {
case "coreutils":
labels["/usr/bin/cp"] = "system_u:object_r:install_exec_t:s0"
if p.ContainerBuildable {
if p.containerBuildable {
labels["/usr/bin/mount"] = "system_u:object_r:install_exec_t:s0"
labels["/usr/bin/umount"] = "system_u:object_r:install_exec_t:s0"
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/manifest/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ func TestBuildContainerBuildableNo(t *testing.T) {
mf := New()
runner := &runner.Fedora{Version: 39}

build := NewBuild(&mf, runner, repos)
build := NewBuild(&mf, runner, repos, nil)
require.NotNil(t, build)

for _, tc := range []struct {
Expand Down Expand Up @@ -76,7 +76,7 @@ func TestBuildContainerBuildableNo(t *testing.T) {
},
} {
build.packageSpecs = tc.packageSpec
build.ContainerBuildable = tc.containerBuildable
build.containerBuildable = tc.containerBuildable

labels := build.getSELinuxLabels()
require.Equal(t, labels, tc.expectedSELinuxLabels)
Expand Down
2 changes: 1 addition & 1 deletion pkg/manifest/os_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ func NewTestOS() *OS {
repos := []rpmmd.RepoConfig{}
manifest := New()
runner := &runner.Fedora{Version: 37}
build := NewBuild(&manifest, runner, repos)
build := NewBuild(&manifest, runner, repos, nil)
build.Checkpoint()

// create an x86_64 platform with bios boot
Expand Down

0 comments on commit 48212ab

Please sign in to comment.