From ca8cb60baf454d5398939fc470d7c863ddfd8ef8 Mon Sep 17 00:00:00 2001
From: David Byers <david.byers@liu.se>
Date: Thu, 18 Feb 2021 11:42:20 +0100
Subject: [PATCH] First try at automatic releases.

---
 .gitlab-ci.yml | 105 ++++++++++++++++++++++++++++++++-----------------
 1 file changed, 69 insertions(+), 36 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2b122db..540fee7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -10,7 +10,30 @@ stages:
 
 .release_rules: &release_rules
   rules:
-    - if: "$CI_COMMIT_TAG =~ /^release-/ && $CI_COMMIT_BRANCH == 'release'"
+    - if: '$CI_COMMIT_TAG'
+      when: never
+    - if: '$CI_COMMIT_BRANCH != "master"'
+      when: never
+    - if: "$CI_COMMIT_MESSAGE =~ /^#release/"
+      when: always
+    - when: never
+
+# When changing, also make changes to copies in the build stage
+.beta_rules: &beta_rules
+  rules:
+    - if: '$CI_COMMIT_TAG'
+      when: never
+    - if: '$CI_COMMIT_BRANCH != "master"'
+      when: never
+    - if: "$CI_COMMIT_MESSAGE =~ /#release/"
+      when: never
+    - when: always
+
+.dev_rules: &dev_rules
+  rules:
+    - if: '$CI_COMMIT_TAG'
+      when: never
+    - if: '$CI_COMMIT_BRANCH != "master"'
       when: always
     - when: never
 
@@ -39,16 +62,11 @@ prepare:dev:
   script:
     - VERSION=$(python3 scripts/update-version.py -n)
     - bash scripts/build.sh --version "$VERSION"
-  only:
-    - branches
-  except:
-    - release
-    - master
+  <<: *dev_rules
 
 prepare:beta:
   extends: .prepare
-  only:
-    - master
+  <<: *beta_rules
 
 prepare:release:
   extends: .prepare
@@ -65,6 +83,7 @@ prepare:release:
 # Build for Edge
 #
 
+
 .build:edge:
   stage: build
   image: python:3.7-stretch
@@ -82,18 +101,10 @@ build:edge:beta:
   variables:
     VARIANT: beta
   rules:
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"'
-      changes:
-        - shared/**/*
-        - firefox/**/*
-        - edge/**/*
-      when: always
-    - if: '$CI_COMMIT_MESSAGE =~ /#force-build:(all|edge)/ && $CI_COMMIT_BRANCH == "master"'
-      when: always
-    - when: never
+    <<: *beta_rules
 
 build:edge:release:
-  extends: .build:thunderbird
+  extends: .build:edge
   variables:
     VARIANT: release
   <<: *release_rules
@@ -126,13 +137,18 @@ build:firefox:beta:
     CHANNEL: unlisted
     VARIANT: beta
   rules:
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"'
-      changes:
+    - if: '$CI_COMMIT_TAG'
+      when: never
+    - if: '$CI_COMMIT_BRANCH != "master"'
+      when: never
+    - if: "$CI_COMMIT_MESSAGE =~ /#release/"
+      when: never
+    - if: '$CI_COMMIT_MESSAGE =~ /#force-build:(all|firefox)/'
+      when: always
+    - changes:
         - shared/**/*
         - firefox/**/*
       when: always
-    - if: '$CI_COMMIT_MESSAGE =~ /#force-build:(all|firefox)/ && $CI_COMMIT_BRANCH == "master"'
-      when: always
     - when: never
 
 build:firefox:release:
@@ -163,15 +179,7 @@ build:thunderbird:beta:
   extends: .build:thunderbird
   variables:
     VARIANT: beta
-  rules:
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"'
-      changes:
-        - shared/**/*
-        - thunderbird/**/*
-      when: always
-    - if: '$CI_COMMIT_MESSAGE =~ /#force-build:(all|thunderbird)/ && $CI_COMMIT_BRANCH == "master"'
-      when: always
-    - when: never
+  <<: *beta_rules
 
 build:thunderbird:release:
   extends: .build:thunderbird
@@ -190,9 +198,8 @@ collect:
   stage: collect
   image: busybox
   script:
-    - echo "I have seen the CONSING!"
-  only:
-    - master
+    - 'echo "I have seen the CONSING!"'
+  <<: *beta_rules
 
 pages:
   stage: deploy
@@ -222,8 +229,34 @@ pages:
       job: build:edge:beta
       ref: $CI_COMMIT_REF_NAME
       artifacts: true
-  only:
-    - master
+  <<: *beta_rules
   artifacts:
     paths:
       - public/
+
+
+
+# Upload and release
+
+upload:
+  stage: collect
+  image: curlimages/curl:latest
+  script:
+    - |
+      curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file safelinks-cleaner-firefox-release.xpi ${PACKAGE_REGISTRY_URL}/
+    - |
+      curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file safelinks-cleaner-thunderbird-release.xpi ${PACKAGE_REGISTRY_URL}/
+    - |
+      curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file safelinks-cleaner-edge-release.zip ${PACKAGE_REGISTRY_URL}/
+  <<: *release_rules
+    
+
+release:
+  stage: deploy
+  image: registry.gitlab.com/gitlab-org/release-cli:latest
+  script:
+    - VERSION=$(cat version)
+    - PACKAGE_REGISTRY_URL="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${VERSION}"
+    - |
+      release-cli create --name "Release $VERSION" --description "Release $VERSION" --tag-name "release-$VERSION" --assets-link "{\"name\":\"safelinks-cleaner-thunderbird-release.xpi\",\"url\":\"${PACKAGE_REGISTRY_URL}/safelinks-cleaner-thunderbird-release.xpi\"}" --assets-link "{\"name\":\"safelinks-cleaner-firefox-release.xpi\",\"url\":\"${PACKAGE_REGISTRY_URL}/safelinks-cleaner-firefox-release.xpi\"}" --assets-link "{\"name\":\"safelinks-cleaner-edge-release.zip\",\"url\":\"${PACKAGE_REGISTRY_URL}/safelinks-cleaner-edge-release.zip\"}"
+  <<: *release_rules
-- 
GitLab