Browse Source

remove duplicated requiremnt, add appveyor config

Christian Mönch 2 years ago
parent
commit
de278012d2
3 changed files with 188 additions and 1 deletions
  1. 185 0
      .appveyor.yml
  2. 3 0
      codecov.yml
  3. 0 1
      requirements.txt

+ 185 - 0
.appveyor.yml

@@ -0,0 +1,185 @@
+# 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: '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).
+
+
+# make repository clone cheap
+shallow_clone: true
+
+
+environment:
+  # 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_metalad
+      APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu2004
+      INSTALL_SYSPKGS: python3-virtualenv
+    # Windows core tests
+    - ID: WinP38
+      DTS: datalad_metalad
+      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
+      # Python version specification is non-standard on windows
+      PY: 39-x64
+    # MacOS core tests
+    - ID: MacP38
+      DTS: datalad_metalad
+      APPVEYOR_BUILD_WORKER_IMAGE: macOS
+      PY: 3.8
+      DATALAD_LOCATIONS_SOCKETS: /Users/appveyor/DLTMP/sockets
+
+# 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
+
+
+# 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
+
+
+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%"
+  # Missing system software
+  - sh: "[ -n \"$INSTALL_SYSPKGS\" ] && ( [ \"x${APPVEYOR_BUILD_WORKER_IMAGE}\" = \"xmacOS\" ] && brew install -q ${INSTALL_SYSPKGS} || sudo apt-get install --no-install-recommends -y ${INSTALL_SYSPKGS} ) || true"
+
+
+#before_build:
+#
+
+
+build_script:
+  - python -m pip install -r requirements.txt
+  - python -m pip install .
+
+
+#after_build:
+#
+
+
+before_test:
+  # simple call to see if the datalad metadata model is installed
+  - python -c "import dataladmetadatamodel"
+
+
+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 dataladmetadatamodel %DTS%
+  - sh:  python -m nose --traverse-namespace -s -v -A "not (turtle)" --with-cov --cover-package dataladmetadatamodel ${DTS}
+
+
+after_test:
+  # move coverage into the project dir to make default handling applicable
+  - cmd: move .coverage ..
+  - sh: mv .coverage ..
+  - cd ..
+  # use windows codecov uploader package
+  - cmd: choco install codecov
+  - cmd: python -m coverage xml
+  - cmd: codecov -f coverage.xml
+  - sh: bash <(curl -sfS https://codecov.io/bash)
+
+
+#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 }

+ 3 - 0
codecov.yml

@@ -0,0 +1,3 @@
+ignore:
+  - "dataladmetadatamodel/_version.py"
+  - "versioneer.py"

+ 0 - 1
requirements.txt

@@ -2,4 +2,3 @@ nose
 click
 dataclasses
 fasteners
-nose