Skip to content

Commit dd5d488

Browse files
committed
Add rm-docker-linux package that pre-builds linux
Optimizes the builds by not re-building the kernel if not needed.
1 parent 2ad110e commit dd5d488

2 files changed

Lines changed: 46 additions & 4 deletions

File tree

.github/workflows/docker-image.yml

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ name: Docker Image CI
22

33
on:
44
push:
5-
branches: [ "main", "dev" ]
65
pull_request:
76
branches: [ "main" ]
87

@@ -11,8 +10,40 @@ env:
1110
IMAGE_NAME: ${{ github.repository }}
1211

1312
jobs:
13+
build-linux:
14+
runs-on: ubuntu-latest
15+
permissions:
16+
contents: read
17+
packages: write
18+
steps:
19+
- name: Set up Docker Buildx
20+
uses: docker/setup-buildx-action@v3
21+
22+
- name: Login to GitHub Container Registry
23+
uses: docker/login-action@v3
24+
with:
25+
registry: ${{ env.REGISTRY }}
26+
username: ${{ github.actor }}
27+
password: ${{ secrets.GITHUB_TOKEN }}
28+
29+
- name: Docker meta
30+
id: meta
31+
uses: docker/metadata-action@v5
32+
with:
33+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-linux
34+
35+
- name: Build
36+
uses: docker/build-push-action@v5
37+
with:
38+
push: ${{ github.event_name != 'pull_request' && github.ref_name == 'main' }}
39+
tags: ${{ steps.meta.outputs.tags }}
40+
target: linux-build
41+
cache-from: type=gha
42+
cache-to: type=gha,mode=max
43+
1444
build:
1545
runs-on: ubuntu-latest
46+
needs: [build-linux]
1647
permissions:
1748
contents: read
1849
packages: write

Dockerfile

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@ ARG rm2_stuff_tag=v0.1.2
44
ARG fw_version=3.5.2.1807
55
ARG linux_release=5.8.18
66

7+
# By default use a cached linux kernel. To build locally pass:
8+
# --build-arg linux_image=linux-build
9+
ARG linux_image=ghcr.io/timower/rm-docker-linux:linux-image
10+
711
# Step 1: Build Linux for the emulator
8-
FROM $toltec_image as linux-build
12+
FROM $toltec_image as linux-builder
913

1014
RUN apt-get update && \
1115
apt-get install -y bison bc lzop libssl-dev flex
@@ -33,6 +37,13 @@ RUN make O=imx7 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j $(nproc) && \
3337
cp imx7/arch/arm/boot/dts/imx7d-rm.dtb /opt && \
3438
rm -rf imx7
3539

40+
# This container just needs to kernel and device tree
41+
FROM scratch AS linux-build
42+
COPY --from=linux-builder /opt/zImage /opt/imx7d-rm.dtb /
43+
44+
# Dummy stage to use in the arg below
45+
FROM $linux_image AS linux-image
46+
3647
# Step 2: rootfs
3748
FROM linuxkit/guestfs:f85d370f7a3b0749063213c2dd451020e3a631ab AS rootfs
3849

@@ -69,8 +80,8 @@ RUN apt-get update && \
6980

7081
RUN mkdir -p /opt/root
7182

72-
COPY --from=linux-build /opt/zImage /opt
73-
COPY --from=linux-build /opt/imx7d-rm.dtb /opt
83+
COPY --from=linux-image /zImage /opt
84+
COPY --from=linux-image /imx7d-rm.dtb /opt
7485
COPY --from=rootfs /opt/rootfs.qcow2 /opt/root
7586

7687
ADD bin /opt/bin

0 commit comments

Comments
 (0)