From 918cb6fba26c83fdbcb4819c42800af8d3ea6f68 Mon Sep 17 00:00:00 2001
From: Eric Timmons <etimmons@mit.edu>
Date: Tue, 3 Nov 2020 17:00:25 -0500
Subject: [PATCH] Add windows CI jobs

---
 .gitlab-ci.yml | 112 +++++++++++++++++++++++++++++++++++++------------
 1 file changed, 86 insertions(+), 26 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b9e659a..aa21a5f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,16 +2,35 @@ include:
   - template: 'Workflows/MergeRequest-Pipelines.gitlab-ci.yml'
 
 stages:
+  - fixup manifest
   - build
   - push
   - put shared
   - readme
 
-# Set these vars:
-# - CANONICAL_NAMESPACE
-# - CL_DOCKER_IMAGES_AMD64
-# - CL_DOCKER_IMAGES_ARM64V8
-# - CL_DOCKER_IMAGES_ARM32V7
+variables:
+  CANONICAL_NAMESPACE: daewok
+  CL_DOCKER_IMAGES_AMD64: "1"
+  CL_DOCKER_IMAGES_ARM64V8: "1"
+  CL_DOCKER_IMAGES_WINAMD64: "1"
+
+##############################################################################
+# Fixup manifest
+
+Fixup manifest:
+  image: alpine:latest
+  stage: fixup manifest
+  script:
+    - mkdir -p build
+    - |
+      echo "GitCommit: $CI_COMMIT_SHA" > "build/$CI_PROJECT_NAME"
+    - |
+      echo "GitFetch: refs/heads/$CI_COMMIT_REF_NAME" >> "build/$CI_PROJECT_NAME"
+    - cat "$CI_PROJECT_NAME" >> "build/$CI_PROJECT_NAME"
+  artifacts:
+    paths:
+      - build/
+
 
 ##############################################################################
 # Build
@@ -26,13 +45,7 @@ stages:
   script:
     - docker info
     - mkdir -p cache
-    - mv "$CI_PROJECT_NAME" "$CI_PROJECT_NAME.tmp"
-    - |
-      echo "GitCommit: $CI_COMMIT_SHA" > "$CI_PROJECT_NAME"
-    - |
-      echo "GitFetch: refs/heads/$CI_COMMIT_REF_NAME" >> "$CI_PROJECT_NAME"
-    - cat "$CI_PROJECT_NAME.tmp" >> "$CI_PROJECT_NAME"
-    - rm "$CI_PROJECT_NAME.tmp"
+    - cp "build/$CI_PROJECT_NAME" "$CI_PROJECT_NAME"
     - |
       parents="$(bashbrew cat --format '{{- range $.Entries -}}
                                           {{- if not ($.SkipConstraints .) -}}
@@ -56,6 +69,34 @@ stages:
       - cache
     key: $ARCH
 
+.Bashbrew build win:
+  stage: build
+  variables:
+    BASHBREW_NAMESPACE: $CANONICAL_NAMESPACE
+    BASHBREW_LIBRARY: $CI_PROJECT_DIR
+    BASHBREW_CACHE: $CI_PROJECT_DIR/cache/bashbrew
+    BASHBREW_DEBUG: "true"
+    ARCH: winamd64
+    BASHBREW_ARCH: windows-amd64
+    PARENT_IMAGES: "openjdk:15-windowsservercore-1809;openjdk:11-windowsservercore-1809;openjdk:8-windowsservercore-1809;openjdk:15-windowsservercore-ltsc2016;openjdk:11-windowsservercore-ltsc2016;openjdk:8-windowsservercore-ltsc2016"
+  script:
+    - docker info
+    - mkdir -p cache
+    - cp "build/$CI_PROJECT_NAME" "$CI_PROJECT_NAME"
+    # Make the user specify the parent images. I don't feel like figuring out
+    # how to automatically figure them out using powershell.
+    - $parentArray = $PARENT_IMAGES.split(";")
+    - foreach ($parent in $parentArray){ docker pull $parent }
+    - bashbrew build $CI_PROJECT_NAME
+    - docker images
+    - bashbrew tag --target-namespace=$CANONICAL_NAMESPACE$ARCH $CI_PROJECT_NAME
+  cache:
+    paths:
+      - cache
+    key: $ARCH
+  tags:
+    - bashbrew-winamd64
+
 Bashbrew build - amd64:
   extends: .Bashbrew build Linux
   variables:
@@ -89,6 +130,12 @@ Bashbrew build - arm32v7:
   tags:
     - bashbrew-arm32v7
 
+Bashbrew build - winamd64:
+  extends: .Bashbrew build win
+  rules:
+    - if: $CL_DOCKER_IMAGES_WINAMD64
+
+
 ##############################################################################
 # Push
 
@@ -102,19 +149,33 @@ Bashbrew build - arm32v7:
   script:
     - docker info
     - mkdir -p cache
-    - mv "$CI_PROJECT_NAME" "$CI_PROJECT_NAME.tmp"
-    - |
-      echo "GitCommit: $CI_COMMIT_SHA" > "$CI_PROJECT_NAME"
-    - |
-      echo "GitFetch: refs/heads/$CI_COMMIT_REF_NAME" >> "$CI_PROJECT_NAME"
-    - cat "$CI_PROJECT_NAME.tmp" >> "$CI_PROJECT_NAME"
-    - rm "$CI_PROJECT_NAME.tmp"
+    - cp "build/$CI_PROJECT_NAME" "$CI_PROJECT_NAME"
     - retry -t 3 -d 60 -- bashbrew --namespace=$CANONICAL_NAMESPACE$ARCH push $CI_PROJECT_NAME
   cache:
     paths:
       - cache
     key: $ARCH
 
+.Bashbrew push win:
+  stage: Push
+  variables:
+    BASHBREW_NAMESPACE: $CANONICAL_NAMESPACE
+    BASHBREW_LIBRARY: $CI_PROJECT_DIR
+    BASHBREW_CACHE: $CI_PROJECT_DIR/cache/bashbrew
+    BASHBREW_DEBUG: "true"
+    ARCH: winamd64
+    BASHBREW_ARCH: windows-amd64
+  script:
+    - docker info
+    - mkdir -p cache
+    - bashbrew --namespace=$CANONICAL_NAMESPACE$ARCH push $REPO
+  cache:
+    paths:
+      - cache
+    key: $ARCH
+  tags:
+    - bashbrew-winamd64
+
 Bashbrew push - amd64:
   extends: .Bashbrew push Linux
   variables:
@@ -148,6 +209,11 @@ Bashbrew push - arm32v7:
   tags:
     - bashbrew-arm32v7
 
+Bashbrew push - winamd64:
+  extends: .Bashbrew push win
+  rules:
+    - if: $CL_DOCKER_IMAGES_WINAMD64
+
 ##############################################################################
 # Put shared
 
@@ -161,13 +227,7 @@ Bashbrew put-shared:
   script:
     - docker info
     - mkdir -p cache
-    - mv "$CI_PROJECT_NAME" "$CI_PROJECT_NAME.tmp"
-    - |
-      echo "GitCommit: $CI_COMMIT_SHA" > "$CI_PROJECT_NAME"
-    - |
-      echo "GitFetch: refs/heads/$CI_COMMIT_REF_NAME" >> "$CI_PROJECT_NAME"
-    - cat "$CI_PROJECT_NAME.tmp" >> "$CI_PROJECT_NAME"
-    - rm "$CI_PROJECT_NAME.tmp"
+    - cp "build/$CI_PROJECT_NAME" "$CI_PROJECT_NAME"
     - retry -t 3 -d 60 -- bashbrew --arch-namespace amd64=${CANONICAL_NAMESPACE}amd64 --arch-namespace arm32v7=${CANONICAL_NAMESPACE}arm32v7 --arch-namespace arm64v8=${CANONICAL_NAMESPACE}arm64v8 --arch-namespace windows-amd64=${CANONICAL_NAMESPACE}winamd64 put-shared "$CI_PROJECT_NAME"
   tags:
     - bashbrew-amd64
-- 
GitLab