############################################################################# # 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 and wheel 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_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") # # - FSL_ATLAS_DIR: - Location of the FSL atlas data on # FSL_HOST. # # - 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 # # - ZENODO_URL: - Zenodo URL to deposit release file to. # # - ZENODO_TOKEN: - Zenodo access token. # # - ZENODO_DEPOSIT_ID: - Deposit ID of previous Zenodo deposit. ############################################################################### 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 check_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). ################################################### .check_version: &check_version before_script: - bash ./.ci/check_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:3.6: stage: test image: pauldmccarthy/fsleyes-py36-wxpy4-gtk3 <<: *test_template test:3.7: stage: test image: pauldmccarthy/fsleyes-py37-wxpy4-gtk3 <<: *test_template test:3.8: stage: test image: pauldmccarthy/fsleyes-py38-wxpy4-gtk3 <<: *test_template test:build-pypi-dist: stage: test image: pauldmccarthy/fsleyes-py36-wxpy4-gtk3 <<: *except_releases tags: - docker script: - source /test.venv/bin/activate - bash ./.ci/build_pypi_dist.sh ############# # Style stage ############# style: stage: style image: pauldmccarthy/fsleyes-py36-wxpy4-gtk3 <<: *test_template variables: TEST_STYLE: "true" ########### # Doc stage ########### build-doc: <<: *only_upstream tags: - docker stage: doc image: python:3.6 script: - bash ./.ci/build_doc.sh artifacts: expire_in: 1 day paths: - doc/$CI_COMMIT_REF_NAME ############# # Build stage ############# build-pypi-dist: <<: *only_releases <<: *check_version stage: build image: python:3.6 tags: - docker script: - bash ./.ci/build_pypi_dist.sh artifacts: expire_in: 1 day paths: - dist/* ############## # Deploy stage ############## deploy-doc: <<: *only_upstream <<: *setup_ssh stage: deploy when: manual image: python:3.6 tags: - docker dependencies: - build-doc script: - bash ./.ci/deploy_doc.sh deploy-pypi: <<: *only_releases <<: *setup_ssh stage: deploy when: manual image: python:3.6 tags: - docker dependencies: - build-pypi-dist script: - bash ./.ci/deploy_pypi.sh deploy-zenodo: <<: *only_releases <<: *setup_ssh stage: deploy when: manual image: python:3.6 tags: - docker dependencies: - build-pypi-dist script: - bash ./.ci/zenodo_deposit.sh "$ZENODO_URL" "$ZENODO_TOKEN" "$ZENODO_DEPOSIT_ID"