Skip to content

CLI to check if your repository/directory files have changed over the span of a script.

License

Notifications You must be signed in to change notification settings

realazthat/changeguard

Repository files navigation

ChangeGuard

Top language GitHub License PyPI - Version Python Version

Status Stable Unstable
Master Build and Test since tagged last commit
Develop Build and Test since tagged since tagged last commit

CLI to check if your repository/directory files have changed over the span of a script.

What

Like hashdeep, but customized to check if any of the original files in a repository/directory change over the course of a precommit script.

Features

  • Can use any sha256sum-like command (uses xxhash by default).
  • Use .changeguard-ignore to ignore files that should not be checked for changes.

Getting Started

Install

Tested on

  • WSL2 Ubuntu 20.04, Python 3.8.0
  • Ubuntu 20.04, Python 3.8.0, 3.9.0, 3.10.0, 3.11.0, 3.12.0, tested in GitHub Actions workflow (build-and-test.yml).

Requirements:

  • Linux-like environment
    • Why: Uses pexpect.spawn().
  • Python 3.8+
    • Why: Some dev dependencies require Python 3.8+.
# Install from pypi (https://pypi.org/project/changeguard/)
pip install changeguard

# Install from git (https://github.com/realazthat/changeguard)
pip install git+https://github.com/realazthat/[email protected]

Use

Contributions

Development environment: Linux-like

  • For running pre.sh (Linux-like environment).
    • Requires pyenv, or an exact matching version of python as in .python-version.
    • nvm for prettier (markdown formatting).
    • bash, grep, xxd, git, xxhash (for scripts/workflows/tests).
    • jq, (installation) required for yq, which is itself required for our README.md generation, which uses tomlq (from the yq package) to include version strings from pyproject.toml.
    • Requires nodejs (for act).
    • Requires go (to run act).
    • docker (for act).

Commit Process

  1. (Optionally) Fork the develop branch.
  2. Stage your files: git add path/to/file.py.
  3. bash scripts/pre.sh, this will format, lint, and test the code.
  4. git status check if anything changed (generated README.md for example), if so, git add the changes, and go back to the previous step.
  5. git commit -m "...".
  6. Make a PR to develop (or push to develop if you have the rights).

Release Process

These instructions are for maintainers of the project.

  1. develop branch: Run bash scripts/pre.sh to ensure everything is in order.
  2. develop branch: Bump the version in pyproject.toml, following semantic versioning principles. Also modify the last_unstable_release and last_stable_release in the [tool.changeguard-project-metadata] table as appropriate.
  3. develop branch: Commit these changes with a message like "Prepare release X.Y.Z". (See the contributions section above).
  4. master branch: Merge the develop branch into the master branch: git checkout master && git merge develop --no-ff.
  5. master branch: Tag the release: Create a git tag for the release with git tag -a vX.Y.Z -m "Version X.Y.Z".
  6. Publish to PyPI: Publish the release to PyPI with bash scripts/deploy-to-pypi.sh.
  7. Push to GitHub: Push the commit and tags to GitHub with git push and git push --tags.
  8. git checkout develop && git merge master The --no-ff option adds a commit to the master branch for the merge, so refork the develop branch from the master branch.
  9. git push origin develop Push the develop branch to GitHub.

About

CLI to check if your repository/directory files have changed over the span of a script.

Resources

License

Stars

Watchers

Forks