Merge pull request #7121 from rhatdan/build
Fix building from http or '-' options
This commit is contained in:
		
						commit
						83166a98c3
					
				|  | @ -138,36 +138,9 @@ func build(cmd *cobra.Command, args []string) error { | |||
| 		return errors.New("cannot specify --squash, --squash-all and --layers options together") | ||||
| 	} | ||||
| 
 | ||||
| 	contextDir, containerFiles, err := extractContextAndFiles(args, buildOpts.File) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	ie, err := registry.NewImageEngine(cmd, args) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	apiBuildOpts, err := buildFlagsWrapperToOptions(cmd, contextDir, &buildOpts) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = ie.Build(registry.GetContext(), containerFiles, *apiBuildOpts) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // extractContextAndFiles parses args and files to extract a context directory
 | ||||
| // and {Container,Docker}files.
 | ||||
| //
 | ||||
| // TODO: this was copied and altered from the v1 client which in turn was
 | ||||
| // copied and altered from the Buildah code. Ideally, all of this code should
 | ||||
| // be cleanly consolidated into a package that is shared between Buildah and
 | ||||
| // Podman.
 | ||||
| func extractContextAndFiles(args, files []string) (string, []string, error) { | ||||
| 	// Extract container files from the CLI (i.e., --file/-f) first.
 | ||||
| 	var containerFiles []string | ||||
| 	for _, f := range files { | ||||
| 	for _, f := range buildOpts.File { | ||||
| 		if f == "-" { | ||||
| 			containerFiles = append(containerFiles, "/dev/stdin") | ||||
| 		} else { | ||||
|  | @ -181,7 +154,7 @@ func extractContextAndFiles(args, files []string) (string, []string, error) { | |||
| 		// The context directory could be a URL.  Try to handle that.
 | ||||
| 		tempDir, subDir, err := imagebuildah.TempDirForURL("", "buildah", args[0]) | ||||
| 		if err != nil { | ||||
| 			return "", nil, errors.Wrapf(err, "error prepping temporary context directory") | ||||
| 			return errors.Wrapf(err, "error prepping temporary context directory") | ||||
| 		} | ||||
| 		if tempDir != "" { | ||||
| 			// We had to download it to a temporary directory.
 | ||||
|  | @ -196,7 +169,7 @@ func extractContextAndFiles(args, files []string) (string, []string, error) { | |||
| 			// Nope, it was local.  Use it as is.
 | ||||
| 			absDir, err := filepath.Abs(args[0]) | ||||
| 			if err != nil { | ||||
| 				return "", nil, errors.Wrapf(err, "error determining path to directory %q", args[0]) | ||||
| 				return errors.Wrapf(err, "error determining path to directory %q", args[0]) | ||||
| 			} | ||||
| 			contextDir = absDir | ||||
| 		} | ||||
|  | @ -212,7 +185,7 @@ func extractContextAndFiles(args, files []string) (string, []string, error) { | |||
| 			} | ||||
| 			absFile, err := filepath.Abs(containerFiles[i]) | ||||
| 			if err != nil { | ||||
| 				return "", nil, errors.Wrapf(err, "error determining path to file %q", containerFiles[i]) | ||||
| 				return errors.Wrapf(err, "error determining path to file %q", containerFiles[i]) | ||||
| 			} | ||||
| 			contextDir = filepath.Dir(absFile) | ||||
| 			break | ||||
|  | @ -220,10 +193,10 @@ func extractContextAndFiles(args, files []string) (string, []string, error) { | |||
| 	} | ||||
| 
 | ||||
| 	if contextDir == "" { | ||||
| 		return "", nil, errors.Errorf("no context directory and no Containerfile specified") | ||||
| 		return errors.Errorf("no context directory and no Containerfile specified") | ||||
| 	} | ||||
| 	if !utils.IsDir(contextDir) { | ||||
| 		return "", nil, errors.Errorf("context must be a directory: %q", contextDir) | ||||
| 		return errors.Errorf("context must be a directory: %q", contextDir) | ||||
| 	} | ||||
| 	if len(containerFiles) == 0 { | ||||
| 		if utils.FileExists(filepath.Join(contextDir, "Containerfile")) { | ||||
|  | @ -233,7 +206,18 @@ func extractContextAndFiles(args, files []string) (string, []string, error) { | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return contextDir, containerFiles, nil | ||||
| 	ie, err := registry.NewImageEngine(cmd, args) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	apiBuildOpts, err := buildFlagsWrapperToOptions(cmd, contextDir, &buildOpts) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = ie.Build(registry.GetContext(), containerFiles, *apiBuildOpts) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // buildFlagsWrapperToOptions converts the local build flags to the build options used
 | ||||
|  |  | |||
|  | @ -233,6 +233,27 @@ Labels.$label_name | $label_value | |||
|     run_podman rmi -f build_test | ||||
| } | ||||
| 
 | ||||
| @test "podman build - stdin test" { | ||||
|     if is_remote && is_rootless; then | ||||
|         skip "unreliable with podman-remote and rootless; #2972" | ||||
|     fi | ||||
| 
 | ||||
|     # Random workdir, and multiple random strings to verify command & env | ||||
|     workdir=/$(random_string 10) | ||||
|     PODMAN_TIMEOUT=240 run_podman build -t build_test - << EOF | ||||
| FROM  $IMAGE | ||||
| RUN mkdir $workdir | ||||
| WORKDIR $workdir | ||||
| RUN /bin/echo 'Test' | ||||
| EOF | ||||
|     is "$output" ".*STEP 5: COMMIT" "COMMIT seen in log" | ||||
| 
 | ||||
|     run_podman run --rm build_test pwd | ||||
|     is "$output" "$workdir" "pwd command in container" | ||||
| 
 | ||||
|     run_podman rmi -f build_test | ||||
| } | ||||
| 
 | ||||
| function teardown() { | ||||
|     # A timeout or other error in 'build' can leave behind stale images | ||||
|     # that podman can't even see and which will cascade into subsequent | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue