90 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/bin/bash
 | 
						|
# SPDX-FileCopyrightText: 2020 Luca Beltrame <lbeltrame@kde.org>
 | 
						|
# SPDX-License-Identifier: BSD-3-clause
 | 
						|
 | 
						|
set -e
 | 
						|
set -o errexit
 | 
						|
set -o pipefail
 | 
						|
set -o nounset
 | 
						|
 | 
						|
function version_gt() {
 | 
						|
    test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1";
 | 
						|
}
 | 
						|
 | 
						|
function cleanup() {
 | 
						|
    local tmpdir=$1
 | 
						|
    if [ -n "$(ls -A ${tmpdir})" ]; then
 | 
						|
        rm -r "${tmpdir:?}"/*
 | 
						|
    fi
 | 
						|
    rmdir "${tmpdir}"
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
function update() {
 | 
						|
    local tarball_url=$1
 | 
						|
    local gpg_url=$2
 | 
						|
    local tempdir=$3
 | 
						|
    local destination=$4
 | 
						|
 | 
						|
    tarball_file=$(basename "${tarball_url}")
 | 
						|
    gpg_file=$(basename "${gpg_url}")
 | 
						|
 | 
						|
    pushd "${tempdir}"
 | 
						|
    echo "Downloading..."
 | 
						|
    /usr/bin/curl -L -O "${tarball_url}"
 | 
						|
    /usr/bin/curl -L -O "${gpg_url}"
 | 
						|
 | 
						|
    # GPG key of project
 | 
						|
    echo "Verifying the archive integrity..."
 | 
						|
    /usr/bin/curl -s -O "https://github.com/RiotRobot.gpg"
 | 
						|
    /usr/bin/gpg -o RiotRobot.ring --dearmor RiotRobot.gpg
 | 
						|
    /usr/bin/gpg --no-default-keyring --keyring ./RiotRobot.ring --verify "${gpg_file}"
 | 
						|
 | 
						|
    echo "Extracting archive..."
 | 
						|
    tar xfv "${tarball_file}"
 | 
						|
    folder_name=$(basename "${tarball_file}" .tar.gz)
 | 
						|
    # Update Element, but don't destroy the existing configuration
 | 
						|
    echo "Copying new files..."
 | 
						|
    /usr/bin/rsync -rXH "${folder_name}/" "${destination}/" \
 | 
						|
        --delete \
 | 
						|
        --exclude config.json \
 | 
						|
        --chown "${WEB_USER}":"${WEB_USER}"
 | 
						|
    chown -R "${WEB_USER}":"${WEB_USER}" "${destination}"
 | 
						|
    echo "Update complete."
 | 
						|
    popd
 | 
						|
}
 | 
						|
 | 
						|
tmpdir=$(mktemp -d)
 | 
						|
 | 
						|
trap 'cleanup ${tmpdir}' EXIT
 | 
						|
 | 
						|
HOMESERVER_URL="https://chat.dennogumi.org"
 | 
						|
DESTINATION_PATH="/srv/www/htdocs/chat.dennogumi.org"
 | 
						|
WEB_USER="nginx"
 | 
						|
github_data=$(/usr/bin/curl -s https://api.github.com/repos/vector-im/element-web/releases/latest)
 | 
						|
 | 
						|
current_version=$(/usr/bin/curl -s "${HOMESERVER_URL}/version")
 | 
						|
remote_version=$(echo "${github_data}" | /usr/bin/jq -r '.name')
 | 
						|
 | 
						|
echo "Checking for version updates..."
 | 
						|
 | 
						|
if version_gt "${remote_version}" "v${current_version}"
 | 
						|
then
 | 
						|
    echo "New version found: ${remote_version}"
 | 
						|
    changelog=$(echo "${github_data}" | /usr/bin/jq -r '.body')
 | 
						|
    echo "Changes in this version:"
 | 
						|
    echo "${changelog}"
 | 
						|
    asset_name=$(echo "${github_data}" | /usr/bin/jq -r '.assets[] |
 | 
						|
            select(.browser_download_url|endswith("tar.gz")) |
 | 
						|
            select(.name|startswith("element")).browser_download_url')
 | 
						|
    gpg_key_name=$(
 | 
						|
        echo "${github_data}" | /usr/bin/jq -r '.assets[] |
 | 
						|
            select(.browser_download_url|endswith("asc")) |
 | 
						|
            select(.name|startswith("element")).browser_download_url')
 | 
						|
    echo "Updating Element.im from ${current_version} to ${remote_version}..."
 | 
						|
    update "${asset_name}" "${gpg_key_name}" "${tmpdir}" "${DESTINATION_PATH}"
 | 
						|
else
 | 
						|
    echo "No new update: nothing to do."
 | 
						|
fi
 | 
						|
 | 
						|
exit 0
 |