feat: Look for recipes in ./recipes/, build files in ./files/, and Containerfiles in ./containerfiles/ (#157)
Recipe files can now be put into their own directory `./recipes/`. This directory is NEVER copied into the build so changes to a recipe will no longer cause cache misses for builds. Here is an example of my build changing the second to last module and only requiring the last 2 `RUN` layers to be run again. ``` => CACHED [stage-config 1/1] COPY ./config /config 0.0s => CACHED [stage-modules 1/2] COPY --from=ghcr.io/blue-build/modules:latest /modules /modules 0.0s => CACHED [stage-modules 2/2] COPY ./modules /modules 0.0s => CACHED [stage-keys 1/1] COPY cosign.pub /keys/jp-desktop-gaming.pub 0.0s => CACHED [stage-4 2/16] RUN --mount=type=bind,from=stage-keys,src=/keys,dst=/tmp/keys mkdir -p /usr/etc/pki/containers/ && cp /tmp/keys/* /usr/et 0.0s => CACHED [stage-bins 1/3] COPY --from=gcr.io/projectsigstore/cosign /ko-app/cosign /bins/cosign 0.0s => CACHED [stage-bins 2/3] COPY --from=docker.io/mikefarah/yq /usr/bin/yq /bins/yq 0.0s => CACHED [stage-bins 3/3] COPY --from=ghcr.io/blue-build/cli:main-installer /out/bluebuild /bins/bluebuild 0.0s => CACHED [stage-4 3/16] RUN --mount=type=bind,from=stage-bins,src=/bins,dst=/tmp/bins mkdir -p /usr/bin/ && cp /tmp/bins/* /usr/bin/ && ostree 0.0s => CACHED [stage-4 4/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind 0.0s => CACHED [stage-4 5/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind 0.0s => CACHED [stage-4 6/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind 0.0s => CACHED [stage-4 7/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind 0.0s => CACHED [stage-4 8/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind 0.0s => CACHED [stage-4 9/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind 0.0s => CACHED [stage-4 10/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind 0.0s => CACHED [stage-4 11/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind 0.0s => CACHED [stage-4 12/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind 0.0s => CACHED [stage-4 13/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind 0.0s => CACHED [stage-4 14/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind 0.0s => [stage-4 15/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind,from= 33.4s => [stage-4 16/16] RUN --mount=type=tmpfs,target=/var --mount=type=bind,from=stage-config,src=/config,dst=/tmp/config,rw --mount=type=bind,from=s 0.7s ``` Support was also added to put all build files into `./files/` instead of `./config/`. This is an all or nothing operation, meaning if there exists a directory of `files` then the `config` directory will be completely ignored. Work will have to be done in https://github.com/blue-build/modules to allow users to put their files directly in `./files/` and not `./files/files` for the `files` module or `./files/scripts` for the scripts module. Support was also added to move the `./config/containerfiles/` directory to the root of the project. Now the directories you can find in the root of projects are: ``` files/ containerfiles/ recipes/ ```
This commit is contained in:
parent
e66e880857
commit
f8b7334662
28 changed files with 217 additions and 70 deletions
|
|
@ -4,6 +4,7 @@ PROJECT blue-build/cli
|
|||
all:
|
||||
BUILD +test-image
|
||||
BUILD +test-secureblue
|
||||
BUILD +test-legacy-image
|
||||
BUILD +build
|
||||
BUILD +rebase
|
||||
BUILD +upgrade
|
||||
|
|
@ -15,6 +16,13 @@ test-image:
|
|||
|
||||
DO +RUN_TESTS
|
||||
|
||||
test-legacy-image:
|
||||
FROM +build-template --src=template-legacy-containerfile
|
||||
WORKDIR /tmp/test
|
||||
COPY ./test-scripts/*.sh ./
|
||||
|
||||
DO +RUN_TESTS
|
||||
|
||||
test-secureblue:
|
||||
FROM +build-template --src=template-secureblue
|
||||
WORKDIR /tmp/test
|
||||
|
|
@ -30,6 +38,12 @@ build-template:
|
|||
|
||||
template-containerfile:
|
||||
FROM +test-base
|
||||
RUN bluebuild -vv template recipes/recipe.yml | tee Containerfile
|
||||
|
||||
SAVE ARTIFACT /test
|
||||
|
||||
template-legacy-containerfile:
|
||||
FROM +legacy-base
|
||||
RUN bluebuild -vv template config/recipe.yml | tee Containerfile
|
||||
|
||||
SAVE ARTIFACT /test
|
||||
|
|
@ -43,18 +57,18 @@ template-secureblue:
|
|||
build:
|
||||
FROM +test-base
|
||||
|
||||
RUN --privileged bluebuild -vv build config/recipe.yml
|
||||
RUN bluebuild -vv build recipes/recipe.yml
|
||||
|
||||
rebase:
|
||||
FROM +test-base
|
||||
|
||||
RUN --privileged bluebuild -vv rebase config/recipe.yml
|
||||
RUN bluebuild -vv rebase recipes/recipe.yml
|
||||
|
||||
upgrade:
|
||||
FROM +test-base
|
||||
RUN mkdir -p /etc/bluebuild && touch /etc/bluebuild/cli_test.tar.gz
|
||||
|
||||
RUN --privileged bluebuild -vv upgrade config/recipe.yml
|
||||
RUN bluebuild -vv upgrade recipes/recipe.yml
|
||||
|
||||
secureblue-base:
|
||||
FROM +test-base
|
||||
|
|
@ -64,8 +78,17 @@ secureblue-base:
|
|||
|
||||
DO +GEN_KEYPAIR
|
||||
|
||||
legacy-base:
|
||||
FROM +test-base
|
||||
|
||||
RUN rm -fr /test
|
||||
COPY ./legacy-test-repo /test
|
||||
|
||||
DO +GEN_KEYPAIR
|
||||
|
||||
test-base:
|
||||
FROM ../+blue-build-cli-alpine
|
||||
ENV CLICOLOR_FORCE=1
|
||||
|
||||
COPY ./mock-scripts/ /usr/bin/
|
||||
|
||||
|
|
|
|||
1
integration-tests/legacy-test-repo/.gitignore
vendored
Normal file
1
integration-tests/legacy-test-repo/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
/Containerfile
|
||||
|
|
@ -0,0 +1 @@
|
|||
LABEL org.test.label="this is a test"
|
||||
44
integration-tests/legacy-test-repo/config/recipe.yml
Normal file
44
integration-tests/legacy-test-repo/config/recipe.yml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
name: cli/test-legacy
|
||||
description: This is my personal OS image.
|
||||
base-image: ghcr.io/ublue-os/silverblue-surface
|
||||
image-version: 39
|
||||
modules:
|
||||
- from-file: akmods.yml
|
||||
|
||||
- type: files
|
||||
files:
|
||||
- usr: /usr
|
||||
|
||||
- type: script
|
||||
scripts:
|
||||
- example.sh
|
||||
|
||||
- type: rpm-ostree
|
||||
repos:
|
||||
- https://copr.fedorainfracloud.org/coprs/atim/starship/repo/fedora-%OS_VERSION%/atim-starship-fedora-%OS_VERSION%.repo
|
||||
install:
|
||||
- micro
|
||||
- starship
|
||||
remove:
|
||||
- firefox
|
||||
- firefox-langpacks
|
||||
|
||||
- type: default-flatpaks
|
||||
notify: true
|
||||
system:
|
||||
install:
|
||||
- org.mozilla.firefox
|
||||
- org.gnome.Loupe
|
||||
- one.ablaze.floorp//lightning
|
||||
remove:
|
||||
- org.gnome.eog
|
||||
|
||||
- type: signing
|
||||
|
||||
- type: test-module
|
||||
|
||||
- type: containerfile
|
||||
containerfiles:
|
||||
- labels
|
||||
snippets:
|
||||
- RUN echo "This is a snippet" && ostree container commit
|
||||
4
integration-tests/legacy-test-repo/cosign.pub
Normal file
4
integration-tests/legacy-test-repo/cosign.pub
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
-----BEGIN PUBLIC KEY-----
|
||||
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgJYNEq43hrKPwWgWah14yBOUjMCd
|
||||
1eG8hOwIbOTSRq+siTLep8G2m5FSYit/ea+H+0IXZS0ruLdgzoPUI7Babw==
|
||||
-----END PUBLIC KEY-----
|
||||
0
integration-tests/legacy-test-repo/modules/.gitkeep
Normal file
0
integration-tests/legacy-test-repo/modules/.gitkeep
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
echo "This is a test module"
|
||||
|
|
@ -0,0 +1 @@
|
|||
LABEL org.test.label="this is a test"
|
||||
0
integration-tests/test-repo/files/files/usr/.gitkeep
Normal file
0
integration-tests/test-repo/files/files/usr/.gitkeep
Normal file
1
integration-tests/test-repo/files/files/usr/test-file
Normal file
1
integration-tests/test-repo/files/files/usr/test-file
Normal file
|
|
@ -0,0 +1 @@
|
|||
|
||||
10
integration-tests/test-repo/files/scripts/example.sh
Normal file
10
integration-tests/test-repo/files/scripts/example.sh
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Tell this script to exit if there are any errors.
|
||||
# You should have this in every custom script, to ensure that your completed
|
||||
# builds actually ran successfully without any errors!
|
||||
set -oue pipefail
|
||||
|
||||
# Your code goes here.
|
||||
echo 'This is an example shell script'
|
||||
echo 'Scripts here will run during build if specified in recipe.yml'
|
||||
22
integration-tests/test-repo/recipes/akmods.yml
Normal file
22
integration-tests/test-repo/recipes/akmods.yml
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# TODO: Add back installs after upstream issues are fixed
|
||||
|
||||
modules:
|
||||
# Tests installing rpms from a combo image stage
|
||||
- type: akmods
|
||||
base: surface
|
||||
nvidia-version: 545
|
||||
# install:
|
||||
# - nvidia
|
||||
# - openrazer
|
||||
# - openrgb
|
||||
|
||||
# Tests pulling main image
|
||||
- type: akmods
|
||||
|
||||
# Tests pulling image for main nvidia
|
||||
- type: akmods
|
||||
nvidia-version: 545
|
||||
|
||||
# Test pulling image for base asus
|
||||
- type: akmods
|
||||
base: asus
|
||||
|
|
@ -37,3 +37,8 @@ modules:
|
|||
|
||||
- type: test-module
|
||||
|
||||
- type: containerfile
|
||||
containerfiles:
|
||||
- labels
|
||||
snippets:
|
||||
- RUN echo "This is a snippet" && ostree container commit
|
||||
Loading…
Add table
Add a link
Reference in a new issue