From 5c06582962a6364aa01c77e50443f4579da95f71 Mon Sep 17 00:00:00 2001
From: Jono Wenger <jono@elixxir.io>
Date: Thu, 26 Jan 2023 10:13:58 -0800
Subject: [PATCH] Update .gitlab-ci.yml

---
 .gitlab-ci.yml | 106 ++++++++++++++++++++++++++++++++++---------------
 1 file changed, 74 insertions(+), 32 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e0e13707..43e8c1c9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -23,22 +23,13 @@ stages:
   - doc-update
   - version_check
 
-build:
-  stage: build
+go-test:
+  stage: test
   except:
     - tags
   script:
     - go mod vendor -v
-    - mkdir -p release
-    - GOOS=js GOARCH=wasm go build -ldflags '-w -s' -o release/xxdk.wasm main.go
-    - GOOS=js GOARCH=wasm go build -ldflags '-w -s' -trimpath -o release/xxdk-channelsIndexedDkWorker.wasm ./indexedDb/impl/channels/...
-    - GOOS=js GOARCH=wasm go build -ldflags '-w -s' -trimpath -o release/xxdk-dmIndexedDkWorker.wasm ./indexedDb/impl/dm/...
-    - cp wasm_exec.js release/
-    - cp indexedDb/impl/channels/channelsIndexedDbWorker.js release/
-    - cp indexedDb/impl/dm/dmIndexedDbWorker.js release/
-  artifacts:
-    paths:
-      - release/
+    - go test ./... -v
 
 wasm-test:
   stage: test
@@ -47,35 +38,42 @@ wasm-test:
   script:
     - export PATH=/root/go/bin:$PATH
     - echo > utils/utils_js.s
-    - env
-    # - go install github.com/agnivade/wasmbrowsertest@latest
-    # - mv ~/go/bin/go_js_wasm_exec ~/go/bin/go_js_wasm_exec.old
-    # - ln -s ~/go/bin/wasmbrowsertest ~/go/bin/go_js_wasm_exec
     - go mod vendor
     - unset SSH_PRIVATE_KEY
     - unset $(env | grep '=' | awk -F= '{print $1}' | grep -v PATH | grep -v GO | grep -v HOME)
-    - GOOS=js GOARCH=wasm go test ./indexedDb/... -v
     - GOOS=js GOARCH=wasm go test ./... -v
 
-go-test:
-  stage: test
+build:
+  stage: build
   except:
     - tags
   script:
     - go mod vendor -v
-    - go test ./... -v
+    - mkdir -p release
+    - GOOS=js GOARCH=wasm go build -ldflags '-w -s' -trimpath -o release/xxdk.wasm main.go
+    - GOOS=js GOARCH=wasm go build -ldflags '-w -s' -trimpath -o release/xxdk-channelsIndexedDkWorker.wasm ./indexedDb/impl/channels/...
+    - GOOS=js GOARCH=wasm go build -ldflags '-w -s' -trimpath -o release/xxdk-dmIndexedDkWorker.wasm ./indexedDb/impl/dm/...
+    - cp wasm_exec.js release/
+    - cp indexedDb/impl/channels/channelsIndexedDbWorker.js release/
+    - cp indexedDb/impl/dm/dmIndexedDbWorker.js release/
+  artifacts:
+    paths:
+      - release/
 
-version_check:
-  stage: version_check
+build-workers:
+  stage: build
   except:
     - tags
-  only:
-    - master
-  image: $DOCKER_IMAGE
   script:
-    - GITTAG=$(git describe --tags)
-    - CODEVERS=$(cat storage/version.go | grep "const SEMVER =" | cut -d ' ' -f4 | tr -d '"')
-    - if [[ $GITTAG != $CODEVERS ]]; then echo "VERSION NUMBER BAD $GITTAG != $CODEVERS"; exit -1; fi
+    - go mod vendor -v
+    - mkdir -p release
+    - GOOS=js GOARCH=wasm go build -ldflags '-w -s' -trimpath -o release/xxdk-channelsIndexedDkWorker.wasm ./indexedDb/impl/channels/...
+    - GOOS=js GOARCH=wasm go build -ldflags '-w -s' -trimpath -o release/xxdk-dmIndexedDkWorker.wasm ./indexedDb/impl/dm/...
+    - cp indexedDb/impl/channels/channelsIndexedDbWorker.js release/
+    - cp indexedDb/impl/dm/dmIndexedDbWorker.js release/
+  artifacts:
+    paths:
+      - release/
 
 tag:
   stage: build
@@ -88,12 +86,44 @@ tag:
     - git tag $(sha256sum release/xxdk.wasm | awk '{ print $1 }') -f
     - git push origin_tags -f --tags
 
+combine_artefacts:
+  stage: combine_artefacts
+  except:
+    - tags
+  image: $DOCKER_IMAGE
+  script:
+    - echo $CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/pipelines/$CI_PIPELINE_ID/jobs
+    - 'PIPELINE_JOBS=$(curl --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" $CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/pipelines/$CI_PIPELINE_ID/jobs)'
+    - echo $PIPELINE_JOBS
+    - BUILD_JOB_JSON=$(echo $PIPELINE_JOBS | jq '.[] | select(.name=="build")')
+    - BUILD_WORKERS_JOB_JSON=$(echo $PIPELINE_JOBS | jq '.[] | select(.name=="build-workers")')
+
+    - BUILD_JOB_ID=$(echo $BUILD_JOB_JSON | jq -r '.["id"]')
+    - BUILD_WORKERS_JOB_ID=$(echo $BUILD_WORKERS_JOB_JSON | jq -r '.["id"]')
+
+    - rm -rf release
+    - mkdir -p release
+
+    - 'curl --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" --output release/wasm_exec.js $CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/jobs/$BUILD_JOB_ID/artifacts/release/wasm_exec.js'
+    - 'curl --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" --output release/xxdk.wasm $CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/jobs/$BUILD_JOB_ID/artifacts/release/xxdk.wasm'
+    - 'curl --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" --output release/xxdk-channelsIndexedDkWorker.wasm $CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/jobs/$BUILD_WORKERS_JOB_ID/artifacts/release/xxdk-channelsIndexedDkWorker.json'
+    - 'curl --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" --output release/xxdk-dmIndexedDkWorker.wasm $CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/jobs/$BUILD_WORKERS_JOB_ID/artifacts/release/xxdk-dmIndexedDkWorker.json'
+    - 'curl --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" --output release/channelsIndexedDbWorker.js $CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/jobs/$BUILD_WORKERS_JOB_ID/artifacts/release/channelsIndexedDbWorker.js'
+    - 'curl --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" --output release/dmIndexedDbWorker.js $CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/jobs/$BUILD_WORKERS_JOB_ID/artifacts/release/dmIndexedDbWorker.js'
+
+    - ls release
+  artifacts:
+    paths:
+      - release/
+    expose_as: "release"
+
 # This pipeline job will attempt to have pkg.go.dev update docs for xxdk-wasm.
 #
-# pkg.go.dev relies on the proxy.golang.org service (go module cache/proxy) to discover versions of
-# Go modules to make docs of. The proxy keeps a list of all known versions of Go modules. The go
-# mod proxy does cache pulls for about 30 minutes, so if quickly successive commits are done in
-# master/release, this will fail to pull the latest client, and the docs will not update.
+# pkg.go.dev relies on the proxy.golang.org service (go module cache/proxy) to
+# discover versions of Go modules to make docs of. The proxy keeps a list of all
+# known versions of Go modules. The go mod proxy does cache pulls for about 30
+# minutes, so if quickly successive commits are done in master/release, this
+# will fail to pull the latest client, and the docs will not update.
 doc-update:
   stage: doc-update
   except:
@@ -105,3 +135,15 @@ doc-update:
   only:
     - release
     - master
+
+version_check:
+  stage: version_check
+  except:
+    - tags
+  only:
+    - master
+  image: $DOCKER_IMAGE
+  script:
+    - GITTAG=$(git describe --tags)
+    - CODEVERS=$(cat storage/version.go | grep "const SEMVER =" | cut -d ' ' -f4 | tr -d '"')
+    - if [[ $GITTAG != $CODEVERS ]]; then echo "VERSION NUMBER BAD $GITTAG != $CODEVERS"; exit -1; fi
\ No newline at end of file
-- 
GitLab