From cf7dd594f73efb75e0504abf001df7043cb3bbd3 Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Tue, 28 Jul 2020 14:55:02 -0400
Subject: [PATCH] Add files for CI

---
 .gitlab-ci.yml | 163 +++++++++++++++++++++++++++++++++++++++++++++++++
 Pipfile        |  14 +++++
 2 files changed, 177 insertions(+)
 create mode 100644 .gitlab-ci.yml
 create mode 100644 Pipfile

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 00000000000..7ad714419ec
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,163 @@
+stages:
+  - build
+  - deploy
+
+variables:
+  VIEWER_USE_CRASHPAD: "TRUE"
+  VIEWER_CRASHPAD_URL: $SENTRY_DSN
+
+.win_build: &win_build
+  stage: build
+  tags:
+    - autobuild
+    - windows
+  before_script:
+    - pipenv install
+  script:
+    - If ($env:VIEWER_CHANNEL_TYPE -eq 'Project') 
+      { 
+          $env:VIEWER_CHANNEL_CODENAME = $env:CI_COMMIT_REF_NAME[8..100] -join '' 
+      }
+    - pipenv run autobuild configure -c ReleaseOS -- -DUSE_FMODSTUDIO=ON -DUSE_NVAPI=ON -DUSE_LTO=ON -DVS_DISABLE_FATAL_WARNINGS=ON
+    - pipenv run autobuild build -c ReleaseOS --no-configure
+    - If ($env:VIEWER_USE_CRASHPAD -eq 'TRUE') {
+    - Push-Location .\build-vc-*\newview\Release\
+    - sentry-cli upload-dif --include-sources alchemy-bin.exe alchemy-bin.pdb crashpad_handler.exe crashpad_handler.pdb openjpeg.pdb openjpeg.dll fmod.dll libcrypto-1_1.dll libcrypto-1_1.pdb libssl-1_1.dll libssl-1_1.pdb libcrypto-1_1-x64.dll libcrypto-1_1-x64.pdb libssl-1_1-x64.dll libssl-1_1-x64.pdb vcruntime140.dll msvcp140.dll nghttp2.dll glod.dll
+    - Pop-Location }
+  artifacts:
+    name: "$env:CI_COMMIT_REF_NAME-$env:CI_COMMIT_SHORT_SHA"
+    expire_in: 2 week
+    paths:
+      - build-vc-*/newview/Release/build_data.json
+      - build-vc-*/newview/Release/alchemy-bin.pdb
+      - build-vc-*/newview/Release/Alchemy_*_Setup.exe
+      
+.beta_rules: &beta_rules
+  only:
+    - /^.*-beta$/
+  except:
+    - branches
+
+.release_rules: &release_rules
+  only:
+    - /^.*-release$/
+  except:
+    - branches
+
+build:master:windows32:
+  <<: *win_build
+  interruptible: true
+  variables:
+    AUTOBUILD_ADDRSIZE: 32
+    VIEWER_CHANNEL_TYPE: Test
+    VIEWER_USE_CRASHPAD: "FALSE"
+  only:
+    - schedules
+
+build:master:windows64:
+  <<: *win_build
+  interruptible: true
+  variables:
+    AUTOBUILD_ADDRSIZE: 64
+    VIEWER_CHANNEL_TYPE: Test
+    VIEWER_USE_CRASHPAD: "FALSE"
+  only:
+    - schedules
+
+build:project:windows32:
+  <<: *win_build
+  interruptible: true
+  variables:
+    AUTOBUILD_ADDRSIZE: 32
+    VIEWER_CHANNEL_TYPE: Project
+  only:
+    - /^project-.*$/
+
+build:project:windows64:
+  <<: *win_build
+  interruptible: true
+  variables:
+    AUTOBUILD_ADDRSIZE: 64
+    VIEWER_CHANNEL_TYPE: Project
+  only:
+    - /^project-.*$/
+
+build:beta:windows32:
+  <<: *win_build
+  variables:
+    AUTOBUILD_ADDRSIZE: 32
+    VIEWER_CHANNEL_TYPE: Beta
+  <<: *beta_rules
+
+build:beta:windows64:
+  <<: *win_build
+  variables:
+    AUTOBUILD_ADDRSIZE: 64
+    VIEWER_CHANNEL_TYPE: Beta
+  <<: *beta_rules
+
+build:release:windows32:
+  <<: *win_build
+  variables:
+    AUTOBUILD_ADDRSIZE: 32
+    VIEWER_CHANNEL_TYPE: Release
+  <<: *release_rules
+
+build:release:windows64:
+  <<: *win_build
+  variables:
+    AUTOBUILD_ADDRSIZE: 64
+    VIEWER_CHANNEL_TYPE: Release
+  <<: *release_rules
+
+.deploy_template: &deploy_template
+  stage: deploy
+  tags:
+    - autobuild
+    - windows
+  script:
+    - $BuildData = Get-Content .\build-vc-64\newview\Release\build_data.json | ConvertFrom-Json
+    - $BuildChannelVersion = $BuildData."Channel" + ' ' + $BuildData."Version"
+    - $UploadDestViewerDir = $BuildChannelVersion.ToLower().Replace(" ", "/")
+    - $UploadDestURL = "https://pkg.alchemyviewer.org/repository/viewer/${UploadDestViewerDir}"
+
+    - $UploadParams = @{ UseBasicParsing = $true;
+      Method = "PUT";
+      Headers = @{
+        ContentType = "application/x-executable";
+        Authorization = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$env:AUTOBUILD_HTTP_USER`:$env:AUTOBUILD_HTTP_PASS")))"; };
+      Verbose = $true; };
+
+    - Push-Location .\build-vc-32\newview\Release\
+    - $FileNameWin32 = Get-ChildItem -Path . -Name -Include Alchemy_*_Setup.exe
+    - Invoke-WebRequest @UploadParams -InFile .\$FileNameWin32 -Uri "${UploadDestURL}/${FileNameWin32}"
+    - Pop-Location
+
+    - Push-Location .\build-vc-64\newview\Release\
+    - $FileNameWin64 = Get-ChildItem -Path . -Name -Include Alchemy_*_Setup.exe
+    - Invoke-WebRequest @UploadParams -InFile .\$FileNameWin64 -Uri "${UploadDestURL}/${FileNameWin64}"
+    - Pop-Location
+    
+    - sentry-cli releases new $BuildChannelVersion
+    - sentry-cli releases set-commits --auto $BuildChannelVersion
+    - sentry-cli releases finalize $BuildChannelVersion
+  when: manual
+
+deploy_project:
+  <<: *deploy_template
+  environment:
+    name: qa
+  only:
+    - /^project-.*$/
+
+deploy_beta:
+  <<: *deploy_template
+  environment:
+    name: staging
+  <<: *beta_rules
+
+deploy_release:
+  <<: *deploy_template
+  environment:
+    name: production
+  <<: *release_rules
\ No newline at end of file
diff --git a/Pipfile b/Pipfile
new file mode 100644
index 00000000000..81e20cec2d5
--- /dev/null
+++ b/Pipfile
@@ -0,0 +1,14 @@
+[[source]]
+url = "https://pypi.org/simple"
+verify_ssl = true
+name = "pypi"
+
+[dev-packages]
+
+[packages]
+llbase = "*"
+certifi = "*"
+autobuild = {git = "https://git.alchemyviewer.org/alchemy/autobuild.git"}
+
+[requires]
+python_version = "2.7"
-- 
GitLab