From ea32ba2d050dc19676777958027c4533b0b7a3a9 Mon Sep 17 00:00:00 2001 From: IISweetHeartII Date: Wed, 4 Feb 2026 02:13:40 +0900 Subject: [PATCH] feat: add GitHub configuration with CI/CD, templates, and dependabot (#1) Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-Claude) Co-authored-by: Sisyphus --- .github/ISSUE_TEMPLATE/bug_report.yml | 74 ++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 8 +++ .github/ISSUE_TEMPLATE/feature_request.yml | 33 ++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 33 ++++++++++ .github/dependabot.yml | 19 ++++++ .github/labeler.yml | 18 ++++++ .github/release.yml | 23 +++++++ .github/workflows/auto-label.yml | 26 ++++++++ .github/workflows/auto-release.yml | 69 ++++++++++++++++++++ .github/workflows/ci.yml | 41 ++++++++++++ 10 files changed, 344 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/dependabot.yml create mode 100644 .github/labeler.yml create mode 100644 .github/release.yml create mode 100644 .github/workflows/auto-label.yml create mode 100644 .github/workflows/auto-release.yml create mode 100644 .github/workflows/ci.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..59afc61 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,74 @@ +name: Bug Report +description: Report a bug in the AgentGram Python SDK +title: "[Bug]: " +labels: ["type: bug", "status: needs triage"] +body: + - type: markdown + attributes: + value: | + Thanks for reporting a bug! Please fill out the sections below. + + - type: textarea + id: description + attributes: + label: Bug Description + description: A clear description of the bug + validations: + required: true + + - type: textarea + id: reproduction + attributes: + label: Steps to Reproduce + description: Minimal code to reproduce the issue + render: python + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected Behavior + description: What should happen? + validations: + required: true + + - type: textarea + id: actual + attributes: + label: Actual Behavior + description: What happens instead? + validations: + required: true + + - type: input + id: version + attributes: + label: SDK Version + description: Output of `pip show agentgram` + placeholder: "0.1.0" + validations: + required: true + + - type: dropdown + id: python-version + attributes: + label: Python Version + options: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + validations: + required: true + + - type: dropdown + id: os + attributes: + label: Operating System + options: + - macOS + - Linux + - Windows + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..7fa8fd0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Documentation + url: https://docs.agentgram.co + about: Check the documentation before opening an issue + - name: AgentGram Platform Issues + url: https://github.com/agentgram/agentgram/issues + about: For issues with the AgentGram platform itself diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..fcc1e8b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,33 @@ +name: Feature Request +description: Suggest a feature for the AgentGram Python SDK +title: "[Feature]: " +labels: ["type: feature", "status: needs triage"] +body: + - type: textarea + id: problem + attributes: + label: Problem Statement + description: What problem does this solve? + validations: + required: true + + - type: textarea + id: solution + attributes: + label: Proposed Solution + description: How should this work? Include code examples if possible. + render: python + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives Considered + description: Other approaches you've considered + + - type: textarea + id: context + attributes: + label: Additional Context + description: Any other relevant information diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..ee0a265 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,33 @@ +## Description + + + +## Type of Change + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] Documentation update +- [ ] Refactoring (no behavior change) + +## Changes Made + +- + +## Related Issues + +Closes # + +## Testing + +- [ ] Tests pass locally (`pytest tests/ -v`) +- [ ] Lint passes (`ruff check agentgram/ tests/`) +- [ ] Type check passes (`mypy agentgram/`) +- [ ] Format check passes (`black --check agentgram/ tests/`) + +## Checklist + +- [ ] My code follows the project's code style +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] New and existing unit tests pass locally with my changes +- [ ] I have made corresponding changes to the documentation diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..52e91db --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,19 @@ +version: 2 +updates: + - package-ecosystem: pip + directory: / + schedule: + interval: weekly + day: monday + labels: + - dependencies + open-pull-requests-limit: 10 + + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + day: monday + labels: + - dependencies + - area: infrastructure diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 0000000..ef15918 --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,18 @@ +"area: sdk": + - changed-files: + - any-glob-to-any-file: "agentgram/**" + +"area: testing": + - changed-files: + - any-glob-to-any-file: "tests/**" + +"area: examples": + - changed-files: + - any-glob-to-any-file: "examples/**" + +"area: infrastructure": + - changed-files: + - any-glob-to-any-file: + - ".github/**" + - "pyproject.toml" + - ".gitignore" diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 0000000..47c8280 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,23 @@ +changelog: + exclude: + labels: + - dependencies + authors: + - dependabot + categories: + - title: Breaking Changes + labels: + - breaking change + - title: New Features + labels: + - "type: feature" + - "type: enhancement" + - title: Bug Fixes + labels: + - "type: bug" + - title: Documentation + labels: + - "type: documentation" + - title: Other Changes + labels: + - "*" diff --git a/.github/workflows/auto-label.yml b/.github/workflows/auto-label.yml new file mode 100644 index 0000000..ba5fed3 --- /dev/null +++ b/.github/workflows/auto-label.yml @@ -0,0 +1,26 @@ +name: Auto Label + +on: + pull_request: + types: [opened, synchronize] + +permissions: + pull-requests: write + +jobs: + label: + runs-on: ubuntu-latest + steps: + - uses: actions/labeler@v5 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + size-label: + runs-on: ubuntu-latest + steps: + - uses: pascalgn/size-label-action@v0.5.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + sizes: > + {"0": "XS", "10": "S", "30": "M", "100": "L", "500": "XL", "1000": "XXL"} diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml new file mode 100644 index 0000000..2cba9b2 --- /dev/null +++ b/.github/workflows/auto-release.yml @@ -0,0 +1,69 @@ +name: Auto Release + +on: + push: + branches: [main] + +permissions: + contents: write + +jobs: + release: + name: Create Release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Get version from pyproject.toml + id: version + run: | + VERSION=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])") + echo "version=$VERSION" >> $GITHUB_OUTPUT + + - name: Check if tag exists + id: check_tag + run: | + if git rev-parse "v${{ steps.version.outputs.version }}" >/dev/null 2>&1; then + echo "exists=true" >> $GITHUB_OUTPUT + else + echo "exists=false" >> $GITHUB_OUTPUT + fi + + - name: Create tag and release + if: steps.check_tag.outputs.exists == 'false' + env: + GH_TOKEN: ${{ github.token }} + run: | + git tag "v${{ steps.version.outputs.version }}" + git push origin "v${{ steps.version.outputs.version }}" + gh release create "v${{ steps.version.outputs.version }}" \ + --title "v${{ steps.version.outputs.version }}" \ + --generate-notes + + publish: + name: Publish to PyPI + runs-on: ubuntu-latest + needs: release + environment: pypi + permissions: + id-token: write + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install build dependencies + run: | + python -m pip install --upgrade pip + pip install build + + - name: Build package + run: python -m build + + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..c84802e --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,41 @@ +name: CI + +on: + push: + branches: [develop, main] + pull_request: + branches: [develop, main] + +jobs: + test: + name: Test (Python ${{ matrix.python-version }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.9", "3.10", "3.11", "3.12"] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" + + - name: Lint with ruff + run: ruff check agentgram/ tests/ + + - name: Type check with mypy + run: mypy agentgram/ + + - name: Format check with black + run: black --check agentgram/ tests/ + + - name: Run tests + run: pytest tests/ -v --tb=short