From 432f95d324f5f10015d529b677def2a58838dcea Mon Sep 17 00:00:00 2001
From: Alexander Olofsson <alexander.olofsson@liu.se>
Date: Wed, 22 Nov 2023 12:45:06 +0100
Subject: [PATCH] Add release stages to CI config

---
 .gitlab-ci.yml | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 75 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8feba41..13744c0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,7 @@
 ---
+variables:
+  PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}"
+
 image: "ruby:2.7"
 
 # Cache gems in between builds
@@ -31,3 +34,75 @@ pages:
 rake:
   script:
     - bundle exec rake test
+
+gemfile:
+  script:
+    - gem build liudesk_cmdb.gemspec
+    - |
+      # Generate release info
+      GEMFILE="$(ls -1 liudesk_cmdb-*.gem)"
+      GEMNAME="$(basename -s '.gem' "${GEMFILE}")"
+      GEMVERSION="${GEMNAME#*-}"
+      cat <<EOF > variables.env
+      CI_RUBY_GEMFILE="$GEMFILE"
+      CI_RUBY_GEMNAME="$GEMNAME"
+      CI_RUBY_VERSION="$GEMVERSION"
+      EOF
+  artifacts:
+    paths:
+      - '*.gem'
+    reports:
+      dotenv: variables.env
+
+push:gemfile:
+  variables:
+    GIT_STRATEGY: none
+
+  needs:
+    - job: gemfile
+      artifacts: true
+
+  image: curlimages/curl
+
+  script:
+    - |
+      curl --header "JOB-TOKEN: $CI_JOB_TOKEN" "${PACKAGE_REGISTRY_URL}/${CI_RUBY_GEMFILE}" -Iso /dev/null -w "%{http_code}" | grep 200 || \
+      curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file "${CI_RUBY_GEMFILE}" "${PACKAGE_REGISTRY_URL}/${CI_RUBY_GEMFILE}"
+
+  rules:
+    - if: $CI_COMMIT_TAG
+
+push:release:
+  variables:
+    GIT_STRATEGY: none
+
+  needs:
+    - push:gemfile
+    - job: gemfile
+      artifacts: true
+
+  image: registry.gitlab.com/gitlab-org/release-cli:latest
+
+  script:
+    - echo "Running release job for $CI_COMMIT_TAG"
+    - |
+      # Create/Update release
+      if [ -n "$CI_RELEASE_DESCRIPTION" ]; then
+        echo "$CI_RELEASE_DESCRIPTION" > release.md
+      else
+        echo "${CI_COMMIT_TAG_MESSAGE:-$CI_COMMIT_MESSAGE}" > release.md
+      fi
+      sed -e '/-\+BEGIN PGP.\+/,$d' -i release.md
+
+      release-cli get > /dev/null && \
+        release-cli update \
+          --name "Version $CI_RUBY_GEMVERSION" \
+          --description release.md || \
+        release-cli create \
+          --name "Version $CI_RUBY_GEMVERSION" \
+          --description release.md \
+          --assets-link "{\"name\":\"$CI_RUBY_GEMFILE\",\"url\":\"${PACKAGE_REGISTRY_URL}/${CI_RUBY_GEMFILE}\",\"link_type\":\"package\"}"
+
+  rules:
+    - if: $CI_COMMIT_TAG
+      when: manual
-- 
GitLab