From 4c55e8cfff1258c839a97e53038867549cefd61a Mon Sep 17 00:00:00 2001 From: DataHearth Date: Sat, 5 Mar 2022 16:25:59 +0100 Subject: [PATCH] update build steps --- .dockerignore => .earthlyignore | 9 ++++++--- .gitignore | 5 +++-- Dockerfile | 19 ------------------ Earthfile | 32 ++++++++++++++++++++++++++++++ Makefile | 35 +++------------------------------ src/images.rs | 31 +++++++++++------------------ src/main.rs | 2 +- 7 files changed, 57 insertions(+), 76 deletions(-) rename .dockerignore => .earthlyignore (53%) delete mode 100644 Dockerfile create mode 100644 Earthfile diff --git a/.dockerignore b/.earthlyignore similarity index 53% rename from .dockerignore rename to .earthlyignore index 76fd3de..ca51f52 100644 --- a/.dockerignore +++ b/.earthlyignore @@ -1,5 +1,8 @@ -target -Makefile LICENSE README.md -.gitignore \ No newline at end of file +target +Makefile +Earthfile +.gitignore +.git +.env \ No newline at end of file diff --git a/.gitignore b/.gitignore index 35058a6..3762d1b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -/target -.DS_STORE \ No newline at end of file +target +.DS_STORE +.env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 0a07bba..0000000 --- a/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM rust:1.58 as builder - -WORKDIR /app -COPY . . - -RUN rustup target add x86_64-unknown-linux-musl -RUN cargo build --release --target x86_64-unknown-linux-musl - -FROM docker:20.10.12-dind-alpine3.15 - -LABEL maintainer="Antoine Langlois" -LABEL repository="https://github.com/DataHearth/clear-docker-images" -LABEL org.opencontainers.image.source="https://github.com/DataHearth/clear-docker-images" - -COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/clear-docker-images /usr/local/bin/clear-docker-images - -VOLUME ["/var/run/docker.sock"] - -ENTRYPOINT ["clear-docker-images"] \ No newline at end of file diff --git a/Earthfile b/Earthfile new file mode 100644 index 0000000..e607e2e --- /dev/null +++ b/Earthfile @@ -0,0 +1,32 @@ +VERSION 0.6 + +FROM rust:1.59 + +ARG VERSION +ARG DOCKER_IMG +ARG GHCR_IMG + +WORKDIR /clear-docker-images + +build-linux: + COPY . . + RUN cargo build --release --target x86_64-unknown-linux-gnu + SAVE ARTIFACT target/x86_64-unknown-linux-gnu /x86_64-unknown-linux-gnu AS LOCAL target/x86_64-unknown-linux-gnu + +build-images: + FROM docker:20.10.12-dind-alpine3.15 + + LABEL maintainer="Antoine Langlois" + LABEL repository="https://github.com/DataHearth/clear-docker-images" + LABEL org.opencontainers.image.source="https://github.com/DataHearth/clear-docker-images" + + COPY +build-linux/x86_64-unknown-linux-gnu /usr/local/bin/clear-docker-images + + VOLUME ["/var/run/docker.sock"] + + ENTRYPOINT ["clear-docker-images"] + + SAVE IMAGE ${DOCKER_IMG}:${VERSION} + SAVE IMAGE ${DOCKER_IMG}:latest + SAVE IMAGE ${GHCR_IMG}:${VERSION} + SAVE IMAGE ${GHCR_IMG}:latest \ No newline at end of file diff --git a/Makefile b/Makefile index dbdf341..b3e5b06 100644 --- a/Makefile +++ b/Makefile @@ -1,38 +1,9 @@ -DOCKER_IMG := datahearth/clear-docker-images -GHCR_IMG := ghcr.io/${DOCKER_IMG} -VERSION := 0.4.1 - -.PHONY: initialize-linux-build -initialize-linux-build: - @brew install FiloSottile/musl-cross/musl-cross - @rustup target add x86_64-unknown-linux-musl - @echo 'add these lines to your "~/.cargo":' - @printf '\n[target.x86_64-unknown-linux-musl]\nlinker = "x86_64-linux-musl-gcc"\n' - -.PHONY: build-docker -build-docker: - @docker build --tag ${DOCKER_IMG}:${VERSION} . - @docker tag ${DOCKER_IMG}:${VERSION} ${GHCR_IMG}:${VERSION} - @docker tag ${DOCKER_IMG}:${VERSION} ${DOCKER_IMG}:latest - @docker tag ${DOCKER_IMG}:${VERSION} ${GHCR_IMG}:latest - -.PHONY: build-binaries -build-binaries: - @echo "Building Linux MUSL binary..." - @cargo build --release --target x86_64-unknown-linux-musl - @echo "Building MacOS darwin" - @cargo build --release --target x86_64-apple-darwin - -.PHONY: push-docker-images -push-docker-images: build-docker - @docker push --all-tags ${GHCR_IMG} - @docker push --all-tags ${DOCKER_IMG} - .PHONY: bump-version bump-version: - @echo "Bump version \"${VERSION}\" to \"${NEW_VERSION}\"" + @type sd > /dev/null + @echo "Bump version to \"${NEW_VERSION}\"" @sd "version = \"${VERSION}\"" "version = \"${NEW_VERSION}\"" Cargo.toml - @sd "VERSION := ${VERSION}" "VERSION := ${NEW_VERSION}" Makefile + @sd "VERSION=${VERSION}" "VERSION=${NEW_VERSION}" .env @git add . @git commit -m "bump v${NEW_VERSION}" @git tag -m "bump v${NEW_VERSION}" v${NEW_VERSION} diff --git a/src/images.rs b/src/images.rs index 6147efb..12fd742 100644 --- a/src/images.rs +++ b/src/images.rs @@ -31,21 +31,13 @@ pub fn process_imgs( for img in parse_imgs(repository) { let image: Image = serde_json::from_str(&img).unwrap(); - let del = if let Some(max) = date_to { - if image.created_at.timestamp() >= date_from.timestamp() - && image.created_at.timestamp() <= max.timestamp() - { - true - } else { - false - } - } else { - if image.created_at.timestamp() >= date_from.timestamp() { - true - } else { - false - } - }; + let del = date_to.map_or( + image.created_at.timestamp() >= date_from.timestamp(), + |max| { + date_from.timestamp() >= image.created_at.timestamp() + && max.timestamp() <= image.created_at.timestamp() + }, + ); if del { if !tags.contains(&image.tag) { @@ -86,16 +78,17 @@ fn get_images(repo: Option) -> Vec { let mut cmd = Command::new(DOCKER_BIN); cmd.arg("images"); - if let Some(repo) = repo { - cmd.arg(repo); - } + repo.map(|repo| cmd.arg(repo)); cmd.args(["--format", "{{json .}}"]); match cmd.output() { Ok(o) => { if !o.status.success() { - eprintln!("{}", std::str::from_utf8(&o.stderr).unwrap()); + eprintln!( + "{}", + std::str::from_utf8(&o.stderr).expect("failed to parse STDERR to UTF-8") + ); eprintln!("failed to retrieve docker images. Please checkout STDERR"); exit(1); } diff --git a/src/main.rs b/src/main.rs index b6eb1ea..9ee961f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -42,7 +42,7 @@ struct Args { fn main() { let args = Args::parse(); - let tags = if let Some(t) = args.tags { t } else { vec![] }; + let tags = args.tags.map_or(vec![], |tags| tags); let (ids, saved_size) = process_imgs(args.repository, tags, args.date); if args.dry_run {