From a374fb4a120d93ef479c1de5c9f7033dfcc0dc85 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Wed, 5 Apr 2017 16:18:03 -0700 Subject: [PATCH] Appveyor (#1101) Appveyor setup --- .appveyor.yml | 188 +++++++++++++++++++++++++ pyfa.spec => dist_assets/win/pyfa.spec | 2 +- dist_assets/win/pyfa_debug.spec | 83 +++++++++++ 3 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 .appveyor.yml rename pyfa.spec => dist_assets/win/pyfa.spec (96%) create mode 100644 dist_assets/win/pyfa_debug.spec diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 000000000..52a03f390 --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,188 @@ +environment: + access_token: + secure: a328a5a4185ae823ae77430883ced14733f426a7 + + global: + # SDK v7.0 MSVC Express 2008's SetEnv.cmd script will fail if the + # /E:ON and /V:ON options are not enabled in the batch script intepreter + # See: http://stackoverflow.com/a/13751649/163740 + CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\appveyor\\run_with_env.cmd" + + matrix: + + # Python 2.7.10 is the latest version and is not pre-installed. + + - PYTHON: "C:\\Python27.10" + PYTHON_VERSION: "2.7.10" + PYTHON_ARCH: "32" + + - PYTHON: "C:\\Python27.10-x64" + PYTHON_VERSION: "2.7.10" + PYTHON_ARCH: "64" + + # Pre-installed Python versions, which Appveyor may upgrade to + # a later point release. + # See: http://www.appveyor.com/docs/installed-software#python + + - PYTHON: "C:\\Python27" + PYTHON_VERSION: "2.7.x" # currently 2.7.9 + PYTHON_ARCH: "32" + + - PYTHON: "C:\\Python27-x64" + PYTHON_VERSION: "2.7.x" # currently 2.7.9 + PYTHON_ARCH: "64" + + #- PYTHON: "C:\\Python33" + # PYTHON_VERSION: "3.3.x" # currently 3.3.5 + # PYTHON_ARCH: "32" + + #- PYTHON: "C:\\Python33-x64" + # PYTHON_VERSION: "3.3.x" # currently 3.3.5 + # PYTHON_ARCH: "64" + + #- PYTHON: "C:\\Python34" + # PYTHON_VERSION: "3.4.x" # currently 3.4.3 + # PYTHON_ARCH: "32" + + #- PYTHON: "C:\\Python34-x64" + # PYTHON_VERSION: "3.4.x" # currently 3.4.3 + # PYTHON_ARCH: "64" + + # Python versions not pre-installed + + # Python 2.6.6 is the latest Python 2.6 with a Windows installer + # See: https://github.com/ogrisel/python-appveyor-demo/issues/10 + + #- PYTHON: "C:\\Python266" + # PYTHON_VERSION: "2.6.6" + # PYTHON_ARCH: "32" + + #- PYTHON: "C:\\Python266-x64" + # PYTHON_VERSION: "2.6.6" + # PYTHON_ARCH: "64" + + #- PYTHON: "C:\\Python35" + # PYTHON_VERSION: "3.5.0" + # PYTHON_ARCH: "32" + + #- PYTHON: "C:\\Python35-x64" + # PYTHON_VERSION: "3.5.0" + # PYTHON_ARCH: "64" + + # Major and minor releases (i.e x.0.0 and x.y.0) prior to 3.3.0 use + # a different naming scheme. + + - PYTHON: "C:\\Python270" + PYTHON_VERSION: "2.7.0" + PYTHON_ARCH: "32" + + - PYTHON: "C:\\Python270-x64" + PYTHON_VERSION: "2.7.0" + PYTHON_ARCH: "64" + +install: + # If there is a newer build queued for the same PR, cancel this one. + # The AppVeyor 'rollout builds' option is supposed to serve the same + # purpose but it is problematic because it tends to cancel builds pushed + # directly to master instead of just PR builds (or the converse). + # credits: JuliaLang developers. + - ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod ` + https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | ` + Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { ` + throw "There are newer queued builds for this pull request, failing early." } + + # Install wxPython + - 'ECHO Downloading wxPython.' + - "appveyor DownloadFile https://goo.gl/yvO8PB -FileName C:\\wxpython.exe" + - "appveyor DownloadFile https://goo.gl/Uj0jV3 -FileName C:\\wxpython64.exe" + + - 'ECHO Install wxPython' + - "C:\\wxpython.exe /SP- /VERYSILENT /NORESTART" + - "C:\\wxpython64.exe /SP- /VERYSILENT /NORESTART" + + - ECHO "Filesystem root:" + - ps: "ls \"C:/\"" + + - ECHO "Filesystem pyfa root:" + - ps: "ls \"C:\\projects\\pyfa\\\"" + + - ECHO "Installed SDKs:" + - ps: "ls \"C:/Program Files/Microsoft SDKs/Windows\"" + + # Install Python (from the official .msi of http://python.org) and pip when + # not already installed. + # - ps: if (-not(Test-Path($env:PYTHON))) { & appveyor\install.ps1 } + + # Prepend newly installed Python to the PATH of this build (this cannot be + # done from inside the powershell script as it would require to restart + # the parent CMD process). + - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" + + # Check that we have the expected version and architecture for Python + - "python --version" + - "python -c \"import struct; print(struct.calcsize('P') * 8)\"" + + # Upgrade to the latest version of pip to avoid it displaying warnings + # about it being out of date. + - "pip install --disable-pip-version-check --user --upgrade pip" + + # Install the build dependencies of the project. If some dependencies contain + # compiled extensions and are not provided as pre-built wheel packages, + # pip will build them from source using the MSVC compiler matching the + # target Python version and architecture + # C:\\projects\\eve-gnosis\\ + - ECHO "Install pip requirements:" + - "pip install -r requirements.txt" + - "pip install -r requirements_test.txt" + - "pip install -r requirements_build_windows.txt" + +build_script: + # Build the compiled extension + # - "python setup.py build" + - ECHO "Build pyfa:" + - copy C:\projects\pyfa\dist_assets\win\pyfa.spec C:\projects\pyfa\pyfa.spec + - "pyinstaller.exe --clean --noconfirm --windowed --upx-dir=C:\\projects\\pyfa\\scripts\\upx.exe C:\\projects\\pyfa\\pyfa.spec" + + - ECHO "Build pyfa (Debug):" + - copy C:\projects\pyfa\dist_assets\win\pyfa_debug.spec C:\projects\pyfa\pyfa_debug.spec + - "pyinstaller.exe --clean --noconfirm --windowed --upx-dir=C:\\projects\\pyfa\\scripts\\upx.exe C:\\projects\\pyfa\\pyfa_debug.spec" + +build: on + +after_build: + - ps: "ls \"./\"" + #- ps: "ls \"C:\\projects\\pyfa\\build\\pyfa\\\"" + - ps: "ls \"C:\\projects\\pyfa\\dist\\\"" + - ps: "ls \"C:\\projects\\pyfa\\dist\\pyfa\\\"" + # Zip + # APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER + #- 7z a build.zip -r C:\projects\pyfa\build\pyfa\*.* + - 7z a pyfa.zip -r C:\projects\pyfa\dist\pyfa\*.* + - 7z a pyfa_debug.zip -r C:\projects\pyfa\dist\pyfa_debug\*.* + +on_success: + # Do nothing right now + +test_script: + - tox + - "py.test --cov=./" + # Run the project tests + # - "%CMD_IN_ENV% python C:/projects/eve-gnosis/setup.py nosetests" + +after_test: + # If tests are successful, create binary packages for the project. + # - "%CMD_IN_ENV% python setup.py bdist_wheel" + # - "%CMD_IN_ENV% python setup.py bdist_wininst" + # - "%CMD_IN_ENV% python setup.py bdist_msi" + # - ps: "ls dist" + +artifacts: + # Archive the generated packages in the ci.appveyor.com build report. + - path: pyfa.zip + name: Pyfa + - path: pyfa_debug.zip + name: Pyfa_debug + +#on_success: +# - TODO: upload the content of dist/*.whl to a public wheelhouse +# \ No newline at end of file diff --git a/pyfa.spec b/dist_assets/win/pyfa.spec similarity index 96% rename from pyfa.spec rename to dist_assets/win/pyfa.spec index c528aeecb..0f61a860d 100644 --- a/pyfa.spec +++ b/dist_assets/win/pyfa.spec @@ -40,7 +40,7 @@ for root, folders, files in os.walk("eos/effects"): a = Analysis( ['pyfa.py'], - pathex=['C:\\Users\\Ebag333\\Documents\\GitHub\\Ebag333\\Pyfa'], + pathex=['C:\\projects\\pyfa\\'], binaries=[], datas=added_files, hiddenimports=import_these, diff --git a/dist_assets/win/pyfa_debug.spec b/dist_assets/win/pyfa_debug.spec new file mode 100644 index 000000000..bc604dd10 --- /dev/null +++ b/dist_assets/win/pyfa_debug.spec @@ -0,0 +1,83 @@ +# -*- mode: python -*- + +# Note: This script is provided AS-IS for those that may be interested. +# pyfa does not currently support pyInstaller (or any other build process) 100% at the moment + +# Command line to build: +# (Run from directory where pyfa.py and pyfa.spec lives.) +# c:\Python27\scripts\pyinstaller.exe --clean --noconfirm --windowed --upx-dir=.\scripts\upx.exe pyfa.spec + +# Don't forget to change the path to where your pyfa.py and pyfa.spec lives +# pathex=['C:\\Users\\Ebag333\\Documents\\GitHub\\Ebag333\\Pyfa'], + +import os + +block_cipher = None + +added_files = [ + ( 'imgs/gui/*.png', 'imgs/gui' ), + ( 'imgs/gui/*.gif', 'imgs/gui' ), + ( 'imgs/icons/*.png', 'imgs/icons' ), + ( 'imgs/renders/*.png', 'imgs/renders' ), + ( 'dist_assets/win/pyfa.ico', '.' ), + ( 'dist_assets/cacert.pem', '.' ), + ( 'eve.db', '.' ), + ( 'README.md', '.' ), + ( 'LICENSE', '.' ), + ] + +import_these = [] + +# Walk eos.effects and add all effects so we can import them properly +for root, folders, files in os.walk("eos/effects"): + for file_ in files: + if file_.endswith(".py") and not file_.startswith("_"): + mod_name = "{}.{}".format( + root.replace("/", "."), + file_.split(".py")[0], + ) + import_these.append(mod_name) + +a = Analysis( + ['pyfa.py'], + pathex=['C:\\projects\\pyfa\\'], + binaries=[], + datas=added_files, + hiddenimports=import_these, + hookspath=[], + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + ) + +pyz = PYZ( + a.pure, + a.zipped_data, + cipher=block_cipher, + ) + +exe = EXE(pyz, + a.scripts, + exclude_binaries=True, + debug=True, + console=True, + strip=False, + upx=True, + name='pyfa_debug', + icon='dist_assets/win/pyfa.ico', + onefile=False, + ) + +coll = COLLECT( + exe, + a.binaries, + a.zipfiles, + a.datas, + strip=False, + upx=True, + onefile=False, + name='pyfa_debug', + icon='dist_assets/win/pyfa.ico', + )