diff --git a/Earthfile b/Earthfile new file mode 100644 index 0000000..a8d1dbb --- /dev/null +++ b/Earthfile @@ -0,0 +1,222 @@ +VERSION 0.6 +FROM alpine +ARG FLAVOR=opensuse +ARG IMAGE=quay.io/c3os/c3os:${FLAVOR}-latest +ARG LUET_VERSION=0.32.4 +ARG REPOSITORIES_FILE=repositories.yaml + +IF [ "$FLAVOR" = "fedora" ] || [ "$FLAVOR" = "tumbleweed" ] || [ "$FLAVOR" = "ubuntu" ] + ARG REPOSITORIES_FILE=repositories.yaml.${FLAVOR} +END + +ARG COSIGN_SKIP=".*quay.io/c3os/.*" + +# TODO: This should match for each flavor +ARG COSIGN_REPOSITORY=raccos/releases-teal +ARG COSIGN_EXPERIMENTAL=0 +ARG CGO_ENABLED=0 +ARG ELEMENTAL_IMAGE=quay.io/costoolkit/elemental:v0.0.15-8a78e6b + +go-deps: + FROM golang + WORKDIR /build + COPY go.mod go.sum ./ + RUN go mod download + RUN apt-get update && apt-get install -y upx + SAVE ARTIFACT go.mod AS LOCAL go.mod + SAVE ARTIFACT go.sum AS LOCAL go.sum + +build: + FROM +go-deps + WORKDIR /build + COPY . ./ + ARG CGO_ENABLED + ENV CGO_ENABLED=${CGO_ENABLED} + + RUN go build -ldflags "-s -w" -o c3os ./cmd/cli && upx c3os + RUN go build -ldflags "-s -w" -o c3os-agent ./cmd/agent && upx c3os-agent + RUN go build -ldflags "-s -w" -o agent-provider-c3os ./cmd/provider && upx agent-provider-c3os + SAVE ARTIFACT c3os c3os AS LOCAL build/c3os + SAVE ARTIFACT c3os-agent c3os-agent AS LOCAL build/c3os-agent + SAVE ARTIFACT agent-provider-c3os agent-provider-c3os AS LOCAL build/agent-provider-c3os + +luet: + FROM quay.io/luet/base:$LUET_VERSION + SAVE ARTIFACT /usr/bin/luet /luet + +framework: + ARG COSIGN_SKIP + ARG REPOSITORIES_FILE + ARG COSIGN_EXPERIMENTAL + ARG COSIGN_REPOSITORY + + FROM alpine + COPY +luet/luet /usr/bin/luet + + # cosign keyless verify + ENV COSIGN_EXPERIMENTAL=${COSIGN_EXPERIMENTAL} + # Repo containing signatures + ENV COSIGN_REPOSITORY=${COSIGN_REPOSITORY} + # Skip this repo artifacts verify as they are not signed + ENV COSIGN_SKIP=${COSIGN_SKIP} + + # Copy the luet config file pointing to the upgrade repository + COPY repositories/$REPOSITORIES_FILE /etc/luet/luet.yaml + + ENV USER=root + + IF [ "$FLAVOR" = "alpine" ] || [ "$FLAVOR" = "fedora" ] || [ "$FLAVOR" = "ubuntu" ] || [ "$FLAVOR" = "alpine-arm-rpi" ] + RUN /usr/bin/luet install -y --system-target /framework \ + meta/cos-verify \ + meta/cos-core \ + cloud-config/recovery \ + cloud-config/live \ + cloud-config/network \ + cloud-config/boot-assessment \ + cloud-config/rootfs \ + utils/edgevpn \ + utils/k9s \ + system-openrc/cos-setup \ + utils/nerdctl \ + system/kernel \ + system/dracut-initrd + ELSE + RUN /usr/bin/luet install -y --system-target /framework \ + meta/cos-verify \ + meta/cos-core \ + utils/edgevpn \ + cloud-config/recovery \ + cloud-config/live \ + cloud-config/boot-assessment \ + cloud-config/network \ + cloud-config/rootfs \ + systemd-service/edgevpn \ + utils/k9s \ + container/kubectl \ + utils/nerdctl + END + COPY overlay/files /framework + SAVE ARTIFACT /framework/ framework + +docker: + FROM DOCKERFILE -f images/Dockerfile.$FLAVOR . + ARG K3S_VERSION + ARG C3OS_VERSION + ARG OS_VERSION=${K3S_VERSION}+k3s1-c3OS${C3OS_VERSION} + ARG OS_ID=c3os + ARG FLAVOR + ARG OS_NAME=${OS_ID}-${FLAVOR} + ARG OS_REPO=quay.io/c3os/c3os + ARG OS_LABEL=${FLAVOR}-latest + ENV OS_LABEL=$OS_LABEL + ENV OS_NAME=$OS_NAME + ENV OS_ID=$OS_ID + ENV OS_VERSION=$OS_VERSION + ENV OS_REPO=$OS_REPO + + COPY +framework/framework / + + IF [ "$FLAVOR" = "alpine" ] + COPY overlay/files-alpine/ / + ELSE IF [ "$FLAVOR" = "alpine-arm-rpi" ] + COPY overlay/files-alpine/ / + COPY overlay/files-opensuse-arm-rpi/ / + ELSE IF [ "$FLAVOR" = "opensuse-arm-rpi" ] + COPY overlay/files-opensuse-arm-rpi/ / + END + + COPY +build/c3os /usr/bin/c3os + COPY +build/c3os-agent /usr/bin/c3os-agent + COPY +build/agent-provider-c3os /usr/bin/agent-provider-c3os + RUN envsubst >/etc/os-release $ISO_NAME.iso.sha256 + SAVE ARTIFACT /build/$ISO_NAME.iso c3os.iso AS LOCAL build/$ISO_NAME.iso + SAVE ARTIFACT /build/$ISO_NAME.iso.sha256 c3os.iso.sha256 AS LOCAL build/$ISO_NAME.iso.sha256 + +netboot: + FROM opensuse/leap + ARG ISO_NAME=${OS_ID} + WORKDIR /build + COPY +iso/c3os.iso c3os.iso + COPY . . + RUN zypper in -y cdrtools + RUN /build/scripts/netboot.sh c3os.iso $ISO_NAME + SAVE ARTIFACT /build/$ISO_NAME.squashfs squashfs AS LOCAL build/$ISO_NAME.squashfs + SAVE ARTIFACT /build/$ISO_NAME-kernel kernel AS LOCAL build/$ISO_NAME-kernel + SAVE ARTIFACT /build/$ISO_NAME-initrd initrd AS LOCAL build/$ISO_NAME-initrd + SAVE ARTIFACT /build/$ISO_NAME.ipxe ipxe AS LOCAL build/$ISO_NAME.ipxe + +arm-image: + ARG ELEMENTAL_IMAGE + FROM $ELEMENTAL_IMAGE + ARG MODEL=rpi64 + ARG IMAGE_NAME=${FLAVOR}.img + RUN zypper in -y jq docker git curl gptfdisk kpartx + #COPY +luet/luet /usr/bin/luet + WORKDIR /build + RUN git clone https://github.com/rancher/elemental-toolkit && mkdir elemental-toolkit/build + RUN curl https://luet.io/install.sh | sh + ENV STATE_SIZE="6200" + ENV RECOVERY_SIZE="4200" + ENV SIZE="15200" + ENV DEFAULT_ACTIVE_SIZE="2000" + COPY --platform=linux/arm64 +docker-rootfs/rootfs /build/image + # With docker is required for loop devices + WITH DOCKER --allow-privileged + RUN cd elemental-toolkit && \ + ./images/arm-img-builder.sh --model $MODEL --directory "/build/image" build/$IMAGE_NAME && mv build ../ + END + RUN xz -v /build/build/$IMAGE_NAME + SAVE ARTIFACT /build/build/$IMAGE_NAME.xz img AS LOCAL build/$IMAGE_NAME + SAVE ARTIFACT /build/build/$IMAGE_NAME.sha256 img AS LOCAL build/$IMAGE_NAME.sha256 + +all: + BUILD +docker + BUILD +iso + BUILD +netboot + +all-arm: + BUILD --platform=linux/arm64 +docker + BUILD +arm-image \ No newline at end of file