From 16825ad6a5504df3789a4734da86bee3f8f179d9 Mon Sep 17 00:00:00 2001 From: Rick Barenthin Date: Mon, 25 Jul 2022 23:12:56 +0200 Subject: [PATCH] feat(conventi): remove conventi and use external image An external repository is holding now the src and Dockerfile for conventi so this is no longer needed. In the same step we now use the tag from the external image to run our pipeline. Reviewed-on: https://git.riba-interactive.de/rick/waitui/pulls/11 PR #11 --- .drone.yml | 4 +- build/conventi/Dockerfile | 13 -- build/conventi/conventi.sh | 426 ------------------------------------- 3 files changed, 2 insertions(+), 441 deletions(-) delete mode 100644 build/conventi/Dockerfile delete mode 100755 build/conventi/conventi.sh diff --git a/.drone.yml b/.drone.yml index a434764..2f5c690 100644 --- a/.drone.yml +++ b/.drone.yml @@ -9,7 +9,7 @@ steps: commands: - git fetch --tags - name: update version and changelog - image: registry.riba-interactive.de/conventi:1 + image: registry.riba-interactive.de/conventi:0.1.0 - name: commit changelog updates image: alpine/git commands: @@ -17,7 +17,7 @@ steps: - git commit -m "[CI SKIP] version and changelog update" - git push origin $DRONE_TARGET_BRANCH - name: tag commit - image: registry.riba-interactive.de/conventi:1 + image: registry.riba-interactive.de/conventi:0.1.0 commands: - export version=$(conventi.sh get_version) - git tag -am "Tagging new version $version" "$version" diff --git a/build/conventi/Dockerfile b/build/conventi/Dockerfile deleted file mode 100644 index c01d12f..0000000 --- a/build/conventi/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM alpine:3.16.0 - -RUN apk --no-cache add \ - git \ - jq - -COPY conventi.sh /usr/local/bin/ - -VOLUME /conventi -WORKDIR /conventi - -ENTRYPOINT ["/usr/local/bin/conventi.sh"] -CMD [""] \ No newline at end of file diff --git a/build/conventi/conventi.sh b/build/conventi/conventi.sh deleted file mode 100755 index 66733c4..0000000 --- a/build/conventi/conventi.sh +++ /dev/null @@ -1,426 +0,0 @@ -#!/usr/bin/env sh - -config_file=.version.json -changelog_file=CHANGELOG.md -changelog_header="# Changelog - -All notable changes to this project will be documented in this file. See [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) for commit guidelines. - -This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - ----- -" - -reverse() { - if which tac >/dev/null 2>&1; then - tac - else - tail -r - fi -} - -generate_config() { - jq --null-input \ - --arg version "0.0.0" \ - --arg sha "" \ - --arg url "$1" \ - '{ "version": $version, "sha": $sha, "url": $url}' >$config_file -} - -update_config() { - # store in a var as reading and writing in one go to one file is not good - config=$(jq '.sha |= $sha | .version |= $version' --arg sha "$1" --arg version "$2" $config_file) - echo "$config" >$config_file -} - -get_config_version() { - jq '.version' <$config_file | tr -d '"' -} - -get_config_sha() { - jq '.sha' <$config_file | tr -d '"' -} - -get_config_url() { - jq '.url' <$config_file | tr -d '"' -} - -split_version_string() { - version_number=$(echo "$1" | cut -d'-' -f1 | cut -d'+' -f1) - pre_release=$(echo "$1" | cut -d'-' -f2 | cut -d'+' -f1) - build=$(echo "$1" | cut -d'-' -f2 | cut -d'+' -f2) - if [ "$pre_release" = "$1" ]; then - pre_release="" - fi - if [ "$build" = "$1" ] || [ "$build" = "$pre_release" ]; then - build="" - fi - - major=$(echo "$version_number" | cut -d'.' -f1) - minor=$(echo "$version_number" | cut -d'.' -f2) - patch=$(echo "$version_number" | cut -d'.' -f3) - pre_release_id=$(echo "$pre_release." | cut -d'.' -f2) - - echo "${major:-0} ${minor:-0} ${patch:-0} $build $pre_release_id" -} - -calculate_version() { - version_string=$(split_version_string "$1") - major=$(echo "$version_string" | cut -d' ' -f1) - minor=$(echo "$version_string" | cut -d' ' -f2) - patch=$(echo "$version_string" | cut -d' ' -f3) - pre_release_id=$(echo "$version_string" | cut -d' ' -f5) - pre_release="" - build="" - - if [ "$2" -ge 100 ]; then - major=$((major + 1)) - minor=0 - patch=0 - elif [ "$2" -ge 10 ]; then - minor=$((minor + 1)) - patch=0 - elif [ "$2" -ge 1 ]; then - patch=$((patch + 1)) - fi - - if [ "$3" = "rc" ]; then - if [ -z "$pre_release_identifier" ]; then - pre_release_identifier=1 - else - pre_release_identifier=$((pre_release_identifier + 1)) - fi - pre_release="rc.$pre_release_identifier" - fi - - if [ "$4" = "build" ]; then - build="$(git rev-parse --short HEAD)" - fi - - version_number="${major}.${minor}.${patch}" - if [ -n "$pre_release" ]; then - pre_release="-$pre_release" - fi - if [ -n "$build" ]; then - build="+$build" - fi - - echo "${version_number}${pre_release}${build}" -} - -get_git_url() { - url=$(git config --get remote.origin.url) - if ! echo "$url" | grep -q "^http"; then - url=$(echo "$url" | cut -d@ -f2 | sed 's/:/\//') - url="https://${url:-localhost}" - fi - - echo "$url" | sed 's/\.git$//' -} - -get_git_commits() { - since_hash=$(get_config_sha) - if [ -n "$since_hash" ]; then - git rev-list "$since_hash..HEAD" - else - git rev-list HEAD - fi -} - -get_git_commit_hash() { - git rev-parse --short "$1" -} - -get_git_first_commit_hash() { - git rev-list --max-parents=0 --abbrev-commit HEAD -} - -get_git_commit_subject() { - git show -s --format=%s "$1" -} - -get_git_commit_body() { - git show -s --format=%b "$1" -} - -get_commit_type() { - echo "$1" | sed -r -n 's/([a-z]+)(\(?|:?).*/\1/p' | tr '[:upper:]' '[:lower:]' -} - -get_commit_scope() { - echo "$1" | sed -r -n 's/[a-z]+\(([^)]+)\).*/\1/p' -} - -get_commit_description() { - echo "$1" | sed -r -n 's/.*:[ ]+(.*)/\1/p' -} - -get_commit_footer() { - with_colon=$(echo "$1" | sed -n '/^[A-Za-z-]\{1,\}: /,//{p;}') - with_hash=$(echo "$1" | sed -n '/^[A-Za-z-]\{1,\} #/,//{p;}') - fallback=$(echo "$1" | reverse | awk '/^$/{exit}1' | reverse) - - if [ -z "$with_colon" ] && [ -z "$with_hash" ]; then - echo "$fallback" - elif [ ${#with_colon} -gt ${#with_hash} ]; then - echo "$with_colon" - else - echo "$with_hash" - fi -} - -get_commit_body() { - pattern=$(get_commit_footer "$1" | head -n 1 | sed -e 's/[]\/$*.^[]/\\&/g') - if [ -n "$pattern" ]; then - echo "$1" | sed -e "/$pattern/,\$d" - else - echo "$1" - fi -} - -is_breaking_change() { - if echo "$1" | grep -q '!' || echo "$2" | grep -q 'BREAKING[ -]CHANGE: '; then - echo 1 - else - echo 0 - fi -} - -get_breaking_change() { - with_colon=$(echo "$1" | sed -n '/^BREAKING[ -]CHANGE: /,/^[A-Za-z-]\{1,\}: /{ s/BREAKING[ -]CHANGE: \(.*\)/\1/; /^[A-Za-z-]\{1,\}: /!p;}') - with_hash=$(echo "$1" | sed -n '/^BREAKING[ -]CHANGE: /,/^[A-Za-z-]\{1,\} #/{ s/BREAKING[ -]CHANGE: \(.*\)/\1/; /^[A-Za-z-]\{1,\} #/!p;}') - if [ -n "$with_colon" ] && ! echo "$with_colon" | grep -q '[A-Za-z-]\{1,\} #'; then - echo "$with_colon" - else - echo "$with_hash" - fi -} - -format_entry_line() { - line="" - if [ -n "$2" ]; then - line="**$2:** " - fi - line="$line$1" - - echo "$line ([$3]($(get_config_url)/commit/$3))" | sed -e '2,$s/^[ ]*/ /' -} - -breaking_change_lines="" -feature_lines="" -bugfix_lines="" -build_lines="" -chore_lines="" -ci_lines="" -doc_lines="" -style_lines="" -refactor_lines="" -perf_lines="" -test_lines="" -revert_lines="" - -add_changelog_entry_line() { - case "$1" in - feat) - feature_lines=$(printf '%s\n* %s\n' "$feature_lines" "$2") - ;; - - fix) - bugfix_lines=$(printf '%s\n* %s\n' "$bugfix_lines" "$2") - ;; - - build) - build_lines=$(printf '%s\n* %s\n' "$build_lines" "$2") - ;; - - chore) - chore_lines=$(printf '%s\n* %s\n' "$chore_lines" "$2") - ;; - - ci) - ci_lines=$(printf '%s\n* %s\n' "$ci_lines" "$2") - ;; - - doc_lines) - doc_lines=$(printf '%s\n* %s\n' "$doc_lines" "$2") - ;; - - style) - style_lines=$(printf '%s\n* %s\n' "$style_lines" "$2") - ;; - - refactor) - refactor_lines=$(printf '%s\n* %s\n' "$refactor_lines" "$2") - ;; - - perf) - perf_lines=$(printf '%s\n* %s\n' "$perf_lines" "$2") - ;; - - test) - test_lines=$(printf '%s\n* %s\n' "$test_lines" "$2") - ;; - - revert) - revert_lines=$(printf '%s\n* %s\n' "$revert_lines" "$2") - ;; - esac -} - -format_entry() { - entry="" - if [ -n "$breaking_change_lines" ]; then - entry=$(printf '%s\n\n\n### BREAKING CHANGES ๐Ÿšจ\n%s\n' "$entry" "$breaking_change_lines") - fi - if [ -n "$bugfix_lines" ]; then - entry=$(printf '%s\n\n\n### Bug fixes ๐Ÿฉน\n%s\n' "$entry" "$bugfix_lines") - fi - if [ -n "$feature_lines" ]; then - entry=$(printf '%s\n\n\n### Features ๐Ÿ“ฆ\n%s\n' "$entry" "$feature_lines") - fi - if [ -n "$revert_lines" ]; then - entry=$(printf '%s\n\n\n### Reverts ๐Ÿ”™\n%s\n' "$entry" "$revert_lines") - fi - if [ -n "$build_lines" ]; then - entry=$(printf '%s\n\n\n### Build System ๐Ÿ—\n%s\n' "$entry" "$build_lines") - fi - if [ -n "$chore_lines" ]; then - entry=$(printf '%s\n\n\n### Chores ๐Ÿงฝ\n%s\n' "$entry" "$chore_lines") - fi - if [ -n "$ci_lines" ]; then - entry=$(printf '%s\n\n\n### CIs โš™๏ธ\n%s\n' "$entry" "$ci_lines") - fi - if [ -n "$doc_lines" ]; then - entry=$(printf '%s\n\n\n### Docs ๐Ÿ“‘\n%s\n' "$entry" "$doc_lines") - fi - if [ -n "$test_lines" ]; then - entry=$(printf '%s\n\n\n### Tests ๐Ÿงช\n%s\n' "$entry" "$test_lines") - fi - if [ -n "$style_lines" ]; then - entry=$(printf '%s\n\n\n### Styles ๐Ÿ–ผ\n%s\n' "$entry" "$style_lines") - fi - if [ -n "$refactor_lines" ]; then - entry=$(printf '%s\n\n\n### Refactors ๐Ÿ› \n%s\n' "$entry" "$refactor_lines") - fi - if [ -n "$perf_lines" ]; then - entry=$(printf '%s\n\n\n### Performance ๐ŸŽ\n%s\n' "$entry" "$perf_lines") - fi - if [ -n "$entry" ]; then - entry=$(printf '## [%s](%s/compare/%s...%s) (%s)%s' "$version" "$(get_config_url)" "$from_hash" "$to_hash" "$(date '+%Y-%m-%d')" "$entry") - fi - echo "$entry" -} - -generate_changelog_entry() { - is_major=0 - is_minor=0 - is_patch=0 - - version=$(get_config_version) - from_hash=$(get_config_sha) - if [ -z "$from_hash" ]; then - from_hash=$(get_git_first_commit_hash) - fi - to_hash=$(get_git_commit_hash HEAD) - - for commit in $(get_git_commits); do - git_subject=$(get_git_commit_subject "$commit") - git_body=$(get_git_commit_body "$commit") - hash=$(get_git_commit_hash "$commit") - - type=$(get_commit_type "$git_subject") - scope=$(get_commit_scope "$git_subject") - description=$(get_commit_description "$git_subject") - body=$(get_commit_body "$git_body") - footer=$(get_commit_footer "$git_body") - breaking_change=$(get_breaking_change "$footer") - is_breaking=$(is_breaking_change "$git_subject" "$footer") - line=$(format_entry_line "$description" "$scope" "$hash") - - if [ "$is_breaking" -eq 1 ] && [ -z "$breaking_change" ]; then - if [ -n "$body" ]; then - breaking_change="$body" - else - breaking_change="$description" - fi - fi - - if [ "$is_breaking" -eq 1 ]; then - is_major=1 - breaking_change=$(echo "$breaking_change" | sed -e '2,$s/^[ ]*/ /') - breaking_change_lines=$(printf '%s\n* %s\n' "$breaking_change_lines" "$breaking_change") - fi - - case "$type" in - feat) - is_minor=1 - ;; - - fix) - is_patch=1 - ;; - esac - - add_changelog_entry_line "$type" "$line" - done - - version_update=$((is_major * 100 + is_minor * 10 + is_patch)) - if [ $version_update -gt 0 ]; then - version=$(calculate_version "$version" "$version_update") - else - # no version change, no need to generate changelog - return - fi - - update_config "$to_hash" "$version" - - format_entry -} - -new_changelog() { - echo "$changelog_header" >$changelog_file -} - -new_changelog_entry() { - entry=$(generate_changelog_entry) - if [ -z "$entry" ]; then - return - fi - - changelog=$(sed -n '/^----/,//{/^----/!p;}' <$changelog_file) - if [ -n "$changelog" ]; then - changelog=$(printf '%s\n%s\n%s' "$changelog_header" "$entry" "$changelog") - else - changelog=$(printf '%s\n%s' "$changelog_header" "$entry") - fi - echo "$changelog" >$changelog_file -} - -init() { - if [ "$1" = "--help" ]; then - echo "$(basename "$0") [--help] [init|get_version]" - exit 0 - elif [ "$1" = "init" ]; then - echo "Generating a config ... " - echo "We guessed that the url for git links will be: $(get_git_url)" - echo "Please change inside the '${config_file}' file if needed!" - generate_config "$(get_git_url)" - new_changelog - exit 0 - fi - - if [ ! -f "$config_file" ]; then - echo >&2 "ERROR: config file is missing to generate changelog entry" - exit 1 - fi - - if [ "$1" = "get_version" ]; then - get_config_version - exit 0 - fi - - echo "Using existing config to generate changelog entry" - new_changelog_entry -} - -init "$@"