mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Fix the target name issue for multi-stage build
This PR is trying to fix issue #36956. The stage name is case-insensitive by design, so we should use `strings.EqualFold()` as the comparison method to eliminate the case sensitive noise. Also we need to return a pre-defined error code order to avoid below message like: "FIXME: Got an API for which error does not match any expected type!!!: failed to reach build target dev in Dockerfile" Signed-off-by: Dennis Chen <dennis.chen@arm.com>
This commit is contained in:
parent
d4e48af48d
commit
7c0570473c
2 changed files with 3 additions and 2 deletions
|
@ -226,7 +226,7 @@ func (b *Builder) build(source builder.Source, dockerfile *parser.Result) (*buil
|
|||
targetIx, found := instructions.HasStage(stages, b.options.Target)
|
||||
if !found {
|
||||
buildsFailed.WithValues(metricsBuildTargetNotReachableError).Inc()
|
||||
return nil, errors.Errorf("failed to reach build target %s in Dockerfile", b.options.Target)
|
||||
return nil, errdefs.InvalidParameter(errors.Errorf("failed to reach build target %s in Dockerfile", b.options.Target))
|
||||
}
|
||||
stages = stages[:targetIx+1]
|
||||
}
|
||||
|
|
|
@ -390,7 +390,8 @@ func CurrentStage(s []Stage) (*Stage, error) {
|
|||
// HasStage looks for the presence of a given stage name
|
||||
func HasStage(s []Stage, name string) (int, bool) {
|
||||
for i, stage := range s {
|
||||
if stage.Name == name {
|
||||
// Stage name is case-insensitive by design
|
||||
if strings.EqualFold(stage.Name, name) {
|
||||
return i, true
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue