-
Notifications
You must be signed in to change notification settings - Fork 1
/
release.sh
executable file
·138 lines (109 loc) · 2.72 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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/usr/bin/env bash
#
# This script creates a new release and is therefore not meant to be
# used by anyone but the project manager. It will therefore remain
# undocumented and may assume some specific environment.
abort_release()
{
echo "Aborting."
exit 1
}
display_app_version()
{
local app_version
app_version="$(jq --raw-output '.version' 'package.json')"
echo "Current version for app ${app_name}: ${app_version}"
}
update_app_version()
{
local new_version="$1"
local tmp_file="package.json.tmp"
local current_date=$(date "+%Y-%m-%d")
jq ".version = \"${new_version}\"" "package.json" >"${tmp_file}"
mv "${tmp_file}" "package.json"
sed -i "s/## \[Unreleased\]/## \[${new_version}\] - ${current_date}/" "CHANGELOG.md"
update_dependencies
}
update_dependencies()
{
npm update
npm outdated
}
check_working_directory()
{
local status
status=$(git status --untracked-files="no" --porcelain="2")
if [[ "$status" != "" ]]; then
echo "Unable to create a new release while the working directory is not clean."
abort_release
fi
}
build_assets()
{
local new_version="$1"
local asset_dir="sake-app_v${new_version}"
npm run --silent build >/dev/null
cp -r "dist" "${asset_dir}"
cp "LICENSE-APACHE-2.0.txt" "${asset_dir}"
cp "LICENSE-MIT.txt" "${asset_dir}"
rm -f "${asset_dir}/manifest.webmanifest" "${asset_dir}/sw.js"
tar czf "${asset_dir}.tar.gz" "${asset_dir}"
zip -q -r "${asset_dir}.zip" "${asset_dir}"
rm -rf "${asset_dir}"
echo
echo "Assets created:"
echo " - ${asset_dir}.tar.gz"
echo " - ${asset_dir}.zip"
}
commit_new_version()
{
local new_version="$1"
git add --update
git commit -m "SAKE-app v${new_version}"
git tag -a "v${new_version}" -m "SAKE-app v${new_version}"
echo
echo "Version ${new_version} has been committed and tagged."
echo "If everything is correct, you can publish if using:"
echo " git push"
echo " git push origin v${new_version}"
}
release_new_version()
{
local new_version="$1"
local confirm_git_diff
update_app_version "${new_version}"
git diff
echo
echo -n "Does everything seems ok? [y|N] "
read -r confirm_git_diff
case "${confirm_git_diff}" in
y|Y) commit_new_version "${new_version}"
build_assets "${new_version}";;
*)
git restore "."
abort_release
;;
esac
}
main()
{
local new_version
local confirm_release
update_dependencies
check_working_directory
display_app_version
echo
echo -n "Enter the new version: "
read -r new_version
export LC_TIME="en_US.UTF-8"
current_date=$(date "+%b %d, %Y")
echo
echo "You are about to release version ${new_version} on ${current_date}"
echo -n "Are you sure? [y/N] "
read -r confirm_release
case "${confirm_release}" in
y|Y) release_new_version "${new_version}";;
*) abort_release;;
esac
}
main