Skip to content

Commit 346095b

Browse files
committed
chore(ci): improve release script
1 parent 2f089bd commit 346095b

File tree

1 file changed

+59
-30
lines changed

1 file changed

+59
-30
lines changed

scripts/releaser.sh

Lines changed: 59 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,72 @@
11
#!/bin/bash
22
set -e
33

4-
current_tag="${GITHUB_REF#refs/tags/}"
5-
start_ref="HEAD"
4+
65

76
function generate_changelog {
8-
# Find the previous release on the same branch, skipping prereleases if the
9-
# current tag is a full release
10-
previous_tag=""
11-
while [[ -z $previous_tag || ( $previous_tag == *-* && $current_tag != *-* ) ]]; do
12-
previous_tag="$(git describe --tags "$start_ref"^ --abbrev=0 --match "v*")"
13-
start_ref="$previous_tag"
14-
done
15-
16-
git log "$previous_tag".. --reverse --merges --oneline --grep='Merge pull request #' | \
17-
while read -r sha title; do
18-
pr_num="$(grep -o '#[[:digit:]]\+' <<<"$title")"
19-
pr_desc="$(git show -s --format=%b "$sha" | sed -n '1,/^$/p' | tr $'\n' ' ')"
20-
pr_author="$(gh pr view "$pr_num" | grep "author:" | awk '{ print $2 }' | tr $'\n' ' ')"
21-
printf "* %s (%s) @%s\n\n" "$pr_desc" "$pr_num" "$pr_author"
22-
done
23-
24-
git log "$previous_tag".. --reverse --oneline --grep='(#' | \
25-
while read -r sha title; do
26-
pr_num="$(grep -o '#[[:digit:]]\+' <<<"$title")"
27-
pr_desc="$(git show -s --format=%s "$sha")"
28-
pr_author="$(gh pr view "$pr_num" | grep "author:" | awk '{ print $2 }' | tr $'\n' ' ')"
29-
printf "* %s (%s) @%s\n\n" "$pr_desc" "$pr_num" "$pr_author"
30-
done
7+
MERGED_PRS="$1"
8+
9+
echo
10+
echo "## :rocket: Features"
11+
echo
12+
cat "${MERGED_PRS}" | grep feat
13+
14+
echo
15+
echo "## :bug: Bug fixes"
16+
echo
17+
cat "${MERGED_PRS}" | grep fix
18+
19+
echo
20+
echo "## :memo: Documentation"
21+
echo
22+
cat "${MERGED_PRS}" | grep doc
23+
24+
echo
25+
echo "## :package: Others"
26+
echo
27+
cat "${MERGED_PRS}" | grep -v feat | grep -v fix | grep -v doc
3128
}
3229

3330
function create_release {
34-
generate_changelog | sort | gh release create "$1" -t "$1" -F -
31+
generate_changelog | sort # | gh release create "$1" -t "$1" -F -
32+
}
33+
34+
function latest_release {
35+
gh release list -L 10 --json name,isLatest --jq '.[] | select(.isLatest)|.name'
36+
}
37+
38+
function latest_release_date {
39+
gh release list -L 10 --json name,isLatest,publishedAt --jq '.[] | select(.isLatest)|.publishedAt'
40+
}
41+
42+
function latest_release_ts {
43+
gh release list -L 10 --json name,isLatest,publishedAt --jq '.[] | select(.isLatest)|.publishedAt | fromdateiso8601'
3544
}
3645

3746
if [ $# -ne 1 ]; then
38-
echo "$0: usage: releaser [release number]"
39-
echo "example: ./releaser.sh v0.7.5"
40-
exit 1
47+
echo "** DRY RUN **"
48+
fi
49+
50+
printf "Latest release: %s (%s)\n" $(latest_release) $(latest_release_date)
51+
52+
TIMESTAMP=$(latest_release_ts)
53+
MERGED_PRS=$(mktemp)
54+
gh pr list \
55+
--state merged \
56+
--json author,number,mergeCommit,mergedAt,url,title \
57+
--limit 999 \
58+
--jq ".[] |
59+
select (.mergedAt | fromdateiso8601 > ${TIMESTAMP}) | \
60+
\"- \(.title) by @\(.author.login) in #\(.number)\"
61+
" | sort > "${MERGED_PRS}"
62+
63+
if [ $# -ne 1 ]; then
64+
generate_changelog "${MERGED_PRS}"
65+
echo "** DRY RUN **"
66+
echo
67+
echo "To create a release: ./releaser.sh v0.17.0"
68+
else
69+
generate_changelog "${MERGED_PRS}" | gh release create "$1" -t "$1" -F -
4170
fi
4271

43-
create_release "$1"
72+
rm -f "${MERGED_PRS}"

0 commit comments

Comments
 (0)