Skip to content

Commit

Permalink
Merge pull request #167 from mih/appveyor
Browse files Browse the repository at this point in the history
Adopt standard appveyor config
  • Loading branch information
mih authored Feb 2, 2022
2 parents 80eb592 + 50c6763 commit 2f4dd4d
Show file tree
Hide file tree
Showing 2 changed files with 222 additions and 0 deletions.
220 changes: 220 additions & 0 deletions .appveyor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
# This CI setup provides a largely homogeneous configuration across all
# major platforms (Windows, MacOS, and Linux). The aim of this test setup is
# to create a "native" platform experience, using as few cross-platform
# helper tools as possible.
#
# On Linux/Mac a virtualenv is used for testing. The effective virtual env
# is available under ~/VENV.
#
# All workers support remote login. Login details are shown at the top of each
# CI run log.
#
# - Linux/Mac workers (via SSH):
#
# - A permitted SSH key must be defined in an APPVEYOR_SSH_KEY environment
# variable (via the appveyor project settings)
#
# - SSH login info is given in the form of: '[email protected] -p 22xxx'
#
# - Login with:
#
# ssh -o StrictHostKeyChecking=no <LOGIN>
#
# - to prevent the CI run from exiting, `touch` a file named `BLOCK` in the
# user HOME directory (current directory directly after login). The session
# will run until the file is removed (or 60 min have passed)
#
# - Windows workers (via RDP):
#
# - An RDP password should be defined in an APPVEYOR_RDP_PASSWORD environment
# variable (via the appveyor project settings), or a random password is used
# every time
#
# - RDP login info is given in the form of IP:PORT
#
# - Login with:
#
# xfreerdp /cert:ignore /dynamic-resolution /u:appveyor /p:<PASSWORD> /v:<LOGIN>
#
# - to prevent the CI run from exiting, create a textfile named `BLOCK` on the
# Desktop (a required .txt extension will be added automatically). The session
# will run until the file is removed (or 60 min have passed)
#
# - in a terminal execute, for example, `C:\datalad_debug.bat 39` to set up the
# environment to debug in a Python 3.8 session (should generally match the
# respective CI run configuration).


# do not make repository clone cheap: interfers with versioneer
shallow_clone: false


environment:
DATALAD_TESTS_SSH: 1

# Do not use `image` as a matrix dimension, to have fine-grained control over
# what tests run on which platform
# The ID variable had no impact, but sorts first in the CI run overview
# an intelligible name can help to locate a specific test run
matrix:
# List a CI run for each platform first, to have immediate access when there
# is a need for debugging

# Ubuntu core tests
- ID: Ubu20
DTS: datalad_container
APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu2004
INSTALL_SYSPKGS: python3-virtualenv xz-utils singularity-container
# system git-annex is way too old, use better one
INSTALL_GITANNEX: git-annex -m deb-url --url http://snapshot.debian.org/archive/debian/20210906T204127Z/pool/main/g/git-annex/git-annex_8.20210903-1_amd64.deb
CODECOV_BINARY: https://uploader.codecov.io/latest/linux/codecov
# Windows core tests
#- ID: WinP39core
# # ~35 min
# DTS: datalad_container
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
# # Python version specification is non-standard on windows
# PY: 39-x64
# INSTALL_GITANNEX: git-annex -m datalad/packages
## MacOS core tests
#- ID: MacP38core
# DTS: datalad_container
# APPVEYOR_BUILD_WORKER_IMAGE: macOS
# PY: 3.8
# INSTALL_GITANNEX: git-annex
# DATALAD_LOCATIONS_SOCKETS: /Users/appveyor/DLTMP/sockets
# CODECOV_BINARY: https://uploader.codecov.io/latest/macos/codecov

matrix:
allow_failures:
- KNOWN2FAIL: 1


# it is OK to specify paths that may not exist for a particular test run
cache:
# pip cache
- C:\Users\appveyor\AppData\Local\pip\Cache -> .appveyor.yml
- /home/appveyor/.cache/pip -> .appveyor.yml
# TODO: where is the cache on macOS?
#- /Users/appveyor/.cache/pip -> .appveyor.yml
# TODO: Can we cache `brew`?
#- /usr/local/Cellar
#- /usr/local/bin


# turn of support for MS project build support (not needed)
build: off


# init cannot use any components from the repo, because it runs prior to
# cloning it
init:
# remove windows 260-char limit on path names
- cmd: powershell Set-Itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name LongPathsEnabled -value 1
# enable developer mode on windows
# this should enable mklink without admin privileges, but it doesn't seem to work
#- cmd: powershell tools\ci\appveyor_enable_windevmode.ps1
# enable RDP access on windows (RDP password is in appveyor project config)
# this is relatively expensive (1-2min), but very convenient to jump into any build at any time
- cmd: powershell.exe iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# enable external SSH access to CI worker on all other systems
# needs APPVEYOR_SSH_KEY defined in project settings (or environment)
- sh: curl -sflL 'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-ssh.sh' | bash -e -
# Identity setup
- git config --global user.email "[email protected]"
- git config --global user.name "Appveyor Almighty"
# Scratch space
- cmd: md C:\DLTMP
# we place the "unix" one into the user's HOME to avoid git-annex issues on MacOSX
# gh-5291
- sh: mkdir ~/DLTMP
# and use that scratch space to get short paths in test repos
# (avoiding length-limits as much as possible)
- cmd: "set TMP=C:\\DLTMP"
- cmd: "set TEMP=C:\\DLTMP"
- sh: export TMPDIR=~/DLTMP


install:
# place a debug setup helper at a convenient location
- cmd: copy tools\ci\appveyor_env_setup.bat C:\\datalad_debug.bat
# If a particular Python version is requested, use env setup (using the
# appveyor provided environments/installation). Note, these are broken
# on the ubuntu images
# https://help.appveyor.com/discussions/problems/28217-appveyor-ubunu-image-with-python3-lzma-module
# Otherwise create a virtualenv using the default Python 3, to enable uniform
# use of python/pip executables below
- sh: "[ \"x$PY\" != x ] && . ${HOME}/venv${PY}/bin/activate || virtualenv -p 3 ${HOME}/dlvenv && . ${HOME}/dlvenv/bin/activate; ln -s \"$VIRTUAL_ENV\" \"${HOME}/VENV\""
- cmd: "set PATH=C:\\Python%PY%;C:\\Python%PY%\\Scripts;%PATH%"
# deploy the datalad installer, override version via DATALAD_INSTALLER_VERSION
- cmd:
IF DEFINED DATALAD_INSTALLER_VERSION (
python -m pip install -q "datalad-installer%DATALAD_INSTALLER_VERSION%"
) ELSE (
python -m pip install -q datalad-installer
)
- sh: python -m pip install -q datalad-installer${DATALAD_INSTALLER_VERSION:-}
# setup neurodebian, needs update of sources.list when base release changes
- sh: "[ \"$ID\"x = \"Ubu20x\" ] && wget -O- http://neuro.debian.net/lists/focal.us-nh.full | sudo tee /etc/apt/sources.list.d/neurodebian.sources.list && ( sudo apt-key adv --recv-keys --keyserver hkps://keyserver.ubuntu.com 0xA5D32F012649A5A9 || { wget -q -O- http://neuro.debian.net/_static/neuro.debian.net.asc | sudo apt-key add -; } )"
# Missing system software
- sh: "[ -n \"$INSTALL_SYSPKGS\" ] && ( [ \"x${APPVEYOR_BUILD_WORKER_IMAGE}\" = \"xmacOS\" ] && brew install -q ${INSTALL_SYSPKGS} || { sudo apt-get update -y -qq && sudo apt-get install -qq --no-install-recommends -y ${INSTALL_SYSPKGS}; } ) || true"
# Install git-annex on windows, otherwise INSTALL_SYSPKGS can be used
# deploy git-annex, if desired
- cmd: IF DEFINED INSTALL_GITANNEX datalad-installer --sudo ok %INSTALL_GITANNEX%
- sh: "[ -n \"${INSTALL_GITANNEX}\" ] && datalad-installer --sudo ok ${INSTALL_GITANNEX}"
# in case of a snapshot installation, use the following approach to adjust
# the PATH as necessary
#- sh: "[ -n \"${INSTALL_GITANNEX}\" ] && datalad-installer -E ${HOME}/dlinstaller_env.sh --sudo ok ${INSTALL_GITANNEX}"
# add location of datalad installer results to PATH
#- sh: "[ -f ${HOME}/dlinstaller_env.sh ] && . ${HOME}/dlinstaller_env.sh || true"


#before_build:
#


build_script:
- python -m pip install -q -r requirements-devel.txt
- python -m pip install .


#after_build:
#


before_test:
# simple call to see if datalad and git-annex are installed properly
- datalad wtf


test_script:
# run tests on installed module, not source tree files
- cmd: md __testhome__
- sh: mkdir __testhome__
- cd __testhome__
# run test selecion (--traverse-namespace needed from Python 3.8 onwards)
- cmd: python -m nose --traverse-namespace -s -v -A "not (turtle)" --with-cov --cover-package datalad_container %DTS%
- sh: python -m nose --traverse-namespace -s -v -A "not (turtle)" --with-cov --cover-package datalad_container ${DTS}


after_test:
- python -m coverage xml
- cmd: curl -fsSL -o codecov.exe "https://uploader.codecov.io/latest/windows/codecov.exe"
- cmd: .\codecov.exe -f "coverage.xml"
- sh: "curl -Os $CODECOV_BINARY"
- sh: chmod +x codecov
- sh: ./codecov


#on_success:
#


#on_failure:
#


on_finish:
# conditionally block the exit of a CI run for direct debugging
- sh: while [ -f ~/BLOCK ]; do sleep 5; done
- cmd: powershell.exe while ((Test-Path "C:\Users\\appveyor\\Desktop\\BLOCK.txt")) { Start-Sleep 5 }
2 changes: 2 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ def findsome(subdir, extensions):
],
'tests': [
'nose>=1.3.4',
'coverage',
'six',
],
}
requires['devel'] = sum(list(requires.values()), [])
Expand Down

0 comments on commit 2f4dd4d

Please sign in to comment.