fix(deployments): skip registry image tag for previews
Only push the configured Docker registry image tag for production deployments, and cover preview and missing-tag cases with unit tests.
This commit is contained in:
parent
52e60f1dcc
commit
a54e70b4e0
2 changed files with 67 additions and 1 deletions
|
|
@ -1106,7 +1106,7 @@ private function push_to_docker_registry()
|
||||||
'hidden' => true,
|
'hidden' => true,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
if ($this->application->docker_registry_image_tag) {
|
if ($this->shouldPushDockerRegistryImageTag()) {
|
||||||
// Tag image with docker_registry_image_tag
|
// Tag image with docker_registry_image_tag
|
||||||
$this->application_deployment_queue->addLogEntry("Tagging and pushing image with {$this->application->docker_registry_image_tag} tag.");
|
$this->application_deployment_queue->addLogEntry("Tagging and pushing image with {$this->application->docker_registry_image_tag} tag.");
|
||||||
$this->execute_remote_command(
|
$this->execute_remote_command(
|
||||||
|
|
@ -1130,6 +1130,15 @@ private function push_to_docker_registry()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function shouldPushDockerRegistryImageTag(): bool
|
||||||
|
{
|
||||||
|
if (blank($this->application->docker_registry_image_tag)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->pull_request_id === 0;
|
||||||
|
}
|
||||||
|
|
||||||
private function generate_image_names()
|
private function generate_image_names()
|
||||||
{
|
{
|
||||||
if ($this->application->dockerfile) {
|
if ($this->application->dockerfile) {
|
||||||
|
|
|
||||||
|
|
@ -74,3 +74,60 @@
|
||||||
|
|
||||||
expect($method->invoke($job))->toBe('latest');
|
expect($method->invoke($job))->toBe('latest');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function makeDockerRegistryTagPushJob(int $pullRequestId, ?string $dockerRegistryImageTag): object
|
||||||
|
{
|
||||||
|
$reflection = new ReflectionClass(ApplicationDeploymentJob::class);
|
||||||
|
$job = $reflection->newInstanceWithoutConstructor();
|
||||||
|
|
||||||
|
$pullRequestProperty = $reflection->getProperty('pull_request_id');
|
||||||
|
$pullRequestProperty->setAccessible(true);
|
||||||
|
$pullRequestProperty->setValue($job, $pullRequestId);
|
||||||
|
|
||||||
|
$applicationProperty = $reflection->getProperty('application');
|
||||||
|
$applicationProperty->setAccessible(true);
|
||||||
|
$applicationProperty->setValue($job, new Application([
|
||||||
|
'docker_registry_image_tag' => $dockerRegistryImageTag,
|
||||||
|
]));
|
||||||
|
|
||||||
|
return $job;
|
||||||
|
}
|
||||||
|
|
||||||
|
it('pushes the configured docker registry image tag for production deployments', function () {
|
||||||
|
$reflection = new ReflectionClass(ApplicationDeploymentJob::class);
|
||||||
|
$job = makeDockerRegistryTagPushJob(
|
||||||
|
pullRequestId: 0,
|
||||||
|
dockerRegistryImageTag: 'latest',
|
||||||
|
);
|
||||||
|
|
||||||
|
$method = $reflection->getMethod('shouldPushDockerRegistryImageTag');
|
||||||
|
$method->setAccessible(true);
|
||||||
|
|
||||||
|
expect($method->invoke($job))->toBeTrue();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('skips the configured docker registry image tag for preview deployments', function () {
|
||||||
|
$reflection = new ReflectionClass(ApplicationDeploymentJob::class);
|
||||||
|
$job = makeDockerRegistryTagPushJob(
|
||||||
|
pullRequestId: 42,
|
||||||
|
dockerRegistryImageTag: 'latest',
|
||||||
|
);
|
||||||
|
|
||||||
|
$method = $reflection->getMethod('shouldPushDockerRegistryImageTag');
|
||||||
|
$method->setAccessible(true);
|
||||||
|
|
||||||
|
expect($method->invoke($job))->toBeFalse();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('skips pushing a configured docker registry image tag when no tag is set', function () {
|
||||||
|
$reflection = new ReflectionClass(ApplicationDeploymentJob::class);
|
||||||
|
$job = makeDockerRegistryTagPushJob(
|
||||||
|
pullRequestId: 0,
|
||||||
|
dockerRegistryImageTag: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
$method = $reflection->getMethod('shouldPushDockerRegistryImageTag');
|
||||||
|
$method->setAccessible(true);
|
||||||
|
|
||||||
|
expect($method->invoke($job))->toBeFalse();
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue