Here you'll find a contributing guide to get started with development.
For local development, it is required to have Python 3.9 (or a later version) installed.
We use Poetry for project management. Install it and set up your IDE accordingly.
To install this package and its development dependencies, run:
make install-devTo execute all code checking tools together, run:
make check-codeWe utilize ruff for linting, which analyzes code for potential issues and enforces consistent style. Refer to pyproject.toml for configuration details.
To run linting:
make lintOur automated code formatting also leverages ruff, ensuring uniform style and addressing fixable linting issues. Configuration specifics are outlined in pyproject.toml.
To run formatting:
make formatType checking is handled by mypy, verifying code against type annotations. Configuration settings can be found in pyproject.toml.
To run type checking:
make type-checkWe adhere to the Google docstring format for documenting our codebase. Every user-facing class or method is documented. Documentation standards are enforced using Ruff.
Publishing new versions to PyPI is automated through GitHub Actions.
- Beta releases: On each commit to the master branch, a new beta release is automatically published. The version number is determined based on the latest release and conventional commits. The beta version suffix is incremented by 1 from the last beta release on PyPI.
- Stable releases: A stable version release may be created by triggering the
run_releaseGitHub Actions workflow. The version number is determined based on the latest release and conventional commits (autorelease type), or it may be overriden using thecustomrelease type.
Important notes:
- Ensure the version number in
pyproject.tomlis updated before creating a new release. If a stable version with the same version number already exists on PyPI, the publish process will fail. - The release process also fails if the version is not documented in
CHANGELOG.md. Make sure to describe the changes in the new version there. - After a stable release, ensure to increment the version number in both
pyproject.toml.
Before merging a pull request or committing directly to master for automatic beta release:
- Ensure
pyproject.tomlversion reflects the latest non-published version. - Describe changes in
CHANGELOG.mdunder the latest non-published version section.
Before creating a GitHub Release for production:
- Confirm successful deployment of the latest beta release with the latest commit.
- Ensure changes are documented in
CHANGELOG.mdsince the last production release. - When drafting a GitHub release:
- Create a new tag like
v1.2.3targeting the master branch. - Use
1.2.3as the release title. - Copy changes from
CHANGELOG.mdinto the release description. - Check "Set as the latest release" option for visibility.
- Create a new tag like
To release a new version manually, follow these steps. Note that manual releases should only be performed if you have a good reason, use the automated release process otherwise.
- Update the version number:
- Modify the
versionfield undertool.poetryinpyproject.toml. - Update the
__version__field inapify_haystack/__init__.py.
[tool.poetry]
name = "apify-haystack"
version = "x.z.y"- Generate the distribution archives for the package:
poetry build- Set up the PyPI API token for authentication:
poetry config pypi-token.pypi YOUR_API_TOKEN- Upload the package to PyPI:
poetry publish