Skip to content

Commit 87a1148

Browse files
committed
analysis: update ext-tools Dockerfile to include regenie and ubuntu:24.04; it will be the docker base for regenie-walker, #TASK-7565, #TASK-7037
1 parent c433655 commit 87a1148

4 files changed

Lines changed: 48 additions & 19 deletions

File tree

opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/regenie/RegenieStep1WrapperAnalysis.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.opencb.commons.utils.FileUtils;
2424
import org.opencb.opencga.analysis.tools.OpenCgaToolScopeStudy;
2525
import org.opencb.opencga.catalog.exceptions.CatalogException;
26+
import org.opencb.opencga.core.common.GitRepositoryState;
2627
import org.opencb.opencga.core.exceptions.ToolException;
2728
import org.opencb.opencga.core.exceptions.ToolExecutorException;
2829
import org.opencb.opencga.core.models.common.Enums;
@@ -64,6 +65,8 @@ public class RegenieStep1WrapperAnalysis extends OpenCgaToolScopeStudy {
6465
private String dockerUsername;
6566
private String dockerPassword;
6667

68+
private String dockerBasename;
69+
6770
private Path resourcePath;
6871

6972
@ToolParams
@@ -103,6 +106,15 @@ protected void check() throws Exception {
103106
throw new ToolException("Docker name and username are required if docker password (or personal access token) is provided");
104107
}
105108
}
109+
110+
// Get docker base name
111+
dockerBasename = configuration.getAnalysis().getOpencgaExtTools();
112+
if (StringUtils.isEmpty(dockerBasename)) {
113+
throw new ToolException("Docker base name is not set, please, check your configuration file");
114+
}
115+
if (!dockerBasename.contains(":")) {
116+
dockerBasename += ":" + GitRepositoryState.getInstance().getBuildVersion();
117+
}
106118
}
107119

108120
@Override
@@ -225,11 +237,12 @@ private void prepareWalkerDocker() throws ToolException {
225237

226238
if (StringUtils.isEmpty(dockerName) && StringUtils.isEmpty(dockerUsername) && StringUtils.isEmpty(dockerPassword)) {
227239
logger.info("Creating regenie-walker Dockerfile ...");
228-
Path dockerfile = createDockerfile(dataDir, getOpencgaHome());
240+
Path dockerfile = createDockerfile(dataDir, dockerBasename, getOpencgaHome());
229241
logger.info("Dockerfile for regenie-walker: {}", dockerfile);
230242
} else {
231243
logger.info("Building and pushing regenie-walker ...");
232-
String walkerDocker = buildAndPushDocker(dataDir, dockerName, dockerTag, dockerUsername, dockerPassword, getOpencgaHome());
244+
String walkerDocker = buildAndPushDocker(dataDir, dockerBasename, dockerName, dockerTag, dockerUsername, dockerPassword,
245+
getOpencgaHome());
233246

234247
logger.info("Regenie-walker docker image: {}", walkerDocker);
235248
addAttribute(OPENCGA_REGENIE_WALKER_DOCKER_IMAGE_KEY, walkerDocker);

opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/regenie/RegenieUtils.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.opencb.opencga.catalog.exceptions.CatalogException;
77
import org.opencb.opencga.catalog.managers.CatalogManager;
88
import org.opencb.opencga.core.common.GitRepositoryState;
9+
import org.opencb.opencga.core.config.Configuration;
910
import org.opencb.opencga.core.exceptions.ToolException;
1011
import org.opencb.opencga.core.models.file.File;
1112
import org.slf4j.Logger;
@@ -72,12 +73,12 @@ public static String checkRegenieInputParameter(String value, boolean mandatory,
7273
return value;
7374
}
7475

75-
public static Path createDockerfile(Path dataDir, Path opencgaHome)
76+
public static Path createDockerfile(Path dataDir, String dockerBasename, Path opencgaHome)
7677
throws ToolException {
7778
Path dockerBuildScript = opencgaHome.resolve("analysis/resources/walker/custom-tool-docker-build.py");
7879
Command dockerBuild = new Command(new String[]{"python3", dockerBuildScript.toAbsolutePath().toString(),
7980
"--custom-tool-dir", dataDir.toAbsolutePath().toString(),
80-
"--base-image", "joaquintarraga/opencga-regenie:" + GitRepositoryState.getInstance().getBuildVersion(),
81+
"--base-image", dockerBasename,
8182
"dockerfile"
8283
}, Collections.emptyMap());
8384

@@ -94,7 +95,7 @@ public static Path createDockerfile(Path dataDir, Path opencgaHome)
9495
return dockerfile;
9596
}
9697

97-
public static String buildAndPushDocker(Path dataDir, String dockerName, String dockerTag, String dockerUsername, String dockerPassword,
98+
public static String buildAndPushDocker(Path dataDir, String dockerBasename, String dockerName, String dockerTag, String dockerUsername, String dockerPassword,
9899
Path opencgaHome) throws ToolException {
99100
// Sanity check
100101
if (StringUtils.isEmpty(dockerName)) {
@@ -122,7 +123,7 @@ public static String buildAndPushDocker(Path dataDir, String dockerName, String
122123
Path dockerBuildScript = opencgaHome.resolve("analysis/resources/common/tool-docker-builder.py");
123124
Command dockerBuild = new Command(new String[]{"python3", dockerBuildScript.toAbsolutePath().toString(),
124125
"--custom-tool-dir", dataDir.toAbsolutePath().toString(),
125-
"--base-image", "joaquintarraga/opencga-regenie:" + GitRepositoryState.getInstance().getBuildVersion(),
126+
"--base-image", dockerBasename,
126127
"--organisation", organisation,
127128
"--name", name,
128129
"--version", dockerRepoVersion,

opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/RegenieWrapperAnalysisTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ public void testRegenieStep2WithDockerImage() throws IOException, ToolException
296296
String dockerPassword = split[2];
297297

298298
String dockerName = "joaquintarraga/regenie-walker";
299-
String dockerTag = "1745393096-1650";
299+
String dockerTag = "1747037847-5883";
300300
String walkerDockerImage = dockerName + ":" + dockerTag;
301301
Assume.assumeTrue(RegenieUtils.isDockerImageAvailable(walkerDockerImage, dockerUsername, dockerPassword));
302302

opencga-app/app/cloud/docker/opencga-ext-tools/Dockerfile

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
FROM ubuntu:22.04
1+
# Use Ubuntu 24.04 as the base image
2+
FROM ubuntu:24.04
23

34
LABEL org.label-schema.vendor="OpenCB" \
45
org.label-schema.name="opencga-ext-tools" \
@@ -7,16 +8,23 @@ LABEL org.label-schema.vendor="OpenCB" \
78
maintainer="Joaquin Tarraga <joaquintarraga@gmail.com>" \
89
org.label-schema.schema-version="1.0"
910

10-
## Run update and install necessary packages
11-
RUN apt-get update -y && \
12-
## 1. Install system dependencies
13-
DEBIAN_FRONTEND="noninteractive" TZ="Europe/London" apt-get install -y libcurl4 git libgmp-dev libcurl4-openssl-dev libgit2-dev build-essential \
11+
# Prevent interactive prompts during package installation
12+
ARG DEBIAN_FRONTEND=noninteractive
13+
14+
# Install Python 3, pip, and other dependencies in a single RUN command
15+
RUN apt-get update && \
16+
# ## 1. Install system dependencies
17+
apt-get install -y \
18+
libcurl4 git libgmp-dev libcurl4-openssl-dev libgit2-dev build-essential \
1419
libssl-dev libssh-dev libxml2-dev libfontconfig1-dev libharfbuzz-dev libfribidi-dev libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev \
15-
gnuplot pandoc samtools bcftools tabix fastqc plink1.9 bwa r-base wget libopenblas0-openmp libcholmod3 libsuitesparse-dev python3 python3-pip && \
20+
gnuplot pandoc samtools bcftools tabix fastqc plink1.9 bwa r-base wget libopenblas0-openmp libcholmod5 libsuitesparse-dev libsuitesparseconfig7 \
21+
python3 python3-pip && \
1622
apt-get remove libopenblas0-pthread && \
17-
pip3 install pydantic && \
1823

19-
## 2. Install samtools and bcftools 1.21 and plugins
24+
# 2. Install Python packages
25+
pip3 install --break-system-packages pydantic && \
26+
27+
## 3. Install samtools and bcftools 1.21 and plugins
2028
wget https://github.com/samtools/samtools/releases/download/1.21/samtools-1.21.tar.bz2 && \
2129
tar xjvf samtools-1.21.tar.bz2 && \
2230
cd samtools-1.21 && \
@@ -36,12 +44,16 @@ RUN apt-get update -y && \
3644
chmod a+x /usr/local/bin/assoc_plot.R && \
3745
cd .. && \
3846

39-
## 3. Installation dependencies using R install.packages() is slower than apt-get but final size is 400MB smaller.
47+
## 4. Install regenie
48+
wget -qO- https://github.com/rgcgithub/regenie/releases/download/v4.0/regenie_v4.0.gz_x86_64_Linux.zip | gunzip > /usr/local/bin/regenie && \
49+
chmod +x /usr/local/bin/regenie && \
50+
51+
## 5. Installation dependencies using R install.packages() is slower than apt-get but final size is 400MB smaller.
4052
R -e "install.packages(c('BiocManager', 'RCircos', 'nnls', 'ggplot2', 'jsonlite', 'optparse', 'knitr', 'configr', 'dplyr', 'rmarkdown', 'tidyr', 'httr', 'kinship2', 'limSolve'))" && \
4153
R -e "BiocManager::install('BiocStyle')" && \
4254
R -e "BiocManager::install('BSgenome.Hsapiens.UCSC.hg38')" && \
4355

44-
## 4. Install signature.tools.lib installation \
56+
## 6. Install signature.tools.lib installation \
4557
R -e "install.packages(c('devtools', 'getopt'), repos=c('http://cran.rstudio.com/', 'https://www.stats.bris.ac.uk/R/'))" && \
4658
git clone https://github.com/Nik-Zainal-Group/signature.tools.lib.git /opt/opencga/signature.tools.lib && \
4759
cd /opt/opencga/signature.tools.lib && \
@@ -53,10 +65,13 @@ RUN apt-get update -y && \
5365
R -e "options(timeout = 3600);devtools::install(repos='https://www.stats.bris.ac.uk/R/')" && \
5466
cd .. && \
5567

56-
## 5. Clean up
68+
## 7. Clean up
69+
apt-get clean && \
5770
rm -rf samtools-1.21 bcftools-1.21 /var/lib/apt/lists/* /tmp/* /opt/opencga/signature.tools.lib/.git && \
5871
strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
5972

73+
# Set the working directory
74+
WORKDIR /opt/opencga
75+
6076
ENV BCFTOOLS_PLUGINS="/usr/local/bin"
6177

62-
WORKDIR /opt/opencga

0 commit comments

Comments
 (0)