3 _GH_RDNN
="com.github.tkashkin.gamehub"
6 _GH_BRANCH
="${APPVEYOR_REPO_BRANCH:-$(git symbolic-ref --short -q HEAD)}"
7 _GH_COMMIT
="$(git rev-parse HEAD)"
8 _GH_COMMIT_SHORT
="$(git rev-parse --short HEAD)"
11 _SCRIPTROOT
="$(dirname "$
(readlink
-f "$0")")"
12 _LINUXDEPLOYQT
="linuxdeployqt-5-x86_64.AppImage"
14 _SOURCE
="${APPVEYOR_BUILD_VERSION:-$_GH_VERSION-$_GH_BRANCH-local}"
15 _VERSION
="$_SOURCE-$_GH_COMMIT_SHORT"
16 _BUILD_VERSION
="${APPVEYOR_BUILD_VERSION:-$_VERSION}"
17 _DEB_TARGET_DISTRO_ID
="ubuntu"
18 _DEB_TARGET_DISTRO_NAMES
=()
19 _DEB_TARGET_DISTRO_VERSIONS
=()
24 export CFLAGS
="$CFLAGS -O0"
25 export DEB_BUILD_OPTIONS
="noopt nostrip nocheck"
27 if [[ "$APPVEYOR_BUILD_WORKER_IMAGE" = "Ubuntu1604" ]]; then
28 _DEB_TARGET_DISTRO_NAMES
=("xenial")
29 _DEB_TARGET_DISTRO_VERSIONS
=("16.04")
33 elif [[ "$APPVEYOR_BUILD_WORKER_IMAGE" = "Ubuntu1804" ]]; then
34 _DEB_TARGET_DISTRO_NAMES
=("bionic" "disco" "eoan")
35 _DEB_TARGET_DISTRO_VERSIONS
=("18.04" "19.04" "19.10")
38 source "/etc/os-release"
39 _DEB_TARGET_DISTRO_ID
="$ID"
40 _DEB_TARGET_DISTRO_NAMES
=("$VERSION_CODENAME")
41 _DEB_TARGET_DISTRO_VERSIONS
=("$VERSION_ID")
44 BUILDROOT
="$_ROOT/build/appimage"
45 BUILDDIR
="$BUILDROOT/build"
46 APPDIR
="$BUILDROOT/appdir"
48 ACTION
=${1:-build_local}
49 CHECKRT
=${2:---checkrt}
55 echo "[scripts/build.sh] Patching $file"
56 sed -i -e 's#/usr#././#g' "$file"
66 echo "[scripts/build.sh] Moving $lib"
67 [ -e "$src/$lib" ] && mv -f "$src/$lib" "$dest"
68 [ -e "$dest/$lib" ] && ldd
"$dest/$lib" |
awk '{print $1}' |
while read dep
; do
69 [ -e "$src/$dep" ] && echo "[scripts/build.sh] $dep <- $lib"
70 if [ "$recursive" = "true" ]; then
71 [ -e "$src/$dep" ] && _mv_deps
"$dep" "$src" "$dest" "$recursive"
73 [ -e "$src/$dep" ] && mv -f "$src/$dep" "$dest"
82 if [[ -n "$keys_enc_secret" ]]; then
83 echo "[scripts/build.sh] Importing keys"
84 sudo apt
install -y "$_GPG_PACKAGE"
85 curl
-sflL "https://raw.githubusercontent.com/appveyor/secure-file/master/install.sh" | bash
-e -
86 .
/appveyor-tools
/secure-file
-decrypt "$_SCRIPTROOT/launchpad/key_pub.gpg.enc" -secret $keys_enc_secret
87 .
/appveyor-tools
/secure-file
-decrypt "$_SCRIPTROOT/launchpad/key_sec.gpg.enc" -secret $keys_enc_secret
88 .
/appveyor-tools
/secure-file
-decrypt "$_SCRIPTROOT/launchpad/passphrase.enc" -secret $keys_enc_secret
89 "$_GPG_BINARY" --no-use-agent --import "$_SCRIPTROOT/launchpad/key_pub.gpg"
90 "$_GPG_BINARY" --no-use-agent --allow-secret-key-import --import "$_SCRIPTROOT/launchpad/key_sec.gpg"
91 sudo apt-key add
"$_SCRIPTROOT/launchpad/key_pub.gpg"
92 rm -f "$_SCRIPTROOT/launchpad/key_pub.gpg" "$_SCRIPTROOT/launchpad/key_sec.gpg"
99 echo "[scripts/build.sh] Installing dependencies"
100 sudo DEBIAN_FRONTEND
="noninteractive" add-apt-repository ppa
:elementary-os
/stable
-y
101 sudo DEBIAN_FRONTEND
="noninteractive" add-apt-repository ppa
:elementary-os
/os-patches
-y
102 sudo DEBIAN_FRONTEND
="noninteractive" add-apt-repository ppa
:elementary-os
/daily
-y
103 sudo DEBIAN_FRONTEND
="noninteractive" add-apt-repository ppa
:vala-team
/next
-y
104 sudo DEBIAN_FRONTEND
="noninteractive" apt update
-qq
105 sudo DEBIAN_FRONTEND
="noninteractive" apt
install -y meson valac checkinstall build-essential dput fakeroot moreutils git-buildpackage elementary-sdk libgtk-3-dev libglib2.0
-dev libwebkit2gtk-4.0
-dev libjson-glib-dev libgee-0.8
-dev libsoup2.4
-dev libsqlite3-dev libxml2-dev libpolkit-gobject-1-dev
106 #sudo apt full-upgrade -y
107 if [[ "$APPVEYOR_BUILD_WORKER_IMAGE" = "Ubuntu1604" ]]; then
108 sudo DEBIAN_FRONTEND
="noninteractive" dpkg
-i "$_SCRIPTROOT/deps/xenial/"*.deb
110 sudo DEBIAN_FRONTEND
="noninteractive" apt
install -y libmanette-0.2
-dev libxtst-dev libx11-dev
118 echo "[scripts/build.sh] Generating changelogs"
120 if [[ -z `git config user.name` ]]; then
121 git config user.email
"ci@localhost"
122 git config user.name
"CI"
127 git tag
-a $_BUILD_VERSION -m $_BUILD_VERSION
129 > "debian/changelog.in"
130 > "data/$_GH_RDNN.changelog.xml"
133 git tag
--sort v
:refname |
while read tag
; do
134 if [[ "$prevtag" == "initial" ]]; then
139 commitmsg
=`git log --pretty=format:' * %s [%h]' $prevtag..$tag`
142 echo "$_GH_RDNN ($tag~\$VERSION_SUFFIX) \$DISTRO; urgency=low"
143 echo "${commitmsg:- * <no commit message>}"
144 git log
-n1 --pretty='format:%n -- %aN <%aE> %aD%n%n' $tag^..
$tag
145 ) |
cat - "debian/changelog.in" | sponge
"debian/changelog.in"
147 xml_r_type
="development" && [[ "$tag" == *"-master" ]] && xml_r_type
="stable"
148 xml_r_date
=`git log -n1 --date=short --pretty='format:date="%cd" timestamp="%ct"' $tag^..$tag`
149 xml_r_end
=" />" && [[ -n "$commitmsg" ]] && xml_r_end
=">"
150 xml_ver
=`echo "$tag" | sed -E "s|-|.|g"`
153 echo -e "\t\t<release type=\"$xml_r_type\" version=\"$xml_ver\" $xml_r_date$xml_r_end"
155 if [[ -n "$commitmsg" ]]; then
156 echo -e "\t\t\t<description>"
157 echo -e "\t\t\t\t<ul>"
159 echo "$commitmsg" |
sed -E "s|<|\<|g; s|>|\>|g; s| \* (.*)|\t\t\t\t\t<li>\1</li>|g"
161 echo -e "\t\t\t\t</ul>"
162 echo -e "\t\t\t</description>"
163 echo -e "\t\t</release>"
165 ) |
cat - "data/$_GH_RDNN.changelog.xml" | sponge
"data/$_GH_RDNN.changelog.xml"
170 git tag
-d $_BUILD_VERSION
177 sed "s/\$_GH_BRANCH/$_GH_BRANCH/g; s/\$_GH_COMMIT_SHORT/$_GH_COMMIT_SHORT/g; s/\$_GH_COMMIT/$_GH_COMMIT/g" "debian/rules.in" > "debian/rules"
178 if [[ "$APPVEYOR_BUILD_WORKER_IMAGE" = "Ubuntu1604" ]]; then
179 sed "s/libmanette-0.2-dev,//g" "debian/control.in" > "debian/control"
181 cp -f "debian/control.in" "debian/control"
184 for i
in "${!_DEB_TARGET_DISTRO_NAMES[@]}"; do
185 _DEB_TARGET_DISTRO_NAME
="${_DEB_TARGET_DISTRO_NAMES[$i]}"
186 _DEB_TARGET_DISTRO_VERSION
="${_DEB_TARGET_DISTRO_VERSIONS[$i]}"
187 _DEB_VERSION_SUFFIX
="${_DEB_TARGET_DISTRO_ID}${_DEB_TARGET_DISTRO_VERSION}"
188 _DEB_VERSION
="${_BUILD_VERSION}~${_DEB_VERSION_SUFFIX}"
189 sed "s/\$DISTRO/${_DEB_TARGET_DISTRO_NAME}/g; s/\$VERSION_SUFFIX/${_DEB_VERSION_SUFFIX}/g" "debian/changelog.in" > "debian/changelog"
191 if [[ $i = 0 ]]; then
192 echo "[scripts/build.sh] Building binary package for $_DEB_TARGET_DISTRO_ID $_DEB_TARGET_DISTRO_VERSION ($_DEB_TARGET_DISTRO_NAME)"
193 dpkg-buildpackage
-F -sa -us -uc
194 mkdir
-p "build/$_BUILD_IMAGE"
195 mv ..
/$_GH_RDNN*.deb
"build/${_BUILD_IMAGE}/GameHub-${_BUILD_VERSION}-${_DEB_TARGET_DISTRO_NAME}-amd64.deb"
198 if [[ -e "$_SCRIPTROOT/launchpad/passphrase" && -n "$keys_enc_secret" ]]; then
200 echo "[scripts/build.sh] Building source package for $_DEB_TARGET_DISTRO_ID $_DEB_TARGET_DISTRO_VERSION ($_DEB_TARGET_DISTRO_NAME)"
201 dpkg-buildpackage
-S -sa -us -uc
202 echo "[scripts/build.sh] Signing source package"
203 debsign
-p"$_GPG_BINARY --no-use-agent --passphrase-file $_SCRIPTROOT/launchpad/passphrase --batch" -S -k2744E6BAF20BA10AAE92253F20442B9273408FF9 "../${_GH_RDNN}_${_DEB_VERSION}_source.changes"
204 echo "[scripts/build.sh] Uploading package to launchpad"
205 dput
-u -c "$_SCRIPTROOT/launchpad/dput.cf" "gamehub_${_DEB_TARGET_DISTRO_NAME}" "../${_GH_RDNN}_${_DEB_VERSION}_source.changes"
206 rm "../${_GH_RDNN}_"*
210 rm -f "$_SCRIPTROOT/launchpad/passphrase"
217 echo "[scripts/build.sh] Building"
219 mkdir
-p "$BUILDROOT"
220 meson
"$BUILDDIR" --prefix=/usr
--buildtype=debug
-Ddistro=generic
-Dappimage=true
-Dgit_branch=$_GH_BRANCH -Dgit_commit=$_GH_COMMIT -Dgit_commit_short=$_GH_COMMIT_SHORT
223 DESTDIR
="$APPDIR" ninja
install
230 echo "[scripts/build.sh] Preparing AppImage"
232 wget
-c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/5/$_LINUXDEPLOYQT"
233 chmod a
+x
"./$_LINUXDEPLOYQT"
234 unset QTDIR
; unset QT_PLUGIN_PATH
; unset LD_LIBRARY_PATH
235 export VERSION
="${_BUILD_IMAGE}-${_VERSION}"
236 export LD_LIBRARY_PATH
=$APPDIR/usr
/lib
:$LD_LIBRARY_PATH
237 "./$_LINUXDEPLOYQT" "$APPDIR/usr/share/applications/$_GH_RDNN.desktop" -appimage -no-plugins -no-copy-copyright-files
243 echo "[scripts/build.sh] Tweaking AppImage"
245 rm -f "$APPDIR/AppRun"
246 cp -f "$_SCRIPTROOT/AppRun" "$APPDIR/AppRun"
247 glib-compile-schemas
"$APPDIR/usr/share/glib-2.0/schemas"
250 appimage_bundle_libs
()
253 echo "[scripts/build.sh] Bundling additional libs"
256 mkdir
-p "$APPDIR/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/"
257 cp -rf "/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/injected-bundle/" "$APPDIR/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/"
258 cp -f "/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitNetworkProcess" "$APPDIR/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/"
259 cp -f "/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitStorageProcess" "$APPDIR/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/"
260 cp -f "/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitWebProcess" "$APPDIR/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/"
261 find "$APPDIR/usr/lib/" -maxdepth 1 -type f
-name "libwebkit2gtk-4.0.so.*" -print0 |
while read -d $
'\0' file; do
264 find "$APPDIR/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/" -maxdepth 1 -type f
-print0 |
while read -d $
'\0' file; do
272 echo "[scripts/build.sh] Bundling checkrt libs"
274 cp -f "$_SCRIPTROOT/checkrt.sh" "$APPDIR/checkrt.sh"
275 cp -rf "$_SCRIPTROOT/optlib" "$APPDIR/usr/"
277 echo "[scripts/build.sh] Moving GTK and its dependencies"
278 mkdir
-p "$APPDIR/usr/optlib/libgtk-3.so.0/"
279 _mv_deps
"libgtk-3.so.0" "$APPDIR/usr/lib" "$APPDIR/usr/optlib/libgtk-3.so.0/"
281 echo "[scripts/build.sh] Moving back non-GTK-specific dependencies"
282 find "$APPDIR/usr/lib/" -maxdepth 1 -type f
-not -name "libwebkit2gtk-4.0.so.*" -print0 |
while read -d $
'\0' dep
; do
283 _mv_deps
"$(basename $dep)" "$APPDIR/usr/optlib/libgtk-3.so.0" "$APPDIR/usr/lib/" "false"
286 if [[ "$APPVEYOR_BUILD_WORKER_IMAGE" = "Ubuntu1804" ]]; then
287 echo "[scripts/build.sh] Removing GTK and its dependencies"
288 rm -rf "$APPDIR/usr/optlib/libgtk-3.so.0"
291 for lib
in 'libstdc++.so.6' 'libgcc_s.so.1'; do
292 echo "[scripts/build.sh] Bundling $lib"
293 mkdir
-p "$APPDIR/usr/optlib/$lib"
294 for dir
in "/lib" "/usr/lib"; do
295 libfile
="$dir/x86_64-linux-gnu/$lib"
296 [ -e "$libfile" ] && cp "$libfile" "$APPDIR/usr/optlib/$lib/"
304 echo "[scripts/build.sh] Packing AppImage"
306 unset QTDIR
; unset QT_PLUGIN_PATH
; unset LD_LIBRARY_PATH
307 export VERSION
="${_BUILD_IMAGE}-${_VERSION}"
308 export LD_LIBRARY_PATH
=$APPDIR/usr
/lib
:$LD_LIBRARY_PATH
309 "./$_LINUXDEPLOYQT" --appimage-extract
310 PATH
=.
/squashfs-root
/usr
/bin
:$PATH .
/squashfs-root
/usr
/bin
/appimagetool
--no-appstream "$APPDIR"
316 echo "[scripts/build.sh] Building flatpak package"
319 git add
"debian/changelog" "data/$_GH_RDNN.changelog.xml"
320 git commit
-m "Save generated changelog"
321 mkdir
-p "$_ROOT/build/flatpak"
323 echo "[scripts/build.sh] Installing flatpak"
324 sudo DEBIAN_FRONTEND
="noninteractive" apt
install -y flatpak flatpak-builder
325 flatpak remote-add
--user --if-not-exists flathub https
://flathub.org
/repo
/flathub.flatpakrepo
326 sed "s/\$BRANCH/$_GH_BRANCH/g; s/\$COMMIT_SHORT/$_GH_COMMIT_SHORT/g; s/\$COMMIT/$_GH_COMMIT/g" "$_GH_RDNN.json.in" > "$_GH_RDNN.json"
327 echo "[scripts/build.sh] Autoinstalling dependencies"
328 flatpak-builder
-y --user --install-deps-from=flathub
--install-deps-only "$_ROOT/build/flatpak/build" "$_GH_RDNN.json"
329 echo "[scripts/build.sh] Building"
330 flatpak-builder
-y --user --repo="$_ROOT/build/flatpak/repo" --force-clean "$_ROOT/build/flatpak/build" "$_GH_RDNN.json"
331 echo "[scripts/build.sh] Building bundle"
332 flatpak build-bundle
"$_ROOT/build/flatpak/repo" "$_ROOT/build/flatpak/GameHub-${_BUILD_IMAGE}-${_VERSION}.flatpak" "$_GH_RDNN"
333 echo "[scripts/build.sh] Removing flatpak build and repo directories"
334 rm -rf ".flatpak-builder" "$_ROOT/build/flatpak/build" "$_ROOT/build/flatpak/repo"
340 git submodule update
--init
341 mkdir
-p "$BUILDROOT"
343 if [[ "$ACTION" = "import_keys" ]]; then import_keys
; fi
345 if [[ "$ACTION" = "deps" ]]; then deps
; fi
347 if [[ "$ACTION" = "gen_changelogs" ]]; then gen_changelogs
; fi
349 if [[ "$ACTION" = "build_deb" ]]; then build_deb
; fi
351 if [[ "$ACTION" = "build" ||
"$ACTION" = "build_local" ]]; then build
; fi
353 if [[ "$ACTION" = "appimage" ||
"$ACTION" = "build_local" ]]; then appimage
; fi
354 if [[ "$ACTION" = "appimage_tweak" ||
"$ACTION" = "build_local" ]]; then appimage_tweak
; fi
355 if [[ "$ACTION" = "appimage_bundle_libs" ||
"$ACTION" = "build_local" ]]; then appimage_bundle_libs
; fi
356 if [[ "$ACTION" = "appimage_checkrt" ||
( "$ACTION" = "build_local" && "$CHECKRT" = "--checkrt" ) ]]; then appimage_checkrt
; fi
357 if [[ "$ACTION" = "appimage_pack" ||
"$ACTION" = "build_local" ]]; then appimage_pack
; fi
359 if [[ "$ACTION" = "build_appimage" ]]; then
368 if [[ "$ACTION" = "build_flatpak" && ! "$_BUILD_IMAGE" = "xenial" ]]; then build_flatpak
; fi