Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ jobs:
- name: Import smoke test
run: |
python -c "import substack_link_checker; print('import OK')"
python substack_link_checker.py --help
substack-link-checker --help
substack-link-checker check --help
- name: Run tests
run: pytest -q

Expand Down
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [1.1.0] - 2026-05-19

Post-v1.0.0 repo-hygiene release. Adds packaging, CI, tests, security
hardening, automation, and docs without changing the link-checker's
runtime behavior. See the README's "Migrating from v1.0.0" section for
the CLI invocation changes.

### Added
- `pyproject.toml` making the project pip-installable with a
`substack-link-checker` console entry point.
Expand Down Expand Up @@ -61,6 +68,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- Corrected the clone URL in `README.md` (was `substack-link-checker`,
now `substack-broken-link-checker`).
- Troubleshooting section's code blocks now use the new
`substack-link-checker check ...` invocations instead of the
pre-refactor `python substack_link_checker.py ...` form.
- CI smoke test step in `.github/workflows/ci.yml` was still running
`python substack_link_checker.py --help`, which started failing once
the package refactor removed that root-level file. Updated to invoke
the installed `substack-link-checker` console script instead. This
was also blocking the Dependabot PRs from going green.

## [1.0.0] - 2026-01-01

Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,9 @@ your Substack — some accounts only expose a single combined sitemap.
Fall back to scraping the archive page:

```bash
python fetch_archive_urls.py https://YOUR.substack.com 2024
substack-link-checker fetch-archive https://YOUR.substack.com 2024
# Produces archive_urls_2024.txt
python substack_link_checker.py --base-url https://YOUR.substack.com \
substack-link-checker check --base-url https://YOUR.substack.com \
--url-file archive_urls_2024.txt
```

Expand All @@ -140,7 +140,7 @@ The target site is rate-limiting or geo-blocking the checker, not
actually broken. Add it to `--skip-domains` so it's assumed OK:

```bash
python substack_link_checker.py ... --skip-domains rate-limited.example.com
substack-link-checker check ... --skip-domains rate-limited.example.com
```

For a recurring list, put one domain per line in a file and pass
Expand All @@ -153,7 +153,7 @@ longer accepts by default. Usually the right call is to flag the
domain as broken (it really is unreachable from a modern client):

```bash
python substack_link_checker.py ... --broken-domains old-tls.example.com
substack-link-checker check ... --broken-domains old-tls.example.com
```

### Many `Soft 404 (page title indicates error)` results that look fine
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "substack-broken-link-checker"
version = "1.0.0"
version = "1.1.0"
description = "A fast, async Python tool to find broken links in your Substack newsletter archive."
readme = "README.md"
license = { file = "LICENSE" }
Expand Down
2 changes: 1 addition & 1 deletion src/substack_link_checker/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from ._cli_check import load_domains_from_file
from .checker import BrokenLinkRecord, LinkCheckResult, SubstackLinkChecker

__version__ = "1.0.0"
__version__ = "1.1.0"

__all__ = [
"BrokenLinkRecord",
Expand Down
Loading