Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 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
62 changes: 62 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Bug report
description: Report a problem with strands-apify
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to file a bug report. Please fill in the
sections below so we can reproduce and fix the issue quickly.

> **Security issues:** please do *not* file public bug reports for
> vulnerabilities - see [SECURITY.md](../SECURITY.md) instead.
- type: input
id: version
attributes:
label: strands-apify version
placeholder: "0.1.0 (run `pip show strands-apify`)"
validations:
required: true
- type: input
id: python
attributes:
label: Python version
placeholder: "3.12.1"
validations:
required: true
- type: input
id: strands-agents
attributes:
label: strands-agents version
placeholder: "1.x.y (run `pip show strands-agents`)"
validations:
required: true
- type: textarea
id: what-happened
attributes:
label: What happened?
description: A clear description of the bug - what you did, what you expected, what actually occurred.
validations:
required: true
- type: textarea
id: repro
attributes:
label: Minimal reproduction
description: |
The smallest code snippet that demonstrates the bug. Please include the
tool call(s), Actor input, and any relevant Apify Actor IDs. Redact your
`APIFY_TOKEN`.
render: python
validations:
required: true
- type: textarea
id: logs
attributes:
label: Logs / traceback
description: Full Python traceback or relevant log output, if any.
render: shell
- type: textarea
id: extra
attributes:
label: Anything else?
description: Operating system, virtualenv setup, related Apify run URL, etc.
11 changes: 11 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
blank_issues_enabled: false
contact_links:
- name: Strands Agents support
url: https://github.com/strands-agents/sdk-python/issues
about: Questions about the Strands Agents SDK itself (not specific to Apify tools).
- name: Apify platform support
url: https://apify.com/contact
about: Questions about Apify Actors, the Apify API, or your Apify account.
- name: Security vulnerability
url: https://github.com/apify/strands-apify/security/advisories/new
about: Privately report a security vulnerability - please do not file a public issue.
38 changes: 38 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Feature request
description: Suggest a new tool, Actor wrapper, or enhancement
labels: ["enhancement"]
body:
- type: markdown
attributes:
value: |
Thanks for suggesting an improvement to strands-apify!

If you're proposing a new Apify Actor wrapper, please link to the
Actor on https://apify.com/store so we can evaluate its input/output
schema.
- type: textarea
id: problem
attributes:
label: What problem does this solve?
description: Describe the use case or pain point this feature would address.
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposed solution
description: |
What would the new tool / parameter / behavior look like? If you have
an idea for the function signature or docstring, paste it here.
validations:
required: true
- type: input
id: actor
attributes:
label: Apify Actor (if applicable)
placeholder: "username/actor-name - https://apify.com/username/actor-name"
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: Other approaches you thought about, including existing tools that almost solve this.
31 changes: 31 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<!-- Thanks for contributing to strands-apify! Please fill in the sections below. -->

## Summary

<!-- 1-3 sentences describing the change and the motivation. -->

## Changes

<!-- Bullet list of the concrete code/doc changes. -->

-
-

## Test plan

<!-- How did you verify this works? Include commands you ran. -->

- [ ] `hatch run prepare` passes (format, lint, mypy, pytest)
- [ ] New / changed tools have tests covering: happy path, missing `APIFY_TOKEN`, missing `apify-client`, Actor failure, at least one input-validation failure
- [ ] Docstrings include `Args:` and `Returns:` blocks (these become LLM-facing tool descriptions)

## Checklist

- [ ] My changes follow the existing tool patterns (`@tool`, `_check_dependency`, `ApifyToolClient`, `_success_result` / `_error_result`)
- [ ] I updated the README tool table if I added or renamed a tool
- [ ] I added an entry under `## [Unreleased]` in `CHANGELOG.md`
- [ ] If I added a new Actor wrapper, I linked the Actor (e.g. `username/actor-name`) in the docstring

## Related issues

<!-- e.g. Closes #123 -->
29 changes: 29 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
version: 2
updates:
# Python runtime + dev dependencies declared in pyproject.toml
- package-ecosystem: pip
directory: "/"
schedule:
interval: weekly
day: monday
open-pull-requests-limit: 5
labels:
- dependencies
- python
groups:
dev-tooling:
patterns:
- "ruff"
- "mypy"
- "pytest*"
- "hatch"

# GitHub Actions used by .github/workflows/*
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: weekly
day: monday
labels:
- dependencies
- github-actions
14 changes: 14 additions & 0 deletions .github/workflows/check_pr_title.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: Check PR title

on:
pull_request_target:
types: [opened, edited, synchronize]

jobs:
check_pr_title:
name: Check PR title
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@v5.5.3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
78 changes: 78 additions & 0 deletions .github/workflows/pre_release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: Create a pre-release

on:
# Trigger a beta version release (pre-release) on push to the main branch.
push:
branches:
- main
tags-ignore:
- "**" # Ignore all tags to prevent duplicate builds when tags are pushed.

concurrency:
group: release
cancel-in-progress: false

jobs:
release_metadata:
if: "!startsWith(github.event.head_commit.message, 'docs') && !startsWith(github.event.head_commit.message, 'ci') && startsWith(github.repository, 'apify/')"
name: Prepare release metadata
runs-on: ubuntu-latest
outputs:
version_number: ${{ steps.release_metadata.outputs.version_number }}
tag_name: ${{ steps.release_metadata.outputs.tag_name }}
changelog: ${{ steps.release_metadata.outputs.changelog }}
steps:
- uses: apify/workflows/git-cliff-release@main
id: release_metadata
name: Prepare release metadata
with:
release_type: prerelease
existing_changelog_path: CHANGELOG.md

# If github.ref points to a [ci skip] commit, this workflow won't run.
# Otherwise, these checks will be launched from the `run_code_checks` workflow.
wait_for_checks:
name: Wait for code checks to pass
runs-on: ubuntu-latest
steps:
- uses: lewagon/wait-on-check-action@v1.3.4
with:
ref: ${{ github.ref }}
repo-token: ${{ secrets.GITHUB_TOKEN }}
check-regexp: "(check|test)"
ignore-checks: Wait for code checks to pass
wait-interval: 5

update_changelog:
name: Update changelog
needs: [release_metadata, wait_for_checks]
uses: apify/workflows/.github/workflows/python_bump_and_update_changelog.yaml@main
with:
version_number: ${{ needs.release_metadata.outputs.version_number }}
changelog: ${{ needs.release_metadata.outputs.changelog }}
secrets:
APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}

publish_to_pypi:
name: Publish to PyPI
needs: [release_metadata, update_changelog]
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write # Required for OIDC authentication.
environment:
name: pypi
url: https://pypi.org/project/strands-apify
steps:
- name: Prepare distribution
uses: apify/workflows/prepare-pypi-distribution@main
with:
package_name: strands-apify
is_prerelease: "yes"
version_number: ${{ needs.release_metadata.outputs.version_number }}
ref: ${{ needs.update_changelog.outputs.changelog_commitish }}
install_command: uv pip install --system -e ".[dev]"
build_command: hatch build
# Publishes the package to PyPI using PyPA official GitHub action with OIDC authentication.
- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
95 changes: 95 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: Publish release

on:
release:
types: [published]

concurrency:
group: release
cancel-in-progress: false

jobs:
release_metadata:
if: ${{ !github.event.release.prerelease }}
name: Prepare release metadata
runs-on: ubuntu-latest
outputs:
version_number: ${{ steps.version.outputs.version_number }}
changelog: ${{ steps.release_metadata.outputs.changelog }}
steps:
- name: Extract version from release tag
id: version
run: |
TAG_NAME="${{ github.event.release.tag_name }}"
VERSION="${TAG_NAME#v}"
echo "version_number=${VERSION}" >> $GITHUB_OUTPUT

- uses: apify/workflows/git-cliff-release@6cbb5232cc59d59047f1e8268da10747e729989e
name: Prepare release metadata
id: release_metadata
with:
release_type: custom
custom_version: ${{ steps.version.outputs.version_number }}
existing_changelog_path: CHANGELOG.md

lint_check:
if: ${{ !github.event.release.prerelease }}
name: Lint check
uses: apify/workflows/.github/workflows/python_lint_check.yaml@6cbb5232cc59d59047f1e8268da10747e729989e
with:
python_versions: '["3.10", "3.11", "3.12", "3.13"]'
install_command: uv pip install --system -e ".[dev]"
lint_command: ruff check src tests && ruff format --check src tests

type_check:
if: ${{ !github.event.release.prerelease }}
name: Type check
uses: apify/workflows/.github/workflows/python_type_check.yaml@6cbb5232cc59d59047f1e8268da10747e729989e
with:
python_versions: '["3.10", "3.11", "3.12", "3.13"]'
install_command: uv pip install --system -e ".[dev]"
type_check_command: mypy src

unit_tests:
if: ${{ !github.event.release.prerelease }}
name: Unit tests
uses: apify/workflows/.github/workflows/python_unit_tests.yaml@6cbb5232cc59d59047f1e8268da10747e729989e
with:
python_versions: '["3.10", "3.11", "3.12", "3.13"]'
operating_systems: '["ubuntu-latest"]'
install_command: uv pip install --system -e ".[dev]"
run_tests_command: pytest -q

update_changelog:
name: Update changelog
needs: [release_metadata, lint_check, type_check, unit_tests]
uses: apify/workflows/.github/workflows/python_bump_and_update_changelog.yaml@6cbb5232cc59d59047f1e8268da10747e729989e
with:
version_number: ${{ needs.release_metadata.outputs.version_number }}
changelog: ${{ needs.release_metadata.outputs.changelog }}
secrets:
APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}

publish_to_pypi:
name: Publish to PyPI
needs: [release_metadata, update_changelog]
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write
environment:
name: pypi
url: https://pypi.org/project/strands-apify
steps:
- name: Prepare distribution
uses: apify/workflows/prepare-pypi-distribution@6cbb5232cc59d59047f1e8268da10747e729989e
with:
ref: ${{ needs.update_changelog.outputs.changelog_commitish }}
package_name: strands-apify
is_prerelease: ""
version_number: ${{ needs.release_metadata.outputs.version_number }}
install_command: uv pip install --system -e ".[dev]"
build_command: hatch build

- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
Loading
Loading