From 5d6ae31ee9ebf791f6fb54ff31580cef9eca24fe Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Wed, 13 Sep 2023 09:37:49 +0200
Subject: [PATCH] ci: Refactoring CI pipeline.

---
 .gitlab-ci.yml      | 286 ++++++++++++++++++++++++++++++--------------
 packages/pamhyr.nsi |   6 +-
 2 files changed, 197 insertions(+), 95 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 150f5c0a..8049808b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -15,96 +15,55 @@
 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 stages:
+  - downloads
   - build
   - test
   - package
   - release
 
-#########
-# BUILD #
-#########
+#############
+# DOWNLOADS #
+#############
 
-build-mage-linux:
-  stage: build
+dl-mage-linux:
+  stage: downloads
   tags:
     - linux
   rules:
-    - if: $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
+    - if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
   script:
     - curl -L -o mage.tgz https://gitlab.irstea.fr/jean-baptiste.faure/mage/-/releases/Test6/downloads/packages/mage_linux.tgz
-    - mkdir -p mage
-    - cd mage
+    - mkdir -p mage-linux
+    - cd mage-linux
     - tar xvf ../mage.tgz
   artifacts:
     paths:
-      - mage/mage
-      - mage/mage_extraire
-      - mage/mailleurPF
-
-# build-mage-linux:
-#   stage: build
-#   tags:
-#     - linux
-#   rules:
-#     - if: $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
-#   variables:
-#     GIT_SUBMODULE_STRATEGY: recursive
-#     GIT_SUBMODULE_DEPTH: 20
-#   script:
-#     - cd mage/src/
-#     - mkdir -p build
-#     - cd build
-#     - cmake ..
-#     - make
-#   artifacts:
-#     paths:
-#       - mage/src/build/mage
-#       - mage/src/build/mage_extraire
-#       - mage/src/build/mailleurPF
-
-build-mage-windows:
-  stage: build
+      - mage-linux/mage
+      - mage-linux/mage_extraire
+      - mage-linux/mailleurPF
+
+dl-mage-windows:
+  stage: downloads
   tags:
     - linux
   rules:
-    - if: $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
+    - if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
   script:
     - curl -L -o mage.tgz https://gitlab.irstea.fr/jean-baptiste.faure/mage/-/releases/Test6/downloads/packages/mage_windows.tgz
-    - mkdir -p mage
-    - cd mage
+    - mkdir -p mage-windows
+    - cd mage-windows
     - tar xvf ../mage.tgz
   artifacts:
     paths:
-      - mage/mage.exe
-      - mage/mage_extraire.exe
-      - mage/mailleurPF.exe
-
-# build-mage-windows:
-#   stage: build
-#   tags:
-#     - wine
-#   rules:
-#     - if: $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
-#   variables:
-#     GIT_SUBMODULE_STRATEGY: recursive
-#     GIT_SUBMODULE_DEPTH: 20
-#   script:
-#     - cd mage/src/
-#     - sed s/add_compile_definitions(win)/add_compile_definitions(windows)/ CMakeLists.txt > __tmp__
-#     - echo set(CMAKE_Fortran_COMPILER "C:/Program\ Files/gcc/bin/gfortran.exe") > CMakeLists.txt
-#     - echo set(CMAKE_MAKE_PROGRAM "C:/Program Files\ \(x86\)/GnuWin32/bin/make.exe") >> CMakeLists.txt
-#     - type __tmp__ >> CMakeLists.txt
-#     - mkdir build
-#     - cd build
-#     - cmake -G "MinGW Makefiles" ..
-#     - make
-#   artifacts:
-#     paths:
-#       - mage/src/build/mage.exe
-#       - mage/src/build/mage_extraire.exe
-#       - mage/src/build/mailleurPF.exe
-
-build:
+      - mage-windows/mage.exe
+      - mage-windows/mage_extraire.exe
+      - mage-windows/mailleurPF.exe
+
+#########
+# BUILD #
+#########
+
+set-version:
   stage: build
   tags:
     - linux
@@ -126,6 +85,38 @@ build-lang:
     paths:
       - src/lang/*.qm
 
+build-linux:
+  stage: build
+  tags:
+    - linux
+  script:
+    - mkdir -p linux
+    - cd linux
+    # Setup virtual env
+    - python3 -m venv linux-venv
+    - . linux-venv/bin/activate
+    - pip3 install -r ../requirements.txt
+    # Run Pyinstaller
+    - pyinstaller -y --paths linux-venv/lib/python3.8/site-packages ../src/pamhyr.py
+  artifacts:
+    paths:
+      - linux/dist/pamhyr
+
+build-windows:
+  stage: build
+  tags:
+    - wine
+  script:
+    - mkdir windows
+    - cd windows
+    # Setup env
+    - python -m pip install -r ..\requirements.txt
+    # Run Pyinstaller
+    - pyinstaller -y ../src/pamhyr.py
+  artifacts:
+    paths:
+      - windows/dist/pamhyr
+
 #########
 # TESTS #
 #########
@@ -139,47 +130,151 @@ test:
 # PACKAGES #
 ############
 
-linux-package:
+linux-package-dir:
   stage: package
   tags:
     - release
     - linux
   needs:
+    - job: dl-mage-linux
+      artifacts: true
+    - job: set-version
+      artifacts: true
     - job: build-lang
       artifacts: true
-    - job: build
+    - job: build-linux
       artifacts: true
-    - job: build-mage-linux
+  rules:
+    - if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
+  artifacts:
+    paths:
+      - linux/pamhyr
+  script:
+    - cd linux
+    - mkdir -p pamhyr
+    # Copy Pamhyr info
+    - cp -v ../VERSION pamhyr/
+    - cp -v ../AUTHORS pamhyr/
+    - cp -v ../LICENSE pamhyr/
+    # Copy mage
+    - mkdir -p pamhyr/mage
+    - cp -v ../mage-linux/* pamhyr/mage/
+    # Copy Pamhyr
+    - cp -r ../dist/pamhyr pamhyr/
+    # Copy Pamhyr resources
+    - mkdir -p pamhyr/pamhyr/View
+    - mkdir -p pamhyr/pamhyr/View/ui
+    - mkdir -p pamhyr/pamhyr/View/ui/Widgets
+    - cp -r ../src/View/ui/*.ui pamhyr/pamhyr/View/ui/
+    - cp -r ../src/View/ui/ressources/ pamhyr/pamhyr/View/ui
+    - cp -r ../src/View/ui/Widgets/*.ui pamhyr/pamhyr/View/ui/Widgets
+    # Copy lang
+    - mkdir -p pamhyr/pamhyr/lang
+    - cp -r ../src/lang/*.qm pamhyr/pamhyr/lang
+    # Copy tests cases
+    - mkdir -p pamhyr/tests_cases/
+    - mkdir -p pamhyr/tests_cases/Saar
+    - cp ../tests_cases/Saar/Saar.pamhyr pamhyr/tests_cases/Saar/
+
+linux-package-tar:
+  stage: package
+  tags:
+    - release
+    - linux
+  needs:
+    - job: linux-package-dir
       artifacts: true
   rules:
-    - if: $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
+    - if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
   artifacts:
     paths:
-      - packages/pamhyr-gnulinux-amd64.tar.xz
+      - linux/pamhyr-gnulinux.tar.xz
   script:
-    - cd packages
-    - ./linux.sh
+    - cd linux
+    - tar --xz -cf pamhyr-gnulinux.tar.xz ./pamhyr --checkpoint=.100
 
-windows-package:
+windows-package-dir:
   stage: package
   tags:
     - release
     - wine
   needs:
+    - job: dl-mage-windows
+      artifacts: true
+    - job: set-version
+      artifacts: true
     - job: build-lang
       artifacts: true
-    - job: build
+    - job: build-windows
+      artifacts: true
+  rules:
+    - if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
+  artifacts:
+    paths:
+      - windows/pamhyr
+  script:
+    - cd windows
+    - mkdir pamhyr
+    # Copy Pamhyr info
+    - copy /y ..\VERSION pamhyr\
+    - copy /y ..\AUTHORS pamhyr\
+    - copy /y ..\LICENSE pamhyr\
+    # Copy mage
+    - mkdir pamhyr\mage
+    - copy /y ..\mage-linux\* pamhyr\mage\
+    # Copy Pamhyr
+    - mkdir pamhyr\pamhyr
+    - copy /y ..\dist\pamhyr pamhyr\
+    # Copy Pamhyr resources
+    - mkdir pamhyr\pamhyr\View
+    - mkdir pamhyr\pamhyr\View\ui
+    - mkdir pamhyr\pamhyr\View\ui\Widgets
+    - copy /y ..\src\View\ui\*.ui pamhyr\pamhyr\View\ui\
+    - copy /y ..\src\View\ui\ressources\ pamhyr\pamhyr\View\ui
+    - copy /y ..\src\View\ui\Widgets\*.ui pamhyr\pamhyr\View\ui\Widgets
+    # Copy lang
+    - mkdir pamhyr\pamhyr\lang
+    - copy /y ..\src\lang\*.qm pamhyr\pamhyr\lang
+    # Copy tests cases
+    - mkdir pamhyr\tests_cases\
+    - mkdir pamhyr\tests_cases\Saar
+    - copy ..\tests_cases\Saar\Saar.pamhyr pamhyr\tests_cases\Saar\
+
+windows-package-zip:
+  stage: package
+  tags:
+    - release
+    - linux
+  needs:
+    - job: windows-package-dir
       artifacts: true
-    - job: build-mage-windows
+  rules:
+    - if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
+  artifacts:
+    paths:
+      - windows/pamhyr-windows.zip
+  script:
+    - cd windows
+    - zip -r pamhyr-windows.zip pamhyr
+
+windows-package-exe:
+  stage: package
+  tags:
+    - release
+    - wine
+  needs:
+    - job: windows-package-dir
       artifacts: true
   rules:
-    - if: $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
+    - if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
   artifacts:
     paths:
-      - packages/pamhyr-win-amd64.exe
+      - windows/pamhyr-windows.exe
   script:
-    - cd packages
-    - ./windows.bat
+    - cd windows
+    - copy /y ..\packages\make-windows-exe.bat make-windows-exe.bat
+    - copy /y ..\packages\pamhyr.nsi pamhyr.nsi
+    - .\make-windows-exe.bat
 
 ###########
 # RELEASE #
@@ -191,16 +286,19 @@ tag-release:
     - release
     - linux
   needs:
-    - job: linux-package
+    - job: linux-package-tar
       artifacts: true
-    - job: windows-package
+    - job: windows-package-zip
+      artifacts: true
+    - job: windows-package-exe
       artifacts: true
   rules:
     - if: $CI_COMMIT_TAG
   artifacts:
     paths:
-      - packages/pamhyr-gnulinux-amd64.tar.xz
-      - packages/pamhyr-win-amd64.exe
+      - linux/pamhyr-gnulinux.tar.xz
+      - packages/pamhyr-windows.zip
+      - packages/pamhyr-windows.exe
   script:
     - cd packages
   release:
@@ -210,11 +308,15 @@ tag-release:
     ref: '$CI_COMMIT_SHA'
     assets:
       links:
-        - name: 'GNU/Linux amd64 (tar.xz)'
-          url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/packages/pamhyr-gnulinux-amd64.tar.xz'
-          filepath: '/packages/pamhyr-gnulinux-amd64.tar.xz'
+        - name: 'GNU/Linux (tar.xz)'
+          url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/packages/pamhyr-gnulinux.tar.xz'
+          filepath: '/linux/pamhyr-gnulinux.tar.xz'
+          link_type: 'package'
+        - name: 'Windows (exe)'
+          url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/packages/pamhyr-windows.exe'
+          filepath: '/windows/pamhyr-windows.exe'
           link_type: 'package'
-        - name: 'Windows amd64 (exe)'
-          url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/packages/pamhyr-win-amd64.exe'
-          filepath: '/packages/pamhyr-win-amd64.exe'
+        - name: 'Windows (zip)'
+          url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/packages/pamhyr-windows.zip'
+          filepath: '/windows/pamhyr-windows.zip'
           link_type: 'package'
diff --git a/packages/pamhyr.nsi b/packages/pamhyr.nsi
index ccd25a76..0d71ccd0 100644
--- a/packages/pamhyr.nsi
+++ b/packages/pamhyr.nsi
@@ -5,7 +5,7 @@
 
 Name "PAMHYR"
 OutFile "pamhyr-win-amd64.exe"
-LicenseData "..\LICENSE"
+LicenseData "pamhyr\LICENSE"
 LicenseText "I Agree"
 
 RequestExecutionLevel admin
@@ -28,7 +28,7 @@ Section "PAMHYR"
 
   SetOutPath $INSTDIR
 
-  File /r "dist\pamhyr\*"
+  File /r "pamhyr\*"
 
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\PAMHYR" "DisplayName" "NSIS PAMHYR"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\PAMHYR" "UninstallString" "$INSTDIR\uninstall.exe"
@@ -42,7 +42,7 @@ Section "Start Menu Shortcuts"
 
   CreateDirectory "$SMPROGRAMS\PAMHYR"
   CreateShortcut "$SMPROGRAMS\PAMHYR\Uninstall.lnk" "$INSTDIR\uninstall.exe"
-  CreateShortcut "$SMPROGRAMS\PAMHYR\PAMHYR.lnk" "$INSTDIR\pamhyr.exe"
+  CreateShortcut "$SMPROGRAMS\PAMHYR\PAMHYR.lnk" "$INSTDIR\pamhyr\pamhyr.exe"
 
 SectionEnd
 
-- 
GitLab