stages: - build_and_run - release image: ${IMAGE} variables: BASEIMAGE: ${CI_REGISTRY}/${CURRENT_TEMPLATE_IMAGE} .install-nextflow: &install-nextflow | wget -qO- https://get.nextflow.io | bash .install-conda: &install-conda | wget -q https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh -b -p ./miniconda source ./miniconda/bin/activate conda init conda-run: image: ubuntu:20.04 stage: build_and_run before_script: - apt update && apt install -y wget default-jre - *install-nextflow - *install-conda script: - OUTPUT=${CI_PROJECT_NAME} - ./nextflow run main.nf -w ${OUTPUT}/workspace -profile conda --fastq test_data/reads.fq.gz --out_dir ${OUTPUT} only: - branches build-image: stage: build_and_run before_script: - apk add wget openjdk11 bash - *install-nextflow script: - echo ${CI_BUILD_TOKEN} | docker login --username gitlab-ci-token --password-stdin ${CI_REGISTRY} - TAG="${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHORT_SHA}" - docker build --no-cache -t "${TAG}" -f Dockerfile . --build-arg BASEIMAGE=${BASEIMAGE} # run letting nextflow orchestrate the containers - docker tag "${TAG}" "${DOCKERHUB_NAMESPACE}/${CI_PROJECT_NAME}:latest" - OUTPUT=${CI_PROJECT_NAME} - ./nextflow run main.nf -w ${OUTPUT}/workspace -profile standard --wfversion latest --fastq test_data/reads.fq.gz --out_dir ${OUTPUT} # push - if [[ ${CI_COMMIT_BRANCH} == 'dev' ]]; then SHATAG=${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHORT_SHA}; echo "Pushing ${SHATAG}"; docker tag ${TAG} ${SHATAG}; docker push ${SHATAG}; fi; only: - branches artifacts: paths: # Add the output directory for the test - ${CI_PROJECT_NAME} expire_in: 1 day ### # Retag the image for git tags (releases) .pull_tag: &pull_tag before_script: - echo ${CI_BUILD_TOKEN} | docker login --username gitlab-ci-token --password-stdin ${CI_REGISTRY} - SHATAG=${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHORT_SHA} - echo "Pulling ${SHATAG}" - docker pull ${SHATAG} only: - tags # To ONT registry release-int: stage: release <<: *pull_tag script: - echo ${CI_BUILD_TOKEN} | docker login --username gitlab-ci-token --password-stdin ${CI_REGISTRY} - RELTAG=${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME} - echo "Pushing ${TAG}" - docker tag ${SHATAG} ${RELTAG} - docker push ${RELTAG} # To dockerhub release-hub: stage: release <<: *pull_tag script: - echo ${DOCKERHUB_TOKEN} | docker login --username epi2melabs --password-stdin - RELTAG="${DOCKERHUB_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_TAG}" - LATEST="${DOCKERHUB_NAMESPACE}/${CI_PROJECT_NAME}:latest" - echo "Pushing ${RELTAG}" - docker tag ${SHATAG} ${RELTAG} - docker push ${RELTAG} - docker tag ${SHATAG} ${LATEST} - docker push ${LATEST} # Send all tags matching vX.Y.Z to github (code and release) push-github: stage: release image: $GH_PUSH_IMAGE before_script: - apt-get update -qq && apt-get install -y -qq git python3-all-dev git-lfs python3-venv - mkdir ~/.ssh/ - cp $LABS_BOT_GH_KEY ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa - echo -e "Host github.com\n\tStrictHostKeyChecking no\n\tHostname ssh.github.com\n\tPort 443\n\n" > ~/.ssh/config - git config --global user.email "epi2melabs@nanoporetech.com" - git config --global user.name "epi2melabs-bot" script: # Push master and tag to github - git remote add ont ${CI_REPOSITORY_URL} || true - git remote add github git@github.com:epi2me-labs/${CI_PROJECT_NAME}.git || true - git fetch ont dev --tags - git fetch ont master - git fetch github master || echo "No 'master' branch present on github" - git checkout --track github/master || git checkout master - git merge ${CI_COMMIT_TAG} - git push github master - git push github ${CI_COMMIT_TAG} # Make a github release page - python3 -m venv release_env --prompt "(release) " - source release_env/bin/activate - pip install pip --upgrade - pip install git+https://github.com/epi2me-labs/github_release.git - github_release ${CI_PROJECT_NAME} ${CI_COMMIT_TAG} CHANGELOG.md ${LABS_BOT_GH_TOKEN} only: - /^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+$/ except: - branches