From 41f2ae2dc56cd0ed7ed811f614689d2abe589160 Mon Sep 17 00:00:00 2001 From: Alex Kanitz <alexander.kanitz@unibas.ch> Date: Sun, 10 Jul 2022 11:26:04 +0000 Subject: [PATCH] ci: add GitLab CI config --- .gitlab-ci.yml | 32 ++++++++++++++++++++++++++++++++ Dockerfile | 6 ++++-- ascii_alignment_pileup.R | 5 +++-- tests/expected_output.md5 | 1 + tests/test.sh | 29 +++++++++++++++++++++++++++++ tests/test_files/test.fa.gz | Bin 0 -> 19877 bytes 6 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 .gitlab-ci.yml create mode 100644 tests/expected_output.md5 create mode 100755 tests/test.sh create mode 100644 tests/test_files/test.fa.gz diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..51ca7c9 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,32 @@ +default: + tags: + - shell + +workflow: + rules: + - if: $CI_PIPELINE_SOURCE == "push" + +test: + rules: + - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH + script: + - export IMAGE="${DOCKER_ORG}/${DOCKER_REPO}:latest" + - docker build -t $IMAGE . + - docker run --rm $IMAGE tests/test.sh + +test_and_publish: + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + script: + - export VERSION=$(grep 'version <-' ascii_alignment_pileup.R | cut -f2 -d'"') + - export IMAGE="${DOCKER_ORG}/${DOCKER_REPO}" + - | + docker build \ + -t ${IMAGE}:${VERSION} \ + --build-arg version=$VERSION \ + . + - docker run --rm ${IMAGE}:${VERSION} tests/test.sh + - echo "${DOCKER_TOKEN}" | docker login -u "${DOCKER_USER}" --password-stdin + - docker tag ${IMAGE}:${VERSION} ${IMAGE}:latest + - docker push ${IMAGE}:${VERSION} + - docker push ${IMAGE}:latest diff --git a/Dockerfile b/Dockerfile index e806df8..5d0eb0f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,15 @@ ##### BASE ##### FROM rocker/r-ver:4.2.1 +##### BUILD ARGUMENTS ##### +ARG version=unknown + ##### METADATA ##### MAINTAINER zavolab-biozentrum@unibas.ch LABEL base.image="rocker/r-ver:4.2.1" LABEL version="1" LABEL software="ascii_alignment_pileup.R" -LABEL software.version="1.0.1" +LABEL software.version=$version LABEL software.description="Generates an ASCII-style pileup of read alignments in one or more BAM files against one or more regions specified in a BED file" LABEL software.website="https://git.scicore.unibas.ch/zavolan_group/tools/ascii-alignment-pileup" LABEL software.documentation="https://git.scicore.unibas.ch/zavolan_group/tools/ascii-alignment-pileup" @@ -64,4 +67,3 @@ WORKDIR ${WORKDIR} RUN chown -R ${USER}:${GROUP} ${WORKDIR} \ && chmod 700 ${WORKDIR} USER ${USER} - diff --git a/ascii_alignment_pileup.R b/ascii_alignment_pileup.R index 802b871..daebf34 100755 --- a/ascii_alignment_pileup.R +++ b/ascii_alignment_pileup.R @@ -29,10 +29,11 @@ against one or more regions specified in a BED file.\n" author <- "Author: Alexander Kanitz" affiliation <- "Affiliation: Biozentrum, University of Basel" email <- "Email: alexander.kanitz@alumni.ethz.ch" -version <- "Version: 1.0.2" +version <- "1.1.0" +version_formatted <- paste("Version:", version, sep=" ") requirements <- c("optparse", "rtracklayer", "GenomicAlignments", "tools") requirements_txt <- paste("Requires:", paste(requirements, collapse=", "), sep=" ") -msg <- paste(description, author, affiliation, email, version, requirements_txt, sep="\n") +msg <- paste(description, author, affiliation, email, version_formatted, requirements_txt, sep="\n") notes <- "Notes: - For the input queries, consider the `--maximum-region-width` parameter, which is provided for safety. While it is possible to increase it, wide regions may diff --git a/tests/expected_output.md5 b/tests/expected_output.md5 new file mode 100644 index 0000000..3319e18 --- /dev/null +++ b/tests/expected_output.md5 @@ -0,0 +1 @@ +6b5a66981bd83329219002897be393a6 test.test-mir.min.1.pileup.tab diff --git a/tests/test.sh b/tests/test.sh new file mode 100755 index 0000000..0ccc009 --- /dev/null +++ b/tests/test.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +# Tear down test environment +cleanup () { + rc=$? + rm "test.test-mir.min.1.pileup.tab" + cd $user_dir + echo "Exit status: $rc" +} +trap cleanup EXIT + +# Set up test environment +set -eo pipefail # ensures that script exits at first command that exits with non-zero status +set -u # ensures that script exits when unset variables are used +set -x # facilitates debugging by printing out executed commands +user_dir=$PWD +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" +cd $script_dir + +ascii_alignment_pileup.R \ + --verbose \ + --reference="test_files/test.fa.gz" \ + --annotations="test_files/test.gff" \ + --output-directory="$PWD" \ + "test_files/test.bed" \ + "test_files/test.bam" + +# Check md5 sum of output file +md5sum --check "expected_output.md5" diff --git a/tests/test_files/test.fa.gz b/tests/test_files/test.fa.gz new file mode 100644 index 0000000000000000000000000000000000000000..a0b4215d5cad3e0d702bb14fd619e44f02699d4b GIT binary patch literal 19877 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 c1ONa4009360763o02=@U00000000000EPJ3a{vGU literal 0 HcmV?d00001 -- GitLab