-
Notifications
You must be signed in to change notification settings - Fork 0
/
changelog.sh
83 lines (61 loc) · 1.68 KB
/
changelog.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
#!/usr/bin/env bash
set -e
function check_tags_version() {
projectUrlCommit="https://github.com/RenanLukas/ShadowLayout/commit/"
currentTag=$(git describe --abbrev=0 --tags)
previousTag=$(git describe --abbrev=0 ${currentTag}^)
}
function check_changelog() {
if [[ ! -f ./CHANGELOG.md ]]; then
touch CHANGELOG.md
fi
}
function check_current_tag() {
local tag=${currentTag}
if grep -w ${tag} CHANGELOG.md; then
echo "The tag:${tag} is present in changelog file"
exit 1
fi
}
function get_tag_added() {
local contentAdded tag
tag="Added"
contentAdded=$(cat << EOM
#### ${tag}
$(git log --grep="${tag}:" --pretty=format:"* [%ad] [%h](${projectUrlCommit}%h) - %s" --decorate --date=format:'%d/%m/%Y' ${currentTag}...${previousTag})
EOM
)
echo "${contentAdded}" | sed -e 's/Added: //g'
}
function get_tag_removed() {
local contentRemoved tag
tag="Remove"
contentRemoved=$(cat << EOM
#### ${tag}
$(git log --grep="${tag}:" --pretty=format:"* [%ad] [%h](${projectUrlCommit}%h) - %s" --decorate --date=format:'%d/%m/%Y' ${currentTag}...${previousTag})
EOM
)
echo "${contentRemoved}" | sed -e 's/Remove: //g'
}
function get_changelog() {
local contentAdded contentRemoved prevChangelogContents
prevChangelogContents=$(cat ./CHANGELOG.md)
contentAdded=$(get_tag_added)
contentRemoved=$(get_tag_removed)
content=$(cat << EOM
# Changelog
## ${currentTag} - $(date +'[%d/%m/%Y]')
${contentAdded}
${contentRemoved}
EOM
)
echo "$content" > CHANGELOG.md
echo "$prevChangelogContents" | sed -e 's/\# Changelog//g' >> CHANGELOG.md
}
function main() {
check_changelog
check_tags_version
check_current_tag
get_changelog
}
main