Skip to content
This repository has been archived by the owner on Feb 12, 2023. It is now read-only.

Commit

Permalink
feat(appimage): build appimage on TravisCI
Browse files Browse the repository at this point in the history
first step on the way to #4874
  • Loading branch information
sudden6 committed Apr 27, 2018
1 parent 1af3ad6 commit f7345e4
Show file tree
Hide file tree
Showing 4 changed files with 161 additions and 2 deletions.
7 changes: 6 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,15 @@ matrix:
cache:
directories:
- /opt/build-windows/x86_64
- stage: macOS
- stage: "macOS and AppImage"
os: osx
osx_image: xcode7.3
env: JOB=build-osx
- stage: "macOS and AppImage"
os: linux
script: ./appimage/build-appimage.sh
services:
- docker

script: "./.travis/$JOB.sh"

Expand Down
42 changes: 42 additions & 0 deletions appimage/build-appimage.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/usr/bin/env bash

# MIT License
#
# Copyright © 2018 by The qTox Project Contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

# This script should be run from the root of the repository

if [ ! -f ./appimage/build-appimage.sh ]; then
echo ""
echo "You are attempting to run the build-appimage.sh from a wrong directory."
echo "If you wish to run this script, you'll have to have"
echo "the repository root directory as the working directory."
echo ""
exit 1
fi

mkdir -p ./output

docker run --rm \
-v $PWD:/qtox \
-v $PWD/output:/output \
debian:stretch-slim \
/bin/bash -c "/qtox/appimage/build.sh"
109 changes: 109 additions & 0 deletions appimage/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
#!/usr/bin/env bash

# MIT License
#
# Copyright © 2018 by The qTox Project Contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.


# Fail out on error
set -exuo pipefail

# directory paths
readonly QTOX_SRC_DIR="/qtox"
readonly OUTPUT_DIR="/output"
readonly BUILD_DIR="/build"
readonly QTOX_BUILD_DIR="$BUILD_DIR"/qtox
readonly QTOX_APP_DIR="$BUILD_DIR"/appdir
# "linuxdeployqt" is to long, shortened to ldqt
readonly LDQT_BUILD_DIR="$BUILD_DIR"/ldqt
# "appimagetool" becomes aitool
readonly AITOOL_BUILD_DIR="$BUILD_DIR"/aitool
# ldqt binary
readonly LDQT_BIN="/usr/lib/x86_64-linux-gnu/qt5/bin/linuxdeployqt"
readonly APT_FLAGS="-y --no-install-recommends"
# use multiple cores when building
export MAKEFLAGS="-j$(nproc)"

# Get packages
apt-get update
apt-get install $APT_FLAGS sudo ca-certificates wget fuse xxd git g++ patchelf

# get version
cd "$QTOX_SRC_DIR"
export VERSION=$(git rev-parse --short HEAD) # linuxdeployqt uses this for naming the file


# create build directory
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"

# copy qtox source
cp -r "$QTOX_SRC_DIR" "$QTOX_BUILD_DIR"
cd "$QTOX_BUILD_DIR"

# reuse for our purposes, pass flags to automatically install packages
./simple_make.sh "$APT_FLAGS"

# build dir of simple_make
cd _build

make DESTDIR="$QTOX_APP_DIR" install ; find "$QTOX_APP_DIR"

LDQT_HASH="9c90a882ac744b5f704598e9588450ddfe487c67" # is master as of 2018-04-25
# build linuxdeployqt
git clone https://github.com/probonopd/linuxdeployqt.git "$LDQT_BUILD_DIR"
cd "$LDQT_BUILD_DIR"
git checkout "$LDQT_HASH"
qmake
make
make install

AITOOL_HASH="5d93115f279d94a4d23dfd64fb8ccd109e98f039" # is master as of 2018-04-25
# build appimagetool
git clone -b appimagetool/master --single-branch --recursive https://github.com/AppImage/AppImageKit "$AITOOL_BUILD_DIR"
cd "$AITOOL_BUILD_DIR"
git checkout "$AITOOL_HASH"
bash -ex install-build-deps.sh
# Fetch git submodules
git submodule update --init --recursive

# Build AppImage
mkdir build
cd build

# make sure that deps in separate install tree are found
export PKG_CONFIG_PATH=/deps/lib/pkgconfig/

cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_TESTING=ON -DAPPIMAGEKIT_PACKAGE_DEBS=ON
make
make install

# build qtox AppImage
cd "$OUTPUT_DIR"
unset QTDIR; unset QT_PLUGIN_PATH; unset LD_LIBRARY_PATH;

readonly QTOX_DESKTOP_FILE="$QTOX_APP_DIR"/usr/local/share/applications/*.desktop

eval "$LDQT_BIN $QTOX_DESKTOP_FILE -bundle-non-qt-libs"
eval "$LDQT_BIN $QTOX_DESKTOP_FILE -appimage"

# Chmod since everything is root:root
chmod 755 -R "$OUTPUT_DIR"
5 changes: 4 additions & 1 deletion simple_make.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

set -eu -o pipefail

# additional flags for apt-get, used for CI
readonly APT_FLAGS=$1

apt_install() {
local apt_packages=(
automake
Expand Down Expand Up @@ -31,7 +34,7 @@ apt_install() {
qttools5-dev-tools
)

sudo apt-get install "${apt_packages[@]}"
sudo apt-get install $APT_FLAGS "${apt_packages[@]}"
}

pacman_install() {
Expand Down

0 comments on commit f7345e4

Please sign in to comment.