# Pycracks

| PyPI    | [![PyPI Downloads](https://img.shields.io/pypi/dm/pycracks?style=for-the-badge&label=Installations&color=steelblue&logo=pypi)](https://pypistats.org/packages/pycracks) [![PyPI Version](https://img.shields.io/pypi/v/pycracks?style=for-the-badge&logo=pypi)](https://pypi.org/project/PyCracks/) ![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/elc/pycracks/test.yml?style=for-the-badge&logo=githubactions&label=CICD) <br> ![Unreleased Commits](https://img.shields.io/github/commits-difference/elc/pycracks?base=develop&head=master&style=for-the-badge&logo=git&label=Unreleased%20Commits) ![Last Released date](https://img.shields.io/github/last-commit/elc/pycracks/master?style=for-the-badge&logo=git&label=Last%20Released%20on) 	|
|---------| 	|
| Quality | [![Coveralls branch](https://img.shields.io/coverallsCoverage/github/ELC/pycracks?branch=master&style=for-the-badge&logo=coveralls)](https://coveralls.io/github/ELC/pycracks) [![Code Climate maintainability](https://img.shields.io/codeclimate/maintainability/ELC/pycracks?style=for-the-badge&logo=codeclimate)](https://codeclimate.com/github/ELC/pycracks) [![Code Climate technical debt](https://img.shields.io/codeclimate/tech-debt/ELC/pycracks?style=for-the-badge&logo=codeclimate)](https://codeclimate.com/github/ELC/pycracks) <br> ![OSSF-Scorecard Score](https://img.shields.io/ossf-scorecard/github.com/ELC/pycracks?style=for-the-badge&label=OpenSSF%20Score) [![Dependabot](https://img.shields.io/badge/Dependabot-Enabled-brightgreen?style=for-the-badge&logo=dependabot)](https://github.com/ELC/pycracks/blob/master/.github/dependabot.yml)                                                                                                           	|
| Format  | ![Conventional Commits](https://img.shields.io/badge/semantic--release-conventional-steelblue?logo=semantic-release&style=for-the-badge) ![Commitlint](https://img.shields.io/badge/commitlint-%E2%9C%93-brightgreen?logo=commitlint&style=for-the-badge) <br> ![Pre Commit](https://img.shields.io/badge/Pre--Commit-%E2%9C%93-brightgreen?style=for-the-badge&logo=precommit) ![Format](https://img.shields.io/badge/Format-Ruff-brightgreen?style=for-the-badge&color=black) ![Linting](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fcharliermarsh%2Fruff%2Fmain%2Fassets%2Fbadge%2Fv2.json&style=for-the-badge&label=Linting)                                                                                                                                	|
| Legal   | [![FOSSA Status](https://img.shields.io/badge/LICENSE%20SCAN-PASSING-CD2956?style=for-the-badge&logo=fossa)](https://app.fossa.com/projects/git%2Bgithub.com%2FELC%2Fpycracks) [![PyPI - License](https://img.shields.io/pypi/l/pycracks?style=for-the-badge&logo=opensourceinitiative)](./LICENSE) ![Commercial Use](https://img.shields.io/badge/Comercial_Use-%E2%9C%93-brightgreen?style=for-the-badge)                                                                                                                                                                                                                                                                                                                                                                                  	|

💢🔍 breaking change detection in Python - Compatible with Semantic Version and Semantic Release

## Usage

Use the --help flag for detailed options:

```shell
pycracks --help
```

Pycracks can be used in different ways, the most straightforward one is:

```shell
pycracks --paths "tests" --target-version "<to-be-release-version>" --test-command "pytest tests"
```

The `test-command` could be any command and does not need to be Python specific

### Combine with scripts

It is also possible to simplify the `test-command` by always using something like `pipenv scripts` or `npm scripts`

So in the `project.json` / `Pipfile`, one could define the test command and use pycracks with `npm run test` or `pipenv run test` instead:

```shell
pycracks --paths "tests" --target-version "<to-be-release-version>" --test-command "pipenv run test"
```

```shell
pycracks --paths "tests" --target-version "<to-be-release-version>" --test-command "npm run test"
```


## Semantic Release

If using the Python-Semantic-Release module, installable with:

```shell
pipx install python-semantic-release
```

One can integrate it with PyCracks by using:

```shell
pycracks -t "$(semantic-release -v version --print)"
```

## Installation


### With Pipx

Recommended instalation for CICD is through `pipx` with a pinned version:

```shell
pip install pipx==1.2.0
pipx run pycracks==0.18.0 --paths "tests" --target-version "<to-be-release-version>" --test-command "pytest tests"
```

That command will create a virtual environment just for pycracks and run the test command from there.

### With pip

Instalation can be done with pip as usual:

```shell
pip install pycracks
```

Pipenv and poetry equivalents can be used as well.

## F.A.Q.

## License

[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FELC%2Fpycracks.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2FELC%2Fpycracks)
