has/README.md

140 lines
3.4 KiB
Markdown
Raw Normal View History

# has
2014-03-04 23:16:26 +01:00
2017-10-14 08:58:53 +02:00
`has` checks presence of various command line tools on the path and also reports their installed version
2014-03-04 23:16:26 +01:00
2018-01-31 05:00:14 +01:00
[![Build Status](https://travis-ci.org/kdabir/has.svg?branch=master)](https://travis-ci.org/kdabir/has)
Add CodeTriage badge to kdabir/has Adds a badge showing the number of people helping this repo on CodeTriage. [![Open Source Helpers](https://www.codetriage.com/kdabir/has/badges/users.svg)](https://www.codetriage.com/kdabir/has) ## What is CodeTriage? CodeTriage is an Open Source app that is designed to make contributing to Open Source projects easier. It works by sending subscribers a few open issues in their inbox. If subscribers get busy, there is an algorithm that backs off issue load so they do not get overwhelmed [Read more about the CodeTriage project](https://www.codetriage.com/what). ## Why am I getting this PR? Your project was picked by the human, @schneems. They selected it from the projects submitted to https://www.codetriage.com and hand edited the PR. How did your project get added to [CodeTriage](https://www.codetriage.com/what)? Roughly 4 months ago, [@kdabir](https://github.com/kdabir) added this project to CodeTriage in order to start contributing. ## What does adding a badge accomplish? Adding a badge invites people to help contribute to your project. It also lets developers know that others are invested in the longterm success and maintainability of the project. You can see an example of a CodeTriage badge on these popular OSS READMEs: - [![](https://www.codetriage.com/rails/rails/badges/users.svg)](https://www.codetriage.com/rails/rails) https://github.com/rails/rails - [![](https://www.codetriage.com/crystal-lang/crystal/badges/users.svg)](https://www.codetriage.com/crystal-lang/crystal) https://github.com/crystal-lang/crystal ## Have a question or comment? While I am a bot, this PR was manually reviewed and monitored by a human - @schneems. My job is writing commit messages and handling PR logistics. If you have any questions, you can reply back to this PR and they will be answered by @schneems. If you do not want a badge right now, no worries, close the PR, you will not hear from me again. Thanks for making your project Open Source! Any feedback is greatly appreciated.
2018-02-03 22:52:36 +01:00
[![Open Source Helpers](https://www.codetriage.com/kdabir/has/badges/users.svg)](https://www.codetriage.com/kdabir/has)
2018-01-31 05:00:14 +01:00
[![demo](demo.svg)](demo.svg)
2015-03-02 05:28:18 +01:00
## How ?
2014-03-04 23:16:26 +01:00
Download the `has` file. There is no dependency apart from `bash` itself
2014-03-04 23:16:26 +01:00
$ has node npm java git gradle
✔ node 8.2.1
✔ npm 5.3.0
✔ java 1.8.0
✔ git 2.14.1
✔ gradle 4.0.1
2014-03-04 23:16:26 +01:00
2017-08-31 16:59:01 +02:00
If everything is good `has` exits with status code `0`. The status code
reflects number of commands **not found** on your path.
$ has node go javac
✔ node 8.2.1
✔ go 1.8.3
✘ javac
And echo the status:
$ echo $?
1
2017-08-28 18:57:04 +02:00
## Installing
Just download the `has` script in your path.
git clone https://github.com/kdabir/has.git && cd has && make install
If you are lazy, you can run `has` directly off the internet as well:
2017-08-28 18:57:04 +02:00
2017-08-29 14:47:59 +02:00
curl -sL https://git.io/_has | bash -s git node npm
2017-08-28 18:57:04 +02:00
✔ git 2.14.1
✔ node 8.2.1
✔ npm 5.3.0
And if that's too much of typing every time, setup an alias
2017-08-28 18:57:04 +02:00
2017-08-29 14:47:59 +02:00
alias has="curl -sL https://git.io/_has | bash -s"
2017-08-28 18:57:04 +02:00
2017-08-31 16:59:01 +02:00
And use it
2017-08-28 18:57:04 +02:00
$ has git
✔ git 2.14.1
## command not understood by has?
Let's say `$ has foobar` returns `foobar not understood`, because `has` may not have whitelisted `foobar`.
In such cases, pass `HAS_ALLOW_UNSAFE=y has foobar`. This is should still check for existance of `foobar` and tries to detect version as well.
2017-08-28 18:57:04 +02:00
2017-10-14 08:58:53 +02:00
## the `.hasrc` file
`has` looks for `.hasrc` file in the directory from where `has` command is issued. This file can contain commands that `has`
will check for. List one command per line. Lines starting with `#` are treated as comments.
Following is example of `.hasrc` file:
```
# tools
git
curl
# interpreters
ruby
node
```
When `has` is run in dir containing this file, it produces:
```
$ has
✔ git 2.19.1
✔ curl 7.54.0
✔ ruby 2.3.1
✔ node 10.7.0
```
Also, CLI arguments passed to `has` are additive to `.hasrc` file. For example, in the same dir, if the following command is fired,
`has` checks for both commands passed from cli args and provided in `.hasrc` file.
```
$ has java
✔ java 11.0.1
✔ git 2.19.1
✔ curl 7.54.0
✔ ruby 2.3.1
✔ node 10.7.0
```
2018-11-16 12:49:46 +01:00
*Pro Tip*: commit `.hasrc` file in root of your project. This can work as a quick check for confirming presence all command
line tools required to build and run your project.
on machines that don't even have `has` installed, your project's `.hasrc` is honored by this command:
`curl -sL https://git.io/_has | bash -s`
2018-11-16 14:11:00 +01:00
> take a look at [.hasrc](https://github.com/kdabir/has/blob/master/.hasrc) file of this repo
2018-11-16 12:49:46 +01:00
2017-10-14 08:58:53 +02:00
## Demo
[![asciicast](https://asciinema.org/a/135790.png)](https://asciinema.org/a/135790)
## Contributing
2017-08-28 19:20:44 +02:00
[![Build Status](https://travis-ci.org/kdabir/has.svg?branch=has)](https://travis-ci.org/kdabir/has)
2017-08-31 11:17:13 +02:00
2017-10-14 08:58:53 +02:00
1. Star the repo, tweet about it, spread the word
2. Update the documentation (i.e. the README file)
3. Adding support for more commands
4. Adding more features to `has`
2017-08-31 11:17:13 +02:00
2017-10-14 08:58:53 +02:00
## Adding Features
If you are contributing a feature, please ensure to check current tests. Add test cases for your feature. Tests are
executed using excellent [bats](https://github.com/bats-core/bats-core) testing framework. Add tests and run `make test`
## ♥