From 424a9700141ac4b6f6afbd9aeebda227abcd7995 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 Dec 2023 15:58:34 -0500 Subject: [PATCH] Add make target to run tests, clippy, and the auto-formatter locally. --- Makefile | 39 ++++++++++++++++++++++++++++++ docker/natter_development/Makefile | 4 ++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ada4bb1 --- /dev/null +++ b/Makefile @@ -0,0 +1,39 @@ +SHELL := bash +.ONESHELL: +.SHELLFLAGS := -eu -o pipefail -c +.DELETE_ON_ERROR: +MAKEFLAGS += --warn-undefined-variables +MAKEFLAGS += --no-builtin-rules +OS:=$(shell uname -s) + +ifeq ($(origin .RECIPEPREFIX), undefined) + $(error This Make does not support .RECIPEPREFIX. Please use GNU Make 4.0 or later) +endif +.RECIPEPREFIX = > + +IMAGE_NAME:=natter +TARGET := + +.PHONY: help +help: +> @grep -h "##" $(MAKEFILE_LIST) | grep -v grep | sed -E 's/^([^:]*): *## */\1: /' + +.PHONY: docker_test +docker_test: ## Run the rust tests +> $(MAKE) -C docker/natter_development build +> docker run --rm -i -t --mount type=tmpfs,destination=/tmp -v "$(shell readlink -f .):/source" --workdir=/source --env CARGO_TARGET_DIR=/target -v "natter-cargo-registry:/usr/local/cargo/registry" natter-development cargo test + +.PHONY: docker_clippy +docker_clippy: ## Run static analysis of the code. +> $(MAKE) -C docker/natter_development build +> docker run --rm -i -t --mount type=tmpfs,destination=/tmp -v "$(shell readlink -f .):/source" --workdir=/source --env CARGO_TARGET_DIR=/target -v "natter-cargo-registry:/usr/local/cargo/registry" natter-development cargo clippy --no-deps --all-targets --all-features -- -D warnings + +.PHONY: docker_format +docker_format: ## Auto-format source files. +> $(MAKE) -C docker/natter_development build +> docker run --rm -i -t --mount type=tmpfs,destination=/tmp -v "$(shell readlink -f .):/source" --workdir=/source --env CARGO_TARGET_DIR=/target -v "natter-cargo-registry:/usr/local/cargo/registry" natter-development cargo fmt +> docker run --rm -i -t --mount type=tmpfs,destination=/tmp -v "$(shell readlink -f .):/source" --workdir=/source --env CARGO_TARGET_DIR=/target -v "natter-cargo-registry:/usr/local/cargo/registry" natter-development prettier --write --no-error-on-unmatched-pattern "default_environment/**/*.js" "default_environment/**/*.css" + +.PHONY: clean +clean: +> $(MAKE) -C docker/natter_development clean diff --git a/docker/natter_development/Makefile b/docker/natter_development/Makefile index c6fce8f..0cf5653 100644 --- a/docker/natter_development/Makefile +++ b/docker/natter_development/Makefile @@ -21,12 +21,14 @@ help: .PHONY: build build: ## Build the docker image. > docker build --tag $(IMAGE_NAME) --target=$(TARGET) --file Dockerfile . +> docker volume create natter-cargo-registry .PHONY: shell shell: ## Launch an interactive shell inside the docker image with the source repository mounted at /source. shell: build -> docker run --rm -i -t --entrypoint /bin/sh --mount type=tmpfs,destination=/tmp -v "$$(readlink -f ../../):/source" --workdir=/source $(IMAGE_NAME) +> docker run --rm -i -t --entrypoint /bin/sh --mount type=tmpfs,destination=/tmp -v "$$(readlink -f ../../):/source" --workdir=/source --env CARGO_TARGET_DIR=/target -v "natter-cargo-registry:/usr/local/cargo/registry" $(IMAGE_NAME) .PHONY: clean clean: > docker rmi $(IMAGE_NAME) +> docker volume rm natter-cargo-registry