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/ ```
114 lines
2 KiB
Text
114 lines
2 KiB
Text
VERSION 0.8
|
|
PROJECT blue-build/cli
|
|
|
|
all:
|
|
BUILD +test-image
|
|
BUILD +test-secureblue
|
|
BUILD +test-legacy-image
|
|
BUILD +build
|
|
BUILD +rebase
|
|
BUILD +upgrade
|
|
|
|
test-image:
|
|
FROM +build-template --src=template-containerfile
|
|
WORKDIR /tmp/test
|
|
COPY ./test-scripts/*.sh ./
|
|
|
|
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
|
|
COPY ./test-scripts/secureblue/*.sh ./
|
|
|
|
DO +RUN_TESTS
|
|
|
|
build-template:
|
|
ARG --required src
|
|
FROM DOCKERFILE \
|
|
-f +$src/test/Containerfile \
|
|
+$src/test/*
|
|
|
|
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
|
|
|
|
template-secureblue:
|
|
FROM +secureblue-base
|
|
RUN bluebuild -vv template -o Containerfile config/recipes/general/recipe-silverblue-nvidia.yml
|
|
|
|
SAVE ARTIFACT /test
|
|
|
|
build:
|
|
FROM +test-base
|
|
|
|
RUN bluebuild -vv build recipes/recipe.yml
|
|
|
|
rebase:
|
|
FROM +test-base
|
|
|
|
RUN bluebuild -vv rebase recipes/recipe.yml
|
|
|
|
upgrade:
|
|
FROM +test-base
|
|
RUN mkdir -p /etc/bluebuild && touch /etc/bluebuild/cli_test.tar.gz
|
|
|
|
RUN bluebuild -vv upgrade recipes/recipe.yml
|
|
|
|
secureblue-base:
|
|
FROM +test-base
|
|
|
|
RUN rm -fr /test
|
|
GIT CLONE https://github.com/secureblue/secureblue.git /test
|
|
|
|
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/
|
|
|
|
WORKDIR /test
|
|
COPY ./test-repo /test
|
|
|
|
DO +GEN_KEYPAIR
|
|
|
|
GEN_KEYPAIR:
|
|
FUNCTION
|
|
# Setup a cosign key pair
|
|
RUN echo -n "\n\n" | cosign generate-key-pair
|
|
ENV COSIGN_PRIVATE_KEY=$(cat cosign.key)
|
|
RUN rm cosign.key
|
|
|
|
RUN_TESTS:
|
|
FUNCTION
|
|
FOR script IN $(ls *.sh)
|
|
RUN --no-cache chmod +x $script \
|
|
&& echo "Running test $script" \
|
|
&& ./$script
|
|
END
|
|
|