Skip to content
Merged
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
104 changes: 34 additions & 70 deletions .github/workflows/registry.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,82 +3,46 @@ name: Docker Build & Push Action
on:
workflow_dispatch:
push:
branches:
- main
branches:
- main

jobs:
build-rtems-6:

name: Build and Push qemu-rtems-6
jobs:
build-and-push:
name: Build and Push Docker Images
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Build and Push
uses: mr-smithers-excellent/docker-build-push@v5
with:
image: qemu-rtems-6
dockerfile: rtems-6/Dockerfile
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
tags: latest

build-rtems-5:

name: Build and Push qemu-rtems-5
runs-on: ubuntu-latest

steps:
steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Build and Push
uses: mr-smithers-excellent/docker-build-push@v5
uses: actions/checkout@v4

- name: Verify repo structure
run: |
echo "=== Repo root ==="
ls -la
echo "=== Dockerfile locations ==="
find . -name "Dockerfile" | sort
echo "=== docker-executor contents ==="
ls -la docker-executor/

- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
image: qemu-rtems-5
dockerfile: rtems-5/Dockerfile
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
tags: latest

build-rtems-4-11:

name: Build and Push qemu-rtems-4-11
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Build and Push
uses: mr-smithers-excellent/docker-build-push@v5
with:
image: qemu-rtems-4-11
dockerfile: rtems-4.11/Dockerfile
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
tags: latest

mcdc:

name: Build and Push mcdc
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Build and Push
uses: mr-smithers-excellent/docker-build-push@v5
with:
image: mcdc
dockerfile: mcdc/Dockerfile
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
tags: latest
- name: Build All Images
run: |
make \
TGT_REPO=ghcr.io/${{ github.repository_owner }} \
REPO_TAG=latest \
LOCAL_TAG=ci \
all

- name: Push All Images
run: |
make \
TGT_REPO=ghcr.io/${{ github.repository_owner }} \
REPO_TAG=latest \
LOCAL_TAG=ci \
push
148 changes: 148 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
# Example makefile for building all the images locally
# This is useful when debugging, so as to not REQUIRE the use of CI/CD to build

LOCAL_TAG ?= test
TGT_REPO ?= ghcr.io/core-flight-system/containers
REPO_TAG ?= latest

# The option --no-cache can be specified on command line if desired
EXTRA_BUILDARGS += --progress=plain

BASIC_IMAGE_SET += docker-executor
BASIC_IMAGE_SET += cfsexec-qemu
# BASIC_IMAGE_SET += yocto-sdk
BASIC_IMAGE_SET += gaisler-sparc-rcc-sdk
BASIC_IMAGE_SET += arm-linux-sdk
ALL_IMAGE_SET += $(BASIC_IMAGE_SET)

BUILDENV_IMAGE_SET += cfsbuildenv-doxygen
BUILDENV_IMAGE_SET += cfsbuildenv-mcdc
BUILDENV_IMAGE_SET += cfsbuildenv-linux
BUILDENV_IMAGE_SET += cfsbuildenv-rtems5
BUILDENV_IMAGE_SET += cfsbuildenv-rtems6
BUILDENV_IMAGE_SET += cfsbuildenv-el9
BUILDENV_IMAGE_SET += cfsbuildenv-el8
# BUILDENV_IMAGE_SET += cfsbuildenv-yocto
BUILDENV_IMAGE_SET += cfsbuildenv-arm-linux
BUILDENV_IMAGE_SET += cfsbuildenv-gaisler-sparc-rcc
ALL_IMAGE_SET += $(BUILDENV_IMAGE_SET)

# The rest of the images each need a custom rule with custom deps
ALL_IMAGE_SET += rtems5-tools
ALL_IMAGE_SET += rtems6-tools
ALL_IMAGE_SET += rtems5-rtos
ALL_IMAGE_SET += rtems6-rtos

BASIC_IMAGE_TARGETS := $(addsuffix .image,$(BASIC_IMAGE_SET))
BUILDENV_IMAGE_TARGETS := $(addsuffix .image,$(BUILDENV_IMAGE_SET))
ALL_IMAGE_TARGETS := $(addsuffix .image,$(ALL_IMAGE_SET))
ALL_PUSH_TARGETS := $(addsuffix .push,$(ALL_IMAGE_SET))
ALL_PULL_TARGETS := $(addsuffix .pull,$(ALL_IMAGE_SET))

$(ALL_IMAGE_TARGETS) $(ALL_PUSH_TARGETS) $(ALL_PULL_TARGETS): IMAGE_NAME = $(basename $(@))

#$(BUILDENV_IMAGE_TARGETS): $(BASIC_IMAGE_TARGETS)

$(BASIC_IMAGE_TARGETS):
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) -f $(subst rtems5-,rtems-,$(subst rtems6-,rtems-,$(IMAGE_NAME)))/Dockerfile .

# RTEMS 5 Tools
rtems5-tools.image:
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \
--build-arg RTEMS_VER=5 \
-f rtems-tools/Dockerfile .

# RTEMS 6 Tools
rtems6-tools.image:
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \
--build-arg RTEMS_VER=6 \
-f rtems-tools/Dockerfile .

# RTEMS 5 RTOS
rtems5-rtos.image: rtems5-tools.image
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \
--build-arg TOOLS_IMAGE=rtems5-tools:$(LOCAL_TAG) \
--build-arg RTEMS_VER=5 \
-f rtems-rtos/Dockerfile .

# RTEMS 6 RTOS
rtems6-rtos.image: rtems6-tools.image
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \
--build-arg TOOLS_IMAGE=rtems6-tools:$(LOCAL_TAG) \
--build-arg RTEMS_VER=6 \
-f rtems-rtos/Dockerfile .

# cFS Build Environment - RTEMS 5
cfsbuildenv-rtems5.image: rtems5-rtos.image
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \
--build-arg RTEMS_RTOS_IMAGE=rtems5-rtos:$(LOCAL_TAG) \
-f cfsbuildenv-rtems/Dockerfile .

# cFS Build Environment - RTEMS 6
cfsbuildenv-rtems6.image: rtems6-rtos.image
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \
--build-arg RTEMS_RTOS_IMAGE=rtems6-rtos:$(LOCAL_TAG) \
-f cfsbuildenv-rtems/Dockerfile .

cfsbuildenv-doxygen.image:
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) -f cfsbuildenv-doxygen/Dockerfile .

cfsbuildenv-mcdc.image:
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) -f cfsbuildenv-mcdc/Dockerfile .

cfsbuildenv-linux.image cfsbuildenv-ubuntu22.image:
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) -f cfsbuildenv-dpkg/Dockerfile .

cfsbuildenv-el8.image cfsbuildenv-el9.image:
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) -f cfsbuildenv-rpm/Dockerfile .

cfsbuildenv-yocto.image:
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \
--build-arg YOCTO_SDK_IMAGE=yocto-sdk:$(LOCAL_TAG) \
-f cfsbuildenv-yocto/Dockerfile .

cfsbuildenv-arm-linux.image: arm-linux-sdk.image cfsbuildenv-linux.image
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \
--build-arg BASE_IMAGE=cfsbuildenv-linux:$(LOCAL_TAG) \
--build-arg SDK_IMAGE=arm-linux-sdk:$(LOCAL_TAG) \
-f cfsbuildenv-arm-linux/Dockerfile .

cfsbuildenv-gaisler-sparc-rcc.image: gaisler-sparc-rcc-sdk.image cfsbuildenv-linux.image
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \
--build-arg BASE_IMAGE=cfsbuildenv-linux:$(LOCAL_TAG) \
--build-arg SDK_IMAGE=gaisler-sparc-rcc-sdk:$(LOCAL_TAG) \
-f cfsbuildenv-gaisler-sparc-rcc/Dockerfile .

cfsexec-linux.image cfsexec-ubuntu22.image:
docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) -f cfsexec-dpkg/Dockerfile .

$(ALL_PUSH_TARGETS):
docker tag $(IMAGE_NAME):$(LOCAL_TAG) $(TGT_REPO)/$(IMAGE_NAME):$(REPO_TAG)
docker push $(TGT_REPO)/$(IMAGE_NAME):$(REPO_TAG)

$(ALL_PULL_TARGETS):
docker pull $(TGT_REPO)/$(IMAGE_NAME):$(REPO_TAG)

push: $(ALL_PUSH_TARGETS)
pull: $(ALL_PULL_TARGETS)
all: $(ALL_IMAGE_TARGETS)

BASE_IMAGE_TGTS += arm-linux-sdk.image
BASE_IMAGE_TGTS += cfsbuildenv-doxygen.image
BASE_IMAGE_TGTS += docker-executor.image
BASE_IMAGE_TGTS += gaisler-sparc-rcc-sdk.image
BASE_IMAGE_TGTS += rtems5-rtos.image
BASE_IMAGE_TGTS += rtems5-tools.image
BASE_IMAGE_TGTS += rtems6-rtos.image
BASE_IMAGE_TGTS += rtems6-tools.image
BASE_IMAGE_TGTS += cfsbuildenv-rtems5.image
BASE_IMAGE_TGTS += cfsbuildenv-rtems6.image
BASE_IMAGE_TGTS += cfsbuildenv-linux.image
BASE_IMAGE_TGTS += cfsexec-linux.image

$(BASE_IMAGE_TGTS): EXTRA_BUILDARGS += --build-arg BASE_IMAGE=debian:bookworm

cfsbuildenv-el8.image: EXTRA_BUILDARGS += --build-arg BASE_IMAGE=rockylinux:8
cfsbuildenv-el9.image: EXTRA_BUILDARGS += --build-arg BASE_IMAGE=rockylinux:9

cfsbuildenv-ubuntu22.image cfsexec-ubuntu22.image: EXTRA_BUILDARGS += --build-arg BASE_IMAGE=ubuntu:jammy
19 changes: 19 additions & 0 deletions arm-linux-sdk/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#########################################################
# Build the ARM SDK image - contains the reference toolchain from the ARM developer website
#########################################################

ARG BASE_IMAGE=debian:latest
FROM ${BASE_IMAGE} AS arm-linux-sdk

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
tar xz-utils curl ca-certificates \
${EXTRA_PKGS} && \
rm -rf /var/cache/apt

# Fetch SDK binary packages
RUN curl -fsL -o /root/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz 'https://developer.arm.com/-/media/Files/downloads/gnu/11.3.rel1/binrel/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz?rev=65520e9cdf324eca9c02f5302c904fa4&hash=0A1256D118EB7077B4BAA5B2A44FFB72'

# Install SDK
RUN mkdir -p /opt && \
tar Jxf /root/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz -C /opt && \
chown -R root:root /opt/
13 changes: 13 additions & 0 deletions cfsbuildenv-arm-linux/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#########################################################
# This adds all the needed packages to build CFS
# for an embedded Linux target using Yocto
#########################################################

ARG SDK_IMAGE=arm-linux-sdk:test
ARG BASE_IMAGE=cfsbuildenv-linux:test

FROM ${SDK_IMAGE} AS arm-linux-sdk
FROM ${BASE_IMAGE} AS cfsbuildenv-arm-linux

# Bring the SDK entirely from the sdk image,
COPY --from=arm-linux-sdk /opt /opt
15 changes: 15 additions & 0 deletions cfsbuildenv-doxygen/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#########################################################
# This adds all the needed packages to build CFS
# documentation and guides using Doxygen
#########################################################

ARG BASE_IMAGE=debian:latest
FROM ${BASE_IMAGE} AS cfsbuildenv-doxygen

ARG EXTRA_PKGS=""

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
sudo build-essential git cmake curl lsb-release software-properties-common rsync jq \
doxygen graphviz texlive texlive-plain-generic texlive-fonts-extra texlive-latex-extra \
${EXTRA_PKGS} && \
rm -rf /var/cache/apt
13 changes: 13 additions & 0 deletions cfsbuildenv-doxygen/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# cfsbuildenv-ubuntu22 container

This container is intended to host containerized jobs in workflows

It is not started or built directly from this docker compose because
it would only be started via workflow jobs when needed.

It must be built separately using `docker build`, for example:

```
docker build -t cfsbuildenv-ubuntu22:latest .
```

20 changes: 20 additions & 0 deletions cfsbuildenv-dpkg/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#########################################################
# This adds all the needed packages to build CFS
# in the native configurations
#
# This variant of the container may be built on a Debian-style base
# that uses dpkg and apt as the package management system
#########################################################

ARG BASE_IMAGE=debian:latest
FROM ${BASE_IMAGE} AS cfsbuildenv-dpkg

ARG EXTRA_PKGS=""

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
sudo ca-certificates curl lsb-release software-properties-common \
build-essential gcc g++ gawk cmake lcov xsltproc rsync jq \
python3 python3-venv python3-dev python3-pip openssh-client \
libexpat-dev liblua5.3-dev libjson-c-dev xz-utils cppcheck clang-format-19 wget git \
${EXTRA_PKGS} && \
rm -rf /var/cache/apt
13 changes: 13 additions & 0 deletions cfsbuildenv-gaisler-sparc-rcc/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#########################################################
# This adds all the needed packages to build CFS
# for an embedded Linux target using Yocto
#########################################################

ARG SDK_IMAGE=gaisler-sparc-rcc:test
ARG BASE_IMAGE=cfsbuildenv-linux:test

FROM ${SDK_IMAGE} AS gaisler-sparc-rcc-sdk
FROM ${BASE_IMAGE} AS cfsbuildenv-gaisler-sparc-rcc

# Bring the SDK entirely from the sdk image,
COPY --from=gaisler-sparc-rcc-sdk /opt /opt
17 changes: 17 additions & 0 deletions cfsbuildenv-mcdc/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#########################################################
# Image capable of building CFS and providing MC/DC coverage analysis
# This requires use of a very recent GCC version
#########################################################

ARG BASE_IMAGE=docker.io/gcc:14
FROM ${BASE_IMAGE} AS gcc14-build

ARG EXTRA_PKGS=""

# Install the basic CFS build environment
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
sudo curl lsb-release apt-transport-https \
git gawk cmake lcov xsltproc rsync jq \
python3 python3-venv python3-dev libexpat-dev liblua5.3-dev libjson-c-dev \
${EXTRA_PKGS} && \
rm -rf /var/cache/apt
Loading