Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
39d0b03
Add Dockerfile and GitHub Actions workflow for building AOC Docker im…
marc-hanheide Feb 16, 2026
6400cd7
Add GitHub Actions workflow for building AOC Docker images with multi…
marc-hanheide Feb 16, 2026
b3e9a40
Update Docker build workflow to enable sequential builds and dynamic …
marc-hanheide Feb 16, 2026
7f2808b
Add CUDA Dockerfile and update build workflow for CUDA support
marc-hanheide Feb 16, 2026
6e0c408
Refactor Docker build configuration to use ROS_DISTRO variable for ta…
marc-hanheide Feb 16, 2026
a1fe98d
Add ROS installation and setup commands to CUDA Dockerfile
marc-hanheide Feb 16, 2026
a16011a
Add ROS_DISTRO argument and environment variables to CUDA Dockerfile
marc-hanheide Feb 16, 2026
71f257b
Add ARG declarations for BASE_IMAGE and ROS_DISTRO in Dockerfiles
marc-hanheide Feb 16, 2026
3f967cb
Add CUDA Dockerfile stages for base and desktop images with ROS support
marc-hanheide Feb 16, 2026
14e9331
Comment out cache-from and cache-to lines in Docker build configuration
marc-hanheide Feb 16, 2026
728dad1
Move python3-rosdep installation to the correct stage in Dockerfile
marc-hanheide Feb 16, 2026
3749deb
Add target specification for Docker build stage in workflow
marc-hanheide Feb 16, 2026
0d530ee
Add additional CUDA Dockerfile stages for base and desktop images wit…
marc-hanheide Feb 16, 2026
c55cbf2
Uncomment cache-from and cache-to lines in Docker build configuration
marc-hanheide Feb 16, 2026
ac535ef
Initialize rosdep before updating in Dockerfile
marc-hanheide Feb 16, 2026
1a5d2bf
Add support for ROS Jazzy in Docker build configuration
marc-hanheide Feb 16, 2026
37b628f
Refactor Docker build configuration by removing unused desktop stage …
marc-hanheide Feb 16, 2026
2e8ba15
Add reusable Docker image build workflow and CUDA desktop Dockerfile
marc-hanheide Feb 16, 2026
6a10ecd
Add outputs section for image digest in Docker build workflow
marc-hanheide Feb 16, 2026
8d66679
Reorder Docker build steps to ensure proper setup of buildx before bu…
marc-hanheide Feb 16, 2026
0591fb5
Fix Dockerfile syntax for ros installation
marc-hanheide Feb 16, 2026
7665cde
feat: add seperate display container
cooperj Feb 16, 2026
e9e2e9a
Merge branch 'main' into display
marc-hanheide Feb 16, 2026
940098f
ci: rename the container from `display` to `vnc` add CI building
cooperj Feb 17, 2026
2f6514f
ci: disable requirement for ros distro, allowing for non ros builds
cooperj Feb 17, 2026
21c932c
Merge branch 'main' into display
cooperj Feb 25, 2026
faa9021
fix: install turbovnc this time and fix ci
cooperj Feb 25, 2026
be348cd
feat: cleaned up the vnc container, added docker cli
cooperj Feb 25, 2026
cafb62e
chore: run linter
cooperj Feb 25, 2026
2b3873c
fix: restore wallpaper functionality
cooperj Mar 2, 2026
3afa5ca
chore: add back the old wallpaper as an option
cooperj Mar 2, 2026
9de3968
chore: update readme to force build
cooperj Mar 10, 2026
bc94c5c
ci: break the vnc + devtools into two separate containers
cooperj Mar 13, 2026
dba3a96
fix: rm the distro line
cooperj Mar 13, 2026
15994e0
Merge branch 'main' into display
cooperj Mar 13, 2026
f4049ed
fix: change context to inside docker folder matching ci actions
cooperj Mar 13, 2026
b788647
Apply suggestions from code review
cooperj Mar 13, 2026
a7b6e0e
Remove unused VNC_PORT env var from vnc.dockerfile (#7)
Copilot Mar 13, 2026
0eeb0a3
fix: rm the warning on contexts outside of a terminal inside vnc term…
cooperj Mar 20, 2026
107fd67
feat: add GPU support for VNC and ROS containers in Docker Compose
marc-hanheide Mar 23, 2026
d760267
docs: Revise README for repository name and container details
cooperj Mar 23, 2026
ebf11fa
docs: Enhance README with Development and Deployment sections
cooperj Mar 24, 2026
3241674
docs: update README.md
cooperj Mar 24, 2026
8603225
docs: revise usage sections for ROS and VNC
cooperj Mar 24, 2026
553e810
feat: update Docker configuration to use base.dockerfile and add vgl.…
marc-hanheide Mar 24, 2026
fa5708c
refactor: remove unused VNC devtools and Cyclone DDS configuration; e…
cooperj Mar 25, 2026
d4f1ad5
fix: add nv egl vendor
cooperj Mar 25, 2026
feb5793
fix: enhance allow for container internal process communication (ipc)…
cooperj Mar 25, 2026
bc9e0bc
feat: improve the cuda container, remove vgl from vnc
cooperj Mar 25, 2026
765c579
feat: update Docker workflows for improved image builds
cooperj Mar 25, 2026
1cdcbb2
fix: swapped from inputs to matrix target
cooperj Mar 25, 2026
28399da
feat: add variant request form
cooperj Mar 30, 2026
6184ce2
feat: refactor ROS image build workflow and add reusable build config…
cooperj Mar 30, 2026
b7ef446
ci: move vnc build into the new pipeline
cooperj Mar 30, 2026
8f6d86b
ci: define reusable workflow for building standalone images
cooperj Mar 30, 2026
16c53fc
Apply suggestions from code review
cooperj Mar 30, 2026
c01caa8
docs: improve the readme for clarity
cooperj Mar 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions .github/ISSUE_TEMPLATE/request-variant.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: "Request New Image Variant"
description: "Request a new variant based on the images scaffolded by this repository (e.g. ROS / CUDA variants)."
title: "[Variant]: "
labels:
- "enhancement"
- "feature request"
body:
- type: textarea
id: why
attributes:
label: "Explain Your Problem"
description: "What problem does this solve? Why can't you use an existing image that is produced from this repository?"
validations:
required: true

- type: input
id: ros_version
attributes:
label: "ROS 2 Distro"
placeholder: "humble"

- type: dropdown
id: rep2001
attributes:
label: "Is the ROS 2 version a LTS variant?"
description: "See [REP-2001](https://www.ros.org/reps/rep-2001.html)"
options:
- "Yes"
- "No"

- type: input
id: ubuntu_version
attributes:
label: "Ubuntu version"
placeholder: "22.04"

- type: checkboxes
id: ubuntu_lts
attributes:
label: "Is Ubuntu LTS?"
options:
- label: "Yes (LTS)"

- type: textarea
id: non_lts_justification
attributes:
label: "If not a Ubuntu LTS, please justify why you need this version."

- type: checkboxes
id: cuda_needed
attributes:
label: "Is NVIDIA CUDA needed?"
description: "CUDA will make the images much larger and should only be used for 'AI' workloads that will take advantage of CUDA"
options:
- label: "Yes, I need to use CUDA in this container"

- type: input
id: cuda_version
attributes:
label: "If yes, what CUDA version do you need?"
description: "If you are using your own machine, run `nvidia-smi` and see what version you are using or state latest."
placeholder: "13.2.0"

- type: input
id: cuda_base_tag
attributes:
label: "What is your proposed NVIDIA base image to use? (optional)"
description: "From [NVIDIA supported tags list](https://gitlab.com/nvidia/container-images/cuda/-/blob/master/doc/supported-tags.md)."
placeholder: "13.2.0-cudnn-runtime-ubuntu22.04"

- type: textarea
id: use_case
attributes:
label: "What is your use case?"
description: "Provide us with information and links of how you expect to be using this."
133 changes: 133 additions & 0 deletions .github/workflows/_build-ros-image.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
name: Build a single ROS Docker image (reusable)

on:
workflow_call:
inputs:
base_image:
description: The FROM base image
required: true
type: string
push_image:
description: Image name on the LCAS registry
required: true
type: string
tag_stem:
description: "Base image tag stem (example: humble-11.8)"
required: true
type: string
image_context:
description: "Tag context suffix (main, release tag, or staging)"
required: true
type: string
ros_distro:
description: ROS distro to build for (for tags/build args)
required: true
type: string
dockerfile:
required: true
type: string
architectures:
required: true
type: string
build_desktop:
description: Build a desktop variant after the primary image?
required: false
default: false
type: boolean
desktop_push_image:
description: Desktop image name on the LCAS registry, i.e. ros_cuda_desktop
required: false
default: ""
type: string
outputs:
digest:
description: Image digest from the build
value: ${{ jobs.build.outputs.digest }}
secrets:
LCAS_REGISTRY_PUSHER:
required: true
LCAS_REGISTRY_TOKEN:
required: true

jobs:
build:
runs-on: [lcas, qemu]
outputs:
digest: ${{ steps.build.outputs.digest }}
steps:
- uses: actions/checkout@v6

- uses: docker/login-action@v4
with:
registry: lcas.lincoln.ac.uk
username: ${{ secrets.LCAS_REGISTRY_PUSHER }}
password: ${{ secrets.LCAS_REGISTRY_TOKEN }}

- name: Docker meta
id: meta
uses: docker/metadata-action@v6
with:
flavor: latest=false
labels: |
org.opencontainers.image.description=AOC Docker Image (${{ inputs.push_image }}, ${{ inputs.ros_distro }})
org.opencontainers.image.authors=L-CAS Team
images: lcas.lincoln.ac.uk/${{ inputs.push_image }}
tags: |
type=raw,value=${{ inputs.tag_stem }}-${{ inputs.image_context }}
type=semver,pattern={{version}},prefix=${{ inputs.tag_stem }}-
type=semver,pattern={{major}}.{{minor}},prefix=${{ inputs.tag_stem }}-
type=semver,pattern={{major}},prefix=${{ inputs.tag_stem }}-

- uses: docker/setup-buildx-action@v4

- name: Build and push
id: build
uses: docker/build-push-action@v7
with:
context: ./docker
file: ./${{ inputs.dockerfile }}
platforms: ${{ inputs.architectures }}
push: true
cache-from: type=registry,ref=lcas.lincoln.ac.uk/cache/${{ inputs.push_image }}:${{ inputs.tag_stem }}
cache-to: type=registry,ref=lcas.lincoln.ac.uk/cache/${{ inputs.push_image }}:${{ inputs.tag_stem }},mode=max
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BASE_IMAGE=${{ inputs.base_image }}
ROS_DISTRO=${{ inputs.ros_distro }}

#####

- name: Docker meta desktop
if: ${{ inputs.build_desktop && inputs.desktop_push_image != '' }}
id: meta_desktop
uses: docker/metadata-action@v6
with:
flavor: latest=false
labels: |
org.opencontainers.image.description=AOC Docker Image (${{ inputs.desktop_push_image }}, ${{ inputs.ros_distro }} desktop)
org.opencontainers.image.authors=L-CAS Team
images: lcas.lincoln.ac.uk/${{ inputs.desktop_push_image }}
tags: |
type=raw,value=${{ inputs.tag_stem }}-${{ inputs.image_context }}
type=semver,pattern={{version}},prefix=${{ inputs.tag_stem }}-
type=semver,pattern={{major}}.{{minor}},prefix=${{ inputs.tag_stem }}-
type=semver,pattern={{major}},prefix=${{ inputs.tag_stem }}-

- name: Build and push desktop
if: ${{ inputs.build_desktop && inputs.desktop_push_image != '' }}
id: build_desktop
uses: docker/build-push-action@v7
with:
context: ./docker
file: ./desktop.dockerfile
platforms: ${{ inputs.architectures }}
push: true
cache-from: type=registry,ref=lcas.lincoln.ac.uk/cache/${{ inputs.desktop_push_image }}:${{ inputs.tag_stem }}
cache-to: type=registry,ref=lcas.lincoln.ac.uk/cache/${{ inputs.desktop_push_image }}:${{ inputs.tag_stem }},mode=max
tags: ${{ steps.meta_desktop.outputs.tags }}
labels: ${{ steps.meta_desktop.outputs.labels }}
build-args: |
BASE_IMAGE=lcas.lincoln.ac.uk/${{ inputs.push_image }}@${{ steps.build.outputs.digest }}
ROS_DISTRO=${{ inputs.ros_distro }}

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build a single Docker image (reusable)
name: Build a single standalone Docker image (reusable)

on:
workflow_call:
Expand All @@ -11,9 +11,6 @@ on:
description: Image name on the LCAS registry
required: true
type: string
ros_distro:
required: true
type: string
dockerfile:
required: true
type: string
Expand All @@ -36,11 +33,9 @@ jobs:
outputs:
digest: ${{ steps.build.outputs.digest }}
steps:
- uses: actions/setup-node@v4
- uses: actions/checkout@v3
- run: echo "BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV
- uses: actions/checkout@v6

- uses: docker/login-action@v3
- uses: docker/login-action@v4
with:
registry: lcas.lincoln.ac.uk
username: ${{ secrets.LCAS_REGISTRY_PUSHER }}
Expand All @@ -51,35 +46,34 @@ jobs:

- name: Docker meta
id: meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@v6
with:
flavor: latest=false
labels: |
org.opencontainers.image.description=AOC Docker Image (${{ inputs.push_image }}, ${{ inputs.ros_distro }})
org.opencontainers.image.description=AOC Docker Image (${{ inputs.push_image }})
org.opencontainers.image.authors=L-CAS Team
images: lcas.lincoln.ac.uk/${{ inputs.push_image }}
tags: |
type=raw,value=${{ inputs.ros_distro }}-staging
type=raw,enable=${{ github.event_name != 'pull_request' }},value=${{ inputs.ros_distro }}-latest
type=ref,enable=${{ github.event_name != 'pull_request' }},event=branch,prefix=${{ inputs.ros_distro }}-
type=semver,pattern={{version}},prefix=${{ inputs.ros_distro }}-
type=semver,pattern={{major}}.{{minor}},prefix=${{ inputs.ros_distro }}-
type=semver,pattern={{major}},prefix=${{ inputs.ros_distro }}-
type=raw,enable=${{ github.ref_name == 'main' }},value=main
type=raw,enable=${{ github.ref_name == 'main' }},value=latest
type=raw,enable=${{ github.ref_name != 'main' }},value=staging
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}

- uses: docker/setup-buildx-action@v3
- uses: docker/setup-buildx-action@v4

- name: Build and push
id: build
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
context: ./docker
file: ./${{ inputs.dockerfile }}
platforms: ${{ inputs.architectures }}
push: true
cache-from: type=registry,ref=lcas.lincoln.ac.uk/cache/${{ inputs.push_image }}:${{ inputs.ros_distro }}
cache-to: type=registry,ref=lcas.lincoln.ac.uk/cache/${{ inputs.push_image }}:${{ inputs.ros_distro }},mode=max
cache-from: type=registry,ref=lcas.lincoln.ac.uk/cache/${{ inputs.push_image }}:latest
cache-to: type=registry,ref=lcas.lincoln.ac.uk/cache/${{ inputs.push_image }}:latest,mode=max
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BASE_IMAGE=${{ inputs.base_image }}
ROS_DISTRO=${{ inputs.ros_distro }}
Loading