Skip to content

Commit

Permalink
Merge pull request #11 from nexB/add-ci-config
Browse files Browse the repository at this point in the history
Add CI config
  • Loading branch information
JonoYang authored Nov 4, 2020
2 parents ad02f4e + e772fe6 commit ae44984
Show file tree
Hide file tree
Showing 7 changed files with 279 additions and 2 deletions.
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Set configure.bat's line ending to CRLF. Sometimes batch scripts don't work
# properly on Windows if the line ending is LF and not CRLF
configure.bat eol=crlf
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# This is a skeleton Travis CI config file that provides a starting point for adding CI
# to a Python project. Since we primarily develop in python3, this skeleton config file
# will be specific to that language.
# will be specific to that language.
#
# See https://config.travis-ci.com/ for a full list of configuration options.

Expand All @@ -18,4 +18,4 @@ python:
install: ./configure

# Scripts to run at script stage
script: bin/pytest
script: tmp/bin/pytest
45 changes: 45 additions & 0 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@

################################################################################
# We use Azure to run the full tests suites on Python 3.6
# on Windows (32 and 64), macOS and Linux (64 various distro)
################################################################################

jobs:

################################################################################
# These jobs are using VMs and Azure-provided Python 3.6
################################################################################

- template: etc/ci/azure-linux.yml
parameters:
job_name: ubuntu18_py36
image_name: ubuntu-18.04
python_versions: ['3.6']
test_suites:
all: tmp/bin/pytest -n 2 -vvs

- template: etc/ci/azure-mac.yml
parameters:
job_name: macos1015_py36
image_name: macos-10.15
python_versions: ['3.6']
test_suites:
all: tmp/bin/pytest -n 2 -vvs

- template: etc/ci/azure-win.yml
parameters:
job_name: win2019_32_py36
image_name: windows-2019
python_versions: ['3.6']
python_architecture: x86
test_suites:
all: tmp\Scripts\pytest -vvs

- template: etc/ci/azure-win.yml
parameters:
job_name: win2019_64_py36
image_name: windows-2019
python_versions: ['3.6']
python_architecture: x64
test_suites:
all: tmp\Scripts\pytest -vvs
121 changes: 121 additions & 0 deletions configure.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
@echo OFF
@setlocal
@rem Copyright (c) nexB Inc. http://www.nexb.com/ - All rights reserved.

@rem ################################
@rem # A configuration script for Windows
@rem #
@rem # The options and (optional) arguments are:
@rem # --clean : this is exclusive of anything else and cleans the environment
@rem # from built and installed files
@rem #
@rem # --python < path to python.exe> : this must be the first argument and set
@rem # the path to the Python executable to use. If < path to python.exe> is
@rem # set to "path", then the executable will be the python.exe available
@rem # in the PATH.
@rem ################################

@rem Current directory where this .bat files lives
set CFG_ROOT_DIR=%~dp0
@rem path where a configured Python should live in the current virtualenv if installed
set CONFIGURED_PYTHON=%CFG_ROOT_DIR%tmp\Scripts\python.exe
set PYTHON_EXECUTABLE=


@rem parse command line options and arguments
:collectopts
if "%1" EQU "--help" (goto cli_help)
if "%1" EQU "--clean" (call rmdir /s /q "%CFG_ROOT_DIR%tmp") && call exit /b
if "%1" EQU "--python" (set PROVIDED_PYTHON=%~2) && shift && shift && goto collectopts

@rem If we have a pre-configured Python in our virtualenv, reuse this as-is and run
if exist ""%CONFIGURED_PYTHON%"" (
set PYTHON_EXECUTABLE=%CONFIGURED_PYTHON%
goto run
)

@rem If we have a command arg for Python use this as-is
if ""%PROVIDED_PYTHON%""==""path"" (
@rem use a bare python available in the PATH
set PYTHON_EXECUTABLE=python
goto run
)
if exist ""%PROVIDED_PYTHON%"" (
set PYTHON_EXECUTABLE=%PROVIDED_PYTHON%
goto run
)


@rem otherwise we search for a suitable Python interpreter
:find_python
@rem First check the existence of the "py" launcher (available in Python 3)
@rem if we have it, check if we have a py -3 installed with the good version or a py 2.7
@rem if not, check if we have an old py 2.7
@rem exist if all fails

where py >nul 2>nul
if %ERRORLEVEL% == 0 (
@rem we have a py launcher, check for the availability of our required Python 3 version
py -3.6 --version >nul 2>nul
if %ERRORLEVEL% == 0 (
set PYTHON_EXECUTABLE=py -3.6
) else (
@rem we have no required python 3, let's try python 2:
py -2 --version >nul 2>nul
if %ERRORLEVEL% == 0 (
set PYTHON_EXECUTABLE=py -2
) else (
@rem we have py and no python 3 and 2, exit
echo * Unable to find an installation of Python.
exit /b 1
)
)
) else (
@rem we have no py launcher, check for a default Python 2 installation
if not exist ""%DEFAULT_PYTHON2%"" (
echo * Unable to find an installation of Python.
exit /b 1
) else (
set PYTHON_EXECUTABLE=%DEFAULT_PYTHON2%
)
)


:run
@rem without this things may not always work on Windows 10, but this makes things slower
set PYTHONDONTWRITEBYTECODE=1

call mkdir "%CFG_ROOT_DIR%tmp"
call curl -o "%CFG_ROOT_DIR%tmp\virtualenv.pyz" https://bootstrap.pypa.io/virtualenv.pyz
call %PYTHON_EXECUTABLE% "%CFG_ROOT_DIR%tmp\virtualenv.pyz" "%CFG_ROOT_DIR%tmp"
call "%CFG_ROOT_DIR%tmp\Scripts\activate"
call "%CFG_ROOT_DIR%tmp\Scripts\pip" install --upgrade pip virtualenv setuptools wheel
call "%CFG_ROOT_DIR%tmp\Scripts\pip" install -e .[testing]

@rem Return a proper return code on failure
if %ERRORLEVEL% neq 0 (
exit /b %ERRORLEVEL%
)
endlocal
goto activate


:cli_help
echo A configuration script for Windows
echo usage: configure [options] [path/to/config/directory]
echo.
echo The options and arguments are:
echo --clean : this is exclusive of anything else and cleans the environment
echo from built and installed files
echo.
echo --python path/to/python.exe : this is set to the path of an alternative
echo Python executable to use. If path/to/python.exe is set to "path",
echo then the executable will be the python.exe available in the PATH.
echo.


:activate
@rem Activate the virtualenv
if exist "%CFG_ROOT_DIR%tmp\Scripts\activate" (
"%CFG_ROOT_DIR%tmp\Scripts\activate"
)
36 changes: 36 additions & 0 deletions etc/ci/azure-linux.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
parameters:
job_name: ''
image_name: ''
python_versions: []
test_suites: {}
python_architecture: x64

jobs:
- job: ${{ parameters.job_name }}

pool:
vmImage: ${{ parameters.image_name }}

strategy:
matrix:
${{ each pyver in parameters.python_versions }}:
${{ each tsuite in parameters.test_suites }}:
${{ format('py{0} {1}', pyver, tsuite.key) }}:
python_version: ${{ pyver }}
test_suite_label: ${{ tsuite.key }}
test_suite: ${{ tsuite.value }}
steps:
- checkout: self
fetchDepth: 10

- task: UsePythonVersion@0
inputs:
versionSpec: '$(python_version)'
architecture: '${{ parameters.python_architecture }}'
displayName: 'Install Python $(python_version)'

- script: ./configure
displayName: 'Run Configure'

- script: $(test_suite)
displayName: 'Run $(test_suite_label) tests with py$(python_version) on ${{ parameters.job_name }}'
36 changes: 36 additions & 0 deletions etc/ci/azure-mac.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
parameters:
job_name: ''
image_name: ''
python_versions: []
test_suites: {}
python_architecture: x64

jobs:
- job: ${{ parameters.job_name }}

pool:
vmImage: ${{ parameters.image_name }}

strategy:
matrix:
${{ each pyver in parameters.python_versions }}:
${{ each tsuite in parameters.test_suites }}:
${{ format('py{0} {1}', pyver, tsuite.key) }}:
python_version: ${{ pyver }}
test_suite_label: ${{ tsuite.key }}
test_suite: ${{ tsuite.value }}
steps:
- checkout: self
fetchDepth: 10

- task: UsePythonVersion@0
inputs:
versionSpec: '$(python_version)'
architecture: '${{ parameters.python_architecture }}'
displayName: 'Install Python $(python_version)'

- script: ./configure
displayName: 'Run Configure'

- script: $(test_suite)
displayName: 'Run $(test_suite_label) tests with py$(python_version) on ${{ parameters.job_name }}'
36 changes: 36 additions & 0 deletions etc/ci/azure-win.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
parameters:
job_name: ''
image_name: ''
python_versions: []
test_suites: {}
python_architecture: x86

jobs:
- job: ${{ parameters.job_name }}

pool:
vmImage: ${{ parameters.image_name }}

strategy:
matrix:
${{ each pyver in parameters.python_versions }}:
${{ each tsuite in parameters.test_suites }}:
${{ format('py{0} {1}', pyver, tsuite.key) }}:
python_version: ${{ pyver }}
test_suite_label: ${{ tsuite.key }}
test_suite: ${{ tsuite.value }}
steps:
- checkout: self
fetchDepth: 10

- task: UsePythonVersion@0
inputs:
versionSpec: '$(python_version)'
architecture: '${{ parameters.python_architecture }}'
displayName: 'Install Python $(python_version)'

- script: configure --python path
displayName: 'Run Configure'

- script: $(test_suite)
displayName: 'Run $(test_suite_label) tests with py$(python_version) on ${{ parameters.job_name }}'

0 comments on commit ae44984

Please sign in to comment.