chore(ci): checking links and spell checking (#417)

* chore(ci): checking links and spell checking

* chore(ci): move markdown-link-check to GitHub ci

Because pre-commit.ci does not have access to the internet...

* fix(lib): revert `reverse-...` utils because of warnings

* chore(ci): checking links and spell checking

* chore(ci): move markdown-link-check to GitHub ci

Because pre-commit.ci does not have access to the internet...

* fix(docs): myst-parser xref cannot end with .html

* fix(docs): oops
This commit is contained in:
Jérome Eertmans
2024-04-17 17:59:40 +02:00
committed by GitHub
parent 4e7abe8706
commit 04bca458f1
24 changed files with 134 additions and 44 deletions

View File

@ -1,7 +1,7 @@
[bumpversion] [bumpversion]
current_version = 5.1.4 current_version = 5.1.4
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(-rc(?P<release>\d+))? parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(-rc(?P<release>\d+))?
serialize = serialize =
{major}.{minor}.{patch}-rc{release} {major}.{minor}.{patch}-rc{release}
{major}.{minor}.{patch} {major}.{minor}.{patch}
commit = True commit = True

27
.github/scripts/check_github_issues.py vendored Normal file
View File

@ -0,0 +1,27 @@
"""Check that GitHub issues (and PR) links match the number in Markdown link."""
import glob
import re
import sys
if __name__ == "__main__":
p = re.compile(
r"\[#(?P<number1>[0-9]+)\]"
r"\(https://github\.com/"
r"(?:[a-zA-Z0-9_-]+)/(?:[a-zA-Z0-9_-]+)/"
r"(?:(?:issues)|(?:pull))/(?P<number2>[0-9]+)\)"
)
ret_code = 0
for glob_pattern in sys.argv[1:]:
for file in glob.glob(glob_pattern, recursive=True):
with open(file) as f:
for i, line in enumerate(f):
for m in p.finditer(line):
if m.group("number1") != m.group("number2"):
start, end = m.span()
print(f"{file}:{i}: ", line[start:end], file=sys.stderr) # noqa: T201
ret_code = 1
sys.exit(ret_code)

View File

@ -46,7 +46,7 @@ jobs:
if: matrix.os == 'windows-latest' if: matrix.os == 'windows-latest'
run: echo "${HOME}/.local/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append run: echo "${HOME}/.local/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
# OS depedencies # OS dependencies
- name: Install manim dependencies on MacOS - name: Install manim dependencies on MacOS
if: matrix.os == 'macos-latest' if: matrix.os == 'macos-latest'
run: brew install ffmpeg py3cairo run: brew install ffmpeg py3cairo
@ -86,3 +86,16 @@ jobs:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with: with:
fail_ci_if_error: true fail_ci_if_error: true
markdown-link-check:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Check links
uses: gaurav-nelson/github-action-markdown-link-check@v1
with:
use-quiet-mode: yes
use-verbose-mode: yes
config-file: .mdlc.json

8
.mdlc.json Normal file
View File

@ -0,0 +1,8 @@
{
"replacementPatterns": [
{
"pattern": "^/(?<path>.*)$",
"replacement": "https://eertmans.be/manim-slides/latest/$<path>.html"
}
]
}

View File

@ -29,3 +29,17 @@ repos:
hooks: hooks:
- id: mypy - id: mypy
additional_dependencies: [types-requests, types-setuptools] additional_dependencies: [types-requests, types-setuptools]
- repo: https://github.com/codespell-project/codespell
rev: v2.2.6
hooks:
- id: codespell
additional_dependencies:
- tomli
- repo: local
hooks:
- id: github-issues
name: GitHub issues link check
description: Check issues (and PR) links are matching number.
entry: python .github/scripts/check_github_issues.py
language: system
types: [markdown]

View File

@ -10,6 +10,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
(unreleased)= (unreleased)=
## [Unreleased](https://github.com/jeertmans/manim-slides/compare/v5.1.4...HEAD) ## [Unreleased](https://github.com/jeertmans/manim-slides/compare/v5.1.4...HEAD)
(unreleased-chore)=
### Chore
- Added CI for broken HTML links and fixed, plus spell checking.
[#417](https://github.com/jeertmans/manim-slides/pull/417)
(v5.1.4)= (v5.1.4)=
## [v5.1.4](https://github.com/jeertmans/manim-slides/compare/v5.1.3...v5.1.4) ## [v5.1.4](https://github.com/jeertmans/manim-slides/compare/v5.1.3...v5.1.4)
@ -191,7 +197,7 @@ In an effort to better document changes, this CHANGELOG document is now created.
but the new player should be much easier to maintain and more performant, but the new player should be much easier to maintain and more performant,
than its predecessor. than its predecessor.
[#243](https://github.com/jeertmans/manim-slides/pull/243) [#243](https://github.com/jeertmans/manim-slides/pull/243)
- Changed the slide config format to exclude unecessary information. - Changed the slide config format to exclude unnecessary information.
`StypeType` is removed in favor to one boolean `loop` field. This is `StypeType` is removed in favor to one boolean `loop` field. This is
a **breaking change** and one should re-render the slides to apply changes. a **breaking change** and one should re-render the slides to apply changes.
[#243](https://github.com/jeertmans/manim-slides/pull/243) [#243](https://github.com/jeertmans/manim-slides/pull/243)

View File

@ -49,7 +49,7 @@ for detailed install instructions.
Using Manim Slides is a two-step process: Using Manim Slides is a two-step process:
1. Render animations using `Slide` (resp. `ThreeDSlide`) as a base class instead 1. Render animations using `Slide` (resp. `ThreeDSlide`) as a base class instead
of `Scene` (resp. `ThreeDScene`), and add calls to `self.next_slide()` of `Scene` (resp. `ThreeDScene`), and add calls to `self.next_slide()`
everytime you want to create a new slide. every time you want to create a new slide.
2. Run `manim-slides` on rendered animations and display them like a 2. Run `manim-slides` on rendered animations and display them like a
*PowerPoint* presentation. *PowerPoint* presentation.
@ -57,7 +57,7 @@ The documentation is available [online](https://eertmans.be/manim-slides/).
### Basic Example ### Basic Example
Call `self.next_slide()` everytime you want to create a pause between Call `self.next_slide()` every time you want to create a pause between
animations, and `self.next_slide(loop=True)` if you want the next slide to loop animations, and `self.next_slide(loop=True)` if you want the next slide to loop
over animations until the user presses continue: over animations until the user presses continue:
@ -118,7 +118,7 @@ manim-slides BasicExample
</p> </p>
For detailed usage documentation, run `manim-slides --help`, or go to the For detailed usage documentation, run `manim-slides --help`, or go to the
[documentation](https://eertmans.be/manim-slides/reference/cli.html). [documentation](https://eertmans.be/manim-slides/latest/reference/cli.html).
## Interactive Tutorial ## Interactive Tutorial
@ -170,7 +170,7 @@ in *Settings*->*Display*.
## Contributing ## Contributing
Contributions are more than welcome! Please read through Contributions are more than welcome! Please read through
[our contributing section](https://eertmans.be/manim-slides/contributing/index.html). [our contributing section](https://eertmans.be/manim-slides/latest/contributing/index.html).
### Reporting an Issue ### Reporting an Issue

View File

@ -261,7 +261,7 @@
mouseWheel: {{ mouse_wheel }}, mouseWheel: {{ mouse_wheel }},
// Opens links in an iframe preview overlay // Opens links in an iframe preview overlay
// Add `data-preview-link` and `data-preview-link="false"` to customise each link // Add `data-preview-link` and `data-preview-link="false"` to customize each link
// individually // individually
previewLinks: {{ preview_links }}, previewLinks: {{ preview_links }},

View File

@ -18,10 +18,10 @@ workflow
internals internals
``` ```
[Workflow](./workflow) [Workflow](/contributing/workflow)
: how to work on this project. Start here if you're a new contributor. : how to work on this project. Start here if you're a new contributor.
[Internals](./internals) [Internals](/contributing/internals)
: how Manim Slides is built and how the various parts of it work. : how Manim Slides is built and how the various parts of it work.
## Reporting an Issue ## Reporting an Issue

View File

@ -18,7 +18,9 @@ Useful links:
* [GitHub's Hello World](https://docs.github.com/en/get-started/quickstart/hello-world). * [GitHub's Hello World](https://docs.github.com/en/get-started/quickstart/hello-world).
* [GitHub Pull Request in 100 Seconds](https://www.youtube.com/watch?v=8lGpZkjnkt4&ab_channel=Fireship). * [GitHub Pull Request in 100 Seconds](https://www.youtube.com/watch?v=8lGpZkjnkt4&ab_channel=Fireship).
Once you feel comfortable with git and GitHub, [fork](https://github.com/jeertmans/manim-slides/fork) the repository, and clone it locally. Once you feel comfortable with git and GitHub,
[fork](https://github.com/jeertmans/manim-slides/fork)
the repository, and clone it locally.
As for every Python project, using virtual environment is recommended to avoid As for every Python project, using virtual environment is recommended to avoid
conflicts between modules. conflicts between modules.
@ -36,7 +38,7 @@ pdm install
This, however, only installs the minimal set of dependencies to run the package. This, however, only installs the minimal set of dependencies to run the package.
If you would like to install Manim or ManimGL, If you would like to install Manim or ManimGL,
as documented in the [quickstart](../quickstart), as documented in the [quickstart](/quickstart),
you can use the `-G|--group` option: you can use the `-G|--group` option:
```bash ```bash
@ -45,7 +47,7 @@ pdm install -Gmanim # For Manim
pdm install -Gmanimgl # For ManimGL pdm install -Gmanimgl # For ManimGL
``` ```
Additionnally, Manim Slides comes with groups of dependencies for development purposes: Additionally, Manim Slides comes with groups of dependencies for development purposes:
```bash ```bash
pdm install -Gdev # For linters and formatters pdm install -Gdev # For linters and formatters

View File

@ -23,7 +23,7 @@ og:description: Manim Slides makes creating slides with Manim super easy!
Manim Slides makes creating slides with Manim super easy! Manim Slides makes creating slides with Manim super easy!
In a [very few steps](./quickstart), In a [very few steps](/quickstart),
you can create slides and present them either using the GUI, or your browser. you can create slides and present them either using the GUI, or your browser.
Slide through the demo below to get a quick glimpse on what you can do with Slide through the demo below to get a quick glimpse on what you can do with

View File

@ -12,7 +12,7 @@ The benefit of using pipx is that it will automatically create a new virtual
environment for every package you install. environment for every package you install.
:::{note} :::{note}
Everytime you read `pipx install`, you can use `pip install` instead, Every time you read `pipx install`, you can use `pip install` instead,
if you are working in a virtual environment or else. if you are working in a virtual environment or else.
::: :::
@ -146,23 +146,26 @@ If you are using Nix or NixOS, you can find Manim Slides under:
any Qt bindings. any Qt bindings.
You can try out the Manim Slides package with You can try out the Manim Slides package with
```sh ```sh
nix-shell -p manim ffmpeg manim-slides nix-shell -p manim ffmpeg manim-slides
``` ```
or by adding it to your or by adding it to your
[configuration file](https://nixos.org/manual/nixos/stable/#sec-package-management). [configuration file](https://nixos.org/manual/nixos/stable/#sec-package-management).
Alternatively, you can try Manim Slides in a Python environment with: Alternatively, you can try Manim Slides in a Python environment with:
```sh ```sh
nix-shell -p manim ffmpeg "python3.withPackages(ps: with ps; [ manim-slides, ...])" nix-shell -p manim ffmpeg "python3.withPackages(ps: with ps; [ manim-slides, ...])"
``` ```
or bundle this into [your Nix environment](https://wiki.nixos.org/wiki/Python). or bundle this into [your Nix environment](https://wiki.nixos.org/wiki/Python).
:::{note} :::{note}
Nix current does not support `manimgl`. Nix current does not support `manimgl`.
::: :::
## When you need a Qt backend ## When you need a Qt backend
Before `v5.1`, Manim Slides automatically included PySide6 as Before `v5.1`, Manim Slides automatically included PySide6 as
@ -182,5 +185,5 @@ install those are via optional dependencies, as explained above.
An alternative way to install Manim Slides is to clone the git repository, An alternative way to install Manim Slides is to clone the git repository,
and build the package from source. Read the and build the package from source. Read the
[contributing guide](./contributing/workflow) [contributing guide](/contributing/workflow)
to know how to process. to know how to process.

View File

@ -1,7 +1,7 @@
# Quickstart # Quickstart
If not already, install Manim Slides, along with either Manim or ManimGL, If not already, install Manim Slides, along with either Manim or ManimGL,
see [installation](./installation). see [installation](/installation).
## Creating your first slides ## Creating your first slides
@ -31,4 +31,5 @@ The output slides should look this this:
:quality: high :quality: high
``` ```
For more advanced examples, see the [Examples](reference/examples) section. For more advanced examples,
see the [Examples](/reference/examples) section.

View File

@ -2,7 +2,8 @@
Manim Slides' graphical user interface (GUI) is the *de facto* way to present slides. Manim Slides' graphical user interface (GUI) is the *de facto* way to present slides.
If you do not specify one of the commands listed in the [CLI reference](./cli), If you do not specify one of the commands listed in the
[CLI reference](/reference/cli),
Manim Slides will use **present** by default, which launches a GUI window, Manim Slides will use **present** by default, which launches a GUI window,
playing your scene(s) like so: playing your scene(s) like so:
@ -25,7 +26,7 @@ directory, you should not worry about that :-)
## Configuration File ## Configuration File
It is possible to configure Manim Slides via a configuration file, even though It is possible to configure Manim Slides via a configuration file, even though
this feature is currently limited. You may initiliaze the default configuration this feature is currently limited. You may initialize the default configuration
file with: file with:
```bash ```bash

View File

@ -30,11 +30,11 @@ manim-slides convert --show-config
## Using a Custom Template ## Using a Custom Template
The default template used for HTML conversion can be found on The default template used for HTML conversion can be found on
[GitHub](https://github.com/jeertmans/manim-slides/blob/main/manim_slides/data/revealjs_template.html) [GitHub](https://github.com/jeertmans/manim-slides/blob/main/manim_slides/templates/revealjs.html)
or printed with the `--show-template` option. or printed with the `--show-template` option.
If you wish to use another template, you can do so with the If you wish to use another template, you can do so with the
`--use-template FILE` option. `--use-template FILE` option.
## More about HTML Slides ## More about HTML Slides
You can read more about HTML slides in the [sharing](./sharing) section. You can read more about HTML slides in the [sharing](/reference/sharing) section.

View File

@ -16,23 +16,23 @@ sharing
Sphinx Extension <sphinx_extension> Sphinx Extension <sphinx_extension>
``` ```
[Application Programming Interface](./api): list of classes and methods that may [Application Programming Interface](/reference/api): list of classes and methods that may
be useful to the end-user. be useful to the end-user.
[Command Line Interface](./cli): list of all commands available using Manim [Command Line Interface](/reference/cli): list of all commands available using Manim
Slides' executable. Slides' executable.
[Examples](./examples): curated list of examples and their output. [Examples](/reference/examples): curated list of examples and their output.
[Graphical User Interface](./gui): details about the main Manim Slide' feature. [Graphical User Interface](/reference/gui): details about the main Manim Slide' feature.
[HTML Presentation](./html): an alternative way of presenting your animations. [HTML Presentation](/reference/html): an alternative way of presenting your animations.
[IPython Magic](./ipython_magic): a magic to render and display Manim Slides inside notebooks. [IPython Magic](/reference/ipython_magic): a magic to render and display Manim Slides inside notebooks.
+ [Example](./magic_example): example notebook using the magics. + [Example](/reference/magic_example): example notebook using the magics.
[Sharing](./sharing): how to share your presentation with others. [Sharing](/reference/sharing): how to share your presentation with others.
[Sphinx Extension](./sphinx_extension): a Sphinx extension for diplaying Manim Slides animations within your documentation. [Sphinx Extension](/reference/sphinx_extension): a Sphinx extension for displaying Manim Slides animations within your documentation.

View File

@ -126,10 +126,15 @@ to use an `iframe`:
</div> </div>
``` ```
<!-- markdown-link-check-disable -->
<!-- see why: https://github.com/tcort/markdown-link-check/discussions/189 -->
The additional code comes from The additional code comes from
[this article](https://faq.dailymotion.com/hc/en-us/articles/360022841393-How-to-preserve-the-player-aspect-ratio-on-a-responsive-page) [this article](https://faq.dailymotion.com/hc/en-us/articles/360022841393-How-to-preserve-the-player-aspect-ratio-on-a-responsive-page)
and it there to preserve the original aspect ratio (16:9). and it there to preserve the original aspect ratio (16:9).
<!-- markdown-link-check-enable -->
### Sharing ONE HTML file ### Sharing ONE HTML file
If you set the `data_uri` option to `true` (with `-cdata_uri=true`), If you set the `data_uri` option to `true` (with `-cdata_uri=true`),
@ -142,8 +147,8 @@ HTML conversion makes it convenient to play your presentation on a
remote server. remote server.
This is how your are able to watch all the examples on this website. If you want This is how your are able to watch all the examples on this website. If you want
to know how to share your slide with GitHub pages, see the to know how to share your slide with GitHub pages, check out the
[workflow file](https://github.com/jeertmans/manim-slides/blob/main/.github/workflows/pages.yml). [Manim Slides Starter GitHub repository template](https://github.com/jeertmans/manim-slides-starter).
:::{warning} :::{warning}
Keep in mind that playing large video files over the internet network Keep in mind that playing large video files over the internet network

View File

@ -249,7 +249,11 @@ class PreSlideConfig(BaseSlideConfig):
if pre_slide_config.start_animation >= pre_slide_config.end_animation: if pre_slide_config.start_animation >= pre_slide_config.end_animation:
if pre_slide_config.start_animation == pre_slide_config.end_animation == 0: if pre_slide_config.start_animation == pre_slide_config.end_animation == 0:
raise ValueError( raise ValueError(
"You have to play at least one animation (e.g., `self.wait()`) before pausing. If you want to start paused, use the approriate command-line option when presenting. IMPORTANT: when using ManimGL, `self.wait()` is not considered to be an animation, so prefer to directly use `self.play(...)`." "You have to play at least one animation (e.g., `self.wait()`) "
"before pausing. If you want to start paused, use the appropriate "
"command-line option when presenting. "
"IMPORTANT: when using ManimGL, `self.wait()` is not considered "
"to be an animation, so prefer to directly use `self.play(...)`."
) )
raise ValueError( raise ValueError(

View File

@ -631,7 +631,7 @@ def show_template_option(function: Callable[..., Any]) -> Callable[..., Any]:
"--open", "--open",
"open_result", "open_result",
is_flag=True, is_flag=True,
help="Open the newly created file using the approriate application.", help="Open the newly created file using the appropriate application.",
) )
@click.option("-f", "--force", is_flag=True, help="Overwrite any existing file.") @click.option("-f", "--force", is_flag=True, help="Overwrite any existing file.")
@click.option( @click.option(
@ -695,7 +695,7 @@ def convert(
errors = e.errors() errors = e.errors()
msg = [ msg = [
f"{len(errors)} error(s) occured with configuration options for '{to}', see below." f"{len(errors)} error(s) occurred with configuration options for '{to}', see below."
] ]
for error in errors: for error in errors:

View File

@ -56,7 +56,7 @@ class Info(QWidget): # type: ignore[misc]
self.video_sink = main_video_widget.videoSink() self.video_sink = main_video_widget.videoSink()
left_layout.addWidget(main_video_widget) left_layout.addWidget(main_video_widget)
# Current slide informations # Current slide information
self.scene_label = QLabel() self.scene_label = QLabel()
self.slide_label = QLabel() self.slide_label = QLabel()

View File

@ -262,7 +262,7 @@
mouseWheel: {{ mouse_wheel }}, mouseWheel: {{ mouse_wheel }},
// Opens links in an iframe preview overlay // Opens links in an iframe preview overlay
// Add `data-preview-link` and `data-preview-link="false"` to customise each link // Add `data-preview-link` and `data-preview-link="false"` to customize each link
// individually // individually
previewLinks: {{ preview_links }}, previewLinks: {{ preview_links }},

View File

@ -89,7 +89,7 @@ def link_nodes(*nodes: av.filter.context.FilterContext) -> None:
def reverse_video_file(src: Path, dest: Path) -> None: def reverse_video_file(src: Path, dest: Path) -> None:
"""Reverses a video file, writting the result to `dest`.""" """Reverses a video file, writing the result to `dest`."""
with av.open(str(src)) as input_container, av.open( with av.open(str(src)) as input_container, av.open(
str(dest), mode="w" str(dest), mode="w"
) as output_container: ) as output_container:

View File

@ -66,7 +66,7 @@ provide new features on a regular basis.
# Easy to Use Commitment # Easy to Use Commitment
Manim Slides is commited to be an easy-to-use tool, with minimal installation Manim Slides is committed to be an easy-to-use tool, with minimal installation
procedure and few modifications required. It can either be used locally with its procedure and few modifications required. It can either be used locally with its
graphical user interface (GUI), or shared via one of the two formats it can graphical user interface (GUI), or shared via one of the two formats it can
convert to: convert to:
@ -96,13 +96,13 @@ and posted it on YouTube.
# Stability and releases # Stability and releases
Manim Slides is continously tested on most recent Python versions, both ManimCE Manim Slides is continuously tested on most recent Python versions, both ManimCE
and ManimGL, and on all major platforms: **Ubuntu**, **macOS** and **Windows**. Due to Manim and ManimGL, and on all major platforms: **Ubuntu**, **macOS** and **Windows**. Due to Manim
Slide's exposed API being very minimal, and the variety of tests that are Slide's exposed API being very minimal, and the variety of tests that are
performed, this tool can be considered stable over time. performed, this tool can be considered stable over time.
New releases are very frequent, as they mostly introduce enhancements or small New releases are very frequent, as they mostly introduce enhancements or small
documention fixes, and the command-line tool automatically notifies for new documentation fixes, and the command-line tool automatically notifies for new
available updates. Therefore, regularly updating Manim Slides is highly available updates. Therefore, regularly updating Manim Slides is highly
recommended. recommended.
@ -160,7 +160,7 @@ For new feature requests, we highly encourage users to
[create an issue](https://github.com/jeertmans/manim-slides/issues/new/choose) [create an issue](https://github.com/jeertmans/manim-slides/issues/new/choose)
with the appropriate template. with the appropriate template.
# Acknowledgements # Acknowledgments
We acknowledge the work of @manim-presentation that paved the initial structure We acknowledge the work of @manim-presentation that paved the initial structure
of Manim Slides with the manim-presentation Python package. of Manim Slides with the manim-presentation Python package.

View File

@ -76,6 +76,12 @@ Founding = "https://github.com/sponsors/jeertmans"
Homepage = "https://github.com/jeertmans/manim-slides" Homepage = "https://github.com/jeertmans/manim-slides"
Repository = "https://github.com/jeertmans/manim-slides" Repository = "https://github.com/jeertmans/manim-slides"
[tool.codespell]
builtin = "clear,rare,informal,usage,names,en-GB_to_en-US"
check-hidden = true
ignore-words-list = "master"
skip = "pdm.lock"
[tool.coverage.report] [tool.coverage.report]
exclude_lines = [ exclude_lines = [
"pragma: no cover", "pragma: no cover",