diff --git a/.github/workflows/pre_release.yaml b/.github/workflows/pre_release.yaml
index 99d2af98..3414a9cd 100644
--- a/.github/workflows/pre_release.yaml
+++ b/.github/workflows/pre_release.yaml
@@ -32,6 +32,15 @@ jobs:
release_type: prerelease
existing_changelog_path: CHANGELOG.md
+ actions_lint_check:
+ name: Actions lint check
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+ - name: Run actionlint
+ uses: rhysd/actionlint@v1.7.9
+
lint_check:
name: Lint check
uses: apify/workflows/.github/workflows/python_lint_check.yaml@main
@@ -47,15 +56,22 @@ jobs:
unit_tests:
name: Unit tests
uses: apify/workflows/.github/workflows/python_unit_tests.yaml@main
+ secrets: inherit
with:
python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]'
+ operating-systems: '["ubuntu-latest", "windows-latest"]'
+ python-version-for-codecov: "3.14"
+ operating-system-for-codecov: ubuntu-latest
integration_tests:
name: Integration tests
uses: apify/workflows/.github/workflows/python_integration_tests.yaml@main
secrets: inherit
with:
- python-versions: '["3.10", "3.13"]'
+ python-versions: '["3.10", "3.14"]'
+ operating-systems: '["ubuntu-latest"]'
+ python-version-for-codecov: "3.14"
+ operating-system-for-codecov: ubuntu-latest
update_changelog:
name: Update changelog
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index 32d85fa4..45216654 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -55,15 +55,9 @@ jobs:
with:
python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]'
- unit_tests:
- name: Unit tests
- uses: apify/workflows/.github/workflows/python_unit_tests.yaml@main
- with:
- python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]'
-
update_changelog:
name: Update changelog
- needs: [release_metadata, lint_check, type_check, unit_tests]
+ needs: [release_metadata, lint_check, type_check]
uses: apify/workflows/.github/workflows/python_bump_and_update_changelog.yaml@main
with:
version_number: ${{ needs.release_metadata.outputs.version_number }}
@@ -113,12 +107,12 @@ jobs:
needs: [release_metadata, update_changelog]
runs-on: ubuntu-latest
steps:
- - # Trigger building the Python Docker images in apify/apify-actor-docker repo
- name: Trigger Docker image build
+ # Trigger building the Python Docker images in apify/apify-actor-docker repo
+ - name: Trigger Docker image build
run: |
gh api -X POST "/repos/apify/apify-actor-docker/dispatches" \
-F event_type=build-python-images \
- -F client_payload[release_tag]=latest \
- -F client_payload[apify_version]=${{ needs.release_metadata.outputs.version_number }}
+ -F 'client_payload[release_tag]=latest' \
+ -F 'client_payload[apify_version]=${{ needs.release_metadata.outputs.version_number }}'
env:
GH_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
diff --git a/.github/workflows/run_code_checks.yaml b/.github/workflows/run_code_checks.yaml
index 1b3de36f..adb0fbc3 100644
--- a/.github/workflows/run_code_checks.yaml
+++ b/.github/workflows/run_code_checks.yaml
@@ -12,6 +12,15 @@ on:
workflow_dispatch:
jobs:
+ actions_lint_check:
+ name: Actions lint check
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+ - name: Run actionlint
+ uses: rhysd/actionlint@v1.7.9
+
lint_check:
name: Lint check
uses: apify/workflows/.github/workflows/python_lint_check.yaml@main
@@ -27,8 +36,12 @@ jobs:
unit_tests:
name: Unit tests
uses: apify/workflows/.github/workflows/python_unit_tests.yaml@main
+ secrets: inherit
with:
python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]'
+ operating-systems: '["ubuntu-latest", "windows-latest"]'
+ python-version-for-codecov: "3.14"
+ operating-system-for-codecov: ubuntu-latest
docs_check:
name: Docs check
@@ -41,3 +54,6 @@ jobs:
secrets: inherit
with:
python-versions: '["3.10", "3.14"]'
+ operating-systems: '["ubuntu-latest"]'
+ python-version-for-codecov: "3.14"
+ operating-system-for-codecov: ubuntu-latest
diff --git a/.gitignore b/.gitignore
index cfd8077f..6b3c714d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,6 +24,8 @@ build/
# Coverage reports
.coverage*
htmlcov
+coverage-unit.xml
+coverage-integration.xml
# IDE, editors
.vscode
diff --git a/Makefile b/Makefile
index 73f69455..5a3155a8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
-.PHONY: clean install-dev build publish-to-pypi lint type-check unit-tests unit-tests-cov \
- integration-tests format check-code build-api-reference build-docs run-docs
+.PHONY: clean install-dev build publish-to-pypi lint type-check unit-tests unit-tests-cov integration-tests \
+ integration-tests-cov format check-code build-api-reference build-docs run-docs
# This is default for local testing, but GitHub workflows override it to a higher value in CI
INTEGRATION_TESTS_CONCURRENCY = 1
@@ -26,13 +26,32 @@ type-check:
uv run mypy
unit-tests:
- uv run pytest --numprocesses=auto -vv --cov=src/apify tests/unit
+ uv run pytest \
+ --numprocesses=auto \
+ --verbose \
+ tests/unit
unit-tests-cov:
- uv run pytest --numprocesses=auto -vv --cov=src/apify --cov-report=html tests/unit
+ uv run pytest \
+ --numprocesses=auto \
+ --verbose \
+ --cov=src/apify \
+ --cov-report=xml:coverage-unit.xml \
+ tests/unit
integration-tests:
- uv run pytest --numprocesses=$(INTEGRATION_TESTS_CONCURRENCY) -vv tests/integration
+ uv run pytest \
+ --numprocesses=$(INTEGRATION_TESTS_CONCURRENCY) \
+ --verbose \
+ tests/integration
+
+integration-tests-cov:
+ uv run pytest \
+ --numprocesses=$(INTEGRATION_TESTS_CONCURRENCY) \
+ --verbose \
+ --cov=src/apify \
+ --cov-report=xml:coverage-integration.xml \
+ tests/integration
format:
uv run ruff check --fix
diff --git a/README.md b/README.md
index 4f73b92d..6c9a9079 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,9 @@
+
+
+
diff --git a/tests/integration/actor/test_actor_api_helpers.py b/tests/integration/actor/test_actor_api_helpers.py
index d6b42a99..3cedc520 100644
--- a/tests/integration/actor/test_actor_api_helpers.py
+++ b/tests/integration/actor/test_actor_api_helpers.py
@@ -4,6 +4,8 @@
import json
from typing import TYPE_CHECKING
+import pytest
+
from crawlee._utils.crypto import crypto_random_object_id
from .._utils import generate_unique_resource_name
@@ -195,6 +197,7 @@ async def main_outer() -> None:
assert inner_output_record['value'] == f'{test_value}_XXX_{test_value}'
+@pytest.mark.skip(reason='Known failing test, pending investigation.')
async def test_actor_calls_task(
make_actor: MakeActorFunction,
run_actor: RunActorFunction,
@@ -248,6 +251,7 @@ async def main_outer() -> None:
await apify_client_async.task(task['id']).delete()
+@pytest.mark.skip(reason='Known failing test, pending investigation.')
async def test_actor_aborts_another_actor_run(
make_actor: MakeActorFunction,
run_actor: RunActorFunction,
diff --git a/tests/integration/actor/test_actor_log.py b/tests/integration/actor/test_actor_log.py
index e721a9d4..afb8ece5 100644
--- a/tests/integration/actor/test_actor_log.py
+++ b/tests/integration/actor/test_actor_log.py
@@ -2,12 +2,15 @@
from typing import TYPE_CHECKING
+import pytest
+
from apify import Actor, __version__
if TYPE_CHECKING:
from .conftest import MakeActorFunction, RunActorFunction
+@pytest.mark.skip(reason='Known failing test, pending investigation.')
async def test_actor_logging(
make_actor: MakeActorFunction,
run_actor: RunActorFunction,
diff --git a/tests/integration/actor/test_actor_scrapy.py b/tests/integration/actor/test_actor_scrapy.py
index 410ea904..b03d00ee 100644
--- a/tests/integration/actor/test_actor_scrapy.py
+++ b/tests/integration/actor/test_actor_scrapy.py
@@ -3,10 +3,13 @@
from pathlib import Path
from typing import TYPE_CHECKING
+import pytest
+
if TYPE_CHECKING:
from .conftest import MakeActorFunction, RunActorFunction
+@pytest.mark.skip(reason='Known failing test, pending investigation.')
async def test_actor_scrapy_title_spider(
make_actor: MakeActorFunction,
run_actor: RunActorFunction,