## ℹ️ Description
- Link to the related issue(s): Issue #1077
- Fixes GHCR `:latest` publishing so the amd64 and arm64 Docker matrix
jobs no longer race by pushing the same single-arch tag.
## 📋 Changes Summary
- Publish architecture-specific Docker image tags from the Ubuntu matrix
jobs (`:latest-amd64` / `:latest-arm64`).
- Add a dependent `publish-docker-manifest` job that stitches those
per-arch tags into a multi-arch `:latest` manifest using Docker Buildx.
- Add workflow-level concurrency so `main` publishing runs are
serialized while non-main runs cancel older attempts.
- Add `actionlint-py` as a PDM-managed dev dependency and include
`actionlint` in `pdm run lint`.
- Fix existing workflow shellcheck findings reported by `actionlint`.
### ⚙️ Type of Change
- [x] 🐞 Bug fix (non-breaking change which fixes an issue)
- [ ] ✨ New feature (adds new functionality without breaking existing
usage)
- [ ] 💥 Breaking change (changes that might break existing user setups,
scripts, or configurations)
## ✅ Checklist
- [x] I have reviewed my changes to ensure they meet the project's
standards.
- [x] I have tested my changes and ensured that all tests pass (`pdm run
test`).
- [x] I have formatted the code (`pdm run format`).
- [x] I have verified that linting passes (`pdm run lint`).
- [ ] I have updated documentation where necessary. — N/A, CI-only
behavior and dev dependency wiring.
By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Chores**
* Optimized CI/CD workflow serialization and concurrent run handling for
improved build efficiency.
* Enhanced Docker publishing to support multi-architecture image
manifest generation.
* Added GitHub Actions workflow validation to the development tooling
pipeline.
* Updated development dependencies and extended linting script coverage.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## ℹ️ Description
*Replace the PyPI-pinned nodriver dependency with a GitHub-only fork
pinned to a commit SHA.*
- Link to the related issue(s): #1033
- Motivation:
- Upstream has no update for issue.
- Upstream still has UTF-8 issues.
- There is no practical way to coordinate changes upstream because of
the non-contributor policy (no issues/PRs from non-contributors).
- Fixing UTF-8 handling and keeping CDP mappings current is easy in a
custom fork.
- We can switch back to upstream once it ships an update that addresses
these issues.
- Tracking of this temporary change is done in #1036
## 📋 Changes Summary
- Updated the nodriver dependency in `pyproject.toml` to a GitHub direct
reference pinned to commit `c465695769a0e99d9154b90e61c521d593732789`.
- Regenerated `pdm.lock` for the new VCS dependency.
- Updated a nodriver source comment to point at the fork repository.
### ⚙️ Type of Change
Select the type(s) of change(s) included in this pull request:
- [x] 🐞 Bug fix (non-breaking change which fixes an issue)
- [ ] ✨ New feature (adds new functionality without breaking existing
usage)
- [ ] 💥 Breaking change (changes that might break existing user setups,
scripts, or configurations)
## ✅ Checklist
Before requesting a review, confirm the following:
- [x] I have reviewed my changes to ensure they meet the project's
standards.
- [x] I have tested my changes and ensured that all tests pass (`pdm run
test`).
- [x] I have formatted the code (`pdm run format`).
- [x] I have verified that linting passes (`pdm run lint`).
- [x] I have updated documentation where necessary.
By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Chores**
* Updated browser automation dependency to use a specific fork version
for improved web scraping compatibility.
[](https://app.coderabbit.ai/change-stack/Second-Hand-Friends/kleinanzeigen-bot/pull/1035)
<!-- end of auto-generated comment: release notes by coderabbit.ai -->