]>
Commit | Line | Data |
---|---|---|
1 | #!/bin/bash | |
2 | ||
3 | set -eu | |
4 | ||
5 | shutdown() { | |
6 | # Get our process group id | |
7 | # shellcheck disable=SC2009 | |
8 | PGID=$(ps -o pgid= $$ | grep -o "[0-9]*") | |
9 | ||
10 | # Kill it in a new new process group | |
11 | setsid kill -- -"$PGID" | |
12 | exit 0 | |
13 | } | |
14 | ||
15 | trap "shutdown" SIGINT SIGTERM | |
16 | ||
17 | if [ -z "$1" ]; then | |
18 | echo "Need version as argument" | |
19 | exit -1 | |
20 | fi | |
21 | ||
22 | if [ -z "$GITHUB_TOKEN" ]; then | |
23 | echo "Need GITHUB_TOKEN env set." | |
24 | exit -1 | |
25 | fi | |
26 | ||
27 | maintainer_public_key=${MAINTAINER_GPG:-"583A612D890159BE"} | |
28 | ||
29 | branch=$(git symbolic-ref --short -q HEAD) | |
30 | if [ "$branch" != "develop" ] && [[ "$branch" != release/* ]]; then | |
31 | echo "Need to be on develop or release branch." | |
32 | exit -1 | |
33 | fi | |
34 | ||
35 | version="v$1" | |
36 | github_prerelease_option="" | |
37 | if [[ "$version" = *"-alpha."* ]] || [[ "$version" = *"-beta."* ]] || [[ "$version" = *"-rc."* ]]; then | |
38 | echo -e "This is a pre-release.\n" | |
39 | github_prerelease_option="--pre-release" | |
40 | fi | |
41 | ||
42 | directory_name="peertube-$version" | |
43 | zip_name="peertube-$version.zip" | |
44 | tar_name="peertube-$version.tar.xz" | |
45 | ||
46 | changelog=$(awk -v version="$version" '/## v/ { printit = $2 == version }; printit;' CHANGELOG.md | grep -v "## $version" | sed '1{/^$/d}') | |
47 | ||
48 | printf "Changelog will be:\\n\\n%s\\n\\n" "$changelog" | |
49 | ||
50 | read -p "Are you sure to release? " -n 1 -r | |
51 | echo | |
52 | if [[ ! $REPLY =~ ^[Yy]$ ]]; then | |
53 | exit 0 | |
54 | fi | |
55 | ||
56 | ( | |
57 | cd client | |
58 | npm version --no-git-tag-version --no-commit-hooks "$1" | |
59 | ) | |
60 | ||
61 | npm version -f --no-git-tag-version --no-commit-hooks "$1" | |
62 | ||
63 | git commit package.json client/package.json ./support/doc/api/openapi.yaml -m "Bumped to version $version" | |
64 | git tag -s -a "$version" -m "$version" | |
65 | ||
66 | npm run build -- --source-map | |
67 | rm -f "./client/dist/en-US/stats.json" | |
68 | rm -f "./client/dist/embed-stats.json" | |
69 | ||
70 | # Creating the archives | |
71 | ( | |
72 | # local variables | |
73 | directories_to_archive=("$directory_name/CREDITS.md" "$directory_name/FAQ.md" \ | |
74 | "$directory_name/LICENSE" "$directory_name/README.md" \ | |
75 | "$directory_name/client/dist/" "$directory_name/client/yarn.lock" \ | |
76 | "$directory_name/client/package.json" "$directory_name/config" \ | |
77 | "$directory_name/dist" "$directory_name/package.json" \ | |
78 | "$directory_name/scripts" "$directory_name/support" \ | |
79 | "$directory_name/yarn.lock") | |
80 | ||
81 | # temporary setup | |
82 | cd .. | |
83 | ln -s "PeerTube" "$directory_name" | |
84 | ||
85 | # archive creation + signing | |
86 | zip -9 -r "PeerTube/$zip_name" "${directories_to_archive[@]}" | |
87 | gpg --armor --detach-sign -u "$maintainer_public_key" "PeerTube/$zip_name" | |
88 | XZ_OPT="-e9 -T0" tar cfJ "PeerTube/$tar_name" "${directories_to_archive[@]}" | |
89 | gpg --armor --detach-sign -u "$maintainer_public_key" "PeerTube/$tar_name" | |
90 | ||
91 | # temporary setup destruction | |
92 | rm "$directory_name" | |
93 | ) | |
94 | ||
95 | # Creating the release on GitHub, with the created archives | |
96 | ( | |
97 | git push origin --tag | |
98 | ||
99 | if [ -z "$github_prerelease_option" ]; then | |
100 | github-release release --user chocobozzz --repo peertube --tag "$version" --name "$version" --description "$changelog" | |
101 | else | |
102 | github-release release --user chocobozzz --repo peertube --tag "$version" --name "$version" --description "$changelog" "$github_prerelease_option" | |
103 | fi | |
104 | ||
105 | github-release upload --user chocobozzz --repo peertube --tag "$version" --name "$zip_name" --file "$zip_name" | |
106 | github-release upload --user chocobozzz --repo peertube --tag "$version" --name "$zip_name.asc" --file "$zip_name.asc" | |
107 | github-release upload --user chocobozzz --repo peertube --tag "$version" --name "$tar_name" --file "$tar_name" | |
108 | github-release upload --user chocobozzz --repo peertube --tag "$version" --name "$tar_name.asc" --file "$tar_name.asc" | |
109 | ||
110 | git push origin "$branch" | |
111 | ||
112 | # Only update master if it is not a pre release | |
113 | if [ -z "$github_prerelease_option" ]; then | |
114 | # Update master branch | |
115 | git checkout master | |
116 | git merge "$branch" | |
117 | git push origin master | |
118 | git checkout "$branch" | |
119 | fi | |
120 | ) | |
121 | ||
122 | # Release types package | |
123 | npm run generate-types-package | |
124 | cd types/dist | |
125 | npm publish --access public |