|
1 | 1 | #!/bin/bash |
| 2 | +# _ _ |
| 3 | +# | | | | |
| 4 | +# | |__ _ _ _ __ ___ _ __ ___| |__ |
| 5 | +# | '_ \| | | | '_ ` _ \| '_ \ / __| '_ \ |
| 6 | +# | |_) | |_| | | | | | | |_) |\__ \ | | | |
| 7 | +# |_.__/ \__,_|_| |_| |_| .__(_)___/_| |_| |
| 8 | +# | | |
| 9 | +# |_| |
| 10 | +# by @rakshazi |
| 11 | +PREFIX="\033[0;32m[bump.sh]\033[0m" |
2 | 12 |
|
| 13 | +# help |
| 14 | +if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then |
| 15 | + echo -e "$PREFIX Release, changelog and merge request generator for GitLab. Usefull magic in one string :) |
| 16 | +
|
| 17 | +Usage: `basename $0` [branch_from] [branch_to] |
| 18 | +
|
| 19 | +Example: `basename $0` develop master" |
| 20 | + exit 0 |
| 21 | +fi |
| 22 | + |
| 23 | +# Define vars |
3 | 24 | BRANCH_CURRENT=$(git rev-parse --abbrev-ref HEAD) |
4 | 25 | BRANCH_1="${1:-$BRANCH_CURRENT}" |
5 | 26 | BRANCH_2="${2:-master}" |
6 | 27 | CHANGES=$(git log --oneline --no-merges --full-history $BRANCH_1...$BRANCH_2 | sed -u 's/^/\* /g') |
7 | | -DESCRIPTION=$([ ${#CHANGES} -ge 250 ] && echo "See CHANGELOG.md for list of changes" || echo $CHANGES) |
8 | | -PREVIOUS_VERSION=$(git describe --tags $(git rev-list --tags --max-count=1)) |
| 28 | +DESCRIPTION="${CHANGES:0:1500}...\n\nMore in CHANGELOG.md" |
9 | 29 | REPO_URL=$(git remote get-url origin | sed -u 's/git@//g; s/:/\//g; s/.git//g') |
| 30 | + |
| 31 | +# Fetch origin headers (to avoid duplicates and outdated versions) |
| 32 | +echo -e "$PREFIX Fetching tags..." |
| 33 | +git fetch --tags --force -q |
| 34 | +PREVIOUS_VERSION=$(git describe --tags $(git rev-list --tags --max-count=1)) |
| 35 | + |
| 36 | +# Work with user input |
10 | 37 | printf "CHANGES:\n$CHANGES\n\n" |
11 | 38 | echo -n "Enter new version (Current branch: $BRANCH_CURRENT | Previous version: $PREVIOUS_VERSION): " |
12 | 39 | read NEW_VERSION |
13 | | -echo -e "# Release v$NEW_VERSION\n\n$CHANGES\n\n$(cat CHANGELOG.md)" > CHANGELOG.md |
| 40 | + |
| 41 | +# Update changelog |
| 42 | +echo -e "# Release v[$NEW_VERSION]($REPO_URL/tags/$NEW_VERSION)\n\n$CHANGES\n\n$(cat CHANGELOG.md)" > CHANGELOG.md |
14 | 43 | git add CHANGELOG.md |
15 | | -git commit -m "Release v$NEW_VERSION" |
16 | | -git tag $NEW_VERSION |
17 | | -git push origin --tags |
| 44 | +git commit -m -q "Release v$NEW_VERSION" |
| 45 | + |
| 46 | +# Create new tag with changes |
| 47 | +git tag $NEW_VERSION -q -m $"$CHANGES" |
| 48 | +echo -e "$PREFIX Pushing..." |
| 49 | + |
| 50 | +# Push changes with new tag |
| 51 | +git push origin --follow-tags |
| 52 | + |
| 53 | +# Open merge request url with preset changes |
18 | 54 | xdg-open "$REPO_URL/merge_requests/new?utf8=✓&merge_request[source_branch]=$BRANCH_1&merge_request[target_branch]=$BRANCH_2&merge_request[title]=$NEW_VERSION&merge_request[description]=$DESCRIPTION" |
| 55 | +echo -e "$PREFIX Don't forget to notify your teammates about new release!" |
0 commit comments