1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238
|
# 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 venv 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: 'appveyor@67.225.164.xx -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
# All of these are common to all matrix runs ATM, so pre-defined here and to be overloaded if needed
DTS: datalad_container
APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu2004
INSTALL_SYSPKGS: python3-venv xz-utils jq
# 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
matrix:
# List a CI run for each platform first, to have immediate access when there
# is a need for debugging
# Ubuntu core tests
- ID: Ubu
# The same but with the oldest supported Python.
- ID: Ubu-3.8
PY: '3.8'
# The same but removing busybox first - triggers different code paths in the tests
- ID: Ubu-nobusybox
BEFORE_CMD: docker rmi busybox:latest
# 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 "test@appveyor.land"
- 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
# docker login to get "personalized" rate limit (rather than IP-based)
- sh: docker login -p "$DOCKERHUB_TOKEN" -u "$DOCKERHUB_USERNAME"
install:
# place a debug setup helper at a convenient location
- cmd: copy tools\ci\appveyor_env_setup.bat C:\\datalad_debug.bat
# Missing system software
- sh: "[ -n \"$INSTALL_SYSPKGS\" ] && ( [ \"x${APPVEYOR_BUILD_WORKER_IMAGE}\" = \"xmacOS\" ] && brew install -q ${INSTALL_SYSPKGS} || { sudo apt-get update -y && sudo apt-get install --no-install-recommends -y ${INSTALL_SYSPKGS}; } ) || true"
# If a particular Python version is requested, use env setup (using the
# appveyor provided environments/installation).
# Otherwise create a venv using the default Python 3, to enable uniform
# use of python/pip executables below
- sh: "[ \"x$PY\" != x ] && . ${HOME}/venv${PY}/bin/activate || python3 -m venv ${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 datalad-installer${DATALAD_INSTALLER_VERSION:-}
- pip install wheel
# setup neurodebian, needs update of sources.list when base release changes
- sh: "echo $ID | grep -q '^Ubu' && 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: "[ -z \"$INSTALL_SYSPKGS\" ] || { if [ \"x${APPVEYOR_BUILD_WORKER_IMAGE}\" = \"xmacOS\" ]; then brew install -q ${INSTALL_SYSPKGS}; else sudo apt-get update -y -qq --allow-releaseinfo-change && sudo apt-get install -qq --no-install-recommends -y ${INSTALL_SYSPKGS}; fi }"
# Install singularity
- sh: tools/ci/install-singularity.sh
# 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
# remove busybox:latest so tests could fetch/drop it as needed
- sh: "[ -n \"${BEFORE_CMD}\" ] && ${BEFORE_CMD} || :"
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 pytest -s -v -m "not (turtle)" --doctest-modules --cov=datalad_container --pyargs %DTS%
- sh: python -m pytest -s -v -m "not (turtle)" --doctest-modules --cov=datalad_container --pyargs ${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 }
|