From f936876f9405642936c488353427436d0e34eeb2 Mon Sep 17 00:00:00 2001
From: ZettaScript <contact@zettascript.org>
Date: Sun, 8 Sep 2019 19:36:38 +0200
Subject: [PATCH] [ci] build: add lin64 archlinux package

Closes #169
---
 .gitlab-ci.yml                                | 56 +++++++++++++-
 bin/dunitrust-server/Cargo.toml               |  5 +-
 release/arch/linux-x64/build-arch.sh          | 74 +++++++++++++++++++
 .../{build-lin-x64.sh => build-deb.sh}        |  2 +-
 4 files changed, 133 insertions(+), 4 deletions(-)
 create mode 100644 release/arch/linux-x64/build-arch.sh
 rename release/arch/linux-x64/{build-lin-x64.sh => build-deb.sh} (99%)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b8cb034d..3dd9f8f8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -58,6 +58,16 @@ skip_ci:
     - rustup show
     - rustc --version && cargo --version
 
+.rust_stable_lin64_arch:
+  extends: .ci_conditions
+  image: registry.duniter.org/docker/rust/arch-builder:latest
+  tags:
+    - redshift-docker-runner
+  before_script:
+    - export PATH="$HOME/.cargo/bin:$PATH"
+    - rustup show
+    - rustc --version && cargo --version
+
 .rust_stable_armv7:
   extends: .ci_conditions
   image: registry.duniter.org/docker/rust/armv7-builder:latest
@@ -163,7 +173,7 @@ publish:crate:
     - cargo login $DUNITER_CRATES_TOKEN
     - cargo publish
 
-package:test:linux64:
+package:test:lin64:deb:
   extends: .rust_stable_lin64
   stage: package
   when: manual
@@ -171,7 +181,22 @@ package:test:linux64:
     refs:
       - tags
   script:
-    - bash "release/arch/linux-x64/build-lin-x64.sh" "$(date +%Y%m%d).$(date +%H%M).$(date +%S)"
+    - bash "release/arch/linux-x64/build-deb.sh" "$(date +%Y%m%d).$(date +%H%M).$(date +%S)"
+  artifacts:
+    paths:
+      - work/bin/
+    expire_in: 1 weeks
+
+package:test:lin64:arch:
+  extends: .rust_stable_lin64_arch
+  stage: package
+  when: manual
+  except:
+    refs:
+      - tags
+  script:
+    - sudo chown -R builduser /builds/nodes/rust/duniter-rs/bin/dunitrust-server/src
+    - sudo -u builduser -n bash "release/arch/linux-x64/build-arch.sh" "$(date +%Y%m%d).$(date +%H%M).$(date +%S)"
   artifacts:
     paths:
       - work/bin/
@@ -258,6 +283,33 @@ package:prod:linux64:
       - work/bin/
     expire_in: 2 weeks
 
+package:prod:lin64:deb:
+  extends: .rust_stable_lin64
+  stage: package
+  when: manual
+  only:
+    - tags
+  script:
+    - bash "release/arch/linux-x64/build-deb.sh" "${CI_COMMIT_TAG#v}"
+  artifacts:
+    paths:
+      - work/bin/
+    expire_in: 2 weeks
+
+package:prod:lin64:arch:
+  extends: .rust_stable_lin64_arch
+  stage: package
+  when: manual
+  only:
+    - tags
+  script:
+    - sudo chown -R builduser /builds/nodes/rust/duniter-rs/bin/dunitrust-server/src
+    - sudo -u builduser -n bash "release/arch/linux-x64/build-arch.sh" "${CI_COMMIT_TAG#v}"
+  artifacts:
+    paths:
+      - work/bin/
+    expire_in: 2 weeks
+
 package:prod:docker:
   stage: package
   only:
diff --git a/bin/dunitrust-server/Cargo.toml b/bin/dunitrust-server/Cargo.toml
index 019b659e..0049af47 100644
--- a/bin/dunitrust-server/Cargo.toml
+++ b/bin/dunitrust-server/Cargo.toml
@@ -51,4 +51,7 @@ assets = [
     ["../../target/armv7-unknown-linux-gnueabihf/release/dunitrust", "usr/bin/", "755"],
     ["../../images/duniter-rs.png", "usr/share/dunitrust/", "644"],
 ]
-features = ["ssl"]
\ No newline at end of file
+features = ["ssl"]
+
+[package.metadata.arch]
+arch = ["x86_64"]
\ No newline at end of file
diff --git a/release/arch/linux-x64/build-arch.sh b/release/arch/linux-x64/build-arch.sh
new file mode 100644
index 00000000..326d139f
--- /dev/null
+++ b/release/arch/linux-x64/build-arch.sh
@@ -0,0 +1,74 @@
+#!/bin/bash
+
+# -------------
+# Check params
+# -------------
+
+if [[ -z "${1}" ]]; then
+	echo "Fatal: no version given to build script"
+	exit 1
+fi
+
+# -----------
+# Constants
+# -----------
+
+DURS_TAG="v${1}"
+DURS_DEB_VER=" ${1}"
+
+ROOT="${PWD}"
+WORK_NAME=work
+WORK="${ROOT}/${WORK_NAME}"
+RELEASES="${WORK}/releases"
+BIN="${WORK}/bin"
+
+# ---------
+# 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
+}
+
+# ArchLinux package building.
+# -
+# Parameters:
+# 1. Building type (either “desktop” or “server”).
+build_arch_pack() {
+	cd "${ROOT}/bin/dunitrust-${1}"
+	cargo-arch arch --manifest-path "${ROOT}/bin/dunitrust-${1}"
+	mv dunitrust-*.pkg.tar.xz "${BIN}/dunitrust-${1}-${DURS_TAG}-archlinux-x64.pkg.tar.xz"
+	cd "${ROOT}"
+	create_desc "${BIN}/dunitrust-${1}-${DURS_TAG}-archlinux-x64.pkg.tar.xz" "${1}" "Linux (ArchLinux)"
+}
+
+# ------------
+# BEGIN SCRIPT
+# ------------
+
+# Prepare
+mkdir -p "${RELEASES}" "${BIN}" || exit 1
+#rustup add target ${TARGET} || exit 1
+
+# Clean up
+rm -rf "${BIN}/"*.pkg.tar.xz{,.desc}
+
+# ---------------------
+# Build ArchLinux packages
+# ---------------------
+
+build_arch_pack server
diff --git a/release/arch/linux-x64/build-lin-x64.sh b/release/arch/linux-x64/build-deb.sh
similarity index 99%
rename from release/arch/linux-x64/build-lin-x64.sh
rename to release/arch/linux-x64/build-deb.sh
index a1d32649..f23aa062 100644
--- a/release/arch/linux-x64/build-lin-x64.sh
+++ b/release/arch/linux-x64/build-deb.sh
@@ -63,7 +63,7 @@ build_deb_pack() {
 }
 
 # ------------
-# BEGIn SCRIPT
+# BEGIN SCRIPT
 # ------------
 
 # Prepare
-- 
GitLab