Skip to main content

Documentation of mk tool

mk is a CLI tool that aims to ease contribution and maintenance for projects by hiding repository implementation details from the casual contributor. With it, you can contribute without having to know all the build and testing tools that the project team already uses, which often have strange requirements.

mk-command-line-screenshot

If you ever asked yourself one of the below questions, probably you would want to try mk and if it can help you

  • How do I run tests locally?
  • Which are the test suites I can run?
  • Is my change ready to be reviewed?
  • How can I propose a change for review?

Run mk inside any cloned repository to display which options you have. No configuration file is needed as the tool will look for common tools used by the repository and expose their commands.

mk is inspired by tools such make, waf, taskfile, tox, nox, npm, yarn and pre-commit, but it does not aim to replace them. Instead, it aims to provide a unified interface for calling them that is friendly even for those that never used these tools.

Installation

We recommend using pipx to install mk to avoid potential dependency conflicts. You can use pip3 install --user mk as well.

pipx install mk

How it works

mk inspects the current core repository and detects build tools used by the project, like pre-commit, tox, npm and exposes their commands to the user in a predictable way.

For example, you should be able to lint any code repository running only mk lint, regardless of author preference for picking one way to execute them or another.

Be assured that mk does not make use of AI to guess what needs to run. As most projects use relatively similar patterns, it is easy to identify the one to execute.

At this moment, if two tools expose the same command name, the tool will add a number to its name. In the future, we may decide to either chain them under a single name or allow some tools to shadow others and avoid duplicates.

What are the main benefits

One of the benefits of mk is that it should reduce the amount of how-to-contribute documentation the author needs to write.

A considerable amount of maintainer effort can go into producing documentation that makes it easier for someone to contribute.

Some projects are less affected than others. That is usually related to how well the potential contributors know the practices used by the project. Still, if your project has a wide range of uses, you will quickly discover that newbie contributors may hit a knowledge wall. Such a barrier will likely prevent most of them from becoming active contributors. The remaining ones will flood the project with questions, distracting other maintainers from doing more advanced tasks.

Unless you want to deter contributions, you should plan to make it as easy as possible for people to contribute. That is one area where mk aims to help.

Aliases

Similar to git aliases, mk allows typing as little as possible by automatically aliasing commands. For example, you can run mk lint just by typing mk l as long there is no other command starting with the same letter. Aliases are available for one, two and three letters prefixes.

Using mk to propose changes to projects

Instead of writing a long list of tasks to follow, we can use a tool that tells him what to do next. For example, mk has a built-in command named up(load) that aims to ease preparing a local change from being proposed to the project.

This command detects if it should use GitHub workflow or Gerrit and will run the appropriate commands for opening or updating a CR/PR. Users will be allowed to upload a change only after passing the minimal set of local tests, preventing noisy mistakes or clog CI/CD pipelines.

In addition to linting, it will also check that the repository is not in dirty status or that the testing did not leave untracked files.

Planned features

  • A persistent state of each command run - This means that it will know if a specific command was run and if it failed or not. The state would be linked to the repository state, so modifying a tracked file would reset the state to be unknown. (#20)
  • Configuration file where additional actions can be added. (#21)
  • Dependencies between commands. While some tools support dependencies, many do not. You should be able to declare that a specific command will run only after another one already passed. (#22)
  • Ability to generate CI/CD pipelines so the user would spend less time writing non-portable configurations. (#23)

Release files for mk 2.6.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mk 2.6.2
File Size Uploaded
mk-2.6.2.tar.gz 220.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mk 2.6.2
File Interpreter ABI Platform
mk-2.6.2-py3-none-any.whl Python 3 none any Details

Total release size: 245.5 kB

Release files / mk-2.6.2.tar.gz

Download URL mk-2.6.2.tar.gz
Size 220.2 kB
Tags Source
SHA-256 checksum
How to use checksums
262a77200d621f840cdfb082139955db8bb0cf4d554324df2e12e7e95fe7270d
BLAKE2b-256 checksum
How to use checksums
4c8be1250f1c965cc0a378a4741db3c2a4aae7d1968d15ef270d88df1a0d1c86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.1 CPython/3.12.6

Release files / mk-2.6.2-py3-none-any.whl

Download URL mk-2.6.2-py3-none-any.whl
Size 25.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3018673ae6602d3f91eae82d316a27756301965278d8e62019258314cdfc7e09
BLAKE2b-256 checksum
How to use checksums
c556af3c7a31d9e08ff93ef5beb4ba05d45bcd5dc39a4a473a698441a7ee406e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.1 CPython/3.12.6

Release history Release notifications | RSS feed

3.0.0

2 release files

2.7.0

2 release files

This release

2.6.2 This release

2 release files

2.6.1

2 release files

2.6.0

2 release files

2.5.1

2 release files

2.5.0

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.1.0

2 release files

1.0.5

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.7.2

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page