Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
70 changes: 16 additions & 54 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,17 @@ jobs:
build:
name: Build
runs-on: ubuntu-latest
strategy:
matrix:
ubuntu-version:
- 22.04
- 24.04
steps:
- uses: actions/checkout@v4
- run: make UBUNTU=${{ matrix.ubuntu-version }} update
- run: make UBUNTU=${{ matrix.ubuntu-version }} build
- run: make DEBIAN=trixie update
- run: make DEBIAN=trixie build
- name: Log in to docker
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
if: ${{ github.repository_owner == 'wpilibsuite' && github.ref == 'refs/heads/main' }}
- run: make UBUNTU=${{ matrix.ubuntu-version }} push
- run: make DEBIAN=trixie push
if: ${{ github.repository_owner == 'wpilibsuite' && github.ref == 'refs/heads/main' }}

build-ds:
Expand Down Expand Up @@ -66,7 +61,7 @@ jobs:
strategy:
matrix:
debian-version:
- bookworm
- trixie
steps:
- uses: actions/checkout@v4
- run: make DEBIAN=${{ matrix.debian-version }} update/arm
Expand All @@ -77,47 +72,30 @@ jobs:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
if: ${{ github.repository_owner == 'wpilibsuite' && github.ref == 'refs/heads/main' }}
- run: make UBUNTU=${{ matrix.debian-version }} push/arm-base
- run: make DEBIAN=${{ matrix.debian-version }} push/arm-base
if: ${{ github.repository_owner == 'wpilibsuite' && github.ref == 'refs/heads/main' }}

build-minimal:
name: Build Minimal
runs-on: ubuntu-latest
strategy:
matrix:
ubuntu-version:
- 22.04
- 24.04
steps:
- uses: actions/checkout@v4
- run: make UBUNTU=${{ matrix.ubuntu-version }} update
- run: make UBUNTU=${{ matrix.ubuntu-version }} build/minimal-cross
- run: make DEBIAN=trixie update
- run: make DEBIAN=trixie build/minimal-cross
- name: Log in to docker
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
if: ${{ github.repository_owner == 'wpilibsuite' && github.ref == 'refs/heads/main' }}
- run: make UBUNTU=${{ matrix.ubuntu-version }} push/minimal-cross
- run: make DEBIAN=trixie push/minimal-cross
if: ${{ github.repository_owner == 'wpilibsuite' && github.ref == 'refs/heads/main' }}

- run: make UBUNTU=${{ matrix.ubuntu-version }} save/minimal-cross
- name: Upload roborio cross base image
uses: actions/upload-artifact@v4
with:
name: roborio-${{ matrix.ubuntu-version }}
path: roborio.tar.zst
retention-days: 1
- name: Upload raspbian cross base image
uses: actions/upload-artifact@v4
with:
name: raspbian-${{ matrix.ubuntu-version }}
path: raspbian.tar.zst
retention-days: 1
- run: make DEBIAN=trixie save/minimal-cross
- name: Upload systemcore cross base image
uses: actions/upload-artifact@v4
with:
name: systemcore-${{ matrix.ubuntu-version }}
name: systemcore-trixie
path: systemcore.tar.zst
retention-days: 1

Expand All @@ -128,36 +106,20 @@ jobs:
strategy:
matrix:
type:
- raspbian
- systemcore
pyversion:
- py311
- py312
- py313
- py314
ubuntu-version:
- 22.04
- 24.04
include:
- type: roborio
pyversion: py313
ubuntu-version: 22.04
- type: roborio
pyversion: py314
ubuntu-version: 22.04
- type: systemcore
pyversion: py313
ubuntu-version: 24.04
- type: systemcore
pyversion: py314
ubuntu-version: 24.04
debian-version:
- trixie

steps:
- uses: actions/checkout@v4

- name: Download image
uses: actions/download-artifact@v4
with:
name: ${{ matrix.type }}-${{ matrix.ubuntu-version }}
name: ${{ matrix.type }}-${{ matrix.debian-version }}
path: img

- name: Load image
Expand All @@ -166,13 +128,13 @@ jobs:
rm img/${{ matrix.type }}.tar.zst

- name: Build image
run: make UBUNTU=${{ matrix.ubuntu-version }} build/cross-${{ matrix.type }}-${{ matrix.pyversion }}
run: make DEBIAN=trixie build/cross-${{ matrix.type }}-${{ matrix.pyversion }}
- name: Log in to docker
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
if: ${{ github.repository_owner == 'wpilibsuite' && github.ref == 'refs/heads/main' }}
- name: Upload image
run: make UBUNTU=${{ matrix.ubuntu-version }} push/cross-${{ matrix.type }}-${{ matrix.pyversion }}
run: make DEBIAN=trixie push/cross-${{ matrix.type }}-${{ matrix.pyversion }}
if: ${{ github.repository_owner == 'wpilibsuite' && github.ref == 'refs/heads/main' }}
63 changes: 22 additions & 41 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
UBUNTU?=22.04
OPENSDK_UBUNTU?=20.04
DEBIAN?=bookworm
DEBIAN?=trixie

DS?=trixie

Expand All @@ -13,7 +12,7 @@ usage:
@echo "Run make update, make build, and make push"

update:
docker pull docker.io/ubuntu:${UBUNTU}
docker pull docker.io/debian:${DEBIAN}
docker pull docker.io/ubuntu:${OPENSDK_UBUNTU}

update/arm:
Expand All @@ -26,34 +25,24 @@ build/arm-base:
docker build -t ${DOCKER_USER}/debian-base:arm64-${DEBIAN} -f Dockerfile.${DEBIAN} .

build/base:
cd ubuntu-base && \
docker build -t ${DOCKER_USER}/ubuntu-base:${UBUNTU} -f Dockerfile.${UBUNTU} .
cd debian-base && \
docker build -t ${DOCKER_USER}/debian-base:${DEBIAN} -f Dockerfile.${DEBIAN} .

build/cross: build/base
cd roborio-cross-ubuntu && \
docker build -t ${DOCKER_USER}/roborio-cross-ubuntu:2025-${UBUNTU} -f Dockerfile.2025 --build-arg UBUNTU=${UBUNTU} --build-arg TYPE=base .
cd systemcore-cross-ubuntu && \
docker build -t ${DOCKER_USER}/systemcore-cross-ubuntu:2027-${UBUNTU} -f Dockerfile.2027 --build-arg UBUNTU=${UBUNTU} --build-arg TYPE=base .
cd raspbian-cross-ubuntu && \
docker build -t ${DOCKER_USER}/raspbian-cross-ubuntu:bookworm-${UBUNTU} -f Dockerfile.bookworm-2025 --build-arg UBUNTU=${UBUNTU} --build-arg TYPE=base . && \
docker build -t ${DOCKER_USER}/raspbian-cross-ubuntu:2027-bookworm-${UBUNTU} -f Dockerfile.bookworm-2027 --build-arg UBUNTU=${UBUNTU} --build-arg TYPE=base .
cd aarch64-cross-ubuntu && \
docker build -t ${DOCKER_USER}/aarch64-cross-ubuntu:bookworm-${UBUNTU} -f Dockerfile.bookworm-2025 --build-arg UBUNTU=${UBUNTU} --build-arg TYPE=base . && \
docker build -t ${DOCKER_USER}/aarch64-cross-ubuntu:2027-bookworm-${UBUNTU} -f Dockerfile.bookworm-2027 --build-arg UBUNTU=${UBUNTU} --build-arg TYPE=base .
cd systemcore-cross-debian && \
docker build -t ${DOCKER_USER}/systemcore-cross-debian:${DEBIAN} -f Dockerfile.${DEBIAN} --build-arg DEBIAN=${DEBIAN} --build-arg TYPE=base .
cd aarch64-cross-debian && \
docker build -t ${DOCKER_USER}/aarch64-cross-debian:${DEBIAN} -f Dockerfile.${DEBIAN} --build-arg DEBIAN=${DEBIAN} --build-arg TYPE=base .

build/minimal-base:
cd ubuntu-minimal-base && \
docker build -t ${DOCKER_USER}/ubuntu-minimal-base:${UBUNTU} -f Dockerfile.${UBUNTU} .
cd debian-minimal-base && \
docker build -t ${DOCKER_USER}/debian-minimal-base:${DEBIAN} -f Dockerfile.${DEBIAN} .

build/minimal-cross: build/minimal-base
cd roborio-cross-ubuntu && \
docker build -t ${DOCKER_USER}/roborio-cross-ubuntu-minimal:2025-${UBUNTU} -f Dockerfile.2025 --build-arg UBUNTU=${UBUNTU} --build-arg TYPE=minimal-base .
cd systemcore-cross-ubuntu && \
docker build -t ${DOCKER_USER}/systemcore-cross-ubuntu-minimal:2027-${UBUNTU} -f Dockerfile.2027 --build-arg UBUNTU=${UBUNTU} --build-arg TYPE=minimal-base .
cd raspbian-cross-ubuntu && \
docker build -t ${DOCKER_USER}/raspbian-cross-ubuntu-minimal:bookworm-${UBUNTU} -f Dockerfile.bookworm-2025 --build-arg UBUNTU=${UBUNTU} --build-arg TYPE=minimal-base .
cd aarch64-cross-ubuntu && \
docker build -t ${DOCKER_USER}/aarch64-cross-ubuntu-minimal:bookworm-${UBUNTU} -f Dockerfile.bookworm-2025 --build-arg UBUNTU=${UBUNTU} --build-arg TYPE=minimal-base .
cd systemcore-cross-debian && \
docker build -t ${DOCKER_USER}/systemcore-cross-debian-minimal:${DEBIAN} -f Dockerfile.${DEBIAN} --build-arg DEBIAN=${DEBIAN} --build-arg TYPE=minimal-base .
cd aarch64-cross-debian && \
docker build -t ${DOCKER_USER}/aarch64-cross-debian-minimal:${DEBIAN} -f Dockerfile.${DEBIAN} --build-arg DEBIAN=${DEBIAN} --build-arg TYPE=minimal-base .

build/opensdk:
cd opensdk/ubuntu && \
Expand All @@ -65,36 +54,28 @@ push/arm-base:
docker push ${DOCKER_USER}/debian-base:arm64-${DEBIAN}

push/base:
docker push ${DOCKER_USER}/ubuntu-base:${UBUNTU}
docker push ${DOCKER_USER}/debian-base:${DEBIAN}

push/cross: push/base
docker push ${DOCKER_USER}/roborio-cross-ubuntu:2025-${UBUNTU}
docker push ${DOCKER_USER}/systemcore-cross-ubuntu:2027-${UBUNTU}
docker push ${DOCKER_USER}/raspbian-cross-ubuntu:bookworm-${UBUNTU}
docker push ${DOCKER_USER}/aarch64-cross-ubuntu:bookworm-${UBUNTU}
docker push ${DOCKER_USER}/raspbian-cross-ubuntu:2027-bookworm-${UBUNTU}
docker push ${DOCKER_USER}/aarch64-cross-ubuntu:2027-bookworm-${UBUNTU}
docker push ${DOCKER_USER}/systemcore-cross-debian:${DEBIAN}
docker push ${DOCKER_USER}/aarch64-cross-debian:${DEBIAN}

push/minimal-base:
docker push ${DOCKER_USER}/ubuntu-minimal-base:${UBUNTU}
docker push ${DOCKER_USER}/debian-minimal-base:${DEBIAN}

push/minimal-cross: push/minimal-base
docker push ${DOCKER_USER}/roborio-cross-ubuntu-minimal:2025-${UBUNTU}
docker push ${DOCKER_USER}/systemcore-cross-ubuntu-minimal:2027-${UBUNTU}
docker push ${DOCKER_USER}/raspbian-cross-ubuntu-minimal:bookworm-${UBUNTU}
docker push ${DOCKER_USER}/aarch64-cross-ubuntu-minimal:bookworm-${UBUNTU}
docker push ${DOCKER_USER}/systemcore-cross-debian-minimal:${DEBIAN}
docker push ${DOCKER_USER}/aarch64-cross-debian-minimal:${DEBIAN}

push/opensdk:
docker push ${DOCKER_USER}/opensdk-ubuntu:${OPENSDK_UBUNTU}


.PHONY: save/minimal-cross
save/minimal-cross:
docker save ${DOCKER_USER}/roborio-cross-ubuntu-minimal:2025-${UBUNTU} | zstd > roborio.tar.zst
docker save ${DOCKER_USER}/systemcore-cross-ubuntu-minimal:2027-${UBUNTU} | zstd > systemcore.tar.zst
docker save ${DOCKER_USER}/raspbian-cross-ubuntu-minimal:bookworm-${UBUNTU} | zstd > raspbian.tar.zst
docker save ${DOCKER_USER}/systemcore-cross-debian-minimal:${DEBIAN} | zstd > systemcore.tar.zst

include cross-ubuntu-py/py.mk
include cross-debian-py/py.mk

update/ds:
docker pull docker.io/debian:${DS}
Expand Down
67 changes: 31 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,47 +3,42 @@ Docker images for building WPILib

These are the dockerfiles for the wpilib dockerhub repositories.

ubuntu-base
- Based on official ubuntu repo (host)
debian-base
- Based on official debian repo (host)
- Contains Java and C++ native tools required for WPILib development
- Base image for cross-compiler images
- Published as wpilib/ubuntu-base:host ubuntu version (e.g. 18.04)
- Published as wpilib/debian-base:host debian codename (e.g. trixie)

ubuntu-minimal-base
- Based on official ubuntu repo (host)
debian-minimal-base
- Based on official debian repo (host)
- Base image for minimal cross-compiler images that only contain cross compiler
- Published as wpilib/ubuntu-minimal-base:host ubuntu version (e.g. 18.04)

roborio-cross-ubuntu
- Based on wpilib/ubuntu-base
- Cross-compiler for roboRIO
- Published as wpilib/roborio-cross-ubuntu:frc season-host ubuntu version
(e.g. 2020-18.04)
- Minimal variant published as roborio-cross-ubuntu-minimal

systemcore-cross-ubuntu
- Based on wpilib/ubuntu-base
- Cross-compiler for systemcore (Bookworm for now)
- Published as wpilib/systemcore-cross-ubuntu:frc season-host ubuntu version
(e.g. 2020-18.04)
- Minimal variant published as systemcore-cross-ubuntu-minimal

raspbian-cross-ubuntu
- Based on wpilib/ubuntu-base
- Cross-compiler for Raspbian
- Published as wpilib/raspbian-cross-ubuntu:target version-host ubuntu version
(e.g. 10-18.04)
- Minimal variant published as raspbian-cross-ubuntu-minimal

aarch64-cross-ubuntu
- Based on wpilib/ubuntu-base
- Published as wpilib/debian-minimal-base:host debian codename (e.g. trixie)

driverstation-base
- Based on official debian repo (host)
- Base image for building the Driver Station application
- Published as wpilib/driverstation-base:arch (e.g. x64 or arm64)

opensdk-ubuntu
- Based on official ubuntu repo (host)
- Base image for building opensdk toolchains
- Published as wpilib/opensdk-ubuntu:host ubuntu version (e.g. 24.04)

systemcore-cross-debian
- Based on wpilib/debian-base
- Cross-compiler for systemcore (Trixie for now)
- Published as wpilib/systemcore-cross-debian:host debian codename
(e.g. trixie)
- Minimal variant published as wpilib/systemcore-cross-debian-minimal

aarch64-cross-debian
- Based on wpilib/debian-base
- Cross-compiler for aarch64 (TX2 and Nano)
- Published as wpilib/aarch-cross-ubuntu:target version-host ubuntu version
(e.g. bionic-18.04)
- Minimal variant published as raspbian-cross-ubuntu-aarch64
- Published as wpilib/aarch-cross-debian:host debian codename
(e.g. trixie)
- Minimal variant published as wpilib/aarch64-cross-debian-minimal

roborio-cross-ubuntu-pyXXX
raspbian-cross-ubuntu-pyXXX
systemcore-cross-debian-pyXXX
- Based on the minimal cross compiler image
- Contains crossenv at /build/venv for cross-compiling python wheels
- Published as wpilib/{type}-cross-ubuntu:{version}-{ubuntu}-py{pyversion}
- Published as wpilib/systemcore-cross-debian:{debian}-py{pyversion}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
ARG UBUNTU=22.04
ARG DEBIAN=trixie
ARG TYPE=base
FROM wpilib/ubuntu-${TYPE}:${UBUNTU}
FROM wpilib/debian-${TYPE}:${DEBIAN}

# Install toolchain
RUN curl -SL https://github.com/wpilibsuite/opensdk/releases/download/v2025-1/arm64-bookworm-2025-x86_64-linux-gnu-Toolchain-12.2.0.tgz | sh -c 'mkdir -p /usr/local && cd /usr/local && tar xzf - --strip-components=2'
RUN curl -SL https://github.com/wpilibsuite/opensdk/releases/download/v2025-2/arm64-bookworm-2025-x86_64-linux-gnu-Toolchain-12.2.0.tgz | sh -c 'mkdir -p /usr/local && cd /usr/local && tar xzf - --strip-components=2'

WORKDIR /
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@

ARG UBUNTU=invalid-ubuntu
ARG DEBIAN=invalid-debian
ARG ARCH=invalid-arch
ARG VERSION=invalid-version

FROM wpilib/${ARCH}-cross-ubuntu-minimal:${VERSION}-${UBUNTU} AS pycompile
FROM wpilib/${ARCH}-cross-debian-minimal:${DEBIAN} AS pycompile

ARG TARGET_HOST=invalid-target-host
ARG AC_TARGET_HOST=invalid-ac-target-host
Expand All @@ -29,7 +29,7 @@ ENV PREFIX="$INSTALL_DIRECTORY"
RUN set -xe; \
apt-get update; \
apt-get install -y build-essential checkinstall g++ libreadline-dev libncurses-dev libssl-dev \
libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev liblzma-dev lzma-dev libffi-dev zlib1g-dev; \
libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev liblzma-dev libffi-dev zlib1g-dev; \
# cleanup
rm -rf /var/lib/apt/lists/*

Expand All @@ -54,7 +54,7 @@ RUN set -xe; \
RUN set -xe; \
# Remove build dependencies -- compilation uses host for some reason
apt-get remove -y libreadline-dev libncursesw5-dev libssl-dev \
libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev liblzma-dev lzma-dev libffi-dev zlib1g-dev; \
libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev liblzma-dev libffi-dev zlib1g-dev; \
apt-get autoremove -y;

RUN set -xe; \
Expand All @@ -81,7 +81,7 @@ RUN set -xe; \
# Minimal cross-compilation environment
#

FROM wpilib/${ARCH}-cross-ubuntu-minimal:${VERSION}-${UBUNTU} AS crossenv
FROM wpilib/${ARCH}-cross-debian-minimal:${DEBIAN} AS crossenv

RUN set -xe; \
apt-get update; \
Expand Down
Loading
Loading