Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
mikf
GitHub Repository: mikf/gallery-dl
Path: blob/master/scripts/release.sh
5457 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' 19000000
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' 12000000
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
supportedsites() {
154
cd "${ROOTDIR}"
155
echo Checking if "${SUPPORTEDSITES}" is up to date
156
157
./scripts/supportedsites.py
158
if ! git diff --quiet "${SUPPORTEDSITES}"; then
159
echo "updated ${SUPPORTEDSITES} contains changes"
160
exit 4
161
fi
162
}
163
164
upload-git() {
165
cd "${ROOTDIR}"
166
echo Pushing changes to github
167
168
mv -- "${CHANGELOG}.orig" "${CHANGELOG}" || true
169
git add "gallery_dl/version.py" "${README}" "${CHANGELOG}"
170
git commit -S -m "release version ${NEWVERSION}"
171
git tag -s -m "version ${NEWVERSION}" "v${NEWVERSION}"
172
git push --atomic origin master "v${NEWVERSION}"
173
}
174
175
upload-pypi() {
176
cd "${ROOTDIR}/dist"
177
echo Uploading to PyPI
178
179
twine upload gallery_dl-${NEWVERSION}*
180
}
181
182
183
ROOTDIR="$(realpath "$(dirname "$0")/..")/"
184
README="README.rst"
185
CHANGELOG="CHANGELOG.md"
186
SUPPORTEDSITES="./docs/supportedsites.md"
187
188
LASTTAG="$(git describe --abbrev=0 --tags)"
189
OLDVERSION="${LASTTAG#v}"
190
PYVERSION="$(python -c "import gallery_dl as g; print(g.__version__)")"
191
192
if [[ "$1" ]]; then
193
NEWVERSION="$1"
194
else
195
NEWVERSION="${PYVERSION%-dev}"
196
fi
197
198
if [[ ! $NEWVERSION =~ [0-9]+\.[0-9]+\.[0-9]+(-[a-z]+(\.[0-9]+)?)?$ ]]; then
199
echo "invalid version: $NEWVERSION"
200
exit 2
201
fi
202
203
204
prompt
205
supportedsites
206
cleanup
207
update
208
changelog
209
build-python
210
build-linux
211
build-windows
212
build-windows_x86
213
sign
214
upload-pypi
215
upload-git
216
update-dev
217
218