πFeatures Β β’Β π Installation Β β’Β πUsage Β β’Β π»CLI Β β’Β π‘Examples
β Requirements Β β’Β π³Docker
What mdreftidy does:
Turn this (./mdreftidy/examples/SIMPLE.md):
# Example markdown file
## Reference link: Out of order
[Reference link: Out of order 1][3], [Reference link: Out of order 2][2].
[2]: ./reference-link-out-of-order-2
## Footnotes
[6]: ./unused-reference-link-6
[3]: ./reference-link-out-of-order-3
[1]: ./unused-reference-link-1
Into this (./mdreftidy/examples/SIMPLE.tidied.md):
# Example markdown file
## Reference link: Out of order
[Reference link: Out of order 1][1], [Reference link: Out of order 2][2].
## Footnotes
[1]: ./reference-link-out-of-order-3
[2]: ./reference-link-out-of-order-2
- Renumbers references by order used.
- Optionally removes unused references.
- Optionally moves references to the bottom.
- Optionally sorts reference blocks.
# Install from pypi (https://pypi.org/project/mdreftidy/)
pip install mdreftidy
# Install from git (https://github.com/realazthat/mdreftidy)
pip install git+https://github.com/realazthat/mdreftidy.git@v0.6.1
Example README: (./mdreftidy/examples/SIMPLE.md):
# Example markdown file
## Reference link: Out of order
[Reference link: Out of order 1][3], [Reference link: Out of order 2][2].
[2]: ./reference-link-out-of-order-2
## Footnotes
[6]: ./unused-reference-link-6
[3]: ./reference-link-out-of-order-3
[1]: ./unused-reference-link-1
Generating the README:
$ python -m mdreftidy.cli ./mdreftidy/examples/SIMPLE.md --move-to-bottom --remove-unused --sort-ref-blocks --renumber -o - 2>/dev/null
# Example markdown file
## Reference link: Out of order
[Reference link: Out of order 1][1], [Reference link: Out of order 2][2].
## Footnotes
[1]: ./reference-link-out-of-order-3
[2]: ./reference-link-out-of-order-2
All together now:
- Example:
- Original: ./mdreftidy/examples/SIMPLE.md.
- Tidied: ./mdreftidy/examples/SIMPLE.tidied.md.
- Generation script: ./mdreftidy/examples/simple_example.sh.
- Linux-like environment
- Why: Uses pexpect.spawn().
- Python 3.8+
- Why: Some dev dependencies require Python 3.8+.
- 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).
Docker images are published to ghcr.io/realazthat/mdreftidy at each tag.
# View the template file.
cat "mdreftidy/examples/SIMPLE.md"
# Use the published images at ghcr.io/realazthat/mdreftidy.
# /data in the docker image is the working directory, so paths are simpler.
docker run --rm --tty \
-v "${PWD}:/data" \
ghcr.io/realazthat/mdreftidy:v0.6.1 \
"mdreftidy/examples/SIMPLE.md" \
-o "mdreftidy/examples/SIMPLE.tidied.md" \
--move-to-bottom --remove-unused --sort-ref-blocks --renumber
# Now --check to verify:
docker run --rm --tty \
-v "${PWD}:/data" \
ghcr.io/realazthat/mdreftidy:v0.6.1 \
--check \
"mdreftidy/examples/SIMPLE.tidied.md" \
--move-to-bottom --remove-unused --sort-ref-blocks --renumber
# View the remotified file.
cat "mdreftidy/examples/SIMPLE.tidied.md"
If you want to build the image yourself, you can use the Dockerfile in the repository.
docker build -t my-mdreftidy-image .
# View the template file.
cat "mdreftidy/examples/SIMPLE.md"
# /data in the docker image is the working directory, so paths are simpler.
docker run --rm --tty \
-v "${PWD}:/data" \
my-mdreftidy-image \
"mdreftidy/examples/SIMPLE.md" \
-o "mdreftidy/examples/SIMPLE.tidied.md" \
--move-to-bottom --remove-unused --sort-ref-blocks --renumber
# Now --check to verify:
docker run --rm --tty \
-v "${PWD}:/data" \
my-mdreftidy-image \
--check \
"mdreftidy/examples/SIMPLE.tidied.md" \
--move-to-bottom --remove-unused --sort-ref-blocks --renumber
# View the remotified file.
cat "mdreftidy/examples/SIMPLE.tidied.md"
We use SemVer for versioning. For the versions available, see the tags on this repository.
This project is licensed under the MIT License - see the ./LICENSE.md file for details.
Main libraries used in mdreftidy are:
- Markdown AST: mistletoe.
- Colorful CLI help: rich-argparse.
Not complete, and not necessarily up to date. Make a PR (contributions) to insert/modify.
Project | Stars | Last Update | Language | Platform | Similarity X Obviousness |
---|---|---|---|---|---|
dce/mdrenum | 2 | 2023/11/16 |
JS | CLI | βββββ |
unified-utils | 4 | JS | remark/CLI | βββββ |
-
For running
pre.sh
(Linux-like environment).-
From ./.github/dependencies.yml, which is used for the GH Action to do a fresh install of everything:
bash: scripts. findutils: scripts. grep: tests. xxd: tests. git: scripts, tests. xxhash: scripts (changeguard). rsync: out-of-directory test. expect: for `unbuffer`, useful to grab and compare ansi color symbols. jq: dependency for [yq](https://github.com/kislyuk/yq), which is used to generate the README; the README generator needs to use `tomlq` (which is a part of `yq`) to query `pyproject.toml`.
-
Requires
pyenv
, or an exact matching version of python as in .python-version (which is currently3.8.0
). -
jq
, (installation) required for yq, which is itself required for our ./README.md generation, which usestomlq
(from the yq package) to include version strings from ./pyproject.toml. -
act (to run the GH Action locally):
- Requires nodejs.
- Requires Go.
- docker.
-
Generate animation:
- docker
-
docker (for building the docker image).
-
- (Optionally) Fork the
develop
branch. - Stage your files:
git add path/to/file.py
. bash ./scripts/pre.sh
, this will format, lint, and test the code.git status
check if anything changed (generated ./README.md for example), if so,git add
the changes, and go back to the previous step.git commit -m "..."
.- Make a PR to
develop
(or push to develop if you have the rights).
These instructions are for maintainers of the project.
- In the
develop
branch, runbash ./scripts/pre.sh
to ensure everything is in order. - In the
develop
branch, bump the version in ./pyproject.toml, following semantic versioning principles. Also modify thelast_release
andlast_stable_release
in the[tool.mdreftidy-project-metadata]
table as appropriate. Runbash ./scripts/pre.sh
to ensure everything is in order. - In the
develop
branch, commit these changes with a message like"Prepare release X.Y.Z"
. (See the contributions section above). - Merge the
develop
branch into themaster
branch:git checkout master && git merge develop --no-ff
. master
branch: Tag the release: Create a git tag for the release withgit tag -a vX.Y.Z -m "Version X.Y.Z"
.- Publish to PyPI: Publish the release to PyPI with
bash ./scripts/deploy-to-pypi.sh
. - Push to GitHub: Push the commit and tags to GitHub with
git push && git push --tags
. - The
--no-ff
option adds a commit to the master branch for the merge, so refork the develop branch from the master branch:git checkout develop && git merge master
. - Push the develop branch to GitHub:
git push origin develop
.