1
0
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:
Erkan Zileli
2021-09-17 01:18:44 +03:00
committed by GitHub
parent 820194cc92
commit 35cb87e66a
4 changed files with 101 additions and 7 deletions

View File

@@ -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

View File

@@ -12,7 +12,7 @@ func init() {
registerImager(useBuildx, dockerImager{
buildx: true,
})
registerImager(useBuildPack, buildPackImager{})
registerImager(useBuildPacks, buildPackImager{})
}
type dockerManifester struct{}

View File

@@ -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 {

View File

@@ -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 {