From 13631d46e79bdb3a1eb10550b6cb651dd3e34b19 Mon Sep 17 00:00:00 2001
From: Dorian Turba <commit.9wuzh@slmail.me>
Date: Sun, 4 Aug 2024 15:10:19 +0200
Subject: [PATCH] move to specs

---
 templates/release-by-changelog.yml | 130 ++++++++++++++++-------------
 1 file changed, 73 insertions(+), 57 deletions(-)

diff --git a/templates/release-by-changelog.yml b/templates/release-by-changelog.yml
index 730bf5a..1c40fa2 100644
--- a/templates/release-by-changelog.yml
+++ b/templates/release-by-changelog.yml
@@ -1,67 +1,83 @@
+spec:
+  inputs:
+    stage:
+      description: The stage of the job.
+      default: deploy
+    changelog file path:
+      description: The path to the CHANGELOG.md file.
+      default: CHANGELOG.md
+    prefix:
+      description: Value to prepend to the tag and release name.
+      default: ''
+    suffix:
+      description: Value to append to the tag and release name.
+      default: ''
+
+---
 release_by_changelog:
-    variables:
-        CHANGELOG_FILEPATH: CHANGELOG.md
-        PREFIX: ''
-        SUFFIX: ''
-        TAG_PREFIX: $PREFIX
-        TAG_SUFFIX: $SUFFIX
-        NAME_PREFIX: $PREFIX
-        NAME_SUFFIX: $SUFFIX
-    image: registry.gitlab.com/gitlab-org/release-cli:v0.18.0
-    stage: deploy
-    script:
-        # Use grep to find version headers and store them in a variable
-        - 'headers=$(grep -nE "^## \[([0-9]+)\.([0-9]+)\.([0-9]+)(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?\] - [0-9]{4}-[0-9]{2}-[0-9]{2}$" "$CHANGELOG_FILEPATH")'
+  variables:
+    CHANGELOG_FILEPATH: $[[ inputs.changelog file path ]]
+    PREFIX: $[[ inputs.prefix ]]
+    SUFFIX: $[[ inputs.suffix ]]
+    TAG_PREFIX: $PREFIX
+    TAG_SUFFIX: $SUFFIX
+    NAME_PREFIX: $PREFIX
+    NAME_SUFFIX: $SUFFIX
+  image: registry.gitlab.com/gitlab-org/release-cli:v0.18.0
+  stage: $[[ inputs.stage ]]
+  script:
+    # Use grep to find version headers and store them in a variable
+    - 'headers=$(grep -nE "^## \[([0-9]+)\.([0-9]+)\.([0-9]+)(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?\] - [0-9]{4}-[0-9]{2}-[0-9]{2}$" "$CHANGELOG_FILEPATH")'
 
-        # Extract first header line number
-        - 'first_line=$(echo "$headers" | head -1 | cut -d: -f1)'
+    # Extract first header line number
+    - 'first_line=$(echo "$headers" | head -1 | cut -d: -f1)'
 
-        # Check if we have a header, else exit
-        - if [ -z "$first_line" ]; then
-        -     echo "No version headers found."
-        -     exit 1
-        - fi
+    # Check if we have a header, else exit
+    - if [ -z "$first_line" ]; then
+    - echo "No version headers found."
+    - exit 1
+    - fi
 
-        # Extract version and date from the first header
-        - version=$(echo "$headers" | head -1 | grep -oE "\[([0-9]+)\.([0-9]+)\.([0-9]+)\]" | tr -d "[]")
-        - date=$(echo "$headers" | head -1 | grep -oE "[0-9]{4}-[0-9]{2}-[0-9]{2}")
-        # If date is different from today, format it
-        - if [ "$date" != "$(date +%Y-%m-%d)" ]; then
-        -     formatted_date=$(date -u -d "$date" +"%Y-%m-%dT%H:%M:%SZ")
-        - fi
+    # Extract version and date from the first header
+    - version=$(echo "$headers" | head -1 | grep -oE "\[([0-9]+)\.([0-9]+)\.([0-9]+)\]" | tr -d "[]")
+    - date=$(echo "$headers" | head -1 | grep -oE "[0-9]{4}-[0-9]{2}-[0-9]{2}")
+    # If date is different from today, format it
+    - if [ "$date" != "$(date +%Y-%m-%d)" ]; then
+    - formatted_date=$(date -u -d "$date" +"%Y-%m-%dT%H:%M:%SZ")
+    - fi
 
-        # Extract second header line number for end of text range
-        - 'second_line=$(echo "$headers" | sed -n "2p" | cut -d: -f1)'
+    # Extract second header line number for end of text range
+    - 'second_line=$(echo "$headers" | sed -n "2p" | cut -d: -f1)'
 
-        # Determine end line
-        - if [ -n "$second_line" ]; then
-        -     end_line=$((second_line - 1))
-        - else
-               # If there's no second header, use the end of the file
-        -     end_line=$(wc -l < "$CHANGELOG_FILEPATH")
-        - fi
+    # Determine end line
+    - if [ -n "$second_line" ]; then
+    - end_line=$((second_line - 1))
+    - else
+    # If there's no second header, use the end of the file
+    - end_line=$(wc -l < "$CHANGELOG_FILEPATH")
+    - fi
 
-        - start_line=$((first_line + 2))
-        - if [ "$start_line" -le "$end_line" ]; then
-        # Use sed to extract the text between the first and the potential second version header
-        -     text=$(sed -n "$start_line,$end_line p" "$CHANGELOG_FILEPATH")
-        -     echo "Text = $text"
-        - else
-        -     echo "No text to extract, start line exceeds end line."
-        - fi
+    - start_line=$((first_line + 2))
+    - if [ "$start_line" -le "$end_line" ]; then
+    # Use sed to extract the text between the first and the potential second version header
+    - text=$(sed -n "$start_line,$end_line p" "$CHANGELOG_FILEPATH")
+    - echo "Text = $text"
+    - else
+    - echo "No text to extract, start line exceeds end line."
+    - fi
 
-        # Output the results
-        - echo "Version = $version"
-        - echo "Date = $date"
-        - echo "Formatted Date = $formatted_date"
-        - echo "Text:"
-        - echo "$text"
+    # Output the results
+    - echo "Version = $version"
+    - echo "Date = $date"
+    - echo "Formatted Date = $formatted_date"
+    - echo "Text:"
+    - echo "$text"
 
-        # Set the tag and name
-        - tag="$TAG_PREFIX$version$TAG_SUFFIX"
-        - name="$NAME_PREFIX$version$NAME_SUFFIX"
+    # Set the tag and name
+    - tag="$TAG_PREFIX$version$TAG_SUFFIX"
+    - name="$NAME_PREFIX$version$NAME_SUFFIX"
 
-        # Create the release
-        - release-cli create --name "$name" --tag-name "$tag" --description "$text" --released-at "$formatted_date"
-    rules:
-        -   if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+    # Create the release
+    - release-cli create --name "$name" --tag-name "$tag" --description "$text" --released-at "$formatted_date"
+  rules:
+    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
-- 
GitLab