blue-build 0.5.1

A CLI tool built for creating Containerfile templates based on the Ublue Community Project
Documentation
VERSION \
	--global-cache \
	--use-function-keyword \
	--arg-scope-and-set \
	0.7

IMPORT gitlab.com/wunker-bunker/ci-pipelines/earthly/cargo AS cargo

ARG --global IMAGE=registry.gitlab.com/wunker-bunker/blue-build

all:
	BUILD +default
	BUILD +nightly

default:
	ARG NIGHTLY=false
	WAIT
		BUILD +lint --NIGHTLY=$NIGHTLY
		BUILD +test --NIGHTLY=$NIGHTLY
	END
	BUILD +blue-build-cli --NIGHTLY=$NIGHTLY
	BUILD +blue-build-cli-alpine --NIGHTLY=$NIGHTLY
	BUILD +installer --NIGHTLY=$NIGHTLY
	BUILD +integration-test-template --NIGHTLY=$NIGHTLY
	BUILD +integration-test-build --NIGHTLY=$NIGHTLY
	BUILD +integration-test-rebase --NIGHTLY=$NIGHTLY
	BUILD +integration-test-upgrade --NIGHTLY=$NIGHTLY

nightly:
	BUILD +default --NIGHTLY=true

lint:
	FROM +common

	ARG NIGHTLY=false

	DO cargo+LINT --NIGHTLY=$NIGHTLY

test:
	FROM +common

	ARG NIGHTLY=false

	DO cargo+TEST --NIGHTLY=$NIGHTLY

install:
	FROM +common

	ARG NIGHTLY=false
	ARG --required BUILD_TARGET

	DO cargo+BUILD_RELEASE --BUILD_TARGET=$BUILD_TARGET --NIGHTLY=$NIGHTLY

	SAVE ARTIFACT target/$BUILD_TARGET/release/bb

common:
	FROM registry.gitlab.com/wunker-bunker/cargo-builder

	WORKDIR /app
	COPY --keep-ts --dir src/ templates/ /app
	COPY --keep-ts Cargo.* /app
	COPY --keep-ts *.md /app
	COPY --keep-ts LICENSE /app

	DO cargo+INIT

blue-build-cli:
	FROM registry.fedoraproject.org/fedora-toolbox
	ARG NIGHTLY=false

	BUILD +install --BUILD_TARGET="x86_64-unknown-linux-gnu" --NIGHTLY=$NIGHTLY

	RUN dnf install --refresh -y buildah podman skopeo

	COPY +cosign/cosign /usr/bin/cosign

	COPY (+install/bb --BUILD_TARGET="x86_64-unknown-linux-gnu" --NIGHTLY=$NIGHTLY) /usr/bin/bb

	ARG TAG
	ARG LATEST=false
	DO cargo+SAVE_IMAGE --IMAGE=$IMAGE --TAG=$TAG --LATEST=$LATEST --NIGHTLY=$NIGHTLY

blue-build-cli-alpine:
	FROM alpine
	ARG NIGHTLY=false

	BUILD +install --BUILD_TARGET="x86_64-unknown-linux-musl" --NIGHTLY=$NIGHTLY

	RUN apk update && apk add buildah podman skopeo fuse-overlayfs

	COPY +cosign/cosign /usr/bin/cosign
	COPY (+install/bb --BUILD_TARGET="x86_64-unknown-linux-musl" --NIGHTLY=$NIGHTLY) /usr/bin/bb

	ARG TAG
	ARG LATEST=false
	DO cargo+SAVE_IMAGE --IMAGE=$IMAGE --TAG=$TAG --LATEST=$LATEST --NIGHTLY=$NIGHTLY --ALPINE=true

installer:
	# FROM alpine
	FROM mgoltzsche/podman:minimal
	ARG NIGHTLY=false

	BUILD +install --BUILD_TARGET="x86_64-unknown-linux-gnu" --NIGHTLY=$NIGHTLY
	COPY (+install/bb --BUILD_TARGET="x86_64-unknown-linux-gnu") /out/bb
	COPY install.sh /install.sh

	CMD ["cat", "/install.sh"]

	ARG TAG
	ARG LATEST=false
	ARG INSTALLER=true
	DO cargo+SAVE_IMAGE --IMAGE=$IMAGE --TAG=$TAG --LATEST=$LATEST --NIGHTLY=$NIGHTLY --INSTALLER=$INSTALLER

integration-test-template:
	ARG NIGHTLY=false
	FROM DOCKERFILE -f +integration-test-template-containerfile/test/Containerfile +integration-test-template-containerfile/test/* --NIGHTLY=$NIGHTLY

integration-test-template-containerfile:
	ARG NIGHTLY=false
	FROM +integration-test-base --NIGHTLY=$NIGHTLY
	RUN bb -vv template config/recipe-jp-desktop.yml | tee Containerfile

	SAVE ARTIFACT /test

integration-test-build:
	ARG NIGHTLY=false
	FROM +integration-test-base --NIGHTLY=$NIGHTLY

	RUN --privileged bb -vv build config/recipe-jp-desktop.yml

integration-test-rebase:
	ARG NIGHTLY=false
	FROM +integration-test-base --NIGHTLY=$NIGHTLY

	RUN --privileged bb -vv rebase config/recipe-jp-desktop.yml

integration-test-upgrade:
	ARG NIGHTLY=false
	FROM +integration-test-base --NIGHTLY=$NIGHTLY
	RUN mkdir -p /etc/blue-build && touch /etc/blue-build/jp-desktop.tar.gz

	RUN --privileged bb -vv upgrade config/recipe-jp-desktop.yml

integration-test-base:
	ARG NIGHTLY=false

	FROM +blue-build-cli-alpine --NIGHTLY=$NIGHTLY

  	RUN echo "#!/bin/sh
		echo 'Running podman'" > /usr/bin/podman \
		&& chmod +x /usr/bin/podman
  
  	RUN echo "#!/bin/sh
		echo 'Running buildah'" > /usr/bin/buildah \
		&& chmod +x /usr/bin/buildah

	RUN echo "#!/bin/sh
		echo 'Running rpm-ostree'" > /usr/bin/rpm-ostree \
		&& chmod +x /usr/bin/rpm-ostree

	GIT CLONE https://gitlab.com/wunker-bunker/wunker-os.git /test
	WORKDIR /test

iso-generator:
	FROM registry.fedoraproject.org/fedora-toolbox

    GIT CLONE https://github.com/ublue-os/isogenerator.git /isogenerator
    WORKDIR /isogenerator
    ARG PACKAGES=$(cat deps.txt)
    RUN dnf install --disablerepo="*" --enablerepo="fedora,updates" --setopt install_weak_deps=0 --assumeyes $PACKAGES

    SAVE IMAGE --push $IMAGE/iso-generator

cosign:
	FROM gcr.io/projectsigstore/cosign
	SAVE ARTIFACT /ko-app/cosign