Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
mikf
GitHub Repository: mikf/gallery-dl
Path: blob/master/scripts/release.sh
8752 views
1
#!/bin/bash
2
set -e
3
4
prompt() {
5
echo "root: ${ROOTDIR} old: ${OLDVERSION} - new: ${NEWVERSION}"
6
read -n 1 -r -p "Proceed? [Y/n] " P
7
echo
8
if [ "$P" == y -o "$P" == Y -o -z "$P" ]; then
9
return 0
10
else
11
exit 1
12
fi
13
}
14
15
cleanup() {
16
cd "${ROOTDIR}"
17
echo Removing old build directory
18
19
if [ -d ./build ]; then
20
rm -rf ./build
21
fi
22
}
23
24
update() {
25
cd "${ROOTDIR}"
26
echo Updating version to ${NEWVERSION}
27
28
sed -i "s#\"${PYVERSION}\"#\"${NEWVERSION}\"#" "gallery_dl/version.py"
29
sed -i "s#v[0-9]\.[0-9]\+\.[0-9]\+#v${NEWVERSION}#" "${README}"
30
make man
31
}
32
33
update-dev() {
34
cd "${ROOTDIR}"
35
36
IFS="." read MAJOR MINOR BUILD <<< "${NEWVERSION}"
37
BUILD=$((BUILD+1))
38
39
# update version to -dev
40
sed -i "s#\"${NEWVERSION}\"#\"${MAJOR}.${MINOR}.${BUILD}-dev\"#" "gallery_dl/version.py"
41
42
git add "gallery_dl/version.py"
43
}
44
45
build-python() {
46
cd "${ROOTDIR}"
47
echo Building sdist and wheel
48
49
python -m build
50
}
51
52
build-linux() {
53
cd "${ROOTDIR}"
54
echo Building Linux executable
55
56
build-vm 'ubuntu22.04' 'gallery-dl.bin' 'gallery-dl.bin' 'linux' 24000000
57
}
58
59
build-windows() {
60
cd "${ROOTDIR}"
61
echo Building Windows executable
62
63
build-vm 'win10' 'gallery-dl.exe' 'gallery-dl.exe' 'windows' 21000000
64
}
65
66
build-windows_x86() {
67
cd "${ROOTDIR}"
68
echo Building Windows X86 executable
69
70
build-vm 'windows7_x86_sp1' 'gallery-dl_x86.exe' 'gallery-dl.exe' 'windows_x86' 13000000
71
}
72
73
build-vm() {
74
VMNAME="$1"
75
BINNAME="$2"
76
TMPNAME="$3"
77
LABEL="$4"
78
MINSIZE="$5"
79
TMPPATH="/tmp/gallery-dl/dist/$TMPNAME"
80
81
# launch VM
82
vmstart "$VMNAME" &
83
disown
84
85
# copy source files
86
mkdir -p /tmp/gallery-dl/dist
87
cp -a -t /tmp/gallery-dl -- \
88
./gallery_dl ./scripts ./data ./setup.py ./README.rst
89
90
# update __variant__
91
sed -i \
92
-e "s#\(__variant__ *=\).*#\1 \"stable/${LABEL}\"#" \
93
/tmp/gallery-dl/gallery_dl/version.py
94
95
# remove old executable
96
rm -f "./dist/$BINNAME"
97
98
# wait for new executable
99
while true; do
100
sleep 5
101
102
if [ ! -e "$TMPPATH" ]; then
103
continue
104
fi
105
106
sleep 2
107
SIZE="$(stat -c %s "$TMPPATH")"
108
if [ "$SIZE" -lt "$MINSIZE" ]; then
109
echo Size of "'$TMPPATH'" is less than "$MINSIZE" bytes "($SIZE)"
110
continue
111
fi
112
113
break
114
done
115
116
# move
117
mv "$TMPPATH" "./dist/$BINNAME"
118
119
rm -r /tmp/gallery-dl
120
}
121
122
sign() {
123
cd "${ROOTDIR}/dist"
124
echo Signing files
125
126
gpg --detach-sign --armor gallery_dl-${NEWVERSION}-py3-none-any.whl
127
gpg --detach-sign --armor gallery_dl-${NEWVERSION}.tar.gz
128
gpg --detach-sign --yes gallery-dl.exe
129
gpg --detach-sign --yes gallery-dl_x86.exe
130
gpg --detach-sign --yes gallery-dl.bin
131
}
132
133
changelog() {
134
cd "${ROOTDIR}"
135
echo Updating "${CHANGELOG}"
136
137
# - replace "#NN" with link to actual issue
138
# - insert new version and date
139
sed -i \
140
-e "s*\([( ]\)#\([0-9]\+\)*\1[#\2](https://github.com/mikf/gallery-dl/issues/\2)*g" \
141
-e "s*^## \w\+\$*## ${NEWVERSION} - $(date +%Y-%m-%d)*" \
142
"${CHANGELOG}"
143
144
mv --no-clobber -- "${CHANGELOG}" "${CHANGELOG}.orig"
145
146
# - remove all but the latest entries
147
sed -n \
148
-e '/^## /,/^$/ { /^$/q; p }' \
149
"${CHANGELOG}.orig" \
150
> "${CHANGELOG}"
151
}
152
153
prepare() {
154
cd "${ROOTDIR}"
155
156
echo Checking if "${SUPPORTEDSITES}" is up to date
157
./scripts/supportedsites.py
158
if ! git diff --quiet -- "${SUPPORTEDSITES}"; then
159
echo "updated ${SUPPORTEDSITES} contains changes"
160
exit 4
161
fi
162
163
echo Checking changed files
164
DIFF="$(git diff --name-only)"
165
if [[ "$DIFF" != "${CHANGELOG}" ]]; then
166
if [[ "$DIFF" != *"${CHANGELOG}"* ]]; then
167
echo "Missing ${NEWVERSION} '${CHANGELOG}' entries"
168
else
169
printf "Uncommited changes to files other than '${CHANGELOG}':\n%s\n" "$DIFF"
170
fi
171
exit 4
172
fi
173
174
echo Syncing local branch with origin/master
175
git pull --autostash
176
}
177
178
upload-git() {
179
cd "${ROOTDIR}"
180
echo Pushing changes to github
181
182
mv -- "${CHANGELOG}.orig" "${CHANGELOG}" || true
183
git add "gallery_dl/version.py" "${README}" "${CHANGELOG}"
184
git commit -S -m "release version ${NEWVERSION}"
185
git tag -s -m "version ${NEWVERSION}" "v${NEWVERSION}"
186
git push --atomic origin master "v${NEWVERSION}"
187
}
188
189
upload-pypi() {
190
cd "${ROOTDIR}/dist"
191
echo Uploading to PyPI
192
193
twine upload gallery_dl-${NEWVERSION}*
194
}
195
196
197
ROOTDIR="$(realpath "$(dirname "$0")/..")/"
198
README="README.rst"
199
CHANGELOG="CHANGELOG.md"
200
SUPPORTEDSITES="./docs/supportedsites.md"
201
202
LASTTAG="$(git describe --abbrev=0 --tags)"
203
OLDVERSION="${LASTTAG#v}"
204
PYVERSION="$(python -c "import gallery_dl as g; print(g.__version__)")"
205
206
if [[ "$1" ]]; then
207
NEWVERSION="$1"
208
else
209
NEWVERSION="${PYVERSION%-dev}"
210
fi
211
212
if [[ ! $NEWVERSION =~ [0-9]+\.[0-9]+\.[0-9]+(-[a-z]+(\.[0-9]+)?)?$ ]]; then
213
echo "invalid version: $NEWVERSION"
214
exit 2
215
fi
216
217
218
prompt
219
prepare
220
cleanup
221
update
222
changelog
223
build-python
224
build-linux
225
build-windows
226
build-windows_x86
227
sign
228
upload-pypi
229
upload-git
230
update-dev
231
232