← Back to team overview

openlp-core team mailing list archive

[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