diff options
author | Jordan Petridis <jordan@centricular.com> | 2021-01-27 09:54:59 +0200 |
---|---|---|
committer | Jordan Petridis <jordan@centricular.com> | 2021-02-25 04:25:25 +0200 |
commit | bdbef0449c9c20b59c7421d58c80a37cb7ee8d15 (patch) | |
tree | 5a3e1b9ca2c7fabd897768ccc343995fe84abeac | |
parent | 8f0481f19a4b2f6847bf86a0003cd41ba7e7e67e (diff) |
ci_template: build windows image in the ci
Build the images in the ci runners like we do,
for the linux containers.
Kudos to mesa for the powershell script that
reimplements the ci-templates behavior.
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4304
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-ci/-/merge_requests/392>
-rw-r--r-- | docker/windows/container.ps1 | 62 | ||||
-rw-r--r-- | gitlab/ci_template.yml | 39 |
2 files changed, 99 insertions, 2 deletions
diff --git a/docker/windows/container.ps1 b/docker/windows/container.ps1 new file mode 100644 index 0000000..fac0087 --- /dev/null +++ b/docker/windows/container.ps1 @@ -0,0 +1,62 @@ +# Copied from mesa, big kudos +# +# https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/.gitlab-ci/windows/mesa_container.ps1 +# https://gitlab.freedesktop.org/mesa/mesa/-/blob/34e3e164936d1d3cef267da7780e87f062fedf39/.gitlab-ci/windows/mesa_container.ps1 + +# Implements the equivalent of ci-templates container-ifnot-exists, using +# Docker directly as we don't have buildah/podman/skopeo available under +# Windows, nor can we execute Docker-in-Docker +$registry_uri = $args[0] +$registry_username = $args[1] +$registry_password = $args[2] +$registry_user_image = $args[3] +$registry_central_image = $args[4] +$dockerfile = $args[5] + +Set-Location -Path ".\docker\windows" + +docker --config "windows-docker.conf" login -u "$registry_username" -p "$registry_password" "$registry_uri" +if (!$?) { + Write-Host "docker login failed to $registry_uri" + Exit 1 +} + +# if the image already exists, don't rebuild it +docker --config "windows-docker.conf" pull "$registry_user_image" +if ($?) { + Write-Host "User image $registry_user_image already exists; not rebuilding" + docker --config "windows-docker.conf" logout "$registry_uri" + Exit 0 +} + +# if the image already exists upstream, copy it +docker --config "windows-docker.conf" pull "$registry_central_image" +if ($?) { + Write-Host "Copying central image $registry_central_image to user image $registry_user_image" + docker --config "windows-docker.conf" tag "$registry_central_image" "$registry_user_image" + docker --config "windows-docker.conf" push "$registry_user_image" + $pushstatus = $? + docker --config "windows-docker.conf" logout "$registry_uri" + if (!$pushstatus) { + Write-Host "Pushing image to $registry_user_image failed" + Exit 1 + } + Exit 0 +} + +Write-Host "No image found at $registry_user_image or $registry_central_image; rebuilding" +docker --config "windows-docker.conf" build --no-cache -t "$registry_user_image" -f "$dockerfile" . +if (!$?) { + Write-Host "Container build failed" + docker --config "windows-docker.conf" logout "$registry_uri" + Exit 1 +} +Get-Date + +docker --config "windows-docker.conf" push "$registry_user_image" +$pushstatus = $? +docker --config "windows-docker.conf" logout "$registry_uri" +if (!$pushstatus) { + Write-Host "Pushing image to $registry_user_image failed" + Exit 1 +} diff --git a/gitlab/ci_template.yml b/gitlab/ci_template.yml index bfc9044..25765d0 100644 --- a/gitlab/ci_template.yml +++ b/gitlab/ci_template.yml @@ -27,6 +27,7 @@ variables: MANIFEST_TAG: '2020-10-22.0' TEST_MANIFEST_TAG: '2020-10-22.0' INDENT_TAG: '2020-10-22.0' + WINDOWS_TAG: "2021-02-24.0" GST_UPSTREAM_REPO: 'gstreamer/gst-ci' @@ -36,6 +37,7 @@ variables: MANIFEST_AMD64_SUFFIX: 'amd64/build-manifest' TEST_MANIFEST_AMD64_SUFFIX: 'amd64/test-manifest' INDENT_AMD64_SUFFIX: 'amd64/gst-indent' + WINDOWS_AMD64_SUFFIX: 'amd64/windows' FEDORA_IMAGE: "$CI_REGISTRY_IMAGE/$FEDORA_AMD64_SUFFIX:$FEDORA_TAG-$GST_UPSTREAM_BRANCH" FEDORA_DOCS_IMAGE: "registry.freedesktop.org/gstreamer/gst-ci/amd64/fedora:2020-07-03.0-master" @@ -44,11 +46,14 @@ variables: MANIFEST_IMAGE: "$CI_REGISTRY_IMAGE/$MANIFEST_AMD64_SUFFIX:$MANIFEST_TAG-$GST_UPSTREAM_BRANCH" TEST_MANIFEST_IMAGE: "$CI_REGISTRY_IMAGE/$TEST_MANIFEST_AMD64_SUFFIX:$TEST_MANIFEST_TAG-$GST_UPSTREAM_BRANCH" INDENT_IMAGE: "$CI_REGISTRY_IMAGE/$INDENT_AMD64_SUFFIX:$INDENT_TAG-$GST_UPSTREAM_BRANCH" - - WINDOWS_IMAGE: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/windows:v13-master' + WINDOWS_IMAGE: "$CI_REGISTRY_IMAGE/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH" + WINDOWS_UPSTREAM_IMAGE: "$CI_REGISTRY/$GST_UPSTREAM_REPO/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH" # Can't use $CI_* variables since we use this template in all repos, not just gst-ci CERBERO_SCRIPT_URL: "https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/${GST_UPSTREAM_BRANCH}/gitlab/cerbero_setup.sh" + # FIXME: fix the file path url to point to the upstram once merged + # WINDOWS_CONTAINER_SCRIPT_URL: "https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/${GST_UPSTREAM_BRANCH}/docker/windows/container.ps1" + WINDOWS_CONTAINER_SCRIPT_URL: "https://gitlab.freedesktop.org/alatiera/gst-ci/raw/alatiera/windows-build-redux/docker/windows/container.ps1" GIT_STRATEGY: none MESON_BUILDTYPE_ARGS: --default-library=both @@ -327,6 +332,36 @@ gst-indent amd64 docker: DOCKERFILE: "docker/indent/Dockerfile" extends: .base +windows amd64 docker: + stage: "build docker" + variables: + GIT_STRATEGY: fetch + REPO_SUFFIX: "$WINDOWS_AMD64_SUFFIX" + TAG: "$WINDOWS_TAG-$GST_UPSTREAM_BRANCH" + + # Unlike the buildah/linux jobs, this file + # needs to be relative to docker/windows/ subdir + # as it makes life easier in the powershell script + # + # We also don't need a CONTEXT_DIR var as its also + # hardcoded to be docker/windows/ + DOCKERFILE: "Dockerfile" + tags: + - windows + - shell + - "1809" + script: + - $env:WINDOWS_CONTAINER_SCRIPT_PATH = "$env:CI_PROJECT_DIR\container.ps1" + - echo "Fetching $env:WINDOWS_CONTAINER_SCRIPT_URL" + - Invoke-WebRequest -Uri $env:WINDOWS_CONTAINER_SCRIPT_URL -OutFile $env:WINDOWS_CONTAINER_SCRIPT_PATH + + - "& $env:WINDOWS_CONTAINER_SCRIPT_PATH $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $WINDOWS_IMAGE $WINDOWS_UPSTREAM_IMAGE $DOCKERFILE" + - | + if (!($?)) { + echo "Failed to build the image" + Exit 1 + } + # # Job to create the manifest.xml to used for our builds # |