Skip to content

Commit 04e80e2

Browse files
Merge pull request #145 from Breeding-Insight/development
Development
2 parents 911a96b + 46788c9 commit 04e80e2

39 files changed

+2132
-748
lines changed
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
name: Build & Push Docker image on package version change
2+
3+
on:
4+
push:
5+
branches: [ main, vcf_sanity_check ]
6+
paths:
7+
- .github/workflows/dockerhub-on-version.yml
8+
- Dockerfile
9+
- DESCRIPTION
10+
workflow_dispatch:
11+
12+
concurrency:
13+
group: docker-${{ github.ref }}
14+
cancel-in-progress: true
15+
16+
env:
17+
IMAGE: docker.io/breedinginsight/bigapp
18+
IMAGE_DEPS: docker.io/breedinginsight/bigapp-deps
19+
DEPS_TAG: r4.5-bioc3.21-2025-08
20+
21+
jobs:
22+
check-version:
23+
runs-on: ubuntu-latest
24+
outputs:
25+
changed: ${{ steps.ver.outputs.changed }}
26+
version: ${{ steps.ver.outputs.version }}
27+
steps:
28+
- uses: actions/checkout@v4
29+
with:
30+
fetch-depth: 0
31+
- id: ver
32+
shell: bash
33+
run: |
34+
set -euo pipefail
35+
cur_ver=$(sed -n 's/^Version:[[:space:]]*//p' DESCRIPTION | tr -d '[:space:]')
36+
prev_sha="${{ github.event.before }}"
37+
if git show "${prev_sha}:DESCRIPTION" >/dev/null 2>&1; then
38+
prev_ver=$(git show "${prev_sha}:DESCRIPTION" | sed -n 's/^Version:[[:space:]]*//p' | tr -d '[:space:]')
39+
else
40+
prev_ver=""
41+
fi
42+
changed=false
43+
if [[ -z "${prev_ver}" || "${cur_ver}" != "${prev_ver}" ]]; then changed=true; fi
44+
echo "version=${cur_ver}" >> "$GITHUB_OUTPUT"
45+
echo "changed=${changed}" >> "$GITHUB_OUTPUT"
46+
47+
build-amd64:
48+
needs: check-version
49+
if: needs['check-version'].outputs.changed == 'true'
50+
runs-on: ubuntu-latest
51+
timeout-minutes: 120
52+
steps:
53+
- uses: actions/checkout@v4
54+
- uses: docker/setup-qemu-action@v3
55+
- uses: docker/setup-buildx-action@v3
56+
- uses: docker/login-action@v3
57+
with:
58+
username: ${{ secrets.DOCKERHUB_USERNAME }}
59+
password: ${{ secrets.DOCKERHUB_PASSWORD }}
60+
- id: meta
61+
uses: docker/metadata-action@v5
62+
with:
63+
images: ${{ env.IMAGE }}
64+
tags: |
65+
type=raw,value=v${{ needs['check-version'].outputs.version }}-amd64
66+
type=raw,value=sha-${{ github.sha }}-amd64
67+
- name: Build & push app (amd64)
68+
uses: docker/build-push-action@v6
69+
with:
70+
context: .
71+
file: Dockerfile
72+
platforms: linux/amd64
73+
push: true
74+
build-args: |
75+
BASE_IMAGE=${{ env.IMAGE_DEPS }}:${{ env.DEPS_TAG }}
76+
tags: ${{ steps.meta.outputs.tags }}
77+
cache-from: |
78+
type=registry,ref=${{ env.IMAGE }}:buildcache-amd64
79+
cache-to: type=registry,ref=${{ env.IMAGE }}:buildcache-amd64,mode=max,compression=zstd
80+
81+
build-arm64:
82+
needs: check-version
83+
if: needs['check-version'].outputs.changed == 'true'
84+
continue-on-error: true
85+
runs-on: ubuntu-latest
86+
timeout-minutes: 350
87+
steps:
88+
- uses: actions/checkout@v4
89+
- uses: docker/setup-qemu-action@v3
90+
- uses: docker/setup-buildx-action@v3
91+
- uses: docker/login-action@v3
92+
with:
93+
username: ${{ secrets.DOCKERHUB_USERNAME }}
94+
password: ${{ secrets.DOCKERHUB_PASSWORD }}
95+
- id: meta
96+
uses: docker/metadata-action@v5
97+
with:
98+
images: ${{ env.IMAGE }}
99+
tags: |
100+
type=raw,value=v${{ needs['check-version'].outputs.version }}-arm64
101+
type=raw,value=sha-${{ github.sha }}-arm64
102+
- name: Build & push app (arm64)
103+
uses: docker/build-push-action@v6
104+
with:
105+
context: .
106+
file: Dockerfile
107+
platforms: linux/arm64
108+
push: true
109+
build-args: |
110+
BASE_IMAGE=${{ env.IMAGE_DEPS }}:${{ env.DEPS_TAG }}
111+
tags: ${{ steps.meta.outputs.tags }}
112+
cache-from: |
113+
type=registry,ref=${{ env.IMAGE }}:buildcache-arm64
114+
cache-to: type=registry,ref=${{ env.IMAGE }}:buildcache-arm64,mode=max,compression=zstd
115+
116+
manifest:
117+
needs: [check-version, build-amd64, build-arm64]
118+
if: >
119+
needs['check-version'].outputs.changed == 'true' &&
120+
needs['build-amd64'].result == 'success' &&
121+
needs['build-arm64'].result == 'success'
122+
runs-on: ubuntu-latest
123+
steps:
124+
- uses: docker/login-action@v3
125+
with:
126+
username: ${{ secrets.DOCKERHUB_USERNAME }}
127+
password: ${{ secrets.DOCKERHUB_PASSWORD }}
128+
129+
- name: Create multi-arch manifest
130+
env:
131+
IMAGE: ${{ env.IMAGE }}
132+
PKG_VERSION: ${{ needs['check-version'].outputs.version }}
133+
run: |
134+
set -euo pipefail
135+
docker buildx imagetools create \
136+
-t "$IMAGE:v${PKG_VERSION}" \
137+
-t "$IMAGE:latest" \
138+
"$IMAGE:v${PKG_VERSION}-amd64" \
139+
"$IMAGE:v${PKG_VERSION}-arm64"

DESCRIPTION

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: BIGapp
22
Title: Breeding Insight Genomics Shiny Application
3-
Version: 1.3.0
3+
Version: 1.5.1
44
Authors@R:
55
c(
66
person(c("Alexander", "M."), "Sandercock",
@@ -73,6 +73,6 @@ Imports:
7373
methods
7474
Remotes:
7575
github::jendelman/GWASpoly,
76-
github::Breeding-Insight/BIGr,
76+
bioc::Rsamtools
7777
Suggests:
7878
testthat

Dockerfile

Lines changed: 23 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,25 @@
1-
FROM rocker/r-ver:4.4.2
2-
RUN apt-get update && apt-get install -y cmake libz-dev libcurl4-openssl-dev libssl-dev
3-
RUN R -e 'install.packages("remotes")'
4-
RUN Rscript -e 'remotes::install_version("adegenet",upgrade="never", version = "2.1.10")'
5-
RUN Rscript -e 'remotes::install_version("curl",upgrade="never", version = "6.0.1")'
6-
RUN Rscript -e 'remotes::install_version("DT",upgrade="never", version = "0.33")'
7-
RUN Rscript -e 'remotes::install_version("dplyr",upgrade="never", version = "1.1.4")'
8-
RUN Rscript -e 'remotes::install_version("vcfR",upgrade="never", version = "1.15.0")'
9-
RUN Rscript -e 'remotes::install_version("ggplot2",upgrade="never", version = "3.5.1")'
10-
RUN Rscript -e 'remotes::install_version("tidyr",upgrade="never", version = "1.3.1")'
11-
RUN Rscript -e 'remotes::install_version("curl",upgrade="never", version = "6.0.1")'
12-
RUN Rscript -e 'remotes::install_version("shiny",upgrade="never", version = "1.9.1")'
13-
RUN Rscript -e 'remotes::install_version("config",upgrade="never", version = "0.3.2")'
14-
RUN Rscript -e 'remotes::install_version("bs4Dash",upgrade="never", version = "2.3.4")'
15-
RUN Rscript -e 'remotes::install_version("golem",upgrade="never", version = "0.5.1")'
16-
RUN Rscript -e 'remotes::install_version("purrr",upgrade="never", version = "1.0.2")'
17-
RUN Rscript -e 'remotes::install_version("markdown",upgrade="never", version = "1.13")'
18-
RUN Rscript -e 'remotes::install_version("scales",upgrade="never", version = "1.3.0")'
19-
RUN Rscript -e 'remotes::install_version("plotly",upgrade="never", version = "4.10.4")'
20-
RUN Rscript -e 'remotes::install_version("shinyWidgets",upgrade="never", version = "0.8.7")'
21-
RUN Rscript -e 'remotes::install_version("shinyjs",upgrade="never", version = "2.1.0")'
22-
RUN Rscript -e 'remotes::install_version("shinydisconnect",upgrade="never", version = "0.1.1")'
23-
RUN Rscript -e 'remotes::install_version("shinyalert",upgrade="never", version = "3.1.0")'
24-
RUN Rscript -e 'remotes::install_version("stringr",upgrade="never", version = "1.5.1")'
25-
RUN Rscript -e 'remotes::install_version("updog",upgrade="never", version = "2.1.5")'
26-
RUN Rscript -e 'remotes::install_version("AGHmatrix",upgrade="never", version = "2.1.4")'
27-
RUN Rscript -e 'remotes::install_version("factoextra",upgrade="never", version = "1.0.7")'
28-
RUN Rscript -e 'remotes::install_version("httr",upgrade="never", version = "1.4.7")'
29-
RUN Rscript -e 'remotes::install_version("future",upgrade="never", version = "1.34.0")'
30-
RUN Rscript -e 'remotes::install_version("shinycssloaders",upgrade="never", version = "1.1.0")'
31-
RUN Rscript -e 'remotes::install_version("RColorBrewer",upgrade="never", version = "1.1.3")'
32-
RUN Rscript -e 'remotes::install_version("tibble",upgrade="never", version = "3.2.1")'
33-
RUN Rscript -e 'remotes::install_version("rrBLUP",upgrade="never", version = "4.6.3")'
34-
RUN Rscript -e 'remotes::install_version("MASS",upgrade="never", version = "7.3.60.2")'
35-
RUN Rscript -e 'remotes::install_version("Matrix",upgrade="never", version = "1.7.0")'
36-
RUN Rscript -e 'remotes::install_version("matrixcalc",upgrade="never", version = "1.0.6")'
37-
RUN Rscript -e 'remotes::install_github("Breeding-Insight/BIGr",upgrade="never")'
38-
RUN Rscript -e 'remotes::install_github("jendelman/GWASpoly",upgrade="never")'
1+
# syntax=docker/dockerfile:1.7
2+
# Buildx/Actions will pass BASE_IMAGE as a manifest tag that covers both arches
3+
ARG BASE_IMAGE=docker.io/breedinginsight/bigapp-deps:r4.5-bioc3.21-2025-08
4+
FROM ${BASE_IMAGE}
395

40-
RUN mkdir /build_zone
41-
ADD . /build_zone
42-
WORKDIR /build_zone
43-
RUN R -e 'remotes::install_local(upgrade="never")'
44-
RUN rm -rf /build_zone
45-
EXPOSE 80
46-
CMD R -e "options('shiny.port'=80,shiny.host='0.0.0.0');BIGapp::run_app()"
6+
SHELL ["/bin/bash","-eo","pipefail","-c"]
7+
ENV DEBIAN_FRONTEND=noninteractive TZ=UTC
8+
ENV MAKEFLAGS="-j2" R_PKG_INSTALL_ARGS="--no-build-vignettes --no-manual"
9+
10+
# App install (only your code changes should rebuild this layer)
11+
WORKDIR /app
12+
COPY DESCRIPTION /app/
13+
# COPY NAMESPACE /app/ # if present, include for better cache hits
14+
COPY . /app
15+
RUN R -q -e "remotes::install_local('.', upgrade='never', dependencies=TRUE, \
16+
INSTALL_opts=c('--no-build-vignettes','--no-manual'))"
4717

18+
# Runtime
19+
RUN useradd -m appuser
20+
USER appuser
21+
WORKDIR /app
22+
EXPOSE 80
23+
HEALTHCHECK --interval=30s --timeout=5s --retries=5 \
24+
CMD wget -qO- http://localhost:${PORT:-80}/ || exit 1
25+
CMD ["R","-q","-e","options(shiny.port=as.integer(Sys.getenv('PORT','80')), shiny.host='0.0.0.0'); BIGapp::run_app()"]

NAMESPACE

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# Generated by roxygen2: do not edit by hand
22

3+
S3method(print,vcf_sanity_check)
34
export(run_app)
5+
export(vcf_sanity_check)
6+
export(vcf_sanity_messages)
47
import(BIGr)
58
import(GWASpoly)
69
import(dplyr)

0 commit comments

Comments
 (0)