Skip to content

Commit

Permalink
Staged builds 5 pr comments (#736)
Browse files Browse the repository at this point in the history
* fix typo

* test nightly as a matrix

* adds checking the SHA to trivy

* Feat: add matrix for docker-nightly

* feat: updated diagrams

It was requested to make base match platform and cmd

* fix: trivy version

new curls need the v removed

* update nightly

* remove pytorch image folder

* test nightly as a matrix

* Feat: add matrix for docker-nightly

* nightly doesn't use dev

* isn't an separate image anymore

* update readme for matrix
  • Loading branch information
EveningStarlight authored Feb 10, 2025
1 parent 21b2b08 commit a27c16c
Show file tree
Hide file tree
Showing 8 changed files with 52 additions and 132 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/docker-build-upload.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ jobs:
echo "BASE_IMAGE=${{ inputs.base-image }}" >> $GITHUB_ENV
fi
- name: Set FROM and as in Docerfile
- name: Set FROM and as in Dockerfile
run: |
sed -i '1i FROM ${{ env.BASE_IMAGE}} as ${{ inputs.image }}' ./images/${{ inputs.directory }}/Dockerfile
Expand Down
74 changes: 13 additions & 61 deletions .github/workflows/docker-nightly.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,77 +9,29 @@ jobs:
runs-on: ubuntu-latest
outputs:
REGISTRY_NAME: "k8scc01covidacr.azurecr.io"
DEV_REGISTRY_NAME: "k8scc01covidacrdev.azurecr.io"
branch-name: "master"
branch-name: "v1"
steps:
- uses: actions/checkout@v4

- name: Get branch name
id: getBranch
run: |
chmod +x ./make_helpers/get_branch_name.sh
BRANCH_NAME=$(./make_helpers/get_branch_name.sh)
echo "branch-name=$BRANCH_NAME"
echo "branch-name=$BRANCH_NAME" >> $GITHUB_OUTPUT
- name: Set up environment
run: echo "Environment has been set up."

jupyterlab-cpu-test:
needs: [vars]
nightly-tests:
needs: vars
strategy:
matrix:
image:
- jupyterlab-cpu
- jupyterlab-tensorflow
- rstudio
- sas
- remote-desktop
uses: ./.github/workflows/docker-pull-test.yaml
with:
image: "jupyterlab-cpu"
image: ${{ matrix.image }}
registry-name: "${{ needs.vars.outputs.REGISTRY_NAME }}"
branch-name: "${{ needs.vars.outputs.branch-name }}"
secrets:
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
CVE_ALLOWLIST: ${{ secrets.CVE_ALLOWLIST}}

jupyterlab-tensorflow-test:
needs: [vars]
uses: ./.github/workflows/docker-pull-test.yaml
with:
image: "jupyterlab-tensorflow"
registry-name: "${{ needs.vars.outputs.REGISTRY_NAME }}"
branch-name: "${{ needs.vars.outputs.branch-name }}"
secrets:
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
CVE_ALLOWLIST: ${{ secrets.CVE_ALLOWLIST}}

rstudio-test:
needs: [vars]
uses: ./.github/workflows/docker-pull-test.yaml
with:
image: "rstudio"
registry-name: "${{ needs.vars.outputs.REGISTRY_NAME }}"
branch-name: "${{ needs.vars.outputs.branch-name }}"
secrets:
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
CVE_ALLOWLIST: ${{ secrets.CVE_ALLOWLIST}}

sas-test:
needs: [vars]
uses: ./.github/workflows/docker-pull-test.yaml
with:
image: "sas"
registry-name: "${{ needs.vars.outputs.REGISTRY_NAME }}"
branch-name: "${{ needs.vars.outputs.branch-name }}"
secrets:
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
CVE_ALLOWLIST: ${{ secrets.CVE_ALLOWLIST}}

remote-desktop-test:
needs: [vars]
uses: ./.github/workflows/docker-pull-test.yaml
with:
image: "remote-desktop"
registry-name: "${{ needs.vars.outputs.REGISTRY_NAME }}"
branch-name: "${{ needs.vars.outputs.branch-name }}"
secrets:
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
CVE_ALLOWLIST: ${{ secrets.CVE_ALLOWLIST}}
CVE_ALLOWLIST: ${{ secrets.CVE_ALLOWLIST }}
9 changes: 7 additions & 2 deletions .github/workflows/docker-pull-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
ports:
- 5000:5000
env:
TRIVY_VERSION: "v0.57.0"
TRIVY_VERSION: "0.58.2"
TRIVY_DATABASES: '"ghcr.io/aquasecurity/trivy-db:2","public.ecr.aws/aquasecurity/trivy-db"'
TRIVY_JAVA_DATABASES: '"ghcr.io/aquasecurity/trivy-java-db:1","public.ecr.aws/aquasecurity/trivy-java-db"'
TRIVY_MAX_RETRIES: 5
Expand Down Expand Up @@ -81,7 +81,12 @@ jobs:
# Scan image for vulnerabilities
- name: Aqua Security Trivy image scan
run: |
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin ${{ env.TRIVY_VERSION }}
curl -sLO https://github.com/aquasecurity/trivy/releases/download/v${{ env.TRIVY_VERSION }}/trivy_${{ env.TRIVY_VERSION }}_Linux-64bit.tar.gz \
&& curl -LO https://github.com/aquasecurity/trivy/releases/download/v${{ env.TRIVY_VERSION }}/trivy_${{ env.TRIVY_VERSION }}_checksums.txt \
&& grep "trivy_${{ env.TRIVY_VERSION }}_Linux-64bit.tar.gz" trivy_${{ env.TRIVY_VERSION }}_checksums.txt | sha256sum -c - \
&& tar -xf trivy_${{ env.TRIVY_VERSION }}_Linux-64bit.tar.gz \
&& chmod +x trivy \
&& sudo mv ./trivy /usr/local/bin/trivy
set +e
Expand Down
17 changes: 12 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Container images to be used with kubeflow on the AAW platform for Data Science &
- [General Development Workflow](#general-development-workflow)
- [Running an AAW Container Locally](#running-an-aaw-container-locally)
- [Testing Locally](#testing-locally)
- [Testing On-Platform testing](#testing-on-platform-testing)
- [Testing On-Platform](#testing-on-platform)
- [Overview of images](#overview-of-images)
- [Adding new software](#adding-new-software)
- [Adding new Images](#adding-new-images)
Expand Down Expand Up @@ -154,7 +154,7 @@ jupyter/datascience-notebook 9ed3b8de5de1 9a0c8d86de1a
- manually by `docker run -it -p 8888:8888 REPO/IMAGENAME:TAG`,
then opening it in [http://localhost:8888](http://localhost:8888)

### Testing On-Platform testing
### Testing On-Platform

GitHub Actions CI is enabled to do building, scanning, automated testing, pushing of our images to ACR.

Expand Down Expand Up @@ -207,7 +207,8 @@ then following the normal build instructions starting with the Generate Dockerfi
Be selective with software installation as image sizes are already quite big (16Gb plus),
and increasing that size would negatively impact the time it takes up for a workspace server to come up
(as well as first time image pulls to a node).
In such cases it may be more relevant to make an image under [aaw-contrib-containers](https://github.com/StatCan/aaw-contrib-containers) as mentioned earlier.
In such cases it may be more relevant to make an image under
[aaw-contrib-containers](https://github.com/StatCan/aaw-contrib-containers) as mentioned earlier.

### Adding new Images

Expand All @@ -225,7 +226,8 @@ See below for a description of all the fields.
4. If this stage was inserted between two existing stages,
update the parent values of any children of this stage
5. If this stage creates an image that will be deployed to users.
A job must be added to test the image in `./github/workflows/docker.yaml` and `./github/workflows/docker-nightly.yaml`
A job must be added to test the image in `./github/workflows/docker.yaml`,
and the image name must be added to the matrix in `./github/workflows/docker-nightly.yaml`
See below for a description of all the fields
6. Update the documentation for the new stage.
This is generally updating `images-stages.png` and `image-stages.drawio` in the `docs/images` folder using draw.io.
Expand Down Expand Up @@ -324,7 +326,12 @@ so updates to the tag are not needed.

The `v1` tag is intended for when we encounter a breaking change,
but still want to support the features of that current image.
A new `v2` tag will be created for adding these breaking changes.

The `v2` tag is currently used by [zone-kubeflow-containers](https://github.com/StatCan/zone-kubeflow-containers)

**Note**:
The `latest` tag is shared with [zone-kubeflow-containers](https://github.com/StatCan/zone-kubeflow-containers),
So isn't reliable

### Set User File Permissions

Expand Down
35 changes: 19 additions & 16 deletions docs/images/image-stages.drawio
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0" version="25.0.3">
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0" version="26.0.6">
<diagram name="Page-1" id="zlxh3_FURENLlaDQN8fC">
<mxGraphModel dx="1500" dy="769" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<mxGraphModel dx="1050" dy="538" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
Expand All @@ -13,7 +13,7 @@
<mxCell id="hTxbjXE2mDDGzQtdPCSj-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.771;exitY=0.875;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="hTxbjXE2mDDGzQtdPCSj-1" target="hTxbjXE2mDDGzQtdPCSj-4" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.135;exitY=0.975;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitPerimeter=0;" edge="1" parent="1" source="hTxbjXE2mDDGzQtdPCSj-1" target="hTxbjXE2mDDGzQtdPCSj-21">
<mxCell id="ty-XCMfTDVM0uD_hAozX-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.135;exitY=0.975;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="hTxbjXE2mDDGzQtdPCSj-1" target="hTxbjXE2mDDGzQtdPCSj-21" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="hTxbjXE2mDDGzQtdPCSj-1" value="&lt;div&gt;base&lt;/div&gt;" style="rectangle;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
Expand All @@ -26,7 +26,7 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.524;entryY=0.001;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="hTxbjXE2mDDGzQtdPCSj-4" target="ty-XCMfTDVM0uD_hAozX-2">
<mxCell id="ty-XCMfTDVM0uD_hAozX-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.524;entryY=0.001;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="hTxbjXE2mDDGzQtdPCSj-4" target="ty-XCMfTDVM0uD_hAozX-2" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="hTxbjXE2mDDGzQtdPCSj-4" value="rstudio" style="ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
Expand Down Expand Up @@ -87,42 +87,45 @@
<mxCell id="hTxbjXE2mDDGzQtdPCSj-49" value="&lt;font style=&quot;font-size: 15px;&quot;&gt;Final Images&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="40" y="809" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-2" value="platform-rstudio" style="rectangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
<mxCell id="ty-XCMfTDVM0uD_hAozX-2" value="platform-rstudio" style="rectangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="550" y="440" width="95" height="80" as="geometry" />
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.522;exitY=0.996;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="ty-XCMfTDVM0uD_hAozX-2" target="hTxbjXE2mDDGzQtdPCSj-34">
<mxCell id="ty-XCMfTDVM0uD_hAozX-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.522;exitY=0.996;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="ty-XCMfTDVM0uD_hAozX-2" target="hTxbjXE2mDDGzQtdPCSj-34" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-6" value="platform" style="rectangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;direction=west;textDirection=ltr;horizontal=0;fontSize=24;" vertex="1" parent="1">
<mxGeometry x="260" y="420" width="60" height="120" as="geometry" />
<mxCell id="ty-XCMfTDVM0uD_hAozX-6" value="Base" style="rectangle;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;direction=west;textDirection=ltr;horizontal=0;fontSize=24;" parent="1" vertex="1">
<mxGeometry x="270" y="180" width="60" height="120" as="geometry" />
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-8" value="CMD" style="rectangle;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;horizontal=0;fontSize=24;" vertex="1" parent="1">
<mxCell id="ty-XCMfTDVM0uD_hAozX-8" value="CMD" style="rectangle;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;horizontal=0;fontSize=24;" parent="1" vertex="1">
<mxGeometry x="260" y="659.5" width="60" height="119" as="geometry" />
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.181;exitY=0.983;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitPerimeter=0;" edge="1" parent="1" source="hTxbjXE2mDDGzQtdPCSj-21" target="hTxbjXE2mDDGzQtdPCSj-32">
<mxCell id="ty-XCMfTDVM0uD_hAozX-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.181;exitY=0.983;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="hTxbjXE2mDDGzQtdPCSj-21" target="hTxbjXE2mDDGzQtdPCSj-32" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="hTxbjXE2mDDGzQtdPCSj-21" value="platform-jupyterlab" style="rectangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="320" y="440" width="230" height="80" as="geometry" />
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.429;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="hTxbjXE2mDDGzQtdPCSj-16" target="hTxbjXE2mDDGzQtdPCSj-1">
<mxCell id="ty-XCMfTDVM0uD_hAozX-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.429;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="hTxbjXE2mDDGzQtdPCSj-16" target="hTxbjXE2mDDGzQtdPCSj-1" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="ty-XCMfTDVM0uD_hAozX-13" target="ty-XCMfTDVM0uD_hAozX-16">
<mxCell id="ty-XCMfTDVM0uD_hAozX-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="ty-XCMfTDVM0uD_hAozX-13" target="ty-XCMfTDVM0uD_hAozX-16" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-13" value="rocker/geospatial:4.2.1" style="ellipse;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
<mxCell id="ty-XCMfTDVM0uD_hAozX-13" value="rocker/geospatial:4.2.1" style="ellipse;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
<mxGeometry x="115" y="55" width="90" height="90" as="geometry" />
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-14" value="remote-desktop" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="ty-XCMfTDVM0uD_hAozX-14" value="remote-desktop" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="115" y="819" width="90" height="80" as="geometry" />
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="ty-XCMfTDVM0uD_hAozX-16" target="ty-XCMfTDVM0uD_hAozX-14">
<mxCell id="ty-XCMfTDVM0uD_hAozX-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="ty-XCMfTDVM0uD_hAozX-16" target="ty-XCMfTDVM0uD_hAozX-14" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ty-XCMfTDVM0uD_hAozX-16" value="remote-desktop" style="ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxCell id="ty-XCMfTDVM0uD_hAozX-16" value="remote-desktop" style="ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="100" y="480" width="120" height="80" as="geometry" />
</mxCell>
<mxCell id="wxKCdzHfKvLAPwGIz8D_-1" value="platform" style="rectangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;direction=west;textDirection=ltr;horizontal=0;fontSize=24;" vertex="1" parent="1">
<mxGeometry x="270" y="430" width="60" height="120" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
Expand Down
Binary file modified docs/images/image-stages.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 0 additions & 17 deletions images/pytorch/Dockerfile

This file was deleted.

30 changes: 0 additions & 30 deletions tests/jupyterlab-pytorch/test_pytorch.py

This file was deleted.

0 comments on commit a27c16c

Please sign in to comment.