summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Petridis <jordan@centricular.com>2021-01-27 09:54:59 +0200
committerJordan Petridis <jordan@centricular.com>2021-02-25 04:25:25 +0200
commitbdbef0449c9c20b59c7421d58c80a37cb7ee8d15 (patch)
tree5a3e1b9ca2c7fabd897768ccc343995fe84abeac
parent8f0481f19a4b2f6847bf86a0003cd41ba7e7e67e (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.ps162
-rw-r--r--gitlab/ci_template.yml39
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
#