From 59a383e0d89e61da3770ee2f73989fcd29da483c Mon Sep 17 00:00:00 2001
From: Philipp Stadler <hello@phstadler.com>
Date: Mon, 15 Jul 2024 17:13:45 +0200
Subject: [PATCH] chore: add automatic releases

---
 .gitlab-ci.yml | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++
 package.json   |  3 +++
 2 files changed, 56 insertions(+)
 create mode 100644 package.json

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 86114bb..d9dc50b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,6 +2,7 @@ image: durcheinander/export-apkgs:1.0.0
 
 stages:
 - build
+- release
 
 build:
   stage: build
@@ -13,6 +14,58 @@ build:
   script:
     - curl https://gitlab.phaidra.org/kartenaale/card-templates/-/jobs/104428/artifacts/raw/card-templates-1.0.2.tar.gz | tar -xz
     - export_apkgs -c content -t templates -o .
+    - echo "ARTIFACTS_URL=https://gitlab.phaidra.org/$CI_PROJECT_PATH/-/jobs/$CI_JOB_ID/artifacts/browse" > build.env
   artifacts:
     paths:
       - '*.apkg'
+    reports:
+      dotenv: build.env
+
+release-package-json-version-as-git-tag:
+  stage: release
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "schedule"
+      when: never
+    # tagging should only happen after the thing was merged, so do it on the main branch build
+    - if: $CI_COMMIT_BRANCH == "main"
+  # we don't need anything in node_modules or python, so don't fetch the cache
+  cache: []
+  script:
+    - NPM_VERSION=$(grep '"version":' package.json -m 1 | cut -d '"' -f 4)
+    # || exit_code=$? is the recommended way to ignore a non-zero exit code
+    - NPM_VERSION_GIT_TAG=$(git tag | grep ^${NPM_VERSION}$ || exit_code=$?)
+    - if [ -z "$NPM_VERSION_GIT_TAG" ]; then
+    -     echo adding git tag for first commit on main with NPM version ${NPM_VERSION}
+    -     git remote remove origin
+    -     git remote add origin https://oauth:${REPOSITORY_ACCESS_TOKEN}@gitlab.phaidra.org/$CI_PROJECT_PATH.git
+    -     git config user.email Cao Cao
+    -     git config user.name cao.cao@ci.kartenaale
+    -     git tag -a $NPM_VERSION -m "Release $NPM_VERSION"
+    -     git push origin $NPM_VERSION
+    - else
+    - '   echo package-json-tag: keeping older tag for $NPM_VERSION'
+    - fi
+
+create-gitlab-release:
+  image: registry.gitlab.com/gitlab-org/release-cli:latest
+  stage: release
+  rules:
+    - if: $CI_COMMIT_TAG
+  needs:
+    - job: build
+      artifacts: true
+  variables:
+    # we just need the artifacts and don't need up-to-date source, so don't even fetch
+    GIT_STRATEGY: none
+  # we don't need anything in node_modules or python, so don't fetch the cache
+  cache: []
+  script:
+    - echo Creating GitLab release…
+  release:
+    tag_name: '$CI_COMMIT_TAG'
+    name: '$CI_COMMIT_TAG'
+    description: 'Neue APKGS stehen zum Download bereit.' 
+    assets:
+      links:
+        - name: 'Browse all APKGS…'
+          url: '$ARTIFACTS_URL'
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..1587a66
--- /dev/null
+++ b/package.json
@@ -0,0 +1,3 @@
+{
+  "version": "1.0.0"
+}
-- 
GitLab