Skip to content
Snippets Groups Projects

Support all worker attributes on CreateDockerWorkerVersion

Merged ml bonhomme requested to merge pimp-my-docker-worker-version into master
All threads resolved!
Files
2
@@ -591,10 +591,24 @@ class DockerWorkerVersionSerializer(serializers.ModelSerializer):
worker_slug = serializers.CharField(
max_length=100,
help_text=dedent("""
The slug/name of the worker to which a new version will be published.
The slug of the worker to which a new version will be published.
If such a worker does not exist, it will be created.
"""),
)
worker_name = serializers.CharField(
max_length=100,
help_text="The name of the worker to which a new version will be published.",
)
worker_type = serializers.CharField(
max_length=100,
help_text="The slug of the worker type of the worker to which a new version will be published.",
)
worker_description = serializers.CharField(
required=False,
allow_null=True,
allow_blank=True,
style={"base_template": "textarea.html"},
)
revision_hash = serializers.CharField(max_length=50)
revision_message = serializers.CharField(required=False, default="created from docker image")
revision_author = serializers.CharField(max_length=50, required=False, default="default")
@@ -617,6 +631,9 @@ class DockerWorkerVersionSerializer(serializers.ModelSerializer):
# Related fields
"repository_url",
"worker_slug",
"worker_name",
"worker_type",
"worker_description",
"revision_hash",
"revision_message",
"revision_author",
@@ -705,23 +722,33 @@ class DockerWorkerVersionSerializer(serializers.ModelSerializer):
unique_fields=["repository", "name"],
)
# Use a specific worker type in case a worker must be created
worker_type, _ = WorkerType.objects.using("default").get_or_create(slug="docker", defaults={"display_name": "Docker"})
# Retrieve or create the worker type
worker_type, _ = WorkerType.objects.using("default").get_or_create(slug=validated_data["worker_type"], defaults={"display_name": validated_data["worker_type"]})
# Retrieve or create the worker
worker, _ = repository.workers.using("default").get_or_create(
worker, created = repository.workers.using("default").get_or_create(
slug=validated_data["worker_slug"],
repository=repository,
defaults={
"name": validated_data["worker_slug"],
"type": worker_type,
"name": validated_data["worker_name"],
"type_id": worker_type.id,
"description": validated_data.get("worker_description", "")
},
)
if worker.archived:
raise ValidationError({"worker_slug": ["This worker is archived."]})
# Update the worker if required
if not created:
description = validated_data.get("worker_description")
if worker.name != validated_data["worker_name"] or worker.type_id != worker_type.id or (description is not None and worker.description != description):
worker.name = validated_data["worker_name"]
worker.type_id = worker_type.id
if description is not None:
worker.description = description
worker.save()
# Finally, create the worker version and mark it as available
# If we are about the return an existing worker version, fetch the required data for the response
# If we are about to return an existing worker version, fetch the required data for the response
version, created = (
WorkerVersion
.objects
Loading