Skip to content

Commit

Permalink
[Add] use gitlab-ci
Browse files Browse the repository at this point in the history
  • Loading branch information
nanoric committed Aug 8, 2019
1 parent 1b8152e commit 26a0a9b
Show file tree
Hide file tree
Showing 6 changed files with 358 additions and 132 deletions.
142 changes: 142 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
# This file is a template, and might need editing before it works on your project.
# Official language image. Look for the different tagged releases at:
# https://hub.docker.com/r/library/python/tags/
image: registry.cn-shanghai.aliyuncs.com/vnpy-ci/gcc-7-python-3.7:latest

.services:
services: &services
- postgres:latest
- mysql:latest
- mongo:latest

# Change pip's cache directory to be inside the project directory since we can
# only cache local items.
variables: &variables
GIT_DEPTH: "1"
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
POSTGRES_DB: &db_name "vnpy"
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: &db_password "1234"
VNPY_TEST_POSTGRESQL_PASSWORD: *db_password
MYSQL_DATABASE: *db_name
MYSQL_ROOT_PASSWORD: *db_password
VNPY_TEST_MYSQL_PASSWORD: *db_password
VNPY_BUILD_PARALLEL: "auto"

# Pip's cache doesn't store the python packages
# https://pip.pypa.io/en/stable/reference/pip_install/#caching
#
# If you want to also cache the installed packages, you have to install
# them in a virtualenv and cache it as well.
.default_cache:
cache:
<<: &cache
key: "pip_and_venv"
untracked: false
policy: pull
paths:
- .cache/pip
- venv/



before_script:
- echo $PWD
- python -V
- gcc --version
- free
- date

# venv
- pip install virtualenv
- virtualenv venv
- source venv/bin/activate

# some envs
- source ci/env.sh

.scripts:
script:
- &install_scripts |
date
python -m pip --version
python -m pip install --upgrade pip wheel setuptools
python -m pip install https://pip.vnpy.com/colletion/ibapi-9.75.1-001-py3-none-any.whl
bash ci/gitlab_pre_install.sh

date
bash ./install.sh
date

- &test_scripts |
date
cd tests
python test_all.py
date
##################################
# stages

stages: # I use anchors for IDE hints only
- &single_module single_module
- &build_all build_all


###########################################
## jobs:
flake8:
stage: *single_module
image: python:3.7
cache:
key: 'flake8'
paths:
- .cache/pip
- venv/
script:
- pip install flake8
- flake8

ctp:
<<: &test_single_module
stage: *single_module
image: registry.cn-shanghai.aliyuncs.com/vnpy-ci/gcc-8-python-3.7:latest
services: *services
cache:
<<: *cache
script:
- *install_scripts
- *test_scripts
variables:
<<: *variables
VNPY_BUILD_CTP: 1

oes:
<<: *test_single_module
variables:
<<: *variables
VNPY_BUILD_OES: 1

no_building:
<<: *test_single_module
cache:
<<: *cache
policy: pull-push
variables:
<<: *variables
VNPY_BUILD_OES: 0
VNPY_BUILD_CTP: 0

build-all-gcc8:
stage: *build_all
variables:
<<: *variables
image: registry.cn-shanghai.aliyuncs.com/vnpy-ci/gcc-8-python-3.7:latest
services: *services
cache:
key: "build-all"
paths: []
script:
- unset VNPY_BUILD_CTP
- unset VNPY_BUILD_OES
- *install_scripts
- *test_scripts

12 changes: 12 additions & 0 deletions tests/travis_env.sh → ci/env.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#!/usr/bin/env bash

# databases
[[ -z ${VNPY_TEST_MYSQL_DATABASE} ]] && VNPY_TEST_MYSQL_DATABASE=vnpy
[[ -z ${VNPY_TEST_MYSQL_HOST} ]] && VNPY_TEST_MYSQL_HOST=127.0.0.1
[[ -z ${VNPY_TEST_MYSQL_PORT} ]] && VNPY_TEST_MYSQL_PORT=3306
Expand Down Expand Up @@ -28,3 +29,14 @@ export VNPY_TEST_POSTGRESQL_PASSWORD
export VNPY_TEST_MONGODB_DATABASE
export VNPY_TEST_MONGODB_HOST
export VNPY_TEST_MONGODB_PORT

# ext_modules:
# disable all building first
[[ -z ${VNPY_BUILD_CTP} ]] && VNPY_BUILD_CTP=0
[[ -z ${VNPY_BUILD_OES} ]] && VNPY_BUILD_OES=0
export VNPY_BUILD_CTP
export VNPY_BUILD_OES

# build option
[[ -z ${VNPY_BUILD_PARALLEL} ]] && VNPY_BUILD_PARALLEL=auto
export VNPY_BUILD_PARALLEL
3 changes: 3 additions & 0 deletions ci/gitlab_pre_install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env bash

pip install cryptography
46 changes: 46 additions & 0 deletions ci/parallel_build_distutils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"""
monkey patch distutils to use multi-core to build single extension.
these code is based on:
https://stackoverflow.com/a/13176803/4797109
"""

import multiprocessing.pool

parallel: int = 1


# monkey-patch for parallel compilation
def parallel_compile(self,
sources,
output_dir=None,
macros=None,
include_dirs=None,
debug=0,
extra_preargs=None,
extra_postargs=None,
depends=None,
):
# those lines are copied from distutils.ccompiler.CCompiler directly
macros, objects, extra_postargs, pp_opts, build = self._setup_compile(
output_dir, macros, include_dirs, sources, depends, extra_postargs
)
cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)

def _single_compile(obj):
try:
src, ext = build[obj]
except KeyError:
return
self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)

# convert to list, imap is evaluated on-demand
list(multiprocessing.pool.ThreadPool(parallel).imap(_single_compile, objects))
return objects


def patch_distutils(jobs: int = None):
if jobs:
global parallel
parallel = jobs
import distutils.ccompiler
distutils.ccompiler.CCompiler.compile = parallel_compile
29 changes: 19 additions & 10 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,30 @@

python=$1
prefix=$2
shift 2

[[ -z $python ]] && python=python
[[ -z $prefix ]] && prefix=/usr

$python -m pip install --upgrade pip setuptools wheel

# Get and build ta-lib
pushd /tmp
wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
tar -xf ta-lib-0.4.0-src.tar.gz
cd ta-lib
./configure --prefix=$prefix
make -j
sudo make install
popd
function install-ta-lib()
{
pushd /tmp
wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
tar -xf ta-lib-0.4.0-src.tar.gz
cd ta-lib
./configure --prefix=$prefix
make -j
make install
popd
}
function ta-lib-exists()
{
ta-lib-config --libs > /dev/null
}
ta-lib-exists || install-ta-lib

# old versions of ta-lib imports numpy in setup.py
$python -m pip install numpy
Expand All @@ -30,7 +39,7 @@ $python -m pip install https://vnpy-pip.oss-cn-shanghai.aliyuncs.com/colletion/i
$python -m pip install -r requirements.txt

# Install local Chinese language environment
sudo locale-gen zh_CN.GB18030
locale-gen zh_CN.GB18030

# Install vn.py
$python -m pip install .
$python -m pip install . $@
Loading

0 comments on commit 26a0a9b

Please sign in to comment.