############################################################################# # This file defines the build process for fslpy, as hosted at: # # https://git.fmrib.ox.ac.uk/fsl/fslpy # # The build pipeline comprises the following stages: # # 1. test: Unit tests # # 2. style: Check coding style # # 3. doc: Building API documentation # # 4. build: Building source, wheel and conda distributions # # 5. deploy: Uploading the build outputs to pypi/hosting servers, and the # documentation to a hosting server. # # Custom docker images are used for several jobs - these images are # available at: # # https://hub.docker.com/u/pauldmccarthy/ # # The test and style stages are executed on all branches of upstream and fork # repositories. # # The doc stage, and the deploy-doc job, is executed on all branches of the # upstream repository. # # The build stage, and the remaining jobs in the deploy stage, are only # executed on the upstream repository, and only for release tags. # # The deploy stages are manually instantiated. # # Most of the logic for each job is defined in shell scripts in the .ci # sub-directory. ############################################################################# stages: - test - style - doc - build - deploy ################################################################################# # A number of variables must be set for the jobs to work. The following # variables are implicitly defined in any gitlab CI job: # # - CI_PROJECT_PATH - gitlab namespace/project # - CI_COMMIT_REF_NAME - branch name, provided by gitlab # - CI_COMMIT_TAG - present if build is running on a tag # # These variables must be explicitly set as "secret" variables: # # - SSH_PRIVATE_KEY_GIT - private key for git login to remote host # (UPSTREAM_URL) # # - SSH_PRIVATE_KEY_FSL_DOWNLOAD - private key for downloading some FSL # files from a remote server (FSL_HOST) # # - SSH_PRIVATE_KEY_DOC_DEPLOY - private key for rsyncing documentation # to remote host (DOC_HOST) # # - SSH_PRIVATE_KEY_CONDA_DEPLOY - private key for rsyncing conda builds # to remote host (CONDA_HOST) # # - SSH_SERVER_HOSTKEYS - List of trusted SSH hosts # # - DOC_HOST: - Username@host to upload documentation to # (e.g. "paulmc@jalapeno.fmrib.ox.ac.uk") # # - FSL_HOST: - Username@host to download FSL data from # (e.g. "paulmc@jalapeno.fmrib.ox.ac.uk") # # - CONDA_HOST: - Username@host to upload conda build to # (e.g. "paulmc@jalapeno.fmrib.ox.ac.uk") # # - CONDA_CHANNELS - List of additional conda channels to # use for conda build. # # - TWINE_USERNAME: - Username to use when uploading to pypi # # - TWINE_PASSWORD: - Password to use when uploading to pypi # # - TWINE_REPOSITORY_URL: - Pypi repository to upload to ############################################################################### variables: UPSTREAM_PROJECT: "fsl/fslpy" UPSTREAM_URL: "git@git.fmrib.ox.ac.uk" #################################### # These anchors are used to restrict # when and where jobs are executed. #################################### .only_upstream: &only_upstream only: - branches@fsl/fslpy .only_master: &only_master only: - master@fsl/fslpy .only_releases: &only_releases only: - tags@fsl/fslpy .except_releases: &except_releases except: - tags .setup_ssh: &setup_ssh before_script: - bash ./.ci/setup_ssh.sh ################################################### # The patch_version anchor contains a before_script # section which is run on release builds, and makes # sure that the version in the code is up to date # (i.e. equal to the tag name). ################################################### .patch_version: &patch_version before_script: - bash ./.ci/patch_version.sh ############ # Test stage ############ .test: &test_template <<: *setup_ssh # Releases are just tags on a release # branch, so we don't need to test them. <<: *except_releases tags: - docker script: - bash ./.ci/test_template.sh test:2.7: stage: test image: pauldmccarthy/fsleyes-py27-wxpy4-gtk2 <<: *test_template test:3.4: stage: test image: pauldmccarthy/fsleyes-py34-wxpy4-gtk2 <<: *test_template test:3.5: stage: test image: pauldmccarthy/fsleyes-py35-wxpy4-gtk2 <<: *test_template test:3.6: stage: test image: pauldmccarthy/fsleyes-py36-wxpy4-gtk2 <<: *test_template ############# # Style stage ############# style: stage: style image: pauldmccarthy/fsleyes-py35-wxpy4-gtk2 <<: *test_template variables: TEST_STYLE: "true" ########### # Doc stage ########### build-doc: <<: *only_upstream <<: *patch_version tags: - docker stage: doc image: python:3.5 script: - bash ./.ci/build_doc.sh artifacts: expire_in: 1 day paths: - doc/$CI_COMMIT_REF_NAME ############# # Build stage ############# build-pypi-dist: <<: *only_releases <<: *patch_version stage: build image: python:3.5 tags: - docker script: - bash ./.ci/build_pypi_dist.sh artifacts: expire_in: 1 day paths: - dist/* build-conda-dist: <<: *only_releases <<: *patch_version stage: build image: continuumio/miniconda3 tags: - docker script: - bash ./.ci/build_conda_dist.sh fslpy "$CI_COMMIT_REF_NAME" artifacts: expire_in: 1 day paths: - dist/conda-bld ############## # Deploy stage ############## deploy-doc: <<: *only_upstream <<: *setup_ssh stage: deploy when: manual image: python:3.5 tags: - docker dependencies: - build-doc script: - bash ./.ci/deploy_doc.sh deploy-pypi: <<: *only_releases <<: *setup_ssh stage: deploy when: manual image: python:3.5 tags: - docker dependencies: - build-pypi-dist script: - bash ./.ci/deploy_pypi.sh deploy-conda: <<: *only_releases <<: *setup_ssh stage: deploy when: manual image: python:3.5 tags: - docker dependencies: - build-conda-dist script: - bash ./.ci/deploy_conda.sh