198 lines
6.7 KiB
YAML
198 lines
6.7 KiB
YAML
stages:
|
|
- pretest
|
|
- test
|
|
- pre-release
|
|
- release-checks
|
|
- 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
|
|
|
|
|
|
# insist that the wfversion in nextflow.config matches the git tag
|
|
.check-versions: &check-versions |
|
|
WFVER=$(grep "wfversion = " nextflow.config | awk '{gsub("\"","",$3); print $3}')
|
|
TAGVER=${CI_COMMIT_TAG}
|
|
if [[ "${TAGVER}" != "${WFVER}" ]]; then
|
|
echo "Mismatching TAG and WORKFLOW versions:"
|
|
echo " - TAG:$TAGVER"
|
|
echo " - WF:$WFVER"
|
|
exit 1
|
|
else
|
|
echo "TAG and WORKFLOW versions agree: ${WFVER}"
|
|
fi
|
|
|
|
# Insist a CHANGELOG entry has been made for tags
|
|
.check-changelog: &check-changelog |
|
|
TAGVER=${CI_COMMIT_TAG}
|
|
MATCHES=$(grep -c "## \[${TAGVER}\]" CHANGELOG.md || exit 0)
|
|
if [[ "${MATCHES}" != "1" ]]; then
|
|
echo "Expected one match to '${CI_COMMIT_TAG}' in CHANGELOG, found ${MATCHES}"
|
|
exit 1
|
|
else
|
|
echo "Found CHANGELOG.md entry for tag"
|
|
fi
|
|
|
|
|
|
# setup image for pushing to github
|
|
.setup-gh-push: &setup-gh-push |
|
|
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"
|
|
|
|
|
|
conda-run:
|
|
image: ubuntu:20.04
|
|
stage: test
|
|
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
|
|
|
|
|
|
docker-run:
|
|
stage: test
|
|
before_script:
|
|
- apk add wget openjdk11 bash
|
|
- *install-nextflow
|
|
script:
|
|
# build image
|
|
- TAG="${DOCKERHUB_NAMESPACE}/${CI_PROJECT_NAME}:latest"
|
|
- docker build --no-cache -t "${TAG}" -f Dockerfile . --build-arg BASEIMAGE=${BASEIMAGE}
|
|
# run letting nextflow orchestrate the containers
|
|
- 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, to ont for later tagging, to dockerhub for release testing
|
|
- if [[ ${CI_COMMIT_BRANCH} == 'dev' ]]; then
|
|
echo "Pushing to ONT registry";
|
|
echo ${CI_BUILD_TOKEN} | docker login --username gitlab-ci-token --password-stdin ${CI_REGISTRY};
|
|
SHATAG=${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHORT_SHA};
|
|
echo " - tag is:${SHATAG}";
|
|
docker tag ${TAG} ${SHATAG};
|
|
docker push ${SHATAG};
|
|
echo "Pushing to Dockerhub";
|
|
echo ${DOCKERHUB_TOKEN} | docker login --username epi2melabs --password-stdin;
|
|
HUBTAG="${DOCKERHUB_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_SHORT_SHA}";
|
|
echo " - tag is:${HUBTAG}";
|
|
docker tag ${TAG} ${HUBTAG};
|
|
docker push ${HUBTAG};
|
|
fi;
|
|
only:
|
|
- branches
|
|
artifacts:
|
|
paths:
|
|
# Add the output directory for the test
|
|
- ${CI_PROJECT_NAME}
|
|
expire_in: 1 day
|
|
|
|
###
|
|
# Push dev branch to github for release testers
|
|
release-dev:
|
|
stage: pre-release
|
|
image: $GH_PUSH_IMAGE
|
|
before_script:
|
|
- *setup-gh-push
|
|
script:
|
|
# Merge ont/dev into prerelease
|
|
- 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
|
|
- git checkout ont/dev
|
|
- git branch -D prerelease || echo "branch 'prerelease' not present"
|
|
- git checkout -b prerelease
|
|
# Edit nextflow config to set wfversion
|
|
- grep 'wfversion = ".*"' nextflow.config || { echo "Failed to replace wfversion"; exit 1; }
|
|
- sed -i 's/wfversion = ".*"/wfversion = "'${CI_COMMIT_SHORT_SHA}'"/' nextflow.config
|
|
- git add nextflow.config
|
|
- git commit -m "Setting wfversion to:${CI_COMMIT_SHORT_SHA}"
|
|
- git push -f github prerelease
|
|
only:
|
|
- '/^dev$/'
|
|
except:
|
|
- tags
|
|
|
|
# Check things before release
|
|
release-checks:
|
|
stage: release-checks
|
|
script:
|
|
- *check-versions
|
|
- *check-changelog
|
|
only:
|
|
- tags
|
|
|
|
|
|
# To dockerhub
|
|
release-hub:
|
|
stage: release
|
|
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}
|
|
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}
|
|
only:
|
|
- tags
|
|
|
|
# Send all tags matching vX.Y.Z to github (code and release)
|
|
push-github:
|
|
stage: release
|
|
image: $GH_PUSH_IMAGE
|
|
before_script:
|
|
- *setup-gh-push
|
|
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
|