From 4ab0df340b7b194597f9f6bfc8e5dcbbda2f1a5a Mon Sep 17 00:00:00 2001
From: librelois <elois@ifee.fr>
Date: Sun, 15 Jul 2018 16:23:58 +0200
Subject: [PATCH] [ci] add automatic windows build

---
 .gitlab-ci.yml                    | 20 ++++++-
 release/arch/win64/build-win64.sh | 90 +++++++++++++++++++++++++++++++
 2 files changed, 108 insertions(+), 2 deletions(-)
 create mode 100644 release/arch/win64/build-win64.sh

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 67ef629f..675b83f6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -117,7 +117,23 @@ pages:
   only:
     - dev
 
-package:test:linux-x64:
+package:test:win64:
+  tags:
+    - redshift-rust-win64
+  before_script:
+    - rustc --version && cargo --version
+  stage: package
+  script:
+    - bash "release/arch/win64/build-win64.sh" "$(date +%Y%m%d).$(date +%H%M).$(date +%S)"
+  artifacts:
+    paths:
+      - work/bin/
+    expire_in: 1 weeks
+  except:
+      - tags
+  when: manual
+
+package:test:linux64:
   <<: *rust_stable_env
   stage: package
   script:
@@ -134,7 +150,7 @@ package:test:linux-x64:
       - tags
   when: manual
 
-package:prod:linux-x64:
+package:prod:linux64:
   <<: *rust_stable_env
   stage: package
   script:
diff --git a/release/arch/win64/build-win64.sh b/release/arch/win64/build-win64.sh
new file mode 100644
index 00000000..40577674
--- /dev/null
+++ b/release/arch/win64/build-win64.sh
@@ -0,0 +1,90 @@
+#!/bin/bash
+
+if [[ -z "${1}" ]]; then
+	echo "Fatal: no version given to build script"
+	exit 1
+fi
+
+# ---------
+# Functions
+# ---------
+
+# Create description.
+# -
+# Parameters:
+# 1. Initial file name.
+# 2. Building type (either “desktop” or “server”).
+# 3. Category (OS, distribution).
+create_desc() {
+	cat >"${1}".desc <<-EOF
+	{
+	  "version": "${DURS_TAG}",
+	  "job": "${CI_JOB_ID}",
+	  "type": "${2^}",
+	  "category": "${3}",
+	  "arch": "x64"
+	}
+	EOF
+}
+
+# -----------
+# Prepare
+# -----------
+
+DURS_TAG="v${1}"
+DURS_VER=" ${1}"
+TARGET="x86_64-pc-windows-gnu"
+
+#rustup add target ${TARGET} || exit 1
+
+# -----------
+# Folders
+# -----------
+
+ROOT="${PWD}"
+WORK_NAME=work
+WORK="${ROOT}/${WORK_NAME}"
+DOWNLOADS="${WORK}/downloads"
+RELEASES="${WORK}/releases"
+BIN="${WORK}/bin"
+
+mkdir -p "${DOWNLOADS}" "${RELEASES}" "${BIN}" || exit 1
+rm -rf "${BIN}/"*.{deb,tar.gz}{,.desc} # Clean up
+
+# -----------
+# Downloads
+# -----------
+
+cd "${DOWNLOADS}"
+
+# -----------
+# Releases
+# -----------
+
+# Prepare sources
+mkdir -p "${RELEASES}/durs" || exit 1
+cp -r $(find "${ROOT}" -mindepth 1 -maxdepth 1 ! -name "${WORK_NAME}") "${RELEASES}/durs" || exit 1
+cd "${RELEASES}/durs"
+rm -Rf .gitignore .git || exit 1 # Remove git files
+
+# Build binary
+echo ">> Building binary..."
+cd "${ROOT}"
+cargo build --target=${TARGET} --release --no-default-features || exit 1
+
+mkdir -p "${RELEASES}/server_" || exit 1
+cp "${ROOT}/target/${TARGET}/release/durs.exe" "${RELEASES}/server_/" || exit 1
+#cp "${ROOT}/target/${TARGET}/release/durs" "${RELEASES}/desktop_" || exit 1
+
+# Copy logo
+#cp "${ROOT}/images/duniter-rs.png" "${RELEASES}/server_/" || exit 1
+#cp "${ROOT}/images/duniter-rs.png" "${RELEASES}/desktop_" || exit 1
+
+
+# ---------------
+# Build .zip
+# ---------------
+
+cd "${RELEASES}/server_"
+zip "${BIN}/duniter-rust-server-${DURS_TAG}-windows-x64.zip" * || exit 1
+create_desc "${BIN}/duniter-rust-server-${DURS_TAG}-windows-x64.zip" "Server" "Windows"
-- 
GitLab