mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-11 00:00:38 +08:00
Merge pull request #304 from sarbjitsinghgrewal/fix_bitbucket_pipeline
Fix bitbucket pipeline
This commit is contained in:
18
Dockerfile.bitbucket_pipeline
Normal file
18
Dockerfile.bitbucket_pipeline
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
FROM python:3.10 as base
|
||||||
|
|
||||||
|
ENV OPENAI_API_KEY=${OPENAI_API_KEY} \
|
||||||
|
BITBUCKET_BEARER_TOKEN=${BITBUCKET_BEARER_TOKEN} \
|
||||||
|
BITBUCKET_PR_ID=${BITBUCKET_PR_ID} \
|
||||||
|
BITBUCKET_REPO_SLUG=${BITBUCKET_REPO_SLUG} \
|
||||||
|
BITBUCKET_WORKSPACE=${BITBUCKET_WORKSPACE}
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
ADD pyproject.toml .
|
||||||
|
ADD requirements.txt .
|
||||||
|
RUN pip install . && rm pyproject.toml requirements.txt
|
||||||
|
ENV PYTHONPATH=/app
|
||||||
|
ADD pr_agent pr_agent
|
||||||
|
ADD bitbucket_pipeline/entrypoint.sh /
|
||||||
|
RUN chmod +x /entrypoint.sh
|
||||||
|
ENTRYPOINT ["/entrypoint.sh"]
|
60
INSTALL.md
60
INSTALL.md
@ -16,6 +16,7 @@ There are several ways to use PR-Agent:
|
|||||||
- [Method 6: Deploy as a Lambda Function](INSTALL.md#method-6---deploy-as-a-lambda-function)
|
- [Method 6: Deploy as a Lambda Function](INSTALL.md#method-6---deploy-as-a-lambda-function)
|
||||||
- [Method 7: AWS CodeCommit](INSTALL.md#method-7---aws-codecommit-setup)
|
- [Method 7: AWS CodeCommit](INSTALL.md#method-7---aws-codecommit-setup)
|
||||||
- [Method 8: Run a GitLab webhook server](INSTALL.md#method-8---run-a-gitlab-webhook-server)
|
- [Method 8: Run a GitLab webhook server](INSTALL.md#method-8---run-a-gitlab-webhook-server)
|
||||||
|
- [Method 9: Run as a Bitbucket Pipeline](INSTALL.md#method-9-run-as-a-bitbucket-pipeline)
|
||||||
---
|
---
|
||||||
|
|
||||||
### Method 1: Use Docker image (no installation required)
|
### Method 1: Use Docker image (no installation required)
|
||||||
@ -370,4 +371,63 @@ In the "Trigger" section, check the ‘comments’ and ‘merge request events
|
|||||||
6. Test your installation by opening a merge request or commenting or a merge request using one of CodiumAI's commands.
|
6. Test your installation by opening a merge request or commenting or a merge request using one of CodiumAI's commands.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Method 9: Run as a Bitbucket Pipeline
|
||||||
|
|
||||||
|
|
||||||
|
You can use our pre-build Bitbucket-Pipeline docker image to run as Bitbucket-Pipeline.
|
||||||
|
|
||||||
|
1. Add the following file in your repository bitbucket_pipelines.yml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
pipelines:
|
||||||
|
pull-requests:
|
||||||
|
'**':
|
||||||
|
- step:
|
||||||
|
name: PR Agent Pipeline
|
||||||
|
caches:
|
||||||
|
- pip
|
||||||
|
image: python:3.8
|
||||||
|
services:
|
||||||
|
- docker
|
||||||
|
script:
|
||||||
|
- git clone https://github.com/Codium-ai/pr-agent.git
|
||||||
|
- cd pr-agent
|
||||||
|
- docker build -t bitbucket_runner:latest -f Dockerfile.bitbucket_pipeline .
|
||||||
|
- docker run -e OPENAI_API_KEY=$OPENAI_API_KEY -e BITBUCKET_BEARER_TOKEN=$BITBUCKET_BEARER_TOKEN -e BITBUCKET_PR_ID=$BITBUCKET_PR_ID -e BITBUCKET_REPO_SLUG=$BITBUCKET_REPO_SLUG -e BITBUCKET_WORKSPACE=$BITBUCKET_WORKSPACE bitbucket_runner:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Add the following secret to your repository under Repository settings > Pipelines > Repository variables.
|
||||||
|
OPENAI_API_KEY: <your key>
|
||||||
|
BITBUCKET_BEARER_TOKEN: <your token>
|
||||||
|
|
||||||
|
3. To get BITBUCKET_BEARER_TOKEN follow these steps
|
||||||
|
So here is my step by step tutorial
|
||||||
|
i) Insert your workspace name instead of {workspace_name} and go to the following link in order to create an OAuth consumer.
|
||||||
|
|
||||||
|
https://bitbucket.org/{workspace_name}/workspace/settings/api
|
||||||
|
|
||||||
|
set callback URL to http://localhost:8976 (doesn't need to be a real server there)
|
||||||
|
select permissions: repository -> read
|
||||||
|
|
||||||
|
ii) use consumer's Key as a {client_id} and open the following URL in the browser
|
||||||
|
|
||||||
|
https://bitbucket.org/site/oauth2/authorize?client_id={client_id}&response_type=code
|
||||||
|
|
||||||
|
iii)
|
||||||
|
after you press "Grant access" in the browser it will redirect you to
|
||||||
|
|
||||||
|
http://localhost:8976?code=<CODE>
|
||||||
|
|
||||||
|
iv) use the code from the previous step and consumer's Key as a {client_id}, and consumer's Secret as {client_secret}
|
||||||
|
|
||||||
|
curl -X POST -u "{client_id}:{client_secret}" \
|
||||||
|
https://bitbucket.org/site/oauth2/access_token \
|
||||||
|
-d grant_type=authorization_code \
|
||||||
|
-d code={code} \
|
||||||
|
|
||||||
|
|
||||||
|
After completing this steps, you just to place this access token in the repository varibles.
|
||||||
|
|
||||||
|
|
||||||
=======
|
=======
|
||||||
|
@ -159,6 +159,7 @@ There are several ways to use PR-Agent:
|
|||||||
- [Method 6: Deploy as a Lambda Function](INSTALL.md#method-6---deploy-as-a-lambda-function)
|
- [Method 6: Deploy as a Lambda Function](INSTALL.md#method-6---deploy-as-a-lambda-function)
|
||||||
- [Method 7: AWS CodeCommit](INSTALL.md#method-7---aws-codecommit-setup)
|
- [Method 7: AWS CodeCommit](INSTALL.md#method-7---aws-codecommit-setup)
|
||||||
- [Method 8: Run a GitLab webhook server](INSTALL.md#method-8---run-a-gitlab-webhook-server)
|
- [Method 8: Run a GitLab webhook server](INSTALL.md#method-8---run-a-gitlab-webhook-server)
|
||||||
|
- [Method 9: Run as a Bitbucket Pipeline](INSTALL.md#method-9-run-as-a-bitbucket-pipeline)
|
||||||
|
|
||||||
## How it works
|
## How it works
|
||||||
|
|
||||||
|
2
bitbucket_pipeline/entrypoint.sh
Normal file
2
bitbucket_pipeline/entrypoint.sh
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
python /app/pr_agent/servers/bitbucket_pipeline_runner.py
|
34
pr_agent/servers/bitbucket_pipeline_runner.py
Normal file
34
pr_agent/servers/bitbucket_pipeline_runner.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import os
|
||||||
|
from pr_agent.agent.pr_agent import PRAgent
|
||||||
|
from pr_agent.config_loader import get_settings
|
||||||
|
from pr_agent.tools.pr_reviewer import PRReviewer
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
async def run_action():
|
||||||
|
try:
|
||||||
|
pull_request_id = os.environ.get("BITBUCKET_PR_ID", '')
|
||||||
|
slug = os.environ.get("BITBUCKET_REPO_SLUG", '')
|
||||||
|
workspace = os.environ.get("BITBUCKET_WORKSPACE", '')
|
||||||
|
bearer_token = os.environ.get('BITBUCKET_BEARER_TOKEN', None)
|
||||||
|
OPENAI_KEY = os.environ.get('OPENAI_API_KEY') or os.environ.get('OPENAI.KEY')
|
||||||
|
OPENAI_ORG = os.environ.get('OPENAI_ORG') or os.environ.get('OPENAI.ORG')
|
||||||
|
# Check if required environment variables are set
|
||||||
|
if not bearer_token:
|
||||||
|
print("BITBUCKET_BEARER_TOKEN not set")
|
||||||
|
return
|
||||||
|
|
||||||
|
if not OPENAI_KEY:
|
||||||
|
print("OPENAI_KEY not set")
|
||||||
|
return
|
||||||
|
# Set the environment variables in the settings
|
||||||
|
get_settings().set("BITBUCKET.BEARER_TOKEN", bearer_token)
|
||||||
|
get_settings().set("OPENAI.KEY", OPENAI_KEY)
|
||||||
|
if OPENAI_ORG:
|
||||||
|
get_settings().set("OPENAI.ORG", OPENAI_ORG)
|
||||||
|
if pull_request_id and slug and workspace:
|
||||||
|
pr_url = f"https://bitbucket.org/{workspace}/{slug}/pull-requests/{pull_request_id}"
|
||||||
|
await PRReviewer(pr_url).run()
|
||||||
|
except Exception as e:
|
||||||
|
print(f"An error occurred: {e}")
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.run(run_action())
|
Reference in New Issue
Block a user