-
Notifications
You must be signed in to change notification settings - Fork 0
/
release.sh
executable file
·120 lines (104 loc) · 3.69 KB
/
release.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/bin/bash
# MIT License
#
# Copyright (c) 2017 Mauro Bringolf
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
CAPITALIZE() {
first_capital="$(echo "$1"|cut -c1|tr '[:lower:]' '[:upper:]' )"
rest_regular="$(echo "$1"|cut -c2-)"
echo "$first_capital$rest_regular"
}
CREATE_CHANGELOG() {
# Definition of default commit types
COMMIT_TYPES=( breaking bugfix feature frontend backend workflow testing documentation internal )
# String to accumulate changelog
CONTENT=""
# Get all commits with type annotations and make them paragraphs.
for TYPE in "${COMMIT_TYPES[@]}"
do
if [ -z "$1" ]
then
PARAGRAPH="$(git log --format="* %s (%h)" --grep="^\[${TYPE}\]")"
else
PARAGRAPH="$(git log "$1"..HEAD --format="* %s (%h)" --grep="^\[${TYPE}\]")"
fi
if [ ! -z "$PARAGRAPH" ]
then
TITLE="$(CAPITALIZE "$TYPE")"
PARAGRAPH="${PARAGRAPH//\[$TYPE\] /}"
CONTENT="$CONTENT## $TITLE\n\n$PARAGRAPH\n\n"
fi
done
# Regex used to find commits without types
TYPES_REGEX=""
for TYPE in "${COMMIT_TYPES[@]}"
do
TYPES_REGEX="$TYPES_REGEX\[$TYPE\]\|"
done
TYPES_REGEX="$TYPES_REGEX\[skip-changelog\]"
# Get all commit without type annotation and make them another paragraph.
if [ -z "$1" ]
then
PARAGRAPH="$(git log --format=";* %s (%h);")"
else
PARAGRAPH="$(git log "$1"..HEAD --format=";* %s (%h);")"
fi
OIFS="$IFS"
IFS=";"
FILTERED_PARAGRAPH=""
for COMMIT in $PARAGRAPH
do
TRIMMED_COMMIT="$(echo "$COMMIT" | xargs)"
if [ ! -z "$TRIMMED_COMMIT" ] && ! echo "$TRIMMED_COMMIT" | grep -q "$TYPES_REGEX"
then
FILTERED_PARAGRAPH="$FILTERED_PARAGRAPH$TRIMMED_COMMIT\n"
fi
done
IFS="$OIFS"
# Only add to content if there are commits without type annotations.
if [ ! -z "$FILTERED_PARAGRAPH" ]
then
CONTENT="\n\n## CHANGE LOGS\n\n$FILTERED_PARAGRAPH\n\n$CONTENT"
fi
# Output changelog
echo -e "$CONTENT"
}
# Generate changelog either from last tag or from beginning
if [ -z "$(git tag)" ]
then
CONTENT=$(CREATE_CHANGELOG)
else
LATEST_RELEASE="$(git describe --tags --abbrev=0)"
CONTENT=$(CREATE_CHANGELOG "${LATEST_RELEASE}")
fi
if [ -z "$CONTENT" ]
then
echo -e "No changes made since last release $LATEST_RELEASE."
exit
fi
RELEASE_VERSION=$(awk -F "\"" '/[[:digit:]]{4}_[[:digit:]]{2}_[[:digit:]]{2}\.[[:digit:]]{2}_[[:digit:]]{2}_[[:digit:]]{2}\.0\.[a-zA-Z0-9]{7}/{ print $2 }' main.go)
CONTENT="$RELEASE_VERSION$CONTENT"
echo "$CONTENT"
PLATFORM=$1
if [ "$PLATFORM" == "win" ]; then
hub release create -a LomoUpdateWin.zip -m "$CONTENT" $RELEASE_VERSION
else
hub release create -a LomoUpdateOSX.zip -m "$CONTENT" $RELEASE_VERSION
fi