From e75b223547ffb20e32c30b45afa6a4f6d2e51af7 Mon Sep 17 00:00:00 2001 From: ivan luchyk Date: Wed, 19 Jun 2024 16:13:49 +0100 Subject: [PATCH 01/10] implement image increasing version --- builder/azure.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/builder/azure.py b/builder/azure.py index 9d2d67f8..44ca8a7d 100644 --- a/builder/azure.py +++ b/builder/azure.py @@ -43,6 +43,18 @@ def _img_ver_show_cmd(image): return ['sig', 'image-version', 'show', '--only-show-errors', '-g', image['gallery']['resourceGroup'], '-r', image['gallery']['name'], '-i', image['name'], '-e', image['version'], '--subscription', image['gallery']['subscription']] +def get_latest_image_version(image): + cmd = ['sig', 'image-version', 'list', '--only-show-errors', '-g', image['gallery']['resourceGroup'], + '-r', image['gallery']['name'], '-i', image['name'], '--subscription', image['gallery']['subscription']] + versions = cli(cmd) + + if versions: + latest_version = max(versions, key=lambda v: v['version']) + log.info(f'Latest version of image {image["name"]} is {latest_version["version"]}') + return latest_version['version'] + else: + log.warning(f'No versions found for image {image["name"]}') + return image['version'] def _img_def_create_cmd(image): return ['sig', 'image-definition', 'create', '--only-show-errors', '-g', image['gallery']['resourceGroup'], @@ -111,7 +123,7 @@ def ensure_image_def_version(image): image_name = image['name'] image_version = image['version'] - build = False + build = True log.info(f'Validating image definition and version for {image_name}') log.info(f'Checking if image definition exists for {image_name}') @@ -123,6 +135,8 @@ def ensure_image_def_version(image): log.info(f'Checking if image version {image_version} exists for {image_name}') imgver = cli(_img_ver_show_cmd(image)) + image['version'] = get_latest_image_version(image) + if imgver: log.info(f'Found existing image version {image_version} for {image_name}') log.warning(f'{image_name} was not built because version {image_version} already exists. Please update the version number or delete the existing image version and try again.') @@ -229,7 +243,7 @@ async def ensure_image_def_version_async(image): image_name = image['name'] image_version = image['version'] - build = False + build = True log.info(f'Validating image definition and version for {image_name}') log.info(f'Checking if image definition exists for {image_name}') @@ -241,6 +255,8 @@ async def ensure_image_def_version_async(image): log.info(f'Checking if image version {image_version} exists for {image_name}') imgver = await cli_async(_img_ver_show_cmd(image)) + image['version'] = get_latest_image_version(image) + if imgver: log.info(f'Found existing image version {image_version} for {image_name}') log.warning(f'{image_name} was not built because version {image_version} already exists. Please update the version number or delete the existing image version and try again.') From 17609bea434f3c0a6c49db92161043037ff38955 Mon Sep 17 00:00:00 2001 From: ivan luchyk Date: Wed, 19 Jun 2024 16:30:41 +0100 Subject: [PATCH 02/10] fix build --- builder/azure.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/builder/azure.py b/builder/azure.py index 44ca8a7d..2e952b98 100644 --- a/builder/azure.py +++ b/builder/azure.py @@ -44,14 +44,14 @@ def _img_ver_show_cmd(image): '-r', image['gallery']['name'], '-i', image['name'], '-e', image['version'], '--subscription', image['gallery']['subscription']] def get_latest_image_version(image): - cmd = ['sig', 'image-version', 'list', '--only-show-errors', '-g', image['gallery']['resourceGroup'], + cmd = ['sig', 'image-version', 'list', '-g', image['gallery']['resourceGroup'], '-r', image['gallery']['name'], '-i', image['name'], '--subscription', image['gallery']['subscription']] versions = cli(cmd) if versions: - latest_version = max(versions, key=lambda v: v['version']) - log.info(f'Latest version of image {image["name"]} is {latest_version["version"]}') - return latest_version['version'] + latest_version = max(versions, key=lambda v: v['name']) + log.info(f'Latest version of image {image["name"]}') + return latest_version['name'] else: log.warning(f'No versions found for image {image["name"]}') return image['version'] From abbdad14e5c6e0d8b7a8cfac436aa787fb285173 Mon Sep 17 00:00:00 2001 From: ivan luchyk Date: Wed, 19 Jun 2024 16:39:15 +0100 Subject: [PATCH 03/10] fix build --- builder/azure.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builder/azure.py b/builder/azure.py index 2e952b98..89ca98c6 100644 --- a/builder/azure.py +++ b/builder/azure.py @@ -50,8 +50,8 @@ def get_latest_image_version(image): if versions: latest_version = max(versions, key=lambda v: v['name']) - log.info(f'Latest version of image {image["name"]}') - return latest_version['name'] + log.info(f'Latest version of image {image["name"]} is {latest_version}' ) + return latest_version else: log.warning(f'No versions found for image {image["name"]}') return image['version'] From 7451d7f682387c145ff84ad0f4ae03350e270918 Mon Sep 17 00:00:00 2001 From: ivan luchyk Date: Wed, 19 Jun 2024 16:48:59 +0100 Subject: [PATCH 04/10] do incrising version --- builder/azure.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/builder/azure.py b/builder/azure.py index 89ca98c6..8d030445 100644 --- a/builder/azure.py +++ b/builder/azure.py @@ -43,6 +43,15 @@ def _img_ver_show_cmd(image): return ['sig', 'image-version', 'show', '--only-show-errors', '-g', image['gallery']['resourceGroup'], '-r', image['gallery']['name'], '-i', image['name'], '-e', image['version'], '--subscription', image['gallery']['subscription']] +def increment_version(version): + parts = version.split('.') + parts = [int(part) for part in parts] + parts[-1] += 1 + parts = [str(part) for part in parts] + new_version = '.'.join(parts) + return new_version + + def get_latest_image_version(image): cmd = ['sig', 'image-version', 'list', '-g', image['gallery']['resourceGroup'], '-r', image['gallery']['name'], '-i', image['name'], '--subscription', image['gallery']['subscription']] @@ -50,8 +59,8 @@ def get_latest_image_version(image): if versions: latest_version = max(versions, key=lambda v: v['name']) - log.info(f'Latest version of image {image["name"]} is {latest_version}' ) - return latest_version + log.info(f'Latest version of image {image["name"]} is {latest_version['name']}' ) + return increment_version(latest_version['name']) else: log.warning(f'No versions found for image {image["name"]}') return image['version'] From e097f3a4318cce4a556f8339c7de36c900adb1f6 Mon Sep 17 00:00:00 2001 From: ivan luchyk Date: Wed, 19 Jun 2024 16:52:47 +0100 Subject: [PATCH 05/10] fix build --- builder/azure.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builder/azure.py b/builder/azure.py index 8d030445..07ed9718 100644 --- a/builder/azure.py +++ b/builder/azure.py @@ -59,8 +59,8 @@ def get_latest_image_version(image): if versions: latest_version = max(versions, key=lambda v: v['name']) - log.info(f'Latest version of image {image["name"]} is {latest_version['name']}' ) - return increment_version(latest_version['name']) + log.info(f'Latest version of image {image["name"]} is {latest_version["name"]}' ) + return increment_version(latest_version["name"]) else: log.warning(f'No versions found for image {image["name"]}') return image['version'] From b08475247d18506f5070e5028294bdbf2e26dc0d Mon Sep 17 00:00:00 2001 From: ivan luchyk Date: Wed, 19 Jun 2024 17:03:48 +0100 Subject: [PATCH 06/10] fix build --- builder/azure.py | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/builder/azure.py b/builder/azure.py index 07ed9718..c375e9d4 100644 --- a/builder/azure.py +++ b/builder/azure.py @@ -142,17 +142,8 @@ def ensure_image_def_version(image): log.info(f'Found existing image definition for {image_name}') log.info(f'Checking if image version {image_version} exists for {image_name}') - imgver = cli(_img_ver_show_cmd(image)) image['version'] = get_latest_image_version(image) - - if imgver: - log.info(f'Found existing image version {image_version} for {image_name}') - log.warning(f'{image_name} was not built because version {image_version} already exists. Please update the version number or delete the existing image version and try again.') - else: # image version does not exist, add it to the list of images to create - log.info(f'Image version {image_version} does not exist for {image_name}') - build = True - else: # image definition does not exist, create it and skip the version check log.info(f'Image definition does not exist for {image_name}') @@ -262,17 +253,8 @@ async def ensure_image_def_version_async(image): log.info(f'Found existing image definition for {image_name}') log.info(f'Checking if image version {image_version} exists for {image_name}') - imgver = await cli_async(_img_ver_show_cmd(image)) image['version'] = get_latest_image_version(image) - - if imgver: - log.info(f'Found existing image version {image_version} for {image_name}') - log.warning(f'{image_name} was not built because version {image_version} already exists. Please update the version number or delete the existing image version and try again.') - else: # image version does not exist, add it to the list of images to create - log.info(f'Image version {image_version} does not exist for {image_name}') - build = True - else: # image definition does not exist, create it and skip the version check log.info(f'Image definition does not exist for {image_name}') From c02347ce43fb09205b9a4e814e392ceb392a8d36 Mon Sep 17 00:00:00 2001 From: ivan luchyk Date: Fri, 21 Jun 2024 14:03:02 +0100 Subject: [PATCH 07/10] change image --- builder/templates/builder.bicep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/templates/builder.bicep b/builder/templates/builder.bicep index 2a128772..d4e10fe4 100644 --- a/builder/templates/builder.bicep +++ b/builder/templates/builder.bicep @@ -5,7 +5,7 @@ param location string = resourceGroup().location @description('Container image to deploy. Should be of the form repoName/imagename:tag for images stored in public Docker Hub, or a fully qualified URI for other registries.') -param container string = 'ghcr.io/azure/dev-box-images/builder' +param container string = 'gpdevimages.azurecr.io/devbox-builder/devbox-builder:latest' @secure() @description('The git repository that contains your image.yml and buiild scripts.') From 842a72877301857847106c6d8d2e45ef09edd5c4 Mon Sep 17 00:00:00 2001 From: ivan luchyk Date: Fri, 21 Jun 2024 14:16:05 +0100 Subject: [PATCH 08/10] test --- builder/templates/builder.bicep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/templates/builder.bicep b/builder/templates/builder.bicep index d4e10fe4..faffccf6 100644 --- a/builder/templates/builder.bicep +++ b/builder/templates/builder.bicep @@ -5,7 +5,7 @@ param location string = resourceGroup().location @description('Container image to deploy. Should be of the form repoName/imagename:tag for images stored in public Docker Hub, or a fully qualified URI for other registries.') -param container string = 'gpdevimages.azurecr.io/devbox-builder/devbox-builder:latest' +param container string = 'gpdevimages.azurecr.io/devbox-builder/devbox-builder' @secure() @description('The git repository that contains your image.yml and buiild scripts.') From a9e1d70f0b3c0262789fa026ed411e2275803748 Mon Sep 17 00:00:00 2001 From: ivan luchyk Date: Fri, 21 Jun 2024 15:21:14 +0100 Subject: [PATCH 09/10] test --- builder/Dockerfile | 11 ++++++++--- builder/templates/builder.bicep | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/builder/Dockerfile b/builder/Dockerfile index 0e62f080..d6df5291 100644 --- a/builder/Dockerfile +++ b/builder/Dockerfile @@ -1,7 +1,7 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. -FROM mcr.microsoft.com/azure-cli:latest +FROM ubuntu:latest WORKDIR / ARG IMAGE_VERSION @@ -35,7 +35,12 @@ LABEL maintainer="Microsoft" \ org.label-schema.docker.cmd="docker run ghcr.io/azure/dev-box-images/builder:$IMAGE_VERSION" # install packer -RUN apk add --no-cache packer --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community +RUN apt-get update && apt-get install -y curl unzip && \ + curl -o packer.zip https://releases.hashicorp.com/packer/1.7.8/packer_1.7.8_linux_amd64.zip && \ + unzip packer.zip && \ + mv packer /usr/local/bin/packer && \ + rm packer.zip && \ + apt-get clean COPY . /builder.d @@ -43,4 +48,4 @@ COPY . /builder.d STOPSIGNAL SIGTERM CMD [ "" ] -ENTRYPOINT [ "python", "/builder.d/builder.py" ] \ No newline at end of file +ENTRYPOINT [ "python3", "/builder.d/builder.py" ] diff --git a/builder/templates/builder.bicep b/builder/templates/builder.bicep index faffccf6..5a322c3a 100644 --- a/builder/templates/builder.bicep +++ b/builder/templates/builder.bicep @@ -5,7 +5,7 @@ param location string = resourceGroup().location @description('Container image to deploy. Should be of the form repoName/imagename:tag for images stored in public Docker Hub, or a fully qualified URI for other registries.') -param container string = 'gpdevimages.azurecr.io/devbox-builder/devbox-builder' +param container string = 'dockerdevbox.azurecr.io/devbox:latest' @secure() @description('The git repository that contains your image.yml and buiild scripts.') From 9c7801ceb2a4b163699ebf88a170ce927448e1f1 Mon Sep 17 00:00:00 2001 From: ivan luchyk Date: Sat, 22 Jun 2024 22:43:59 +0100 Subject: [PATCH 10/10] another test --- builder/Dockerfile | 17 +++++++---------- builder/templates/builder.bicep | 2 +- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/builder/Dockerfile b/builder/Dockerfile index d6df5291..f077d8c5 100644 --- a/builder/Dockerfile +++ b/builder/Dockerfile @@ -1,7 +1,7 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. -FROM ubuntu:latest +FROM mcr.microsoft.com/azure-cli:latest WORKDIR / ARG IMAGE_VERSION @@ -34,18 +34,15 @@ LABEL maintainer="Microsoft" \ org.label-schema.vcs-url="https://github.com/azure/dev-box-images.git" \ org.label-schema.docker.cmd="docker run ghcr.io/azure/dev-box-images/builder:$IMAGE_VERSION" -# install packer -RUN apt-get update && apt-get install -y curl unzip && \ - curl -o packer.zip https://releases.hashicorp.com/packer/1.7.8/packer_1.7.8_linux_amd64.zip && \ - unzip packer.zip && \ - mv packer /usr/local/bin/packer && \ - rm packer.zip && \ - apt-get clean - +# manually download and install packer +RUN wget https://releases.hashicorp.com/packer/1.7.10/packer_1.7.10_linux_amd64.zip -O /tmp/packer.zip && \ + unzip /tmp/packer.zip -d /usr/local/bin && \ + rm /tmp/packer.zip + COPY . /builder.d # Terminate container on stop STOPSIGNAL SIGTERM CMD [ "" ] -ENTRYPOINT [ "python3", "/builder.d/builder.py" ] +ENTRYPOINT [ "python", "/builder.d/builder.py" ] diff --git a/builder/templates/builder.bicep b/builder/templates/builder.bicep index 5a322c3a..e2efe022 100644 --- a/builder/templates/builder.bicep +++ b/builder/templates/builder.bicep @@ -5,7 +5,7 @@ param location string = resourceGroup().location @description('Container image to deploy. Should be of the form repoName/imagename:tag for images stored in public Docker Hub, or a fully qualified URI for other registries.') -param container string = 'dockerdevbox.azurecr.io/devbox:latest' +param container string = 'dockerdevbox.azurecr.io/dev/devbox:latest' @secure() @description('The git repository that contains your image.yml and buiild scripts.')