openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #30792
[Merge] lp:~tomasgroth/openlp/appveyor into lp:openlp
Tomas Groth has proposed merging lp:~tomasgroth/openlp/appveyor into lp:openlp.
Requested reviews:
OpenLP Core (openlp-core)
For more details, see:
https://code.launchpad.net/~tomasgroth/openlp/appveyor/+merge/312203
Added script and yml for AppVeyor integration.
--
Your team OpenLP Core is requested to review the proposed merge of lp:~tomasgroth/openlp/appveyor into lp:openlp.
=== added file 'scripts/appveyor-webhook.py'
--- scripts/appveyor-webhook.py 1970-01-01 00:00:00 +0000
+++ scripts/appveyor-webhook.py 2016-11-30 21:04:28 +0000
@@ -0,0 +1,133 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2016 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; version 2 of the License. #
+# #
+# 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, write to the Free Software Foundation, Inc., 59 #
+# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
+###############################################################################
+
+"""
+This script is used to trigger a build at appveyor. Since the code is not hosted
+on github the normal triggering mechanisms can't be use. The project is
+registered as subversion repository. A webhook is used to trigger new builds.
+The appveyor.yml used for the build is send to appveyor when calling the hook.
+"""
+import json
+import urllib
+import urllib.request
+import datetime
+import sys
+import time
+from subprocess import Popen, PIPE
+
+appveyor_build_url = 'https://ci.appveyor.com/project/TomasGroth/openlp/build'
+appveyor_api_url = 'https://ci.appveyor.com/api/projects/TomasGroth/openlp'
+
+webhook_element = \
+ {
+ 'commit': {
+ 'author': {
+ 'email': 'open@contributer',
+ 'name': 'OpenLP Contributor'
+ },
+ 'id': None,
+ 'message': None,
+ 'timestamp': datetime.datetime.now().isoformat()
+ },
+ 'config': None,
+ 'repository': {
+ 'name': 'repo_name',
+ 'url': 'repo_url'
+ }
+ }
+
+
+def get_version():
+ """
+ Get the version of the branch.
+ """
+ bzr = Popen(('bzr', 'tags'), stdout=PIPE)
+ output = bzr.communicate()[0]
+ code = bzr.wait()
+ if code != 0:
+ raise Exception('Error running bzr tags')
+ lines = output.splitlines()
+ if len(lines) == 0:
+ tag = '0.0.0'
+ revision = '0'
+ else:
+ tag, revision = lines[-1].decode('utf-8').split()
+ bzr = Popen(('bzr', 'log', '--line', '-r', '-1'), stdout=PIPE)
+ output, error = bzr.communicate()
+ code = bzr.wait()
+ if code != 0:
+ raise Exception('Error running bzr log')
+ latest = output.decode('utf-8').split(':')[0]
+ version_string = latest == revision and tag or 'r%s' % latest
+ # Save decimal version in case we need to do a portable build.
+ version = latest == revision and tag or '%s.%s' % (tag, latest)
+ return version_string, version
+
+
+def get_yml(branch):
+ """
+ Returns the content of appveyor.yml and inserts the branch to be build
+ """
+ f = open('appveyor.yml')
+ yml_text = f.read()
+ f.close()
+ yml_text = yml_text.replace('BRANCHNAME', branch)
+ return yml_text
+
+
+def hook(webhook_url, yml):
+ """
+ Activate the webhook to start the build
+ """
+ webhook_element['config'] = yml
+ webhook_element['commit']['message'] = 'Building ' + branch
+ version_string, version = get_version()
+ webhook_element['commit']['id'] = version_string
+ request = urllib.request.Request(webhook_url)
+ request.add_header('Content-Type', 'application/json;charset=utf-8')
+ responce = urllib.request.urlopen(request, json.dumps(webhook_element).encode('utf-8'))
+ if responce.getcode() != 204:
+ print('An error happened when calling the webhook! Return code: %d' % responce.getcode())
+ print(responce.read().decode('utf-8'))
+
+
+def get_appveyor_build_url(branch):
+ """
+ Get the url of the build.
+ """
+ # Wait 10 seconds to make sure the hook has been triggered
+ time.sleep(10)
+ responce = urllib.request.urlopen(appveyor_api_url)
+ json_str = responce.read().decode('utf-8')
+ build_json = json.loads(json_str)
+ build_url = '%s/%s' % (appveyor_build_url, build_json['build']['version'])
+ print('Check this URL for build status: %s' % build_url)
+
+
+if len(sys.argv) != 3:
+ print('Usage: %s <webhook-url> <branch>' % sys.argv[0])
+else:
+ webhook_url = sys.argv[1]
+ branch = sys.argv[2]
+ hook(webhook_url, get_yml(branch))
+ get_appveyor_build_url(branch)
=== added file 'scripts/appveyor.yml'
--- scripts/appveyor.yml 1970-01-01 00:00:00 +0000
+++ scripts/appveyor.yml 2016-11-30 21:04:28 +0000
@@ -0,0 +1,71 @@
+version: OpenLP-win-ci-b{build}
+
+init:
+ - choco install -y --force bzr
+ - set PATH=C:\Program Files (x86)\Bazaar;%PATH%
+ - bzr --version
+
+clone_script:
+ - bzr checkout --lightweight BRANCHNAME openlp-branch
+
+environment:
+ PYTHON: C:\\Python34
+
+install:
+ # Install dependencies from pypi
+ - "%PYTHON%\\python.exe -m pip install sqlalchemy alembic chardet beautifulsoup4 Mako nose mock pyodbc psycopg2 pypiwin32 pyenchant"
+ # Install mysql dependency
+ - "%PYTHON%\\python.exe -m pip install http://cdn.mysql.com/Downloads/Connector-Python/mysql-connector-python-2.0.4.zip#md5=3df394d89300db95163f17c843ef49df"
+ # Download and install lxml and pyicu (originally from http://www.lfd.uci.edu/~gohlke/pythonlibs/)
+ - "%PYTHON%\\python.exe -m pip install https://get.openlp.org/win-sdk/lxml-3.6.4-cp34-cp34m-win32.whl"
+ - "%PYTHON%\\python.exe -m pip install https://get.openlp.org/win-sdk/PyICU-1.9.5-cp34-cp34m-win32.whl"
+ # Download and install PyQt5
+ - curl -L -O http://downloads.sourceforge.net/project/pyqt/PyQt5/PyQt-5.5.1/PyQt5-5.5.1-gpl-Py3.4-Qt5.5.1-x32.exe
+ - PyQt5-5.5.1-gpl-Py3.4-Qt5.5.1-x32.exe /S
+ # Download and unpack mupdf
+ - curl -O http://mupdf.com/downloads/archive/mupdf-1.9a-windows.zip
+ - 7z x mupdf-1.9a-windows.zip
+ - cp mupdf-1.9a-windows/mupdf.exe openlp-branch/mupdf.exe
+ # Download and unpack mediainfo
+ - curl -O https://mediaarea.net/download/binary/mediainfo/0.7.90/MediaInfo_CLI_0.7.90_Windows_i386.zip
+ - mkdir MediaInfo
+ - 7z x -oMediaInfo MediaInfo_CLI_0.7.90_Windows_i386.zip
+ - cp MediaInfo\\MediaInfo.exe openlp-branch\\MediaInfo.exe
+
+
+build: off
+
+test_script:
+ - cd openlp-branch
+ - "%PYTHON%\\python.exe -m nose -v tests"
+ # Go back to the user root folder
+ - cd..
+
+after_test:
+ # This is where we create a package using PyInstaller
+ # First get PyInstaller
+ - curl -L -O https://github.com/pyinstaller/pyinstaller/archive/develop.zip
+ - 7z x develop.zip
+ # Install PyInstaller dependencies
+ - "%PYTHON%\\python.exe -m pip install future"
+ # Download and install Inno Setup - used for packaging
+ - curl -L -O http://www.jrsoftware.org/download.php/is-unicode.exe
+ - is-unicode.exe /VERYSILENT /SUPPRESSMSGBOXES /SP-
+ # Download and unpack portable-bundle
+ - curl -O https://get.openlp.org/win-sdk/portable-setup.7z
+ - 7z x portable-setup.7z
+ # Disabled portable installers - can't figure out how to make them silent
+ # - curl -L -O http://downloads.sourceforge.net/project/portableapps/PortableApps.com%20Installer/PortableApps.comInstaller_3.4.4.paf.exe
+ # - PortableApps.comInstaller_3.4.4.paf.exe /S
+ # - curl -L -O http://downloads.sourceforge.net/project/portableapps/PortableApps.com%20Launcher/PortableApps.comLauncher_2.2.1.paf.exe
+ # - PortableApps.comLauncher_2.2.1.paf.exe /S
+ # - curl -L -O http://downloads.sourceforge.net/project/portableapps/NSIS%20Portable/NSISPortable_3.0_English.paf.exe
+ # - NSISPortable_3.0_English.paf.exe /S
+ # Get the packaging code
+ - bzr checkout --lightweight lp:~tomasgroth/openlp/packaging-appveyor packaging
+ # Build the bundle
+ - cd packaging
+ - "%PYTHON%\\python.exe windows/windows-builder.py -v -u -t -c windows/config-appveyor.ini -b ../openlp-branch"
+
+artifacts:
+ - path: openlp-branch\dist\*.exe
=== modified file 'tests/functional/openlp_core_ui/test_maindisplay.py'
--- tests/functional/openlp_core_ui/test_maindisplay.py 2016-05-31 21:40:13 +0000
+++ tests/functional/openlp_core_ui/test_maindisplay.py 2016-11-30 21:04:28 +0000
@@ -270,6 +270,8 @@
service_item = MagicMock()
service_item.theme_data = MagicMock()
service_item.theme_data.background_type = 'video'
+ service_item.theme_data.theme_name = 'name'
+ service_item.theme_data.background_filename = 'background_filename'
mocked_plugin = MagicMock()
display.plugin_manager = PluginManager()
display.plugin_manager.plugins = [mocked_plugin]
=== modified file 'tests/functional/openlp_plugins/presentations/test_powerpointcontroller.py'
--- tests/functional/openlp_plugins/presentations/test_powerpointcontroller.py 2016-07-24 20:20:25 +0000
+++ tests/functional/openlp_plugins/presentations/test_powerpointcontroller.py 2016-11-30 21:04:28 +0000
@@ -137,7 +137,7 @@
instance.goto_slide(42)
# THEN: mocked_critical_error_message_box should have been called
- mocked_critical_error_message_box.assert_called_with('Error', 'An error occurred in the Powerpoint '
+ mocked_critical_error_message_box.assert_called_with('Error', 'An error occurred in the PowerPoint '
'integration and the presentation will be stopped.'
' Restart the presentation if you wish to '
'present it.')
References