Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/duplicati/duplicati.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Skovhede <kenneth@hexad.dk>2017-01-14 14:10:55 +0300
committerKenneth Skovhede <kenneth@hexad.dk>2017-01-14 14:10:55 +0300
commit56f70b62c9a83cc47df454caf99d0e88f24e5110 (patch)
tree983175db4a9eda4d795d4a800fad5912d4675be3 /build-installers.sh
parentc088db451ba26b4f75a4c19e02dcb8b1a27935dc (diff)
Added scripts to build deb and rpm packages locally through Docker.
Changed Windows build to use a local virtual machine. Updated installer build script to use the local builds instead of the AWS ones.
Diffstat (limited to 'build-installers.sh')
-rwxr-xr-xbuild-installers.sh217
1 files changed, 41 insertions, 176 deletions
diff --git a/build-installers.sh b/build-installers.sh
index e8d26d342..3ad332f1b 100755
--- a/build-installers.sh
+++ b/build-installers.sh
@@ -6,6 +6,18 @@ then
exit 1
fi
+while true
+do
+ DOCKER_RESULT=$(docker ps)
+ if [ "$?" != "0" ]
+ then
+ echo "It appears the Docker daemon is not running, make sure you started it"
+ read -p "Press [Enter] key to AFTER you started Docker"
+ continue
+ fi
+ break
+done
+
GITHUB_TOKEN_FILE="${HOME}/.config/github-api-token"
GPG_KEYFILE="${HOME}/.config/signkeys/Duplicati/updater-gpgkey.key"
AUTHENTICODE_PFXFILE="${HOME}/.config/signkeys/Duplicati/authenticode.pfx"
@@ -14,15 +26,6 @@ MONO=/Library/Frameworks/Mono.framework/Commands/mono
GPG=/usr/local/bin/gpg2
-FEDORA_INSTANCE_ID=i-deef5352
-FEDORA_PUBKEY=AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBM3OWpUJOqoh9hq/k48g/FFLqnxUHxecVZM/jRD69Y/cn0OygsSyi3E5X/PVgtfyoced/HV788f9rDpLbY08jXg=
-
-DEBIAN_INSTANCE_ID=i-f237887e
-DEBIAN_PUBKEY=AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJUDOPM7lBBOUtRbAZ8DUP7hHN88CvSvKzWQ15uXcOhdMgtqlznSQiLNfagD/AlqnPsOXWCnNN0fM+QAeMuMBEY=
-
-WINDOWS_INSTANCE_ID=i-be348b32
-WINDOWS_PUBKEY=AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBK5MD6Jg+p6rJmJfx8lWqIY+ZLDEYcGIwcf+eGzPSz4QKuOgxtDo0xgg3/OrxJibyk7sBWkT0f9RHD1qN9Nz/o8=
-
ZIPFILE=`basename "$1"`
VERSION=`echo "${ZIPFILE}" | cut -d "-" -f 2 | cut -d "_" -f 1`
BUILDTYPE=`echo "${ZIPFILE}" | cut -d "-" -f 2 | cut -d "_" -f 2`
@@ -40,9 +43,6 @@ SIGNAME="duplicati-${BUILDTAG_RAW}-signatures.zip"
UPDATE_TARGET="Updates/build/${BUILDTYPE}_target-${VERSION}"
-KEYFILE=~/.ssh/duplicati-build-machines-key.pem
-SSH_OPTIONS="-i ${KEYFILE} -o UserKnownHostsFile=./tmp/known_hosts"
-
echo "Filename: ${ZIPFILE}"
echo "Version: ${VERSION}"
echo "Buildtype: ${BUILDTYPE}"
@@ -51,79 +51,6 @@ echo "RPMName: ${RPMNAME}"
echo "DEBName: ${DEBNAME}"
echo "SPKName: ${SPKNAME}"
-start_aws_instance() {
-
- local STATE=`aws ec2 describe-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["Reservations"][0]["Instances"][0]["State"]["Name"]'`
-
- if [ "${STATE}" == "stopping" ]; then
- echo -n "Instance has state '${STATE}', waiting .."
- while [ "${STATE}" == "stopping" ]; do
- echo -n "."
- sleep 5
- local STATE=`aws ec2 describe-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["Reservations"][0]["Instances"][0]["State"]["Name"]'`
- done
- echo ""
- fi
-
- local STATE=`aws ec2 start-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["StartingInstances"][0]["CurrentState"]["Name"]'`
-
- if [ "${STATE}" != "running" ]; then
- echo -n "Instance has state '${STATE}', waiting .."
-
- while [ "${STATE}" != "running" ]; do
- echo -n "."
- sleep 5
- local STATE=`aws ec2 describe-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["Reservations"][0]["Instances"][0]["State"]["Name"]'`
- done
-
- echo ""
- fi
-
-}
-
-stop_aws_instance() {
- local STATE=`aws ec2 stop-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["StoppingInstances"][0]["CurrentState"]["Name"]'`
- echo "Instance state is now: ${STATE}"
-}
-
-ssh_connect_to_instance() {
- local DNSNAME=`aws ec2 describe-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["Reservations"][0]["Instances"][0]["PublicDnsName"]'`
- local IPADDR=`aws ec2 describe-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["Reservations"][0]["Instances"][0]["PublicIpAddress"]'`
-
- if [ -d "./tmp" ]; then
- rm -rf "./tmp"
- fi
-
- mkdir "./tmp"
-
- echo "${DNSNAME},${IPADDR} ecdsa-sha2-nistp256 $3" > "./tmp/known_hosts"
-
- SSH_HOST="$2@${DNSNAME}"
-
- ssh ${SSH_OPTIONS} "${SSH_HOST}" "cd" > /dev/null
- local EXITCODE=$?
-
- if [ ! "${EXITCODE}" -eq 0 ]; then
- echo -n "Server did not allow login, waiting .."
- while [ ! "${EXITCODE}" -eq 0 ]; do
- echo -n "."
- sleep 5
-
- ssh ${SSH_OPTIONS} "${SSH_HOST}" "cd" > /dev/null
- local EXITCODE=$?
- done
- echo ""
- fi
-}
-
-ssh_upload_file() {
- scp ${SSH_OPTIONS} "$1" "${SSH_HOST}:"
-}
-
-ssh_run_commands() {
- cat "$1" | ssh ${SSH_OPTIONS} "${SSH_HOST}"
-}
-
build_file_signatures() {
if [ "z${GPGID}" != "z" ]; then
echo "$GPGKEY" | "${GPG}" "--passphrase-fd" "0" "--batch" "--yes" "--default-key=${GPGID}" "--output" "$2.sig" "--detach-sig" "$1"
@@ -153,11 +80,10 @@ else
echo "No GPG keyfile found, skipping gpg signatures"
fi
-# Pre-boot instances to keep the waiting to a minimun
+# Pre-boot virtual machine
+echo "Booting Win10 build instance"
+VBoxHeadless --startvm Duplicati-Win10-Build &
-aws ec2 start-instances --profile=duplicati-builder --instance-ids "${DEBIAN_INSTANCE_ID}" &> /dev/null
-aws ec2 start-instances --profile=duplicati-builder --instance-ids "${FEDORA_INSTANCE_ID}" &> /dev/null
-aws ec2 start-instances --profile=duplicati-builder --instance-ids "${WINDOWS_INSTANCE_ID}" &> /dev/null
# Then do the local build to mask the waiting a little more
@@ -167,11 +93,11 @@ echo "Building OSX package locally ..."
echo ""
echo "Enter local sudo password..."
-cd Installer/OSX
+cd "Installer/OSX"
bash "make-dmg.sh" "../../$1"
mv "Duplicati.dmg" "../../${UPDATE_TARGET}/${DMGNAME}"
mv "Duplicati.pkg" "../../${UPDATE_TARGET}/${PKGNAME}"
-cd ../..
+cd "../.."
echo ""
echo ""
@@ -185,112 +111,48 @@ cd ../..
echo ""
echo ""
-echo "Starting Debian build instance"
-
-start_aws_instance "${DEBIAN_INSTANCE_ID}"
-
-ssh_connect_to_instance "${DEBIAN_INSTANCE_ID}" "ubuntu" "${DEBIAN_PUBKEY}"
+echo "Building Debian deb with Docker ..."
-echo "Instance has started, uploading binary package ..."
-
-ssh_upload_file "$1"
-
-echo "Running build script on server ..."
-
-cat > "./tmp/debian-commands.sh" <<EOF
-cd duplicati/Installer/debian
-git pull
-bash make-binary-package.sh "../../../${ZIPFILE}"
-rm -rf "../../../${ZIPFILE}"
-EOF
+cd "Installer/debian"
+bash "docker-build-binary.sh" "../../$1"
+cd "../.."
-ssh_run_commands "./tmp/debian-commands.sh"
-
-echo "Downloading binary package ..."
-
-scp ${SSH_OPTIONS} "${SSH_HOST}:duplicati/Installer/debian/${DEBNAME}" "./tmp"
-ssh ${SSH_OPTIONS} "${SSH_HOST}" "rm -rf duplicati/Installer/debian/duplicati_${VERSION}-*"
-
-echo "Done, stopping instance ..."
-
-stop_aws_instance "${DEBIAN_INSTANCE_ID}"
-
-mv "./tmp/${DEBNAME}" "${UPDATE_TARGET}/"
+mv "Installer/debian/${DEBNAME}" "${UPDATE_TARGET}"
+echo "Done building deb package"
echo ""
echo ""
-echo "Starting Fedora build instance ..."
-
-start_aws_instance "${FEDORA_INSTANCE_ID}"
-
-ssh_connect_to_instance "${FEDORA_INSTANCE_ID}" "ec2-user" "${FEDORA_PUBKEY}"
-
-echo "Instance has started, uploading binary package ..."
+echo "Building Fedora RPM with Docker ..."
-ssh_upload_file "$1"
+cd "Installer/fedora"
+bash "docker-build-binary.sh" "../../$1"
+cd "../.."
-echo "Running build script on server ..."
+mv "Installer/fedora/${RPMNAME}" "${UPDATE_TARGET}"
-cat > "./tmp/fedora-commands.sh" <<EOF
-rm -rf ~/rpmbuild
-rpmdev-setuptree
-cd duplicati/Installer/fedora
-git pull
-bash make-binary-package.sh "../../../${ZIPFILE}"
-rm -rf "../../../${ZIPFILE}"
-EOF
-
-ssh_run_commands "./tmp/fedora-commands.sh"
-
-echo "Downloading binary package ..."
-
-scp ${SSH_OPTIONS} "${SSH_HOST}:rpmbuild/RPMS/noarch/${RPMNAME}" "./tmp"
-
-echo "Done, stopping instance ..."
-
-stop_aws_instance "${FEDORA_INSTANCE_ID}"
-
-mv "./tmp/${RPMNAME}" "${UPDATE_TARGET}/"
+echo "Done building rpm package"
echo ""
echo ""
-echo "Starting Windows build instance"
-
-start_aws_instance "${WINDOWS_INSTANCE_ID}"
-
-ssh_connect_to_instance "${WINDOWS_INSTANCE_ID}" "ec2-user" "${WINDOWS_PUBKEY}"
+echo "Building Windows instance in virtual machine"
-echo "Instance has started, uploading binary package ..."
-
-ssh_upload_file "$1"
-
-echo "Running build script on server ..."
-
-cat > "./tmp/windows-commands.sh" <<EOF
+cat > "tmp-windows-commands.bat" <<EOF
SET VS120COMNTOOLS=%VS140COMNTOOLS%
-cd duplicati\\Installer\\Windows
-git pull
-build-msi.bat "..\\..\\..\\${ZIPFILE}"
-del /q "..\\..\\..\\${ZIPFILE}"
+cd \\Duplicati\\Installer\\Windows
+build-msi.bat "../../$1"
EOF
-ssh_run_commands "./tmp/windows-commands.sh"
-
-echo "Downloading binary packages ..."
+ssh IEUser@192.168.56.101 "\\Duplicati\\tmp-windows-commands.bat"
+ssh IEUser@192.168.56.101 "shutdown /s /t 0"
-scp ${SSH_OPTIONS} "${SSH_HOST}:duplicati/Installer/Windows/Duplicati.msi" "./tmp"
-scp ${SSH_OPTIONS} "${SSH_HOST}:duplicati/Installer/Windows/Duplicati-32bit.msi" "./tmp"
+rm "tmp-windows-commands.bat"
-echo "Done, stopping instance ..."
-
-stop_aws_instance "${WINDOWS_INSTANCE_ID}"
-
-mv "./tmp/Duplicati.msi" "${UPDATE_TARGET}/${MSI64NAME}"
-mv "./tmp/Duplicati-32bit.msi" "${UPDATE_TARGET}/${MSI32NAME}"
+mv "./Installer/Windows/Duplicati.msi" "${UPDATE_TARGET}/${MSI64NAME}"
+mv "./Installer/Windows/Duplicati-32bit.msi" "${UPDATE_TARGET}/${MSI32NAME}"
if [ -f "${AUTHENTICODE_PFXFILE}" ] && [ -f "${AUTHENTICODE_PASSWORD}" ]; then
echo "Performing authenticode signing of installers"
@@ -432,3 +294,6 @@ if [ -f ~/.config/duplicati-mirror-sync.sh ]; then
else
echo "Skipping CDN update"
fi
+
+VBoxManage controlvm "Duplicati-Win10-Build" poweroff
+