Create wiki page 'Development and CI'
@@ -0,0 +1,78 @@
|
|||||||
|
# Development and CI
|
||||||
|
|
||||||
|
## Local development
|
||||||
|
|
||||||
|
Install development dependencies:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
uv sync --group dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Useful commands:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make format
|
||||||
|
make lint
|
||||||
|
make typecheck
|
||||||
|
make test
|
||||||
|
make ci-check
|
||||||
|
make build
|
||||||
|
make package-version
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tooling
|
||||||
|
|
||||||
|
- Ruff for linting and formatting
|
||||||
|
- mypy in strict mode
|
||||||
|
- pytest for tests
|
||||||
|
- deptry for dependency checks
|
||||||
|
- local `stubs` directory for untyped third-party packages
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
Project layout:
|
||||||
|
|
||||||
|
- `src/yt_shorts_downloader/api.py`: public API
|
||||||
|
- `src/yt_shorts_downloader/cli.py`: CLI
|
||||||
|
- `src/yt_shorts_downloader/models`: typed models
|
||||||
|
- `src/yt_shorts_downloader/services`: session validation
|
||||||
|
- `src/yt_shorts_downloader/core`: yt-dlp integration, runtime detection, URL validation
|
||||||
|
- `stubs`: local typing stubs
|
||||||
|
|
||||||
|
## CI workflow
|
||||||
|
|
||||||
|
The main Gitea Actions workflow runs:
|
||||||
|
|
||||||
|
- Ruff
|
||||||
|
- mypy
|
||||||
|
- deptry
|
||||||
|
- pytest
|
||||||
|
|
||||||
|
After successful CI on a push to `main`, the workflow attempts publication to Gitea Packages.
|
||||||
|
|
||||||
|
## Package publishing
|
||||||
|
|
||||||
|
The package version is read from `[project].version` in `pyproject.toml`.
|
||||||
|
|
||||||
|
Publishing rules:
|
||||||
|
|
||||||
|
- if the current version does not exist in Gitea Packages, it is uploaded
|
||||||
|
- if the current version already exists, upload is skipped
|
||||||
|
- old published versions remain available in the registry
|
||||||
|
|
||||||
|
Required CI secrets:
|
||||||
|
|
||||||
|
- `PYPI_REPOSITORY_URL`
|
||||||
|
- `PACKAGE_USERNAME`
|
||||||
|
- `PACKAGE_TOKEN`
|
||||||
|
|
||||||
|
Local publish example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export PYPI_REPOSITORY_URL='https://gitea.example.com/api/packages/<owner>/pypi'
|
||||||
|
export PACKAGE_USERNAME='<username>'
|
||||||
|
export PACKAGE_TOKEN='<token>'
|
||||||
|
|
||||||
|
make package-version
|
||||||
|
make publish-gitea
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user