You've already forked goreleaser
mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-09-16 09:26:52 +02:00
fix(buildpacks): add if check when copying Dockerfile (#2493)
Signed-off-by: Erkan Zileli <erkan.zileli@trendyol.com> Co-authored-by: Batuhan Apaydın <batuhan.apaydin@trendyol.com> Co-authored-by: Furkan Türkal <furkan.turkal@trendyol.com> Co-authored-by: Batuhan Apaydın <batuhan.apaydin@trendyol.com> Co-authored-by: Furkan Türkal <furkan.turkal@trendyol.com>
This commit is contained in:
6
.github/workflows/build.yml
vendored
6
.github/workflows/build.yml
vendored
@@ -25,6 +25,12 @@ jobs:
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
-
|
||||
name: Set up Pack CLI for Buildpacks
|
||||
run: |
|
||||
sudo add-apt-repository ppa:cncf-buildpacks/pack-cli
|
||||
sudo apt-get update
|
||||
sudo apt-get --no-install-suggests --no-install-recommends install pack-cli
|
||||
-
|
||||
name: Set up Snapcraft
|
||||
# FIXME: the mkdirs are a hack for https://github.com/goreleaser/goreleaser/issues/1715
|
||||
|
@@ -12,7 +12,7 @@ func init() {
|
||||
registerImager(useBuildx, dockerImager{
|
||||
buildx: true,
|
||||
})
|
||||
registerImager(useBuildPack, buildPackImager{})
|
||||
registerImager(useBuildPacks, buildPackImager{})
|
||||
}
|
||||
|
||||
type dockerManifester struct{}
|
||||
|
@@ -24,9 +24,9 @@ import (
|
||||
const (
|
||||
dockerConfigExtra = "DockerConfig"
|
||||
|
||||
useBuildx = "buildx"
|
||||
useDocker = "docker"
|
||||
useBuildPack = "buildpacks"
|
||||
useBuildx = "buildx"
|
||||
useDocker = "docker"
|
||||
useBuildPacks = "buildpacks"
|
||||
)
|
||||
|
||||
// Pipe for docker.
|
||||
@@ -151,8 +151,10 @@ func process(ctx *context.Context, docker config.Docker, artifacts []*artifact.A
|
||||
log := log.WithField("image", images[0])
|
||||
log.Debug("tempdir: " + tmp)
|
||||
|
||||
if err := gio.Copy(docker.Dockerfile, filepath.Join(tmp, "Dockerfile")); err != nil {
|
||||
return fmt.Errorf("failed to copy dockerfile: %w", err)
|
||||
if docker.Use != useBuildPacks {
|
||||
if err := gio.Copy(docker.Dockerfile, filepath.Join(tmp, "Dockerfile")); err != nil {
|
||||
return fmt.Errorf("failed to copy dockerfile: %w", err)
|
||||
}
|
||||
}
|
||||
for _, file := range docker.Files {
|
||||
if err := os.MkdirAll(filepath.Join(tmp, filepath.Dir(file)), 0o755); err != nil {
|
||||
|
@@ -929,7 +929,7 @@ func TestRunPipe(t *testing.T) {
|
||||
|
||||
for name, docker := range table {
|
||||
for imager := range imagers {
|
||||
if imager == useBuildPack { // buildpack tests are different
|
||||
if imager == useBuildPacks { // buildpack tests are different
|
||||
continue
|
||||
}
|
||||
t.Run(name+" on "+imager, func(t *testing.T) {
|
||||
@@ -1046,6 +1046,92 @@ func TestRunPipe(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRunPipeWhileUsingBuildpacks(t *testing.T) {
|
||||
type errChecker func(*testing.T, error)
|
||||
shouldNotErr := func(t *testing.T, err error) {
|
||||
t.Helper()
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
table := map[string]struct {
|
||||
dockers []config.Docker
|
||||
manifests []config.DockerManifest
|
||||
env map[string]string
|
||||
expect []string
|
||||
assertError errChecker
|
||||
pubAssertError errChecker
|
||||
manifestAssertError errChecker
|
||||
}{
|
||||
"golang": {
|
||||
dockers: []config.Docker{
|
||||
{
|
||||
Use: useBuildPacks,
|
||||
ImageTemplates: []string{registry + "goreleaser/buildpacks:{{ .Tag }}"},
|
||||
},
|
||||
},
|
||||
expect: []string{
|
||||
registry + "goreleaser/buildpacks:v1.0.0",
|
||||
},
|
||||
assertError: shouldNotErr,
|
||||
pubAssertError: shouldNotErr,
|
||||
manifestAssertError: shouldNotErr,
|
||||
},
|
||||
}
|
||||
|
||||
killAndRm(t)
|
||||
start(t)
|
||||
defer killAndRm(t)
|
||||
|
||||
for name, docker := range table {
|
||||
t.Run(name+" on "+useBuildPacks, func(t *testing.T) {
|
||||
folder := t.TempDir()
|
||||
wd := filepath.Join(folder, "wd")
|
||||
dist := filepath.Join(wd, "dist")
|
||||
require.NoError(t, os.Mkdir(wd, 0o755))
|
||||
require.NoError(t, os.Mkdir(dist, 0o755))
|
||||
require.NoError(t, os.Chdir(wd))
|
||||
require.NoError(t, os.WriteFile(filepath.Join(wd, "go.mod"), []byte("module test-mod\n\ngo 1.17"), 0o600))
|
||||
require.NoError(t, os.WriteFile(filepath.Join(wd, "main.go"), []byte("package main\n\nfunc main(){}"), 0o600))
|
||||
|
||||
ctx := context.New(config.Project{
|
||||
ProjectName: "mybin",
|
||||
Dist: dist,
|
||||
Dockers: docker.dockers,
|
||||
})
|
||||
ctx.Parallelism = 1
|
||||
ctx.Env = docker.env
|
||||
ctx.Version = "1.0.0"
|
||||
ctx.Git = context.GitInfo{
|
||||
CurrentTag: "v1.0.0",
|
||||
Commit: "a1b2c3d4",
|
||||
}
|
||||
ctx.Semver = context.Semver{
|
||||
Major: 1,
|
||||
Minor: 0,
|
||||
Patch: 0,
|
||||
}
|
||||
|
||||
rmi := func(img string) error {
|
||||
return exec.Command("docker", "rmi", "--force", img).Run()
|
||||
}
|
||||
|
||||
err := Pipe{}.Run(ctx)
|
||||
docker.assertError(t, err)
|
||||
if err == nil {
|
||||
docker.pubAssertError(t, Pipe{}.Publish(ctx))
|
||||
docker.manifestAssertError(t, ManifestPipe{}.Publish(ctx))
|
||||
}
|
||||
|
||||
// this might should not fail as the image should have been created when
|
||||
// the step ran
|
||||
for _, img := range docker.expect {
|
||||
t.Log("removing docker image", img)
|
||||
require.NoError(t, rmi(img), "could not delete image %s", img)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildCommand(t *testing.T) {
|
||||
images := []string{"goreleaser/test_build_flag", "goreleaser/test_multiple_tags"}
|
||||
tests := []struct {
|
||||
|
Reference in New Issue
Block a user