Earthfile language preview
1. Build target
VERSION, FROM, COPY/RUN, and SAVE ARTIFACT
horizon-dark
VERSION 0.8
FROM golang:1.22
WORKDIR /app
build:
COPY src .
RUN go build -o bin
SAVE ARTIFACT bin atom-one-dark
VERSION 0.8
FROM golang:1.22
WORKDIR /app
build:
COPY src .
RUN go build -o bin
SAVE ARTIFACT bin github-dark
VERSION 0.8
FROM golang:1.22
WORKDIR /app
build:
COPY src .
RUN go build -o bin
SAVE ARTIFACT bin dracula
VERSION 0.8
FROM golang:1.22
WORKDIR /app
build:
COPY src .
RUN go build -o bin
SAVE ARTIFACT bin nord
VERSION 0.8
FROM golang:1.22
WORKDIR /app
build:
COPY src .
RUN go build -o bin
SAVE ARTIFACT bin github
VERSION 0.8
FROM golang:1.22
WORKDIR /app
build:
COPY src .
RUN go build -o bin
SAVE ARTIFACT bin 2. Control flow
FOR/IF with END, unique to Earthly
horizon-dark
deps:
FOR pkg IN foo bar
RUN echo $pkg
END
IF [ -f go.mod ]
RUN go mod download
END atom-one-dark
deps:
FOR pkg IN foo bar
RUN echo $pkg
END
IF [ -f go.mod ]
RUN go mod download
END github-dark
deps:
FOR pkg IN foo bar
RUN echo $pkg
END
IF [ -f go.mod ]
RUN go mod download
END dracula
deps:
FOR pkg IN foo bar
RUN echo $pkg
END
IF [ -f go.mod ]
RUN go mod download
END nord
deps:
FOR pkg IN foo bar
RUN echo $pkg
END
IF [ -f go.mod ]
RUN go mod download
END github
deps:
FOR pkg IN foo bar
RUN echo $pkg
END
IF [ -f go.mod ]
RUN go mod download
END 3. Multi-target image
BUILD another target and SAVE IMAGE
horizon-dark
VERSION 0.8
FROM alpine:3.19
image:
BUILD +build
COPY +build/bin /usr/bin/app
SAVE IMAGE myapp:latest atom-one-dark
VERSION 0.8
FROM alpine:3.19
image:
BUILD +build
COPY +build/bin /usr/bin/app
SAVE IMAGE myapp:latest github-dark
VERSION 0.8
FROM alpine:3.19
image:
BUILD +build
COPY +build/bin /usr/bin/app
SAVE IMAGE myapp:latest dracula
VERSION 0.8
FROM alpine:3.19
image:
BUILD +build
COPY +build/bin /usr/bin/app
SAVE IMAGE myapp:latest nord
VERSION 0.8
FROM alpine:3.19
image:
BUILD +build
COPY +build/bin /usr/bin/app
SAVE IMAGE myapp:latest github
VERSION 0.8
FROM alpine:3.19
image:
BUILD +build
COPY +build/bin /usr/bin/app
SAVE IMAGE myapp:latest