diff --git a/Dockerfile.debian b/Dockerfile.debian index 1ae0593..d74ad45 100644 --- a/Dockerfile.debian +++ b/Dockerfile.debian @@ -8,6 +8,8 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive \ python3-websockets python3-webob python3-waitress python3-requests python3-pymediainfo \ python3-qtawesome python3-opengl python3-appdirs python3-vlc python3-zeroconf python3-pip \ python3-flake8 python3-flask python3-flask-cors python3-distro flake8 mediainfo mupdf-tools xvfb \ - python3-pytestqt twine + python3-pytestqt python3-paramiko twine ADD fixpaths.py /usr/bin/fixpaths RUN chmod a+x /usr/bin/fixpaths +ADD uploadversion.py /usr/bin/uploadversion +RUN chmod a+x /usr/bin/uploadversion diff --git a/uploadversion.py b/uploadversion.py new file mode 100644 index 0000000..fca29cf --- /dev/null +++ b/uploadversion.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +########################################################################## +# OpenLP - Open Source Lyrics Projection # +# ---------------------------------------------------------------------- # +# Copyright (c) 2008-2020 OpenLP Developers # +# ---------------------------------------------------------------------- # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +########################################################################## +""" +A script to get the OpenLP version from the source code and upload it to the appropriate file in +https://get.openlp.org/versions/ +""" +import os +from contextlib import contextmanager +from io import StringIO +from subprocess import PIPE, CalledProcessError, run + +from paramiko.client import SSHClient, AutoAddPolicy +from paramiko.rsakey import RSAKey + + +OPENLP_SERVER = 'openlp.io' +OPENLP_USER = 'openlp' +OPENLP_KEY = RSAKey.from_private_key(StringIO(os.environ['SSH_KEY'])) +VERSIONS_DIR = '/home/{user}/sites/get.openlp.org/www/versions/'.format(user=OPENLP_USER) + + +def get_version(): + """Run setup.py and get the version number""" + try: + result = run(['python3', 'setup.py', '--version'], stdout=PIPE) + return result.stdout.strip().decode('utf8') + except CalledProcessError: + return '0.0.0' + + +def get_version_file(full_version): + """Return the correct version file for the version""" + bits = full_version.split('.dev') + current_version = { + 'full': full_version, + 'version': bits[0], + 'build': full_version.split('+')[1] if '+' in full_version else None + } + if current_version['build']: + return 'nightly_version.txt' + elif int(current_version['version'].split('.')[1]) % 2 != 0: + return 'dev_version.txt' + else: + return 'version.txt' + + +@contextmanager +def sftp_connect(): + """Create an SSH connection to the server""" + client = SSHClient() + client.set_missing_host_key_policy(AutoAddPolicy()) + client.load_system_host_keys() + client.connect(OPENLP_SERVER, username=OPENLP_USER, pkey=OPENLP_KEY) + yield client.open_sftp() + client.close() + + +def write_version_file(version, version_file): + remote_filename = VERSIONS_DIR + version_file + with sftp_connect() as sftp_client: + remote_file = sftp_client.file(remote_filename, 'w') + remote_file.write(version) + + +def main(): + """Run the script""" + version = get_version() + print('Version: {version}'.format(version=version)) + version_file = get_version_file(version) + print('Version file: {version_file}'.format(version_file=version_file)) + write_version_file(version, version_file) + + +if __name__ == '__main__': + main()