PHPackages                             cytopia/awesome-ci - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [DevOps &amp; Deployment](/categories/devops)
4. /
5. cytopia/awesome-ci

ActiveLibrary[DevOps &amp; Deployment](/categories/devops)

cytopia/awesome-ci
==================

Lot's of tools for git, file and static source code analysis.

0.12(7y ago)3387.2k↓50%22[6 issues](https://github.com/cytopia/awesome-ci/issues)[4 PRs](https://github.com/cytopia/awesome-ci/pulls)MITShell

Since Sep 3Pushed 3y ago14 watchersCompare

[ Source](https://github.com/cytopia/awesome-ci)[ Packagist](https://packagist.org/packages/cytopia/awesome-ci)[ Docs](https://github.com/cytopia/awesome-ci)[ RSS](/packages/cytopia-awesome-ci/feed)WikiDiscussions master Synced yesterday

READMEChangelog (3)DependenciesVersions (12)Used By (0)

[awesome-ci](https://github.com/cytopia/awesome-ci)
===================================================

[](#awesome-ci)

[![Build Status](https://camo.githubusercontent.com/6314cdb39d753165244c57c731b0a940cc6d0141a8a44b2b07501205d3bcd346/68747470733a2f2f7472617669732d63692e6f72672f6379746f7069612f617765736f6d652d63692e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/cytopia/awesome-ci)[![Latest Stable Version](https://camo.githubusercontent.com/5f4d97b84f04aec3cfec9d30487be6a8c11a2cf79dfe562ee6e963da2f4dba2c/68747470733a2f2f706f7365722e707567782e6f72672f6379746f7069612f617765736f6d652d63692f762f737461626c65)](https://packagist.org/packages/cytopia/awesome-ci)[![Total Downloads](https://camo.githubusercontent.com/5c30692fe3850d0351bcde00fd906e7f0637489a5d781a449f8c0a2a3313dbc9/68747470733a2f2f706f7365722e707567782e6f72672f6379746f7069612f617765736f6d652d63692f646f776e6c6f616473)](https://packagist.org/packages/cytopia/awesome-ci)[![Docker image](https://camo.githubusercontent.com/9fd4ec84729fcc513c13c0b587c893ad4e7f3e7962c2d57e811a951989d6c37a/68747470733a2f2f696d616765732e6d6963726f6261646765722e636f6d2f6261646765732f696d6167652f6379746f7069612f617765736f6d652d63692e737667)](https://hub.docker.com/r/cytopia/awesome-ci)[![License](https://camo.githubusercontent.com/542b347dfb4ee227ce567756fd6f3a0515f8ee1d1323b188fa37ccd532595bc1/68747470733a2f2f706f7365722e707567782e6f72672f6379746f7069612f617765736f6d652d63692f6c6963656e7365)](http://opensource.org/licenses/MIT)

> ## ⚠️ DEPRECATION WARNING
>
> [](#warning-deprecation-warning)
>
> This repository is deprecated. Please use the following docker images below instead:
>
> #### All [\#awesome-ci](https://github.com/topics/awesome-ci) Docker images
>
> [](#all-awesome-ci-docker-images)
>
> [ansible-lint](https://github.com/cytopia/docker-ansible-lint) **•**[ansible](https://github.com/cytopia/docker-ansible) **•**[awesome-ci](https://github.com/cytopia/awesome-ci) **•**[bandit](https://github.com/cytopia/docker-bandit) **•**[black](https://github.com/cytopia/docker-black) **•**[checkmake](https://github.com/cytopia/docker-checkmake) **•**[eslint](https://github.com/cytopia/docker-eslint) **•**[file-lint](https://github.com/cytopia/docker-file-lint) **•**[gofmt](https://github.com/cytopia/docker-gofmt) **•**[goimports](https://github.com/cytopia/docker-goimports) **•**[golint](https://github.com/cytopia/docker-golint) **•**[jsonlint](https://github.com/cytopia/docker-jsonlint) **•**[kubeval](https://github.com/cytopia/docker-kubeval) **•**[linkcheck](https://github.com/cytopia/docker-linkcheck) **•**[mypy](https://github.com/cytopia/docker-mypy) **•**[php-cs-fixer](https://github.com/cytopia/docker-php-cs-fixer) **•**[phpcbf](https://github.com/cytopia/docker-phpcbf) **•**[phpcs](https://github.com/cytopia/docker-phpcs) **•**[phplint](https://github.com/cytopia/docker-phplint) **•**[pycodestyle](https://github.com/cytopia/docker-pycodestyle) **•**[pydocstyle](https://github.com/cytopia/docker-pydocstyle) **•**[pylint](https://github.com/cytopia/docker-pylint) **•**[terraform-docs](https://github.com/cytopia/docker-terraform-docs) **•**[terragrunt-fmt](https://github.com/cytopia/docker-terragrunt-fmt) **•**[terragrunt](https://github.com/cytopia/docker-terragrunt) **•**[yamlfmt](https://github.com/cytopia/docker-yamlfmt) **•**[yamllint](https://github.com/cytopia/docker-yamllint)
>
> #### Docker images
>
> [](#docker-images)
>
> Save yourself from installing lot's of dependencies and pick a dockerized version of your favourite linter below for reproducible local or remote CI tests:
>
> GitHubDockerHubTypeDescription[awesome-ci](https://github.com/cytopia/awesome-ci)[![aci-hub-img](https://camo.githubusercontent.com/b0b1cd9f9195294d689d611c9fa907f6cda8a0b14ccf7ab7ffbc0b6e2ef4a2da/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f617765736f6d652d63692e737667)](https://hub.docker.com/r/cytopia/awesome-ci)BasicTools for git, file and static source code analysis[file-lint](https://github.com/cytopia/docker-file-lint)[![flint-hub-img](https://camo.githubusercontent.com/08d45e63110ceec4d18e306bc75cc9015957c53bc099e37634f51fe650fb1e05/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f66696c652d6c696e742e737667)](https://hub.docker.com/r/cytopia/file-lint)BasicBaisc source code analysis[linkcheck](https://github.com/cytopia/docker-linkcheck)[![linkcheck-hub-img](https://camo.githubusercontent.com/79f7e93cdc2b4c621e047d06cda0292df2098b52d6936b8b2c75bd0f553484d5/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f6c696e6b636865636b2e737667)](https://hub.docker.com/r/cytopia/file-lint)BasicSearch for URLs in files and validate their HTTP status code[ansible](https://github.com/cytopia/docker-ansible)[![ansible-hub-img](https://camo.githubusercontent.com/720a2fe3e58a347b7f0d19acb8f41f632d8e50598ec6353f732b262ccefa6b88/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f616e7369626c652e737667)](https://hub.docker.com/r/cytopia/ansible)AnsibleMultiple versions and flavours of Ansible[ansible-lint](https://github.com/cytopia/docker-ansible-lint)[![alint-hub-img](https://camo.githubusercontent.com/94cdbb9893f8cc6ddbd24a2c2a1c8b9e551d309e7acfe70e1c3fd8e9370a3960/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f616e7369626c652d6c696e742e737667)](https://hub.docker.com/r/cytopia/ansible-lint)AnsibleLint Ansible[gofmt](https://github.com/cytopia/docker-gofmt)[![gfmt-hub-img](https://camo.githubusercontent.com/58e199a75169ac8fb71cd3f05a3883fa5011e3fb902d6d0f2ade375ed56501f7/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f676f666d742e737667)](https://hub.docker.com/r/cytopia/gofmt)GoFormat Go source code **\[1\]**[goimports](https://github.com/cytopia/docker-goimports)[![gimp-hub-img](https://camo.githubusercontent.com/c7b86bcde15c53616aa00a7775719806b44a3534cbbb479cabb40ec97c221282/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f676f696d706f7274732e737667)](https://hub.docker.com/r/cytopia/goimports)GoFormat Go source code **\[1\]**[golint](https://github.com/cytopia/docker-golint)[![glint-hub-img](https://camo.githubusercontent.com/d7ec7b72e07a70a018d02b87c00d4a325994abb9f5872afb0d9ec65b2a24fdce/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f676f6c696e742e737667)](https://hub.docker.com/r/cytopia/golint)GoLint Go code[eslint](https://github.com/cytopia/docker-eslint)[![elint-hub-img](https://camo.githubusercontent.com/599c373414455b17774461cdbd64ca1cfba63b20607a974fbd7aa42554694871/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f65736c696e742e737667)](https://hub.docker.com/r/cytopia/eslint)JavascriptLint Javascript code[jsonlint](https://github.com/cytopia/docker-jsonlint)[![jlint-hub-img](https://camo.githubusercontent.com/3ce5f770ca03f9da115098d8a1b08b54adf9bbc0ae1a640eee374526c8b5d9cb/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f6a736f6e6c696e742e737667)](https://hub.docker.com/r/cytopia/jsonlint)JSONLint JSON files **\[1\]**[kubeval](https://github.com/cytopia/docker-kubeval)[![kubeval-hub-img](https://camo.githubusercontent.com/45a998df2f331a97148d699b46ad8bf0b3c24edde476acf71527a5566485022c/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f6b75626576616c2e737667)](https://hub.docker.com/r/cytopia/kubeval)K8sLint Kubernetes files[checkmake](https://github.com/cytopia/docker-checkmake)[![cm-hub-img](https://camo.githubusercontent.com/8837c60d4475562e436c38c1b1f498271e94466238852a94cef55284b81bb69f/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f636865636b6d616b652e737667)](https://hub.docker.com/r/cytopia/checkmake)MakeLint Makefiles[phpcbf](https://github.com/cytopia/docker-phpcbf)[![pcbf-hub-img](https://camo.githubusercontent.com/5f01d60ee2755af004affa14ad0f6669b2239d5c3c76d8490c0e8a0dd39f12d1/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f7068706362662e737667)](https://hub.docker.com/r/cytopia/phpcbf)PHPPHP Code Beautifier and Fixer[phpcs](https://github.com/cytopia/docker-phpcs)[![pcs-hub-img](https://camo.githubusercontent.com/f166a093d0889de112763a719531bf9114c7628fcbf8bbd49e4c885fe39ee77e/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f70687063732e737667)](https://hub.docker.com/r/cytopia/phpcs)PHPPHP Code Sniffer[phplint](https://github.com/cytopia/docker-phplint)[![plint-hub-img](https://camo.githubusercontent.com/a2e6558decfc55e7d17ac7c4b24cf889d57f0fe3227505a75fc747f5a9a1ebf0/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f7068706c696e742e737667)](https://hub.docker.com/r/cytopia/phplint)PHPPHP Code Linter **\[1\]**[php-cs-fixer](https://github.com/cytopia/docker-php-cs-fixer)[![pcsf-hub-img](https://camo.githubusercontent.com/f76718ffd00d70a53d7f1d0a7c17c1fd45326b42d0461e71ea7d862284b19a22/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f7068702d63732d66697865722e737667)](https://hub.docker.com/r/cytopia/php-cs-fixer)PHPPHP Coding Standards Fixer[bandit](https://github.com/cytopia/docker-bandit)[![bandit-hub-img](https://camo.githubusercontent.com/090ca3d8aba2c2c755f5d1cb39ce6750011cc0f4ec2fc342ca0778c28157026a/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f62616e6469742e737667)](https://hub.docker.com/r/cytopia/bandit)PythonA security linter from PyCQA[black](https://github.com/cytopia/docker-black)[![black-hub-img](https://camo.githubusercontent.com/ee11e4239333392fb6bfdbcbcacc9dc91d946a3b801eedafc9b72542d72b65f4/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f626c61636b2e737667)](https://hub.docker.com/r/cytopia/black)PythonThe uncompromising Python code formatter[mypy](https://github.com/cytopia/docker-mypy)[![mypy-hub-img](https://camo.githubusercontent.com/acb254f8ea4da8708617e21a98c5ae11a58efdcacbeec5596c5a80b83a627ed5/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f6d7970792e737667)](https://hub.docker.com/r/cytopia/mypy)PythonStatic source code analysis[pycodestyle](https://github.com/cytopia/docker-pycodestyle)[![pycs-hub-img](https://camo.githubusercontent.com/1e6901dc9e039016346f77e93d6a1f2bb5f2571f64932c6ade87e27de1142546/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f7079636f64657374796c652e737667)](https://hub.docker.com/r/cytopia/pycodestyle)PythonPython style guide checker[pydocstyle](https://github.com/cytopia/docker-pydocstyle)[![pyds-hub-img](https://camo.githubusercontent.com/a6808421ac3ec4f17123c9b276b5001c45321b5ee832f28c35b1c664d763137a/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f7079646f637374796c652e737667)](https://hub.docker.com/r/cytopia/pydocstyle)PythonPython docstyle checker[pylint](https://github.com/cytopia/docker-pylint)[![pylint-hub-img](https://camo.githubusercontent.com/a3ed8c063056c1f4d81efa572438a0cc0afe83ce00bef70bd16f964c92acfec1/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f70796c696e742e737667)](https://hub.docker.com/r/cytopia/pylint)PythonPython source code, bug and quality checker[terraform-docs](https://github.com/cytopia/docker-terraform-docs)[![tfdocs-hub-img](https://camo.githubusercontent.com/fb5149d48cbdc6dde1ca31a0748b35f6ec5c6fa32b0cb416403a54a7a4963a74/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f7465727261666f726d2d646f63732e737667)](https://hub.docker.com/r/cytopia/terraform-docs)TerraformTerraform doc generator (TF 0.12 ready) **\[1\]**[terragrunt](https://github.com/cytopia/docker-terragrunt)[![tg-hub-img](https://camo.githubusercontent.com/b4cb6f58d03a530f8ad107b2673aa28ed7cd22bead6e2bb186d868eb48535c36/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f74657272616772756e742e737667)](https://hub.docker.com/r/cytopia/terragrunt)TerraformTerragrunt and Terraform[terragrunt-fmt](https://github.com/cytopia/docker-terragrunt-fmt)[![tgfmt-hub-img](https://camo.githubusercontent.com/71f07757628362dd82f7ff1b84d0350f48716860647ca62c7ccf58bfdc751613/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f74657272616772756e742d666d742e737667)](https://hub.docker.com/r/cytopia/terragrunt-fmt)Terraform`terraform fmt` for Terragrunt files **\[1\]**[yamlfmt](https://github.com/cytopia/docker-yamlfmt)[![yfmt-hub-img](https://camo.githubusercontent.com/68af66eb3a0f6ab60bfed4248abb6139d07116118ca11c5de06f2b1a5bfc9548/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f79616d6c666d742e737667)](https://hub.docker.com/r/cytopia/yamlfmt)YamlFormat Yaml files **\[1\]**[yamllint](https://github.com/cytopia/docker-yamllint)[![ylint-hub-img](https://camo.githubusercontent.com/a957b7fdbb10fff13a5aef409dfbf5a4027da559f02a8b6f942da3a443c7272b/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6379746f7069612f79616d6c6c696e742e737667)](https://hub.docker.com/r/cytopia/yamllint)YamlLint Yaml files

> **\[1\]** Uses a shell wrapper to add **enhanced functionality** not available by original project.

---

[![Docker image](https://camo.githubusercontent.com/675b0c61403aaca8548dda2bdd87c66c369513237fb2a2c184e037ef6c1a6d90/687474703a2f2f646f636b6572692e636f2f696d6167652f6379746f7069612f617765736f6d652d63693f266b696c6c5f63616368653d31)](https://hub.docker.com/r/cytopia/awesome-ci)

**Runs on**

[![Linux](https://raw.githubusercontent.com/cytopia/icons/master/64x64/linux.png)](https://www.kernel.org/)[![FreeBSD](https://raw.githubusercontent.com/cytopia/icons/master/64x64/freebsd.png)](https://www.freebsd.org)[![OSX](https://raw.githubusercontent.com/cytopia/icons/master/64x64/osx.png)](https://www.apple.com/osx)

Continuous Integration command line tools for git repositories, file characteristics, syntax errors and static source code analysis.

Awesome-CI is capable of finding various problems in your code repository as well as fixing them automatically.

---

**Table of Contents**

1. [Tools](#tools)
2. [Learn / Validate](#learn--validate)
3. [Fix](#fix)
4. [Custom regex contributions](#custom-regex-contributions)
5. [General usage](#general-usage)
6. [Installation](i#installation)
    1. [Requirements](#requirements)
    2. [Install OSX](#install-osx)
    3. [Install Linux/BSD](#install-linuxbsd)
7. [Awesome CI Docker image](#awesome-ci-docker-image)
8. [Documentation](#documentation)
9. [License](#license)

Tools
-----

[](#tools)

All checks have the option to only check by one or more file **extensions**, by **shebang** as well as to **exclude** one or more folders from the whole search.

**Note:** Fixable options are currently in testing phase. Please report any bugs.

TypeToolFixableDescriptionGit[git-conflicts](bin/git-conflicts)Scan files and check if they contain git conflicts.Git[git-ignored](bin/git-ignored)Scan git directory and see if ignored files are still in git cache.File[file-cr](bin/file-cr)✓Scan files and check if they contain CR (Carriage Return only).File[file-crlf](bin/file-crlf)✓Scan files and check if they contain CRLF (Windows Line Feeds).File[file-empty](bin/file-empty)Scan files and check if they are empty (0 bytes).File[file-nullbyte-char](bin/file-nullbyte-char)✓Scan files and check if they contain a null-byte character (\\x00).File[file-trailing-newline](bin/file-trailing-newline)✓Scan files and check if they contain a trailing newline.File[file-trailing-single-newline](bin/file-trailing-single-newline)✓Scan files and check if they contain exactly one trailing newline.File[file-trailing-space](bin/file-trailing-space)✓Scan files and check if they contain trailing whitespaces.File[file-utf8](bin/file-utf8)✓Scan files and check if they have a non UTF-8 encoding.File[file-utf8-bom](bin/file-utf8-bom)✓Scan files and check if they contain BOM (Byte Order Mark): ``.Syntax[syntax-bash](bin/syntax-bash)Scan shell files for bash syntax errors.Syntax[syntax-css](bin/syntax-css)Scan CSS files for CSS syntax errors.Syntax[syntax-js](bin/syntax-js)Scan JS files for JS syntax errors.Syntax[syntax-json](bin/syntax-json)Scan files for JSON syntax errors.Syntax[syntax-markdown](bin/syntax-markdown)Scan files for Markdown syntax errors.Syntax[syntax-perl](bin/syntax-perl)Scan Perl files for Perl syntax errors.Syntax[syntax-php](bin/syntax-php)Scan files for PHP syntax errors.Syntax[syntax-python](bin/syntax-python)Scan Python files for Python syntax errors.Syntax[syntax-ruby](bin/syntax-ruby)Scan Ruby files for Ruby syntax errors.Syntax[syntax-scss](bin/syntax-scss)Scan SCSS files for SCSS syntax errors.Syntax[syntax-sh](bin/syntax-sh)Scan shell files for /bin/sh syntax errors.Code Conventions[inline-css](bin/inline-css)Scan files and check if they contain inline css code.Code Conventions[inline-js](bin/inline-js)Scan files and check if they contain inline javascript code.Regex[regex-grep](bin/regex-grep)`egrep` (`grep -E`) regex version to scan files for an occurance.Regex[regex-perl](bin/regex-perl)`perl` regex version to scan files for an occurance.Learn / validate
----------------

[](#learn--validate)

All of the above scripts offer the `--dry` option which will only show you the built command without actually executing it:

```
$ regex-grep --path=. --ignore=".git,.svn" --shebang=sh --size --text \
--custom="if[[:space:]]*\[\[" --dry

find . -type f -not \( -path "./.git*" -o -path "./.svn*" \) ! -size 0 -print0 | \
   xargs -0 -P 8 -n1 grep -Il '' | \
   tr '\n' '\0' | \
   xargs -0 -P 8 -n1 awk '/^#!.*(\/sh|[[:space:]]+sh)/{print FILENAME}' | \
   tr '\n' '\0' | \
   xargs -0 -P 8 -n1  sh -c 'if [ -f "${1}" ]; then grep --color=always -inHE "if[[:space:]]*\[\[" "$1" || true; fi' --
```

Fix
---

[](#fix)

Some of the above scripts offer the `--fix` option (see table above), with which you are actually able to fix the problem. You can also combine it with `--dry` to see how the actual fix command looks like:

```
$ file-utf8 --path=dump.sql --fix --dry

find dump.sql -type f -print0 | \
   xargs -0 -P 8 -n1  sh -c 'if [ -f "${1}" ]; then isutf8 "$1" >/dev/null || (TERM=vt100 vi -u NONE -n -es -c "set fileencoding=utf8" -c "wq" "$1" > /dev/tty && echo "Fixing: $1" || echo "FAILED: $1"); fi' --
```

Custom regex contributions
--------------------------

[](#custom-regex-contributions)

`regex-grep` and `regex-perl` have a lot of potential for doing custom project validation.

In order to give you an idea, have a look at the compiled [Regex Contributions](REGEX_CONTRIBUTIONS.md).

Please use pull requests to add useful checks.

General Usage
-------------

[](#general-usage)

- All tools share the same pattern (except `git-ignored`) and can be used with the same command line arguments.
- Some tools have an additional option `--custom=""` to overwrite the command itself (this is explained and shown in detail in each command's `--help` option).

**Options:**

```
# Required:
  --path            # Specify the path where to scan

# Optional pattern (each option is logically and-ed):
  --fix             # Fix the problems for the specified files (not every check)

  --text            # Only scan non-binary files
  --size            # Only scan non-empty files (greater 0 bytes)
  --shebang         # Only scan files (shell scripts) that match a certain shebang
  --extension       # Only scan files with these file extensions
  --ignore          # Ignore files/folders

# Optional misc:
  --config          # Specify configuration file
  --confpre         # Alter configuration directive prefix for this check
  --verbose         # Show files and commands as being processed
  --debug           # Show additional debug messages
  --list            # Only show files that would be processed (no processing)
  --dry             # Show command that would be executed (no processing)

# System
  --help            # Show help
  --info            # Show version of required binaries
  --version         # Show tool version
```

Installation
------------

[](#installation)

### Requirements

[](#requirements)

Awesome-ci requires the following tools to be installed:

- `dos2unix`
- `eslint`
- `file`
- `git`
- `jsonlint`
- `mdl`
- `perl`
- `php`
- `python`
- `ruby`
- `scss_lint`
- `shellcheck`

### Install OSX

[](#install-osx)

```
brew tap cytopia/tap
brew install awesome-ci
```

### Install Linux/BSD

[](#install-linuxbsd)

```
# Install to /usr/bin
./configure
make install

# Instal to /usr/local/bin
./configure --prefix=/usr/local
make install

# Install to /opt/bin
./configure --prefix=/opt
make install
```

Awesome CI Docker image
-----------------------

[](#awesome-ci-docker-image)

[![Docker image](https://camo.githubusercontent.com/675b0c61403aaca8548dda2bdd87c66c369513237fb2a2c184e037ef6c1a6d90/687474703a2f2f646f636b6572692e636f2f696d6167652f6379746f7069612f617765736f6d652d63693f266b696c6c5f63616368653d31)](https://hub.docker.com/r/cytopia/awesome-ci)

Instead of installing awesome-ci and all its required dependencies locally on your computer, you can also use the bundled Docker image **[cytopia/awesome-ci](https://hub.docker.com/r/cytopia/awesome-ci/)** which has everything pre-installed and is built nightly by travis-ci.

```
docker run -v ${PWD}:/ac cytopia/awesome-ci file-crlf --path=/ac
```

The above example is using `file-crlf` to scan the current directory for files containing Windows newlines:

- `${PWD}` (the current host directory) is mounted into the container's `/ac` directoy
- `file-crlf` path then points (inside the container) to `/ac` (which is the current host directory)
- `/ac` can actually be named by whatever name you want

If you use an awesome-ci configuration which is not inside the directory you want to check, you will also have to mount that into the container:

```
docker run \
    -v /host/path/to/awesome-ci.conf:/etc/awesome-ci.conf \
    -v ${PWD}:/ac cytopia/awesome-ci file-crlf --path=/ac --config=/etc/awesome-ci.conf
```

Documentation
-------------

[](#documentation)

To find out more about awesome-ci, have a look at the following links.

- [Dependencies](dependencies/)
- [Examples](EXAMPLES.md)
- [Regex Contributions](REGEX_CONTRIBUTIONS.md)

License
-------

[](#license)

[MIT License](LICENSE.md)

Copyright (c) 2018 [cytopia](https://github.com/cytopia)

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity43

Moderate usage in the ecosystem

Community18

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 98.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~82 days

Recently: every ~191 days

Total

11

Last Release

2764d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/527dbe351b75d33be6d5428502783ceb57e86949892a0a0062f24199772aabae?d=identicon)[cytopia](/maintainers/cytopia)

---

Top Contributors

[![cytopia](https://avatars.githubusercontent.com/u/12533999?v=4)](https://github.com/cytopia "cytopia (169 commits)")[![wesley-dean-flexion](https://avatars.githubusercontent.com/u/45051395?v=4)](https://github.com/wesley-dean-flexion "wesley-dean-flexion (2 commits)")

---

Tags

analysisawesome-cicicoding-stylecontinuous-integrationcrlfdockerdocker-imageperlphppythonregexregex-contributionsrubyscripts-offersyntax-checkertrailing-newlinetrailing-spacesutf8regexcontinuous integrationlinter

### Embed Badge

![Health badge](/badges/cytopia-awesome-ci/health.svg)

```
[![Health](https://phpackages.com/badges/cytopia-awesome-ci/health.svg)](https://phpackages.com/packages/cytopia-awesome-ci)
```

###  Alternatives

[ondram/ci-detector

Detect continuous integration environment and provide unified access to properties of current build

22255.4M49](/packages/ondram-ci-detector)[techpivot/phalcon-ci-installer

Composer integration for PHP applications to install the Phalcon framework as an extension in the PHP runtime for various hosted CI services including TravisCI, CircleCI, Scrutinizer, Shippable and Codeship.

27130.8k8](/packages/techpivot-phalcon-ci-installer)[etsy/try-lib

Try lib : send your diffs to your CI cluster.

1531.5k](/packages/etsy-try-lib)[epam/ci-bundle

This bundle provides functionality for Continuous Integration &amp; Automated Deployments for Symfony-based projects

297.6k](/packages/epam-ci-bundle)[in2code/in2publish_core

Content publishing extension to connect stage and production server

40143.4k](/packages/in2code-in2publish-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
