#task #npm #deno #just

app task-keeper

Task keeper to manage tasks from different task runners

14 releases (5 breaking)

Uses new Rust 2021

new 0.6.5 Oct 6, 2022
0.6.4 Sep 29, 2022
0.6.2 Aug 22, 2022
0.5.2 Aug 13, 2022
0.1.0 Aug 6, 2022

#45 in Command line utilities

Download history 101/week @ 2022-08-04 89/week @ 2022-08-11 61/week @ 2022-08-18 11/week @ 2022-08-25 18/week @ 2022-09-01 16/week @ 2022-09-08 29/week @ 2022-09-15 3/week @ 2022-09-22 59/week @ 2022-09-29

108 downloads per month

Apache-2.0

145KB
3.5K SLoC

Task Keeper

tk(Task Keeper) is a tool to manage tasks from different task files, such as Makefile,justfile, package.json , deno.jso, .fleet/run.json etc, and call tasks from different project management tools, such as Apache Maven, Gradle, Cargo and npm etc.

Task Keeper

Features

  • List tasks from different task files: tk --list
  • Invoke task: tk task_name
  • Invoke task from a runner: tk --runner=npm start
  • Sync tasks between sources: tk --from=npm --to=fleet task1 task2
  • .env support by default: tk --no-dotenv to disable
  • --doctor support: check your system for potential problems to run tasks
  • Execute command line: tk -- node hello.js with correct language version and PATH

How to get started?

  • Install by cargo: cargo install task-keeper
  • Download and install from GitHub Releases

After install, execute tk --help for usage. Some commands as following:

  • list tasks: tk --list
  • execute task: tk task_name

Why task keeper?

Sorry, I got lost in different task files and management tools, and sometimes I even can not remember how to run them.

  • Find tasks: Makefile,justfile, package.json, deno.json, Taskfile.yml, tasks.py, README.md etc, and too many task files to check tasks.
  • Run task: just taskName, npm run task_name, deno task task_name, composer run-script task_name etc
  • Check outdated deps: mvn versions:display-dependency-updates, ./gradlew dependencyUpdates, npm outdated etc
  • Build project: mvn -DskipTests package, ./gradlew assemble, cargo build etc

Too many differences, I want to save my brain and keyboard, and you know MacBook keyboard's price tag is $400+.

Task runners support

Tips:

Fleet Run configurations

command type support now:

  • command
  • maven/gradle
  • cargo
  • go
  • maven-run
  • cargo-run
  • docker-run

For details, please refer https://www.jetbrains.com/help/fleet/run-configurations.html

Language version detection and PATH

Task Keeper uses .java-version, .node-version files to detect language version and bound with local installed SDK.

To make task runner run tasks smoothly, Task Keeper will append following directories to PATH automatically:

  • node-modules/.bin
  • vendor/bin
  • bin
  • .bin

For example, if you use Python virtual env to manage your project, Task Keeper will add venv/bin to PATH automatically, and you don't need to do anything.

hello:
  python hello.py

Tips: you can use double dash to run command with language detection and correct PATH, such as tk -- mvn spring-boot:run. To make life easy, and you can use alias e='tk --' to create an alias, then you can run e mvn spring-boot:run to run your project.

Package manager support

Common tasks for all package managers:

  • init: create project by manager mvn archetype:generate, npm init, cargo new xxx etc
  • install: install all dependencies npm istall, dependency:resolve
  • compile: compile source code, not available for some script languages
  • build: cargo: tk build -- --release, maven: mvn -DskipTests clean package, npm: npm run build
  • start: start project go run main.go
  • test: run test npm: npm test, maven: mvn test, cargo: cargo test
  • doc: generate documentation mvn javadoc:javadoc
  • deps: list all dependencies
  • clean: clean build artifacts, maven: mvn clean, cargo: cargo clean
  • outdated: display outdated dependencies go list -u -m all
  • update: update outdated dependencies go get -u
  • add dependency: tk add dependency or tk -D add dependency or tk --runner=npm add dependency

Attention: if package manager's task name is in a task runner, and task keeper will not execute package manager's command.

Apache Maven

Available

Gradle

Please set up gradle-versions-plugin for dependency version management. You can transparently add the plugin to every Gradle project that you run via a Gradle init script. $HOME/.gradle/init.d/plugins.gradle with following code:

initscript {
  repositories {
     gradlePluginPortal()
  }

  dependencies {
    classpath 'com.github.ben-manes:gradle-versions-plugin:+'
  }
}

allprojects {
  apply plugin: com.github.benmanes.gradle.versions.VersionsPlugin

  tasks.named("dependencyUpdates").configure {
    // configure the task, for example wrt. resolution strategies
  }
}

Sbt

Please add sbt-updates and DependencyTreePlugin as global plugins. $HOME/.sbt/1.0/plugins/plugins.sbt with following code:

addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.3")
addDependencyTreePlugin

npm

Available

  • If npm-check command available, npm-check -u will be used as outdated task.

Cargo

Available

Composer

Available

Bundler

Available

Go Module

Available

CMake

Only support cmake-conan, and conanfile.txt required.

Default build directory is cmake-build-debug, and you override it by CMAKE_BINARY_DIR=_build tk build.

Swift

Available. Please install swift-outdated for outdated operation.

Bazel

Available.

Python

Available with following tools:

  • Poetry
  • pipenv
  • requirements.txt

Lein

Available.

Please set up antq for outdated dependencies. $HOME/.lein/profiles.clj

{
 :user
 {:dependencies [[com.github.liquidz/antq "RELEASE"]]
  :aliases {"outdated" ["run" "-m" "antq.core"]}
 }
}

Mix package manager

Available.

Rebar3 package manager

Available.

Task options/params and global options

  • Task options: tk hello --name linux_china
  • Task params: tk hello - Jackie, use - to separate task params
  • Global options for command: tk hello --name Jack -- --verbose, use -- double dash to separate global options

Todo

Task Runners

Package Managers

Version detection

Task Keeper will detect version configuration file and adjust the environment variables to run tasks.

Java

.java-version is used for version management, and values as following:

Task Keeper will try to find Java from $HOME/.jbang/cache/jdks or $HOME/.sdkman/candidates/java/.

Node.js

.node-version is used for Node.js version management, and values as following:

  • 18: match major version of Node.js
  • 16.16.0: match version of Node.js

Task Keeper will try to find Node from $HOME/.nvm/versions/node or $HOME/.volta/tools/image/node.

References

Shell scripts in Markdown

$ ## http-methods
$ curl https://httpbin.org/get
$ curl -X POST https://httpbin.org/post
## print my internet ip
curl --silent https://httpbin.org/ip | jq '.origin'
curl https://httpbin.org/ip \
    --user-agent "Task Keeper/0.1.0" \
    --silent
curl https://httpbin.org/headers

Dependencies

~8.5MB
~201K SLoC