From 9cdff275cbeeb4bb4942f147602018cb49ba88c7 Mon Sep 17 00:00:00 2001 From: Florian Dehau Date: Sun, 6 Dec 2020 16:27:26 +0100 Subject: [PATCH] chore: replace `make` with `cargo-make` `cargo-make` make it easier to provide developers of all platforms an unified build workflow. --- Makefile | 116 -------------------------------------------------- Makefile.toml | 111 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 116 deletions(-) delete mode 100644 Makefile create mode 100644 Makefile.toml diff --git a/Makefile b/Makefile deleted file mode 100644 index 13c56000..00000000 --- a/Makefile +++ /dev/null @@ -1,116 +0,0 @@ -SHELL=/bin/bash - -# ================================ Cargo ====================================== - - -RUST_CHANNEL ?= stable -CARGO_FLAGS = -RUSTUP_INSTALLED = $(shell command -v rustup 2> /dev/null) -TEST_FILTER ?= - -ifndef RUSTUP_INSTALLED - CARGO = cargo -else - ifdef CI - CARGO = cargo - else - CARGO = rustup run $(RUST_CHANNEL) cargo - endif -endif - - -# ================================ Help ======================================= - -.PHONY: help -help: ## Print all the available commands - @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \ - awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' - - -# =============================== Build ======================================= - -.PHONY: check -check: ## Validate the project code - $(CARGO) check - -.PHONY: build -build: ## Build the project in debug mode - $(CARGO) build $(CARGO_FLAGS) - -.PHONY: release -release: CARGO_FLAGS += --release -release: build ## Build the project in release mode - - -# ================================ Lint ======================================= - -.PHONY: lint -lint: fmt clippy ## Lint project files - -.PHONY: fmt -fmt: ## Check the format of the source code - cargo fmt --all -- --check - -.PHONY: clippy -clippy: ## Check the style of the source code and catch common errors - $(CARGO) clippy --all-targets --all-features -- -D warnings - - -# ================================ Test ======================================= - -.PHONY: test -test: ## Run the tests - $(CARGO) test --all-features $(TEST_FILTER) - -# =============================== Examples ==================================== - -.PHONY: build-examples -build-examples: ## Build all examples - @$(CARGO) build --release --examples --all-features - -.PHONY: run-examples -run-examples: build-examples ## Run all examples - @for file in examples/*.rs; do \ - name=$$(basename $${file/.rs/}); \ - $(CARGO) run --all-features --release --example $$name; \ - done; - -# ================================ Doc ======================================== - - -.PHONY: doc -doc: RUST_CHANNEL = nightly -doc: ## Build the documentation (available at ./target/doc) - $(CARGO) doc - - -# ================================= Watch ===================================== - -# Requires watchman and watchman-make (https://facebook.github.io/watchman/docs/install.html) - -.PHONY: watch -watch: ## Watch file changes and build the project if any - watchman-make -p 'src/**/*.rs' -t check build - -.PHONY: watch-test -watch-test: ## Watch files changes and run the tests if any - watchman-make -p 'src/**/*.rs' 'tests/**/*.rs' 'examples/**/*.rs' -t test - -.PHONY: watch-doc -watch-doc: RUST_CHANNEL = nightly -watch-doc: ## Watch file changes and rebuild the documentation if any - $(CARGO) watch -x doc -x 'test --doc' - -# ================================= Pipelines ================================= - -.PHONY: stable -stable: RUST_CHANNEL = stable -stable: build lint test ## Run build and tests for stable - -.PHONY: beta -beta: RUST_CHANNEL = beta -beta: build lint test ## Run build and tests for beta - -.PHONY: nightly -nightly: RUST_CHANNEL = nightly -nightly: build lint test ## Run build, lint and tests for nightly diff --git a/Makefile.toml b/Makefile.toml new file mode 100644 index 00000000..8d843ebf --- /dev/null +++ b/Makefile.toml @@ -0,0 +1,111 @@ +[config] +skip_core_tasks = true + +[env.TUI_FEATURES] +source = "${CARGO_MAKE_RUST_TARGET_OS}" +default_value = "unknown" + +[env.TUI_FEATURES.mapping] +linux = "serde,crossterm,termion,rustbox,curses" +macos = "serde,crossterm,termion,rustbox,curses" +windows = "serde,crossterm" + +[tasks.default] +dependencies = [ + "check", +] + +[tasks.ci] +dependencies = [ + "fmt", + "check", + "test", + "clippy", +] + + +[tasks.fmt] +command = "cargo" +args = [ + "fmt", + "--all", + "--", + "--check", +] + +[tasks.check] +command = "cargo" +args = [ + "check", + "--no-default-features", + "--features", + "${TUI_FEATURES}", + "--all-targets", +] + +[tasks.build] +command = "cargo" +args = [ + "build", + "--no-default-features", + "--features", + "${TUI_FEATURES}", + "--all-targets", +] + +[tasks.clippy] +command = "cargo" +args = [ + "clippy", + "--no-default-features", + "--features", + "${TUI_FEATURES}", + "--", + "-D", + "warnings", +] + +[tasks.test] +linux_alias = "test-unix" +mac_alias = "test-unix" +windows_alias = "test-windows" + +[tasks.test-unix] +command = "cargo" +args = [ + "test", + "--no-default-features", + "--features", + "${TUI_FEATURES}" +] + +# Documentation tests cannot be run on Windows for now +[tasks.test-windows] +command = "cargo" +args = [ + "test", + "--no-default-features", + "--features", + "${TUI_FEATURES}", + "--lib", + "--tests", + "--examples", +] + +[tasks.run-examples] +linux_alias = "run-examples-unix" +mac_alias = "run-examples-unix" +windows_alias = "run-examples-windows" + +[tasks.run-examples-unix] +script = ''' +#!/usr/bin/env bash +cargo build --examples --features ${TUI_FEATURES} --release +for file in examples/*.rs; do + name="$(basename "${file/.rs/}")" + cargo run --features ${TUI_FEATURES} --release --example "${name}" +done +''' + +[tasks.run-examples-windows] +# TODO