Skip to content

Commit 6388f0b

Browse files
committed
fix: allow multistage Dockerfiles by removing AS <stage name> in validation
- Modified the validate_docker_compose_yml function to support multistage Dockerfiles. - Updated the FROM line parsing to remove the AS <stage name> part for case-insensitive comparison. - This ensures compatibility with Dockerfiles using multistage builds.
1 parent 652e28a commit 6388f0b

File tree

2 files changed

+32
-1
lines changed
  • connect/eaas/core/validation/validators
  • tests/connect/eaas/core/validation/validators

2 files changed

+32
-1
lines changed

connect/eaas/core/validation/validators/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ def validate_docker_compose_yml(context): # noqa: CCR001
224224
),
225225
)
226226
continue
227-
image = from_cmd[4:].strip()
227+
image = re.sub(r'\s+AS\s+.*', '', from_cmd[4:], flags=re.IGNORECASE).strip()
228228
if image != runner_image:
229229
messages.append(
230230
ValidationItem(

tests/connect/eaas/core/validation/validators/test_base.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,37 @@ def test_validate_docker_compose_yml_invalid_image_dockerfile(mocker):
566566
assert item.file == 'fake_dir/Dockerfile'
567567

568568

569+
def test_validate_docker_compose_yml_multistage_image_dockerfile(mocker):
570+
mocker.patch(
571+
'connect.eaas.core.validation.validators.base.os.path.isfile',
572+
return_value=True,
573+
)
574+
mocked_open = mocker.MagicMock()
575+
mocked_open.read.return_value = (
576+
'FROM cloudblueconnect/connect-extension-runner:0.3 as a-stage-name\n'
577+
)
578+
mocker.patch(
579+
'connect.eaas.core.validation.validators.base.open',
580+
side_effect=[None, mocked_open],
581+
)
582+
mocker.patch(
583+
'connect.eaas.core.validation.validators.base.yaml.safe_load',
584+
return_value={
585+
'services': {
586+
'dev': {
587+
'build': {'dockerfile': 'Dockerfile'},
588+
},
589+
},
590+
},
591+
)
592+
593+
result = validate_docker_compose_yml({'project_dir': 'fake_dir', 'runner_version': '0.3'})
594+
595+
assert isinstance(result, ValidationResult)
596+
assert result.must_exit is False
597+
assert len(result.items) == 0
598+
599+
569600
def test_validate_docker_compose_yml_invalid_image_no_dockerfile(mocker):
570601
mocker.patch(
571602
'connect.eaas.core.validation.validators.base.os.path.isfile',

0 commit comments

Comments
 (0)