? Build yang Diulang - Tulis Bangun sekali, dan jalankan di mana saja - di laptop Anda, remote, dan di CI apa pun.
❤️ Super sederhana - Sintaks yang dapat dikenali secara instan - seperti Dockerfile dan Makefile punya bayi.
? Kompatibel dengan setiap bahasa, kerangka kerja, dan alat membangun - jika berjalan di Linux, berjalan di duniawi.
? Bagus untuk Monorepos dan Polyrepos - Atur logika build Anda namun paling masuk akal untuk proyek Anda.
? Fast Builds - Bangun caching dan eksekusi paralel membuat bangunan cepat secara otomatis.
♻️ Reuse, jangan ulangi - jangan pernah menulis kode yang sama di beberapa build lagi.
? Duniawi adalah kerangka kerja CI/CD yang serba guna, yang menjalankan setiap pipa di dalam wadah, memberi Anda bangunan berulang yang Anda tulis sekali dan jalankan di mana saja. Ini memiliki sintaks yang sangat sederhana dan langsung dikenali yang mudah ditulis dan dipahami - seperti Dockerfile dan Makefile punya bayi. Dan itu memanfaatkan dan menambah alat build yang populer alih -alih menggantinya, jadi Anda tidak perlu menulis ulang semua build Anda, apa pun bahasa yang Anda gunakan.

Dibumi menjalankan semua bangunan dalam wadah, membuatnya mandiri, terisolasi, berulang, dan portabel. Hal ini memungkinkan untuk iterasi yang lebih cepat pada skrip build dan debugging yang lebih mudah ketika ada yang salah -tidak ada lagi git commit -m "try again" . Saat Anda menulis build, Anda tahu itu akan mengeksekusi dengan benar di mana pun itu berjalan - laptop Anda, laptop kolega, atau CI apa pun. Anda tidak perlu mengkonfigurasi alat spesifik bahasa, menginstal dependensi tambahan, atau mempersulit skrip build Anda untuk memastikan mereka kompatibel dengan OSS yang berbeda. Bumi yang duniawi memberi Anda bangunan yang konsisten dan berulang di mana pun mereka berlari.
Sintaks duniawi mudah ditulis dan dipahami. Sebagian besar insinyur dapat membaca Earthfile secara instan, tanpa pengetahuan sebelumnya tentang duniawi. Kami menggabungkan beberapa ide terbaik dari Dockerfile dan Makefiles menjadi satu spesifikasi - seperti Dockerfile dan Makefile punya bayi.
Bekerja duniawi dengan kompiler dan membangun alat yang Anda gunakan. Jika berjalan di Linux, ia berjalan di duniawi. Cargo.toml Anda tidak build.gradle menulis ulang build go.mod ada atau mengganti package.json Anda. Anda dapat menggunakan duniawi sebagai pembungkus di sekitar perkakas Anda yang ada dan masih mendapatkan bangunan yang berulang duniawi, eksekusi paralel, dan membangun caching.
Duniawi sangat bagus untuk monorepos dan polyrepos. Anda dapat membagi logika build Anda di beberapa evenfile, menempatkan beberapa lebih dalam di dalam struktur direktori atau bahkan di repositori lain. Referensi target dari Earthfiles lain mudah terlepas dari di mana mereka disimpan. Jadi Anda dapat mengatur logika build Anda namun paling masuk akal untuk proyek Anda.
Dasar secara otomatis mengeksekusi target build secara paralel dan memanfaatkan cache secara maksimal. Ini membuat bangunan cepat. Bumi juga memiliki kemampuan caching bersama yang kuat yang mempercepat pembangunan sering berlari melintasi tim atau di lingkungan kotak pasir, seperti satelit duniawi, tindakan github, atau CI Anda.
Jika bangunan Anda memiliki beberapa langkah, duniawi akan:
Tidak perlu menulis kode yang sama di beberapa build lagi. Dengan duniawi, Anda dapat menggunakan kembali target, artefak, dan gambar di beberapa evenfile, bahkan yang ada di repositori lain, dalam satu baris. Duniawi adalah cache-sadar, berdasarkan hash individu dari setiap file, dan telah berbagi kemampuan caching. Jadi, Anda dapat membuat hierarki build yang luas dan efisien yang hanya menjalankan langkah -langkah minimum yang diperlukan.

Bumi dimaksudkan untuk digunakan baik di mesin pengembangan Anda dan di CI. Ini berjalan di atas platform CI/CD Anda (seperti Jenkins, Circle CI, Github Action, dan Gitlab CI/CD). Bumi memberikan manfaat dari sistem otomatisasi build modern di mana pun ia berjalan - seperti caching dan paralelisme. Ini adalah lapisan lem antara perkakas build spesifik bahasa (seperti Maven, Gradle, NPM, PIP, GO Build) dan CI, bekerja seperti pembungkus di sekitar perkakas build Anda dan membangun logika yang mengisolat membangun eksekusi dari lingkungan yang mereka jalankan.
Singkatnya: wadah , caching lapisan , dan grafik build yang kompleks !
Eksekusi duniawi dalam wadah, di mana eksekusi terisolasi. Ketergantungan build secara eksplisit ditentukan dalam definisi build, sehingga membuat build swasembada.
Kami menggunakan sistem berbasis target untuk membantu pengguna memecah bangunan kompleks menjadi bagian yang dapat digunakan kembali. Tidak ada yang dibagi antara target selain dependensi yang dinyatakan dengan jelas. Tidak ada yang dibagikan berarti tidak ada kondisi balapan yang tidak terduga. Bahkan, build dieksekusi secara paralel jika memungkinkan, tanpa perlu pengguna untuk mengurus interaksi lingkungan yang mengunci atau tidak terduga.
Catatan EarthFiles mungkin tampak sangat mirip dengan build multi-tahap Dockerfile. Bahkan, teknologi yang sama digunakan di bawahnya. Namun, perbedaan utama adalah bahwa duniawi dirancang untuk menjadi sistem pembuatan tujuan umum, bukan hanya spesifikasi gambar Docker. Baca lebih lanjut tentang betapa duniawinya berbeda dari dockerfile.
Lihat Instruksi Instalasi.
Untuk membangun dari sumber, periksa halaman yang berkontribusi.
Berikut adalah beberapa sumber daya untuk membantu Anda mulai dengan duniawi
Lihat juga dokumentasi lengkapnya.
Halaman referensi
# Earthfile
VERSION 0.8
FROM golang:1.15-alpine3.13
RUN apk --update --no-cache add git
WORKDIR /go-example
all :
BUILD +lint
BUILD +docker
build :
COPY main.go .
RUN go build -o build/go-example main.go
SAVE ARTIFACT build/go-example AS LOCAL build/go-example
lint :
RUN go get golang.org/x/lint/golint
COPY main.go .
RUN golint -set_exit_status ./...
docker :
COPY +build/go-example .
ENTRYPOINT [ "/go-example/go-example" ]
SAVE IMAGE go-example:latest // main.go
package main
import "fmt"
func main () {
fmt . Println ( "hello world" )
} Memohon build menggunakan earthly +all .

Contoh untuk bahasa lain tersedia dalam Contoh Dir.
Kapan pun memungkinkan, duniawi secara otomatis menjalankan target secara paralel.

Kurangi waktu pembuatan di CI melalui caching jarak jauh bersama.

Bangun untuk beberapa platform secara paralel.
VERSION 0.8
all :
BUILD
--platform = linux/amd64
--platform = linux/arm64
--platform = linux/arm/v7
--platform = linux/arm/v6
+build
build :
FROM alpine:3.18
CMD [ "uname" , "-m" ]
SAVE IMAGE multiplatform-image Tidak perlu meminta tim Anda untuk menginstal protoc , versi spesifik Python, Java 1.6, atau ekosistem inti .NET. Instal sekali di EarthFile Anda, dan itu bekerja untuk semua orang. Atau bahkan lebih baik, Anda bisa memanfaatkan ekosistem Docker Hub yang kaya.
VERSION 0.8
FROM golang:1.15-alpine3.13
WORKDIR /proto-example
proto :
FROM namely/protoc-all:1.29_4
COPY api.proto /defs
RUN --entrypoint -- -f api.proto -l go
SAVE ARTIFACT ./gen/pb-go /pb AS LOCAL pb
build :
COPY go.mod go.sum .
RUN go mod download
COPY +proto/pb pb
COPY main.go ./
RUN go build -o build/proto-example main.go
SAVE ARTIFACT build/proto-exampleLihat Kode Contoh Lengkap.
Bumi dapat digunakan untuk merujuk dan membangun target dari direktori lain atau bahkan repositori lain. Misalnya, jika kami ingin membangun contoh target dari github.com/earthly/earthly Repository, kami dapat mengeluarkan
# Try it yourself! No need to clone.
earthly github.com/earthly/earthly/examples/go:main+docker
# Run the resulting image.
docker run --rm earthly/examples:go Gunakan + untuk merujuk target lain dan membuat inter-dependensi build yang kompleks.

Contoh
Direktori yang sama (Earthfile yang sama)
BUILD +some-target
FROM +some-target
COPY +some-target/my-artifact ./Direktori lainnya
BUILD ./some/local/path+some-target
FROM ./some/local/path+some-target
COPY ./some/local/path+some-target/my-artifact ./Repositori lainnya
BUILD github.com/someone/someproject:v1.2.3+some-target
FROM github.com/someone/someproject:v1.2.3+some-target
COPY github.com/someone/someproject:v1.2.3+some-target/my-artifact ./Rahasia tidak pernah disimpan dalam lapisan gambar dan mereka hanya tersedia untuk perintah yang membutuhkannya.
earthly set /user/github/token ' shhh... ' release :
RUN --push --secret GITHUB_TOKEN = user/github/token github-release upload file.binDockerFiles dirancang untuk menentukan make-up gambar Docker dan di situlah DockerFiles berhenti. Bumi mengambil beberapa prinsip utama dockerfiles (seperti caching lapisan) tetapi memperluas kasus penggunaan. Misalnya, duniawi dapat menghasilkan artefak reguler, menjalankan unit dan uji integrasi, dan membuat beberapa gambar Docker sekaligus - semua di luar lingkup Dockerfile.
Dimungkinkan untuk menggunakan DockerFiles dalam kombinasi dengan teknologi lain (misalnya, Makefile atau File Bash) untuk menyelesaikan kasus penggunaan tersebut. Namun, kombinasi ini sulit untuk diparalelkan, menantang untuk mengukur di seluruh repositori karena mereka tidak memiliki sistem impor yang kuat, dan sering bervariasi dalam gaya dari satu tim ke tim lainnya. Bumi tidak memiliki keterbatasan ini karena dirancang sebagai sistem pembangunan tujuan umum.
Misalnya, duniawi memperkenalkan target yang lebih kaya, artefak, dan sistem referensi gambar, memungkinkan penggunaan kembali yang lebih baik dalam bangunan kompleks yang mencakup satu repositori besar atau beberapa repositori. Karena dockerfile hanya dimaksudkan untuk menggambarkan satu gambar pada satu waktu, fitur -fitur seperti itu berada di luar ruang lingkup penerapan dockerfile.
Lihat halaman dokumen referensi EarthFile. Ini memiliki semua perintah di sana dan menentukan perintah mana yang sama dengan perintah DockerFile dan mana yang baru.
Ya! Anda dapat menggunakan perintah FROM DOCKERFILE untuk mewarisi perintah di Dockerfile yang ada.
build :
FROM DOCKERFILE .
SAVE IMAGE some-image:latestAnda juga dapat secara opsional mem -portfile docker Anda sepenuhnya ke duniawi. Menerjemahkan Dockerfiles ke Earthfiles biasanya merupakan masalah copy-pasting dan membuat penyesuaian kecil. Lihat Halaman Memulai untuk beberapa contoh EarthFile.
Bazel adalah alat build yang dikembangkan oleh Google untuk mengoptimalkan kecepatan, kebenaran, dan reproduksibilitas basis kode monorepo internal mereka. Perbedaan utama antara bazel dan duniawi adalah bahwa bazel adalah sistem build , sedangkan duniawi adalah kerangka kerja CI/CD tujuan umum . Untuk penjelasan yang lebih mendalam, lihat FAQ kami.
Bumi dilisensikan di bawah Lisensi Publik Mozilla versi 2.0. Lihat lisensi.