Skip to content

Return response to Github in time, run our process as BackgroundTasks#756

Merged
myakove merged 2 commits intomainfrom
return-response-in-time
May 7, 2025
Merged

Return response to Github in time, run our process as BackgroundTasks#756
myakove merged 2 commits intomainfrom
return-response-in-time

Conversation

@myakove
Copy link
Copy Markdown
Collaborator

@myakove myakove commented May 7, 2025

Github webhook need answer in 10 seconds, otherwise it report time out.
We return 200 if we got the hook and all check passed, otherwise we return error.

Summary by CodeRabbit

  • Refactor
    • Webhook processing now runs asynchronously in the background, enabling quicker responses upon webhook receipt and improved error logging.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 7, 2025

Walkthrough

The process_webhook endpoint in webhook_server/app.py was modified to accept a BackgroundTasks parameter and now schedules webhook processing as a background task instead of awaiting its completion, allowing the HTTP response to return immediately while processing continues asynchronously. Error handling was added inside the background task to log exceptions.

Changes

File(s) Change Summary
webhook_server/app.py Updated process_webhook function signature to include BackgroundTasks. Replaced direct await of api.process() with scheduling it as a background task wrapped in error handling. Endpoint now returns immediately.

Possibly related PRs

  • Make process def async #750: Modified process_webhook to run api.process() asynchronously, laying groundwork for the current background task scheduling with error handling.

📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 75b81f2 and e99d6d0.

📒 Files selected for processing (1)
  • webhook_server/app.py (3 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (4)
  • GitHub Check: tox
  • GitHub Check: python-module-install
  • GitHub Check: pre-commit
  • GitHub Check: build-container
🔇 Additional comments (2)
webhook_server/app.py (2)

11-11: Import of BackgroundTasks looks good

This import is necessary to utilize FastAPI's background task functionality, which is essential for the PR objective of responding to GitHub quickly while processing webhooks asynchronously.


124-124: Function signature correctly updated for background tasks

The function signature has been properly updated to accept the background_tasks parameter injected by FastAPI's dependency injection system. This is the correct pattern for implementing background tasks in FastAPI.

✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 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.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @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 generate unit testing code.
    • @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? Create a ticket on our support page 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 docstrings to generate docstrings for this 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.

@myakove-bot
Copy link
Copy Markdown
Collaborator

Report bugs in Issues

The following are automatically added:

  • Add reviewers from OWNER file (in the root of the repository) under reviewers section.
  • Set PR size label.
  • New issue is created for the PR. (Closed when PR is merged/closed)
  • Run pre-commit if .pre-commit-config.yaml exists in the repo.

Available user actions:

  • To mark PR as WIP comment /wip to the PR, To remove it from the PR comment /wip cancel to the PR.
  • To block merging of PR comment /hold, To un-block merging of PR comment /hold cancel.
  • To mark PR as verified comment /verified to the PR, to un-verify comment /verified cancel to the PR.
    verified label removed on each new commit push.
  • To cherry pick a merged PR comment /cherry-pick <target branch to cherry-pick to> in the PR.
    • Multiple target branches can be cherry-picked, separated by spaces. (/cherry-pick branch1 branch2)
    • Cherry-pick will be started when PR is merged
  • To build and push container image command /build-and-push-container in the PR (tag will be the PR number).
    • You can add extra args to the Podman build command
      • Example: /build-and-push-container --build-arg OPENSHIFT_PYTHON_WRAPPER_COMMIT=<commit_hash>
  • To add a label by comment use /<label name>, to remove, use /<label name> cancel
  • To assign reviewers based on OWNERS file use /assign-reviewers
  • To check if PR can be merged use /check-can-merge
  • to assign reviewer to PR use /assign-reviewer @<reviewer>

PR will be approved when the following conditions are met:

  • /approve from one of the approvers.
  • Minimum number of required /lgtm (1) is met.
Approvers and Reviewers
  • Approvers:

    • myakove
    • rnetser
  • Reviewers:

    • myakove
    • rnetser
Supported /retest check runs
  • /retest tox: Retest tox
  • /retest build-container: Retest build-container
  • /retest python-module-install: Retest python-module-install
  • /retest pre-commit: Retest pre-commit
  • /retest all: Retest all
Supported labels
  • hold
  • verified
  • wip
  • lgtm
  • approve

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
webhook_server/app.py (1)

153-154: Consider returning the actual task details in the response.

The response currently returns a success status regardless of the actual outcome of the background processing.

Consider including the delivery ID or some other reference in the response that could be used to query the status of the background task later:

         background_tasks.add_task(api.process)
-        return {"status": requests.codes.ok, "message": "process success", "log_prefix": delivery_headers}
+        return {"status": requests.codes.ok, "message": "webhook received, processing started", "delivery_id": delivery_id, "log_prefix": delivery_headers}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 16156b8 and 75b81f2.

📒 Files selected for processing (1)
  • webhook_server/app.py (3 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
webhook_server/app.py (1)
webhook_server/libs/github_api.py (1)
  • process (155-196)
🔇 Additional comments (2)
webhook_server/app.py (2)

11-11: LGTM! Import added for background task implementation.

The import of BackgroundTasks from FastAPI is necessary to implement the asynchronous processing approach described in the PR objectives.


124-124: LGTM! Function signature updated appropriately.

The function signature has been updated to include background_tasks: BackgroundTasks parameter, which FastAPI will automatically inject. This change is required to implement background processing.

Comment thread webhook_server/app.py Outdated
@myakove
Copy link
Copy Markdown
Collaborator Author

myakove commented May 7, 2025

/verified
/approve

@myakove myakove merged commit 0ded506 into main May 7, 2025
9 checks passed
@myakove myakove deleted the return-response-in-time branch May 7, 2025 11:05
@myakove-bot
Copy link
Copy Markdown
Collaborator

New container for ghcr.io/myk-org/github-webhook-server:latest published

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants