Skip to content

Commit e1017d5

Browse files
almahmoudjwokaty
andauthored
Add NVIDIA base containers (#139)
* Flexible base image * Try matrix with Nvidia base * Update build_ghcr.yaml * Update Dockerfile * Try named prefix * Fix named prefix * Add dash to OS version * Try squash with nvidia --------- Co-authored-by: jwokaty <[email protected]>
1 parent e5a855b commit e1017d5

File tree

2 files changed

+30
-22
lines changed

2 files changed

+30
-22
lines changed

.github/workflows/build_ghcr.yaml

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ jobs:
1515
strategy:
1616
fail-fast: false
1717
matrix:
18-
ubuntu: [noble]
1918
platform: [linux/amd64]
2019
branch: [devel, release]
20+
base:
21+
- {image: "ubuntu:noble", name: "noble"}
22+
- {image: "nvcr.io/nvidia/cuda:12.9.0-devel-ubuntu24.04", name: "nvidia-noble"}
2123

2224
name: Build container images for GHCR
2325
runs-on: ubuntu-latest
@@ -35,7 +37,7 @@ jobs:
3537
with:
3638
images: ghcr.io/${{ github.repository }}
3739
tags: |
38-
type=raw,value=${{ matrix.ubuntu }}
40+
type=raw,value=${{ matrix.base.name }}
3941
4042
- name: Extract container name without tag
4143
id: vars
@@ -64,16 +66,18 @@ jobs:
6466
id: build
6567
uses: docker/build-push-action@v5
6668
with:
67-
build-args: CYCLE=${{matrix.branch}}
69+
build-args: |
70+
CYCLE=${{matrix.branch}}
71+
BASE_IMAGE=${{matrix.base.image}}
6872
labels: ${{ steps.meta.outputs.labels }}
6973
outputs: type=image,name=${{ steps.vars.outputs.container }},push-by-digest=true,name-canonical=true,push=true
7074
platforms: ${{matrix.platform}}
7175
provenance: false
7276

7377
- name: Prepare Dockerfile to extract R version with emulator
7478
run: |
75-
mkdir -p ${{matrix.ubuntu}}-${{matrix.platform}}
76-
cat << "EOF" > ${{matrix.ubuntu}}-${{matrix.platform}}-r.Dockerfile
79+
mkdir -p ${{matrix.base.image}}-${{matrix.platform}}
80+
cat << "EOF" > ${{matrix.base.image}}-${{matrix.platform}}-r.Dockerfile
7781
FROM ${{ steps.vars.outputs.container }}@${{ steps.build.outputs.digest }} as extract
7882
USER root
7983
RUN mkdir /bioctmp && /bbs_r_start -e 'BiocManager::version()' | grep '\[1\]' | awk -F"'" '{print $2}' > /bioctmp/biocver && /bbs_r_start --slave -e 'cat(paste(version$major, version$minor, sep = "."))' > /bioctmp/rver && cat /etc/os-release > /bioctmp/os-release
@@ -84,26 +88,29 @@ jobs:
8488
- name: Build and push container image to ghcr
8589
uses: docker/build-push-action@v5
8690
with:
87-
file: ${{matrix.ubuntu}}-${{matrix.platform}}-r.Dockerfile
91+
file: ${{matrix.base.image}}-${{matrix.platform}}-r.Dockerfile
8892
context: .
8993
push: false
9094
load: false
9195
provenance: false
92-
outputs: type=tar,dest=${{matrix.ubuntu}}-${{matrix.platform}}/r.tar
96+
outputs: type=tar,dest=${{matrix.base.image}}-${{matrix.platform}}/r.tar
9397
tags: ${{ steps.meta.outputs.tags }}-r
9498
platforms: ${{ matrix.platform }}
9599

96100
- name: Extract rversion
97101
id: versions
98102
run: |
99-
cd ${{matrix.ubuntu}}-${{matrix.platform}}
103+
cd ${{matrix.base.image}}-${{matrix.platform}}
100104
tar -xvf r.tar
101105
echo rver=$(cat rver) >> $GITHUB_OUTPUT
102106
echo biocver=$(cat biocver) >> $GITHUB_OUTPUT
103107
echo osver=$(awk -F= '/VERSION_ID/ {gsub("\"", "", $2); print $2}' os-release) >> $GITHUB_OUTPUT
104108
BASEPREFIX=""
105109
if [ '${{matrix.branch}}' == 'devel' ]; then BASEPREFIX="devel-"; fi
110+
NAMEDPREFIX="${BASEPREFIX}${{matrix.base.name}}"
111+
BASEPREFIX=$(echo "$NAMEDPREFIX" | sed 's/-\?jammy//')
106112
echo baseprefix=$BASEPREFIX >> $GITHUB_OUTPUT
113+
echo namedprefix=$NAMEDPREFIX >> $GITHUB_OUTPUT
107114
108115
- name: Export digest by ubuntu and r versions
109116
run: |
@@ -115,18 +122,18 @@ jobs:
115122
exit 1
116123
fi
117124
digest="${{ steps.build.outputs.digest }}"
118-
mkdir -p /tmp/digests/${{steps.versions.outputs.baseprefix}}${{matrix.ubuntu}}
119-
touch "/tmp/digests/${{steps.versions.outputs.baseprefix}}${{matrix.ubuntu}}/${digest#sha256:}"
120-
mkdir -p /tmp/digests/${{steps.versions.outputs.baseprefix}}${{matrix.ubuntu}}-bioc-${{steps.versions.outputs.biocver}}
121-
touch "/tmp/digests/${{steps.versions.outputs.baseprefix}}${{matrix.ubuntu}}-bioc-${{steps.versions.outputs.biocver}}/${digest#sha256:}"
122-
mkdir -p /tmp/digests/${{steps.versions.outputs.baseprefix}}${{matrix.ubuntu}}-bioc-${{steps.versions.outputs.biocver}}-r-${{steps.versions.outputs.rver}}
123-
touch "/tmp/digests/${{steps.versions.outputs.baseprefix}}${{matrix.ubuntu}}-bioc-${{steps.versions.outputs.biocver}}-r-${{steps.versions.outputs.rver}}/${digest#sha256:}"
124-
mkdir -p /tmp/digests/${{steps.versions.outputs.baseprefix}}${{steps.versions.outputs.osver}}
125-
touch "/tmp/digests/${{steps.versions.outputs.baseprefix}}${{steps.versions.outputs.osver}}/${digest#sha256:}"
126-
mkdir -p /tmp/digests/${{steps.versions.outputs.baseprefix}}${{steps.versions.outputs.osver}}-bioc-${{steps.versions.outputs.biocver}}
127-
touch "/tmp/digests/${{steps.versions.outputs.baseprefix}}${{steps.versions.outputs.osver}}-bioc-${{steps.versions.outputs.biocver}}/${digest#sha256:}"
128-
mkdir -p /tmp/digests/${{steps.versions.outputs.baseprefix}}${{steps.versions.outputs.osver}}-bioc-${{steps.versions.outputs.biocver}}-r-${{steps.versions.outputs.rver}}
129-
touch "/tmp/digests/${{steps.versions.outputs.baseprefix}}${{steps.versions.outputs.osver}}-bioc-${{steps.versions.outputs.biocver}}-r-${{steps.versions.outputs.rver}}/${digest#sha256:}"
125+
mkdir -p /tmp/digests/${{steps.versions.outputs.namedprefix}}
126+
touch "/tmp/digests/${{steps.versions.outputs.namedprefix}}/${digest#sha256:}"
127+
mkdir -p /tmp/digests/${{steps.versions.outputs.namedprefix}}-bioc-${{steps.versions.outputs.biocver}}
128+
touch "/tmp/digests/${{steps.versions.outputs.namedprefix}}-bioc-${{steps.versions.outputs.biocver}}/${digest#sha256:}"
129+
mkdir -p /tmp/digests/${{steps.versions.outputs.namedprefix}}-bioc-${{steps.versions.outputs.biocver}}-r-${{steps.versions.outputs.rver}}
130+
touch "/tmp/digests/${{steps.versions.outputs.namedprefix}}-bioc-${{steps.versions.outputs.biocver}}-r-${{steps.versions.outputs.rver}}/${digest#sha256:}"
131+
mkdir -p /tmp/digests/${{steps.versions.outputs.baseprefix}}-${{steps.versions.outputs.osver}}
132+
touch "/tmp/digests/${{steps.versions.outputs.baseprefix}}-${{steps.versions.outputs.osver}}/${digest#sha256:}"
133+
mkdir -p /tmp/digests/${{steps.versions.outputs.baseprefix}}-${{steps.versions.outputs.osver}}-bioc-${{steps.versions.outputs.biocver}}
134+
touch "/tmp/digests/${{steps.versions.outputs.baseprefix}}-${{steps.versions.outputs.osver}}-bioc-${{steps.versions.outputs.biocver}}/${digest#sha256:}"
135+
mkdir -p /tmp/digests/${{steps.versions.outputs.baseprefix}}-${{steps.versions.outputs.osver}}-bioc-${{steps.versions.outputs.biocver}}-r-${{steps.versions.outputs.rver}}
136+
touch "/tmp/digests/${{steps.versions.outputs.baseprefix}}-${{steps.versions.outputs.osver}}-bioc-${{steps.versions.outputs.biocver}}-r-${{steps.versions.outputs.rver}}/${digest#sha256:}"
130137
131138
- name: Upload digests
132139
uses: actions/upload-artifact@v4

Dockerfile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
FROM ubuntu:noble AS build
1+
ARG BASE_IMAGE=ubuntu:noble
2+
FROM ${BASE_IMAGE} AS build
23
ARG CYCLE=release
34
RUN useradd -ms /bin/bash biocbuild && apt update -qq && apt install sudo systemd -y && usermod -aG sudo biocbuild && echo "biocbuild ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
45
USER biocbuild
56
COPY . /home/biocbuild/bioconductor_salt
67
WORKDIR /home/biocbuild
78
RUN DEBIAN_FRONTEND="noninteractive" bash bioconductor_salt/startup_bbs_standalone_${CYCLE}.sh
89

9-
FROM ubuntu:noble AS final
10+
FROM ${BASE_IMAGE AS final
1011
COPY --from=build / /
1112
ENTRYPOINT ["/bin/bash", "-c"]
1213
CMD ["/bbs_r_start"]

0 commit comments

Comments
 (0)