.gitlab-ci.yml 4.35 KB
Newer Older
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
1 2 3
# This build file heavily uses template features from YAML so it is generic
# enough for any Bob project. Don't modify it unless you know what you're
# doing.
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
4 5 6 7 8 9 10 11


# Definition of our build pipeline
stages:
  - build
  - test
  - docs
  - wheels
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
12
  - deploy
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
13 14


Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
15 16 17
# ---------
# Templates
# ---------
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
18 19 20 21 22 23 24

# Template for the build stage
# Needs to run on all supported architectures, platforms and python versions
.build_template: &build_job
  stage: build
  before_script:
    - git clean -ffdx
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
25 26 27 28 29
    - mkdir _ci
    - curl --silent "https://gitlab.idiap.ch/bob/bob.admin/raw/master/gitlab/install.sh" > _ci/install.sh
    - chmod 755 _ci/install.sh
    - ./_ci/install.sh _ci #updates
    - ./_ci/before_build.sh
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
30
  script:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
31
    - ./_ci/build.sh
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
32
  after_script:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
33
    - ./_ci/after_build.sh
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
34
  artifacts:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
35
    expire_in: 1 week
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
36
    paths:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
37
      - _ci/
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
38 39 40 41
      - dist/
      - sphinx/


Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
42
# Template for the test stage - re-installs from uploaded wheels
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
43 44 45 46
# Needs to run on all supported architectures, platforms and python versions
.test_template: &test_job
  stage: test
  before_script:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
47 48
    - ./_ci/install.sh _ci #updates
    - ./_ci/before_test.sh
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
49
  script:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
50
    - ./_ci/test.sh
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
51
  after_script:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
52
    - ./_ci/after_test.sh
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
53 54 55


# Template for the wheel uploading stage
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
56
# Needs to run against one supported architecture, platform and python version
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
57 58
.wheels_template: &wheels_job
  stage: wheels
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
59
  environment: intranet
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
60 61
  only:
    - master
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
62
    - /^v\d+\.\d+\.\d+([abc]\d*)?$/  # PEP-440 compliant version (tags)
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
63
  before_script:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
64 65
    - ./_ci/install.sh _ci #updates
    - ./_ci/before_wheels.sh
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
66
  script:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
67 68 69
    - ./_ci/wheels.sh
  after_script:
    - ./_ci/after_wheels.sh
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
70 71 72 73 74 75


# Template for (latest) documentation upload stage
# Only one real job needs to do this
.docs_template: &docs_job
  stage: docs
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
76
  environment: intranet
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
77 78 79
  only:
    - master
  before_script:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
    - ./_ci/install.sh _ci #updates
    - ./_ci/before_docs.sh
  script:
    - ./_ci/docs.sh
  after_script:
    - ./_ci/after_docs.sh


# Template for the deployment stage - re-installs from uploaded wheels
# Needs to run on a single architecture only
# Will deploy your package to PyPI and other required services
# Only runs for tags
.deploy_template: &deploy_job
  stage: deploy
  environment: internet
  only:
    - /^v\d+\.\d+\.\d+([abc]\d*)?$/  # PEP-440 compliant version (tags)
  except:
    - branches
  before_script:
    - ./_ci/install.sh _ci #updates
    - ./_ci/before_deploy.sh
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
102
  script:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
103 104 105
    - ./_ci/deploy.sh
  after_script:
    - ./_ci/after_deploy.sh
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
106 107


Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
108 109 110
# -------------
# Build Targets
# -------------
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
111

112 113
# Linux + Python 2.7: Builds, tests, uploads wheel and deploys (if needed)
build_linux_27:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
114
  <<: *build_job
115 116 117
  variables: &linux_27_build_variables
    PYTHON_VERSION: "2.7"
    WHEEL_TAG: "py27"
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
118 119 120
  tags:
    - conda-linux

121
test_linux_27:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
122
  <<: *test_job
123
  variables: *linux_27_build_variables
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
124
  dependencies:
125
    - build_linux_27
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
126 127 128
  tags:
    - conda-linux

129
wheels_linux_27:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
130
  <<: *wheels_job
131
  variables: *linux_27_build_variables
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
132
  dependencies:
133
    - build_linux_27
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
134 135 136
  tags:
    - conda-linux

137 138 139
deploy_linux_27:
  <<: *deploy_job
  variables: *linux_27_build_variables
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
140
  dependencies:
141
    - build_linux_27
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
142 143 144 145
  tags:
    - conda-linux


146 147
# Linux + Python 3.5: Builds, tests and uploads wheel
build_linux_35:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
148
  <<: *build_job
149 150
  variables: &linux_35_build_variables
    PYTHON_VERSION: "3.5"
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
151 152
    WHEEL_TAG: "py3"
  tags:
153
    - conda-linux
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
154

155
test_linux_35:
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
156
  <<: *test_job
157
  variables: *linux_35_build_variables
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
158
  dependencies:
159
    - build_linux_35
Pavel KORSHUNOV's avatar
Pavel KORSHUNOV committed
160
  tags:
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
    - conda-linux

wheels_linux_35:
  <<: *wheels_job
  variables: *linux_35_build_variables
  dependencies:
    - build_linux_35
  tags:
    - conda-linux

docs_linux_35:
  <<: *docs_job
  variables: *linux_35_build_variables
  dependencies:
    - build_linux_35
  tags:
    - conda-linux
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


# Mac OSX + Python 2.7: Builds and tests
build_macosx_27:
  <<: *build_job
  variables: &macosx_27_build_variables
    PYTHON_VERSION: "2.7"
    WHEEL_TAG: "py27"
  tags:
    - conda-macosx

test_macosx_27:
  <<: *test_job
  variables: *macosx_27_build_variables
  dependencies:
    - build_macosx_27
  tags:
    - conda-macosx


# Mac OSX + Python 3.5: Builds and tests
build_macosx_35:
  <<: *build_job
  variables: &macosx_35_build_variables
    PYTHON_VERSION: "3.5"
    WHEEL_TAG: "py3"
  tags:
    - conda-macosx

test_macosx_35:
  <<: *test_job
  variables: *macosx_35_build_variables
  dependencies:
    - build_macosx_35
  tags:
    - conda-macosx