build all in docker

php
Marc Wäckerlin 9 years ago
parent af88fdd4fd
commit b3ea67b7d8
  1. 2
      COPYING
  2. 48
      ChangeLog
  3. 2
      INSTALL
  4. 29
      build-in-docker.conf
  5. 70
      build-in-docker.sh
  6. 4
      cordova/makefile.am
  7. 3
      cordova/platforms/android/AndroidManifest.xml
  8. 22
      cordova/platforms/android/assets/www/cordova_plugins.js
  9. 9
      cordova/platforms/android/res/xml/config.xml
  10. 9
      cordova/plugins/android.json
  11. 17
      cordova/plugins/fetch.json
  12. 104
      html/index.html.in

@ -1 +1 @@
/usr/share/automake-1.14/COPYING
/usr/share/automake-1.15/COPYING

@ -1,3 +1,51 @@
2015-12-02 15:58 marc
* build-in-docker.conf, build-in-docker.sh,
resolve-debbuilddeps.sh: enhanced build in docker
2015-12-02 07:17 marc
* build-in-docker.conf: build requires universe for npm
2015-12-01 14:50 marc
* build-in-docker.conf, build-in-docker.sh, debian/control.in:
improved dependencies for more ubuntu support
2015-12-01 13:10 marc
* build-in-docker.conf: build everything in docker now, 2nd try
2015-12-01 12:17 marc
* bootstrap.sh, build-in-docker.conf, build-in-docker.sh,
configure.ac, makefile.am: build everithing in docker now
2015-11-25 15:25 marc
* build-in-docker.sh: allow add repositories (for cordova-cli)
2015-11-25 12:45 marc
* configure.ac, debian/control.in: install cordova from ubuntu ppa
2015-11-25 10:05 marc
* configure.ac, cordova/makefile.am, debian/control.in: fixes for
cordova
2015-11-25 08:57 marc
* ax_init_standard_project.m4, bootstrap.sh, configure.ac,
debian/control.in, sql-to-dot.sed: check for android and cordova
separately; depend on npm and nodejs for cordova
2015-11-20 14:05 marc
* ChangeLog, cordova/config.xml.in, cordova/makefile.am,
html/safechat.js, safechat.desktop.in: try to allow background
process
2015-11-09 22:34 marc
* html/documentation.dox, html/makefile.am: added missing doc

@ -1 +1 @@
/usr/share/automake-1.14/INSTALL
/usr/share/automake-1.15/INSTALL

@ -1,11 +1,22 @@
packages+=("wheezy:::curl:::npm")
packages+=("nodejs")
repos+=("Ubuntu:::universe")
repos+=("wheezy:::'deb http://ftp.is.debian.org/debian wheezy-backports main'")
commands+=("wheezy:::update-alternatives --install /usr/bin/node nodejs /usr/bin/nodejs 100")
commands+=("wheezy:::curl https://www.npmjs.com/install.sh | sh")
commands+=("npm install -g cordova")
# if you have android, we need cordova plus more dependencies
# so we can build an android app
if test -n "${ANDROID_HOME}"; then
envs+=("-e ANDROID_HOME=${ANDROID_HOME}")
dirs+=("-v ${ANDROID_HOME}:${ANDROID_HOME}:ro")
# all this is needed for android through cordova (phonegap) only
packages+=("wheezy:::curl:::npm")
packages+=("git nodejs default-jdk libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1")
repos+=("Ubuntu-precise:::'deb http://archive.ubuntu.com precise universe'")
repos+=("Debian|Ubuntu-precise::::::universe")
repos+=("wheezy:::'deb http://ftp.is.debian.org/debian wheezy-backports main'")
commands+=("update-alternatives --install /usr/bin/node nodejs /usr/bin/nodejs 100")
commands+=("wheezy:::curl https://www.npmjs.com/install.sh | sh")
commands+=("npm install -g cordova")
commands+=("chown $(id -u) ${HOME}")
commands+=("chown -R $(id -u) ${HOME}/.npm")
commands+=("useradd -d ${HOME} -u $(id -u) $(id -un)")
envs+=("-e ANDROID_HOME=${ANDROID_HOME}")
envs+=("-e HOME=${HOME}")
envs+=("-e TERM=xterm")
dirs+=("-v ${ANDROID_HOME}:${ANDROID_HOME}:ro")
dirs+=("-v ${HOME}/.gnupg:${HOME}/.gnupg:ro")
dirs+=("-v ${HOME}/.android:${HOME}/.android:ro")
fi

@ -1,4 +1,5 @@
#! /bin/bash -e
set -o errtrace
# build and test everything in a fresh docker installation
img="ubuntu:latest"
@ -39,21 +40,21 @@ while test $# -gt 0; do
echo " <os>:::<A>"
echo " Read as: On linux type <os> use <A> else use <B>"
echo " That means: If the distributer ID or codename in lsb_release"
echo " matches <os>, then <A> is replaced, else <B> is replaced."
echo " matches regular expression <os>, then <A> is replaced, else <B> is replaced."
echo " The three colons are for splitting <os> from <A> and <B> part."
echo " E.g.: Install package curl on wheezy and npm on olter systems:"
echo " $0 -p wheezy:::curl:::npm"
echo " $0 -p Debian|precise:::curl:::npm"
echo
echo "EXAMPLE:"
echo
echo "$0 -i mwaeckerlin/ubuntu:trusty-i386 \\"
echo " -t deb \\"
echo " -e ANDROID_HOME=/opt/local/android \\"
echo " -d /opt/local/android \\"
echo " -r universe \\"
echo " -r https://dev.marc.waeckerlin.org/repository \\"
echo " -k https://dev.marc.waeckerlin.org/repository/PublicKey \\"
echo " -p mrw-c++"
echo " -t deb \\"
echo " -e ANDROID_HOME=/opt/local/android \\"
echo " -d /opt/local/android \\"
echo " -r universe \\"
echo " -r https://dev.marc.waeckerlin.org/repository \\"
echo " -k https://dev.marc.waeckerlin.org/repository/PublicKey \\"
echo " -p mrw-c++"
echo
exit 0
;;
@ -93,6 +94,38 @@ while test $# -gt 0; do
shift
done
function traperror() {
set +x
local DOCKER_ID="$1"
local err=($2) # error status
local line="$3" # LINENO
local linecallfunc="$4"
local command="$5"
local funcstack="$6"
for e in ${err[@]}; do
if test -n "$e" -a "$e" != "0"; then
echo "<---"
echo "ERROR: line $line - command '$command' exited with status: $e (${err[@]})"
if [ "${funcstack}" != "main" -o "$linecallfunc" != "0" ]; then
echo -n " ... Error at ${funcstack} "
if [ "$linecallfunc" != "" ]; then
echo -n "called at line $linecallfunc"
fi
echo
fi
echo "**** Entering docker container ${DOCKER_ID}, exit with Ctrl-D"
echo -n " ... cleanup docker: "
docker rm -f "${DOCKER_ID}"
echo "returning status: $e"
echo "--->"
exit $e
fi
done
echo -n " SUCCESS ... cleanup docker: "
docker rm -f "${DOCKER_ID}"
exit 0
}
function ifthenelse() {
arg="$1"
shift
@ -103,24 +136,29 @@ function ifthenelse() {
os="${arg%%:::*}"
thenpart="${arg#*:::}"
if test "${thenpart/:::/}" = "${thenpart}"; then
docker exec ${DOCKER_ID} bash -c 'os="'$os'"; if test "${os//$(lsb_release -is)/}${os//$(lsb_release -cs)/}" != "${os}${os}"; then '"${cmd//ARG/${thenpart}}"'; fi'
docker exec ${DOCKER_ID} bash -c 'os="'$os'"; if [[ "$(lsb_release -is)-$(lsb_release -cs)" =~ ${os} ]]; then '"${cmd//ARG/${thenpart}}"'; fi'
else
elsepart="${thenpart##*:::}"
thenpart="${thenpart%:::*}"
docker exec ${DOCKER_ID} bash -c 'os="'$os'"; if test "${os//$(lsb_release -is)/}${os//$(lsb_release -cs)/}" != "${os}${os}"; then '"${cmd//ARG/${thenpart}}"'; else '"${cmd//ARG/${elsepart}}"'; fi'
if test -n "${thenpart}"; then
docker exec ${DOCKER_ID} bash -c 'os="'$os'"; if [[ "$(lsb_release -is)-$(lsb_release -cs)" =~ ${os} ]]; then '"${cmd//ARG/${thenpart}}"'; else '"${cmd//ARG/${elsepart}}"'; fi'
else
docker exec ${DOCKER_ID} bash -c 'os="'$os'"; if [[ "$(lsb_release -is)-$(lsb_release -cs)" =~ ${os} ]]; then true; else '"${cmd//ARG/${elsepart}}"'; fi'
fi
fi
fi
}
set -x
docker pull $img
DOCKER_ID=$(docker run -d ${dirs[@]} ${envs[@]} -w /workdir $img sleep infinity)
trap "docker rm -f ${DOCKER_ID}" INT TERM EXIT
trap 'traperror '"${DOCKER_ID}"' "$? ${PIPESTATUS[@]}" $LINENO $BASH_LINENO "$BASH_COMMAND" "${FUNCNAME[@]}" "${FUNCTION}"' SIGINT INT TERM EXIT
docker exec ${DOCKER_ID} apt-get update
docker exec ${DOCKER_ID} apt-get upgrade -y --force-yes
if ! docker exec ${DOCKER_ID} apt-get install -y --force-yes python-software-properties apt-transport-https dpkg-dev lsb-release; then
docker exec ${DOCKER_ID} apt-get install -y --force-yes software-properties-common apt-transport-https dpkg-dev lsb-release
fi
docker exec ${DOCKER_ID} apt-get upgrade -y
docker exec ${DOCKER_ID} apt-get install -y python-software-properties software-properties-common apt-transport-https dpkg-dev lsb-release || \
docker exec ${DOCKER_ID} apt-get install -y software-properties-common apt-transport-https dpkg-dev lsb-release || \
docker exec ${DOCKER_ID} apt-get install -y python-software-properties apt-transport-https dpkg-dev lsb-release;
for repo in "${repos[@]}"; do
ifthenelse "${repo}" "apt-add-repository ARG"
done

@ -19,13 +19,13 @@ ${ANDROID_SRC}:
( cp -r "@srcdir@/$${file}" "$${file}" && \
chmod -R u+w "$${file}" ); \
done
if [ "$$(whoami)" != "root" ]; then \
if [ "$$(whoami 2> /dev/null)" != "root" ]; then \
${CORDOVA} plugin add https://github.com/katzer/cordova-plugin-background-mode.git; \
${CORDOVA} build --debug || ${CORDOVA} build --debug; \
fi
${ANDROID}: ${ANDROID_SRC}
if [ "$$(whoami)" != "root" ]; then \
if [ "$$(whoami 2> /dev/null)" != "root" ]; then \
cp $< $@; \
fi

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="346" android:versionName="0.3.46" package="ch.safechat" xmlns:android="http://schemas.android.com/apk/res/android">
<manifest android:hardwareAccelerated="true" android:versionCode="359" android:versionName="0.3.59" package="ch.safechat" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@ -11,6 +11,7 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name="de.appplant.cordova.plugin.background.ForegroundService" />
</application>
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="22" />
</manifest>

@ -3,13 +3,33 @@ module.exports = [
{
"file": "plugins/cordova-plugin-whitelist/whitelist.js",
"id": "cordova-plugin-whitelist.whitelist",
"pluginId": "cordova-plugin-whitelist",
"runs": true
},
{
"file": "plugins/cordova-plugin-device/www/device.js",
"id": "cordova-plugin-device.device",
"pluginId": "cordova-plugin-device",
"clobbers": [
"device"
]
},
{
"file": "plugins/de.appplant.cordova.plugin.background-mode/www/background-mode.js",
"id": "de.appplant.cordova.plugin.background-mode.BackgroundMode",
"pluginId": "de.appplant.cordova.plugin.background-mode",
"clobbers": [
"cordova.plugins.backgroundMode",
"plugin.backgroundMode"
]
}
];
module.exports.metadata =
// TOP OF METADATA
{
"cordova-plugin-whitelist": "1.0.0"
"cordova-plugin-whitelist": "1.0.0",
"cordova-plugin-device": "1.1.0",
"de.appplant.cordova.plugin.background-mode": "0.6.4"
}
// BOTTOM OF METADATA
});

@ -1,10 +1,17 @@
<?xml version='1.0' encoding='utf-8'?>
<widget id="ch.safechat" version="0.3.46" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<widget id="ch.safechat" version="0.3.59" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<preference name="loglevel" value="DEBUG" />
<feature name="Whitelist">
<param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" />
<param name="onload" value="true" />
</feature>
<feature name="Device">
<param name="android-package" value="org.apache.cordova.device.Device" />
</feature>
<feature name="BackgroundMode">
<param name="android-package" value="de.appplant.cordova.plugin.background.BackgroundMode" />
</feature>
<preference name="KeepRunning" value="true" />
<allow-intent href="market:*" />
<name>SafeChat</name>
<description>

@ -20,7 +20,14 @@
"installed_plugins": {
"cordova-plugin-whitelist": {
"PACKAGE_NAME": "ch.safechat"
},
"de.appplant.cordova.plugin.background-mode": {
"PACKAGE_NAME": "ch.safechat"
}
},
"dependent_plugins": {}
"dependent_plugins": {
"cordova-plugin-device": {
"PACKAGE_NAME": "ch.safechat"
}
}
}

@ -6,5 +6,22 @@
},
"is_top_level": true,
"variables": {}
},
"de.appplant.cordova.plugin.background-mode": {
"source": {
"type": "git",
"url": "https://github.com/katzer/cordova-plugin-background-mode.git",
"subdir": "."
},
"is_top_level": true,
"variables": {}
},
"cordova-plugin-device": {
"source": {
"type": "registry",
"id": "cordova-plugin-device"
},
"is_top_level": false,
"variables": {}
}
}

@ -1,56 +1,56 @@
<!DOCTYPE HTML">
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width initial-scale=1" />
<link href="safechat.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="openpgp.js"></script>
<script type="text/javascript" src="safechat.js"></script>
<link href="jquery.cssemoticons.css" media="screen" rel="stylesheet" type="text/css" />
<script src="jquery.cssemoticons.js" type="text/javascript"></script>
<title>Safe Chat</title>
</head>
<body>
<div id="header" class="header">
<h1>Safe Chat @PACKAGE_VERSION@</h1>
<div id="togglemenu">
<span id="username">[unknown]</span>
<img id="menuicon" onclick="togglemenu()" src="menu.svg" />
</div>
</div>
<ul id="menu" style="display: none">
<li onclick="backup()">Download Backup</li>
<li class="toolbutton"><label for="restore">Restore Backup</label><input autocomplete="off" type="file" accept="*.bak" id="restore" /></li>
<li id="groups" onclick="groups()">Edit Groups</li>
<li id="removeKey" style="display: none" onclick="removeKey()">Password Forgotten</li>
<li id="android-download" href="safechat.apk"><a href="safechat.apk">Download Android-App</a></li>
<li href="https://dev.marc.waeckerlin.org/redmine/projects/safechat/embedded/index.html" target="_blank"><a href="https://dev.marc.waeckerlin.org/redmine/projects/safechat/embedded/index.html" target="_blank">About Safe Chat</a></li>
</ul>
<script type="text/javascript">
$(function() { // on load: without cordova, remove andoid-download
if ("@CORDOVA@" == "0") $("#android-download").hide();
if (!window.FileReader) $("#restore").hide(); // not supported by browser
$("#groups").hide();
})
$("#restore").change(function(evt){restore(evt)});
</script>
<div id="main">
<p>start up engine, please wait ...</p>
</div>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width initial-scale=1" />
<link href="safechat.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="openpgp.js"></script>
<script type="text/javascript" src="safechat.js"></script>
<link href="jquery.cssemoticons.css" media="screen" rel="stylesheet" type="text/css" />
<script src="jquery.cssemoticons.js" type="text/javascript"></script>
<title>Safe Chat</title>
</head>
<body>
<div id="header" class="header">
<h1>Safe Chat @PACKAGE_VERSION@</h1>
<div id="togglemenu">
<span id="username">[unknown]</span>
<img id="menuicon" onclick="togglemenu()" src="menu.svg" />
</div>
</div>
<ul id="menu" style="display: none">
<li onclick="backup()">Download Backup</li>
<li class="toolbutton"><label for="restore">Restore Backup</label><input autocomplete="off" type="file" accept="*.bak" id="restore" /></li>
<li id="groups" onclick="groups()">Edit Groups</li>
<li id="removeKey" style="display: none" onclick="removeKey()">Password Forgotten</li>
<li id="android-download" href="safechat.apk"><a href="safechat.apk">Download Android-App</a></li>
<li href="https://dev.marc.waeckerlin.org/redmine/projects/safechat/embedded/index.html" target="_blank"><a href="https://dev.marc.waeckerlin.org/redmine/projects/safechat/embedded/index.html" target="_blank">About Safe Chat</a></li>
</ul>
<script type="text/javascript">
$(function() { // on load: without cordova, remove andoid-download
if ("@CORDOVA@" == "0") $("#android-download").hide();
if (!window.FileReader) $("#restore").hide(); // not supported by browser
$("#groups").hide();
})
$("#restore").change(function(evt){restore(evt)});
</script>
<div id="main">
<p>start up engine, please wait ...</p>
</div>
<div id="status">
<noscript>This is a secure and encryptet chat application, that runs
in your browser and does not send any credentials to the
server. Your password and your secret key is fully under your
control. That's why you must enable javascript and local storage for
this application.</noscript>
in your browser and does not send any credentials to the
server. Your password and your secret key is fully under your
control. That's why you must enable javascript and local storage for
this application.</noscript>
</div>

Loading…
Cancel
Save