Giter Site home page Giter Site logo

chatgpt-github-actions's Introduction

GenAI Code Review

This project aims to automate code review using the GPT language model. It integrates with Github Actions and, upon receiving a Pull Request, automatically submits each code change to GPT for review.

Setup

The following steps will guide you in setting up the code review automation with GPT.

Prerequisites

Before you begin, you need to have the following:

  • An OpenAI API Key. You will need a personal API key from OpenAI which you can get here: https://openai.com/api/. To get an OpenAI API key, you can sign up for an account on the OpenAI website https://openai.com/signup/. Once you have signed up, you can create a new API key from your account settings.
  • A Github account and a Github repository where you want to use the code review automation.

Step 1: Create a Secret for your OpenAI API Key

Create a secret for your OpenAI API Key in your Github repository or organization with the name openai_api_key. This secret will be used to authenticate with the OpenAI API.

You can do this by going to your repository/organization's settings, navigate to secrets and create a new secret with the name openai_api_key and paste your OpenAI API key as the value.

Step 2: Adjust Permissions

Then you need to set up your project's permissions so that the Github Actions can write comments on Pull Requests. You can read more about this here: automatic-token-authentication

Step 3: Create a new Github Actions workflow in your repository in `.github/workflows/chatgpt-review.yaml. A sample workflow is given below:

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  code_review_job:
    runs-on: ubuntu-latest
    name: ChatGPT Code Review
    steps:
      - name: GenAI Code Review
        uses: cirolini/genai-code-review@v2
        with:
          openai_api_key: ${{ secrets.openai_api_key }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
          github_pr_id: ${{ github.event.number }}
          openai_model: "gpt-3.5-turbo" # optional
          openai_temperature: 0.5 # optional
          openai_max_tokens: 2048 # optional
          mode: files # files or patch
          language: en # optional, default is 'en'
          custom_prompt: "" # optional

In the above workflow, the pull_request event triggers the workflow whenever a pull request is opened or synchronized. The workflow runs on the ubuntu-latest runner and uses the cirolini/chatgpt-github-actions@v1 action.

The openai_api_key is passed from the secrets context, and the github_token is also passed from the secrets context. The github_pr_id is passed from the github.event.number context. The other three input parameters, openai_engine, openai_temperature, and openai_max_tokens, are optional and have default values.

Configuration Parameters

openai_engine

  • Description: The OpenAI model to use for generating responses.
  • Default: "gpt-3.5-turbo"
  • Options: Models like gpt-4o, gpt-4-turbo, etc.

openai_temperature

  • Description: Controls the creativity of the AI's responses. Higher values make the output more random, while lower values make it more focused and deterministic.
  • Default: 0.5
  • Range: 0.0 to 1.0

openai_max_tokens

  • Description: The maximum number of tokens to generate in the completion.
  • Default: 2048
  • Range: Up to the model's maximum context length.

mode

  • Description: Determines the method of analysis for the pull request.
  • Options:
    • files: Analyzes the files changed in the last commit.
    • patch: Analyzes the patch content.

language

  • Description: The language in which the review comments will be written.
  • Default: en (English)
  • Options: Any valid language code, e.g., pt-br for Brazilian Portuguese.

custom_prompt

  • Description: Custom instructions for the AI to follow when generating the review.
  • Default: "" (empty)
  • Usage: Provide specific guidelines or focus areas for the AI's code review.

How it works

files

This action is triggered when a pull request is opened or updated. The action authenticates with the OpenAI API using the provided API key, and with the Github API using the provided token. It then selects the repository using the provided repository name, and the pull request ID. For each commit in the pull request, it gets the modified files, gets the file name and content, sends the code to ChatGPT for an explanation, and adds a comment to the pull request with ChatGPT's response.

patch

Every PR has a file called patch which is where the difference between 2 files, the original and the one that was changed, is, this strategy consists of reading this file and asking the AI to summarize the changes made to it.

Comments will appear like this:

genaicodereview

Custom Prompt

Overview

The custom_prompt parameter allows users to tailor the AI's review to specific needs. By providing custom instructions, users can focus the review on particular aspects or request additional information. This flexibility enhances the usefulness of the AI-generated review comments.

How to Use

To use a custom prompt, simply provide a string with your instructions. For example, to ask the AI to rate the code on a scale of 1 to 10, set the custom_prompt parameter as follows:

custom_prompt: "Give a rating from 1 to 10 for this code:"

Potential

Using a custom prompt can direct the AI to focus on specific areas, such as:

  • Code quality and readability
  • Security vulnerabilities
  • Performance optimizations
  • Adherence to coding standards
  • Specific concerns or questions about the code

Implementation in Code

The custom_prompt is integrated into the review generation as shown:

if custom_prompt:
      logging.info(f"Using custom prompt: {custom_prompt}")
      return f"{custom_prompt}\n### Code\n```{content}```\n\nWrite this code review in the following {language}:\n\n"
  return (f"Please review the following code for clarity, efficiency, and adherence to best practices. "
          f"Identify any ar...

This feature allows you to harness the power of AI in a way that best suits your specific code review requirements.

Security and Privacity

When sending code to the ChatGPT language model, it is important to consider the security and privacy of the code because user data may be collected and used to train and improve the model, so it's important to have proper caution and privacy policies in place.. OpenAI takes security seriously and implements measures to protect customer data, such as encryption of data in transit and at rest, and implementing regular security audits and penetration testing. However, it is still recommended to use appropriate precautions when sending sensitive or confidential code, such as removing any sensitive information or obscuring it before sending it to the model. Additionally, it is a good practice to use a unique API key for each project and to keep the API key secret, for example by storing it in a Github secret. This way, if the API key is ever compromised, it can be easily revoked, limiting the potential impact on the user's projects.

Built With

Authors

Contributors

License

This project is licensed under the MIT License - see the LICENSE file for details.

chatgpt-github-actions's People

Contributors

cirolini avatar glauberborges avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

chatgpt-github-actions's Issues

"ChatGPT Was Unable To Process The Response"

See the following screenshot. I am getting error messages that read: ChatGPT was unable to process the response about XYZ:

image

This action has the correct permissions to write comments to the PR. Also, it appears the OpenAI token is working as I created it with maximum permissions on the OpenAI side, and I can see it is hitting the OpenAI API on the usage page for the token.

QUESTION: Any idea why I might be getting these responses?

This Github Action looks terrific and would love to be able to use it.

The code I am using is as follows. I removed the "davinci" engine that is in the sample / readme as I was receiving warnings it was deprecated in the Github Action logs:

jobs:
    review-1:
        runs-on: ubuntu-latest
        name: ChatGPT Cirolini Code Review
        steps:
        - name: ChatGPT Cirolini Code Review
          uses: cirolini/[email protected]
          with:
            openai_api_key: ${{ secrets.openai_api_key }}
            github_token: ${{ secrets.GITHUB_TOKEN }}
            github_pr_id: ${{ github.event.number }}
            openai_engine: "gpt-3.5-turbo-1106"
            openai_temperature: 0.5
            openai_max_tokens: 2048
            mode: patch

getting the error for main.py file not found when running the action cirolini/genai-code-review@v2

Run cirolini/genai-code-review@v2
with:
openai_api_key: ***
github_token: ***
github_pr_id: 2
openai_model: gpt-3.5-turbo
mode: files
language: java
openai_temperature: 0.5
openai_max_tokens: 2048
env:
JAVA_HOME: /opt/hostedtoolcache/Java_Adopt_jdk/11.0.23-9/x64
/usr/bin/docker run --name bd3e97b8141ed9284bb43c4748769_1c749f --label 066803 --workdir /github/workspace --rm -e "JAVA_HOME" -e "INPUT_OPENAI_API_KEY" -e "INPUT_GITHUB_TOKEN" -e "INPUT_GITHUB_PR_ID" -e "INPUT_OPENAI_MODEL" -e "INPUT_MODE" -e "INPUT_LANGUAGE" -e "INPUT_OPENAI_TEMPERATURE" -e "INPUT_OPENAI_MAX_TOKENS" -e "INPUT_CUSTOM_PROMPT" -e "OPENAI_API_KEY" -e "GITHUB_TOKEN" -e "GITHUB_PR_ID" -e "OPENAI_MODEL" -e "OPENAI_TEMPERATURE" -e "OPENAI_MAX_TOKENS" -e "MODE" -e "LANGUAGE" -e "CUSTOM_PROMPT" -e "HOME" -e "GITHUB_JOB" -e "GITHUB_REF" -e "GITHUB_SHA" -e "GITHUB_REPOSITORY" -e "GITHUB_REPOSITORY_OWNER" -e "GITHUB_REPOSITORY_OWNER_ID" -e "GITHUB_RUN_ID" -e "GITHUB_RUN_NUMBER" -e "GITHUB_RETENTION_DAYS" -e "GITHUB_RUN_ATTEMPT" -e "GITHUB_REPOSITORY_ID" -e "GITHUB_ACTOR_ID" -e "GITHUB_ACTOR" -e "GITHUB_TRIGGERING_ACTOR" -e "GITHUB_WORKFLOW" -e "GITHUB_HEAD_REF" -e "GITHUB_BASE_REF" -e "GITHUB_EVENT_NAME" -e "GITHUB_SERVER_URL" -e "GITHUB_API_URL" -e "GITHUB_GRAPHQL_URL" -e "GITHUB_REF_NAME" -
python: can't open file '/github/workspace/src/main.py': [Errno 2] No such file or directory

Typo in example code in README file

As far as I can tell, the last line of the yaml code example in Step 3 of the README should read

mode: files # files or patch

Instead of

mode: file # file or patch

[FEATURE] Inclusão de parâmetro para continuar PR mesmo com falha na Action

🚀 Resumo da funcionalidade solicitada:
Olá @cirolini, tomei a liberdade de abrir essa issue com um template que costumo usar para requisições de features. Primeiramente, parabéns pela iniciativa em criar essa action. Ao tentar utilizar a action pela primeira vez em meu repositório, me deparei com uma limitação de caracteres enviados ao ChatGPT para análise e revisão.

Traceback:

Traceback (most recent call last):
  File "/main.py", line 36, in <module>
    response = openai.Completion.create(
  File "/usr/local/lib/python3.[8](https://github.com/ThiagoPanini/terraglue/actions/runs/4038680923/jobs/6942850497#step:3:9)/site-packages/openai/api_resources/completion.py", line 25, in create
    return super().create(*args, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/openai/api_resources/abstract/engine_api_resource.py", line 153, in create
    response, _, api_key = requestor.request(
  File "/usr/local/lib/python3.8/site-packages/openai/api_requestor.py", line 227, in request
    resp, got_stream = self._interpret_response(result, stream)
  File "/usr/local/lib/python3.8/site-packages/openai/api_requestor.py", line 620, in _interpret_response
    self._interpret_response_line(
  File "/usr/local/lib/python3.8/site-packages/openai/api_requestor.py", line 680, in _interpret_response_line
    raise self.handle_error_response(
openai.error.InvalidRequestError: This model's maximum context length is 40[9](https://github.com/ThiagoPanini/terraglue/actions/runs/4038680923/jobs/6942850497#step:3:10)7 tokens, however you requested 5939 tokens (3891 in your prompt; [20](https://github.com/ThiagoPanini/terraglue/actions/runs/4038680923/jobs/6942850497#step:3:21)48 for the completion). Please reduce your prompt; or completion length.

De fato, este meu repositório em questão possui arquivos com conteúdos geralmente densos e com muitas linhas. Sabendo dessa limitação da ChatGPT em termos de caracteres, o pedido que se segue é:

Existe a possibilidade de incluir algum flag na Action para não gerar erros na esteira em caso de falhas no geral?


🏆 Resumo sobre benefícios da nova funcionalidade:
Com a implementação dessa nova funcionalidade, os usuários poderiam:

  • Não ter seus PRs bloqueados por erros na utilização desta action

📚 Provável complexidade:
A melhor opção que descreve a complexidade associada a esta funcionalidade é:

  • Média complexidade

💡 Ideias de implementação:
Para implementação da funcionalidade, seria possível:

  • Analisar a melhor maneira de parametrizar a action com algo como continue_if_fail

support for private repos

Hi everyone!

I am trying to use it with a private repo . but it seems doesn't work,
is there any configuration that could help to have this working with private repos?

if not, is there any plan to add support for a private repo?

thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.