Skip to content

Update Linear examples with latest types and Modal patterns #130

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 119 commits into
base: develop
Choose a base branch
from

Conversation

codegen-sh[bot]
Copy link

@codegen-sh codegen-sh bot commented May 17, 2025

This PR updates all example codebase files related to Linear webhooks and PR creation to use the latest LinearEvent, LinearIssue, LinearComment, and LinearUser types, and ensures they're using up-to-date Modal patterns.

Changes:

Linear Webhooks Example:

  • Updated webhooks.py to use the latest LinearEvent, LinearIssue, LinearComment, and LinearUser types
  • Added proper type checking for all event handlers
  • Added a generic event handler for any event type not explicitly handled
  • Updated the Modal image to use the latest codegen version (v0.26.3)
  • Updated pyproject.toml with the latest dependencies

Ticket-to-PR Example:

  • Updated app.py to use the latest LinearEvent, LinearIssue, LinearComment, and LinearUser types
  • Improved code organization and added better docstrings
  • Added a comprehensive README.md with setup and deployment instructions
  • Added .env.template file with required environment variables
  • Added pyproject.toml with the latest dependencies

These updates ensure that all Linear-related examples are consistent with the latest implementation in the codegen codebase and follow best practices for Modal applications.


💻 View my workAbout Codegen

Summary by Sourcery

Update Linear webhook and ticket-to-PR examples to use the latest LinearEvent types and Modal deployment patterns with codegen v0.26.3

New Features:

  • Add generic catch-all handler for any unhandled Linear event type
  • Include .env.template files for both examples

Enhancements:

  • Migrate handlers to use strongly typed LinearEvent, LinearIssue, LinearComment, and LinearUser with proper type checking and logging
  • Refactor Modal image setup and app initialization for both examples
  • Improve code organization, add docstrings, and reset codebase after PR generation

Build:

  • Bump Codegen SDK to ≥v0.26.3 and update fastapi, uvicorn, pydantic versions in pyproject.toml
  • Add optional dev dependencies (black, isort, mypy, ruff) to example projects

CI:

  • Update package.json release branches configuration and specify Yarn packageManager

Documentation:

  • Overhaul README.md for both examples with detailed prerequisites, setup, deployment, webhook configuration, and troubleshooting
  • Add comprehensive README and environment variable instructions for Linear webhooks and ticket-to-PR flow

clee-codegen and others added 30 commits February 26, 2025 23:54
# Motivation

The **Codegen on OSS** package provides a pipeline that:

- **Collects repository URLs** from different sources (e.g., CSV files
or GitHub searches).
- **Parses repositories** using the codegen tool.
- **Profiles performance** and logs metrics for each parsing run.
- **Logs errors** to help pinpoint parsing failures or performance
bottlenecks.

<!-- Why is this change necessary? -->

# Content

<!-- Please include a summary of the change -->
see
[codegen-on-oss/README.md](https://github.com/codegen-sh/codegen-sdk/blob/acfe3dc07b65670af33b977fa1e7bc8627fd714e/codegen-on-oss/README.md)

# Testing

<!-- How was the change tested? -->
`uv run modal run modal_run.py`
No unit tests yet 😿 

# Please check the following before marking your PR as ready for review

- [ ] I have added tests for my changes
- [x] I have updated the documentation or added new documentation as
needed
Original commit by Tawsif Kamal: Revert "Revert "Adding Schema for Tool Outputs"" (codegen-sh#894)

Reverts codegen-sh#892

---------

Co-authored-by: Rushil Patel <[email protected]>
Co-authored-by: rushilpatel0 <[email protected]>
Original commit by Ellen Agarwal: fix: Workaround for relace not adding newlines (codegen-sh#907)
Copy link

sourcery-ai bot commented May 17, 2025

Reviewer's Guide

This PR modernizes the Linear webhook and ticket-to-PR examples by migrating to the latest SDK types with robust type checks, introducing a catch-all event handler, updating Modal deployment patterns, enriching documentation and setup workflows, and upgrading dependencies and project configurations.

Sequence Diagram for Linear Webhook Event Handling

sequenceDiagram
    participant Linear
    participant ModalApp as Modal App (LinearEventHandlers)

    Linear-->>ModalApp: Webhook (Issue Event: LinearEvent)
    ModalApp->>ModalApp: handle_issue(LinearEvent)
    Note right of ModalApp: Process LinearIssue data
    ModalApp-->>Linear: HTTP Response (status, message)

    Linear-->>ModalApp: Webhook (Comment Event: LinearEvent)
    ModalApp->>ModalApp: handle_comment(LinearEvent)
    Note right of ModalApp: Process LinearComment data
    ModalApp-->>Linear: HTTP Response (status, message)

    Linear-->>ModalApp: Webhook (Other Event Type: LinearEvent)
    ModalApp->>ModalApp: handle_generic(LinearEvent)
    Note right of ModalApp: Process generic event data
    ModalApp-->>Linear: HTTP Response (status, message)
Loading

Class Diagram for Core Linear Types

classDiagram
    class LinearEvent {
        +type: string
        +action: string
        +data: Object (LinearIssue, LinearComment, etc.)
    }
    class LinearIssue {
        +id: string
        +title: string
        +description: string
        +identifier: string
        +issue_url: string
    }
    class LinearComment {
        +id: string
        +body: string
        +user: LinearUser
    }
    class LinearUser {
        +name: string
    }
    LinearEvent o-- "data" LinearIssue : can be
    LinearEvent o-- "data" LinearComment : can be
    LinearComment *-- "1" LinearUser : has a
Loading

Class Diagram for LinearEventHandlers (linear_webhooks)

classDiagram
    class LinearEventHandlers {
        +CodegenApp app
        +enter()
        +exit()
        +handle_issue(event: LinearEvent)
        +handle_comment(event: LinearEvent)
        +handle_generic(event: LinearEvent)
    }
    LinearEventHandlers ..> LinearEvent : uses
    LinearEventHandlers ..> LinearIssue : uses (via event.data)
    LinearEventHandlers ..> LinearComment : uses (via event.data)
    note for LinearEventHandlers "Handles Linear webhook events within a Modal app.\nUpdated to use specific Linear types and added generic handler."
Loading

Class Diagram for LinearApp (ticket-to-pr)

classDiagram
    class LinearApp {
        +CodegenApp app
        +Codebase codebase
        +run_this_on_container_startup()
        +run_this_on_container_exit()
        +handle_webhook(event: LinearEvent, request: Request)
    }
    class CodeAgent {
        +Codebase codebase
        +run(query: string)
    }
    class LinearClient {
        +comment_on_issue(issue_id: string, comment: string)
    }
    class Codebase {
        +reset()
    }
    LinearApp ..> LinearEvent : uses
    LinearApp ..> CodeAgent : uses
    LinearApp ..> LinearClient : uses
    LinearApp ..> Codebase : uses
    note for LinearApp "Handles Linear issue events to trigger PR creation.\nUpdated to use LinearEvent type."
Loading

File-Level Changes

Change Details Files
Migrated handlers to use latest LinearEvent, LinearIssue, LinearComment, and LinearUser types with type-safe processing
  • Updated imports to pull in new Linear types from codegen.extensions.linear.types
  • Changed handler signatures to accept LinearEvent instead of raw dicts
  • Added isinstance checks before accessing event.data properties
  • Replaced manual payload parsing with type-driven processing
codegen-examples/examples/linear_webhooks/webhooks.py
codegen-examples/examples/ticket-to-pr/app.py
Added a generic catch-all Linear event handler in the webhook example
  • Introduced handle_generic decorated with @app.linear.event("*")
  • Logged event.type and event.action for unhandled event types
  • Returned uniform success payload for any event
codegen-examples/examples/linear_webhooks/webhooks.py
Refreshed Modal application patterns for consistent startup, shutdown, and deployment
  • Updated modal.Image creation to use codegen>=v0.26.3
  • Wrapped event subscription/unsubscription in @modal.enter and @modal.exit with logging
  • Added if name == 'main': app.serve() for direct deployments
codegen-examples/examples/linear_webhooks/webhooks.py
codegen-examples/examples/ticket-to-pr/app.py
Overhauled README and .env templates with step-by-step setup and deployment instructions
  • Expanded README.md with clear prerequisites, installation, configuration, and troubleshooting steps
  • Standardized environment variable templates in .env.template
  • Restructured example usage sections and added custom event handler guidance
codegen-examples/examples/ticket-to-pr/README.md
codegen-examples/examples/linear_webhooks/README.md
codegen-examples/examples/ticket-to-pr/.env.template
codegen-examples/examples/linear_webhooks/.env.template
Bumped project dependencies and updated configuration in pyproject.toml and package.json
  • Upgraded codegen, fastapi, uvicorn, pydantic versions and added dev dependencies for linting/formatting
  • Adjusted Python version requirements to >=3.13
  • Updated package.json release branches and added packageManager field
codegen-examples/examples/ticket-to-pr/pyproject.toml
codegen-examples/examples/linear_webhooks/pyproject.toml
package.json

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link

korbit-ai bot commented May 17, 2025

By default, I don't review pull requests opened by bots. If you would like me to review this pull request anyway, you can request a review via the /korbit-review command in a comment.

Copy link

coderabbitai bot commented May 17, 2025

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Join our Discord community for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Author

codegen-sh bot commented May 17, 2025

I see a check failed - I'm on it! 🫡

💻 View my work

Copy link
Author

codegen-sh bot commented May 17, 2025

✅ Fixed the failing pre-commit checks in PR #130.

I've addressed the formatting issues that were causing the checks to fail:

  1. Fixed TOML formatting in pyproject.toml files
  2. Fixed Python formatting in webhooks.py and app.py
  3. Fixed Markdown formatting in README.md files
  4. Added missing newlines at the end of files
  5. Fixed package.json formatting

The changes have been pushed to the PR branch in this commit.

💻 View my work • React 👍 or 👎

Copy link
Author

codegen-sh bot commented May 17, 2025

I see a check failed - I'm on it! 🫡

💻 View my work

Copy link
Author

codegen-sh bot commented May 17, 2025

✅ Fixed the failing mypy checks in PR #130.

I've addressed the type errors in the ticket-to-pr example:

  1. Fixed type issues in helpers.py:

    • Added default empty values for dictionary and list assignments
    • Improved attribute access with getattr() to handle potential None values
    • Added proper type annotations and default parameters
  2. Fixed function call issues in app.py:

    • Added required parameters to create_codebase() function calls
    • Fixed the process_update_event() call by removing the extra parameter
    • Added proper imports and type hints

The changes have been pushed to the PR branch in this commit.

💻 View my work • React 👍 or 👎

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants