Skip to content
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

Add code-based Github tool #37

Merged
merged 2 commits into from
Aug 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions apis/github/code/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules/
.env
16 changes: 16 additions & 0 deletions apis/github/code/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# GitHub Integration

This is a collection of tools that interact with GitHub repositories.

## Usage

These tools should not be used directly. Instead, use one of the following:

- github.com/gptscript-ai/tools/apis/github/read
- github.com/gptscript-ai/tools/apis/github/write

## Environment Variables

The following environment variables must be set to use these tools:

- `GITHUB_TOKEN`: Your GitHub personal access token.
78 changes: 78 additions & 0 deletions apis/github/code/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import { Octokit } from '@octokit/rest';
import { listIssues, listPRs, createIssue, modifyIssue, deleteIssue, searchIssues, createPR, modifyPR, deletePR, addCommentToIssue, addCommentToPR, getIssue, getPR, getIssueComments, getPRComments, listRepos, closeIssue } from './src/tools.js';

if (process.argv.length !== 3) {
console.log('Usage: node index.js <command>');
process.exit(1);
}

const command = process.argv[2];
const token = process.env.GITHUB_TOKEN;

if (!token) {
console.log('GITHUB_TOKEN environment variable must be set.');
process.exit(1);
}

const octokit = new Octokit({ auth: token });

try {
switch (command) {
case 'listIssues':
await listIssues(octokit, process.env.OWNER, process.env.REPO);
break;
case 'listPRs':
await listPRs(octokit, process.env.OWNER, process.env.REPO);
break;
case 'createIssue':
await createIssue(octokit, process.env.OWNER, process.env.REPO, process.env.TITLE, process.env.BODY);
break;
case 'modifyIssue':
await modifyIssue(octokit, process.env.OWNER, process.env.REPO, process.env.ISSUENUMBER, process.env.NEWTITLE, process.env.NEWBODY);
break;
case 'deleteIssue':
await deleteIssue(octokit, process.env.OWNER, process.env.REPO, process.env.ISSUENUMBER);
break;
case 'searchIssues':
await searchIssues(octokit, process.env.OWNER, process.env.REPO, process.env.QUERY);
break;
case 'createPR':
await createPR(octokit, process.env.OWNER, process.env.REPO, process.env.TITLE, process.env.BODY, process.env.HEAD, process.env.BASE);
break;
case 'modifyPR':
await modifyPR(octokit, process.env.OWNER, process.env.REPO, process.env.PRNUMBER, process.env.NEWTITLE, process.env.NEWBODY);
break;
case 'deletePR':
await deletePR(octokit, process.env.OWNER, process.env.REPO, process.env.PRNUMBER);
break;
case 'addCommentToIssue':
await addCommentToIssue(octokit, process.env.OWNER, process.env.REPO, process.env.ISSUENUMBER, process.env.COMMENT);
break;
case 'addCommentToPR':
await addCommentToPR(octokit, process.env.OWNER, process.env.REPO, process.env.PRNUMBER, process.env.COMMENT);
break;
case 'getIssue':
await getIssue(octokit, process.env.OWNER, process.env.REPO, process.env.ISSUENUMBER);
break;
case 'getPR':
await getPR(octokit, process.env.OWNER, process.env.REPO, process.env.PRNUMBER);
break;
case 'getIssueComments':
await getIssueComments(octokit, process.env.OWNER, process.env.REPO, process.env.ISSUENUMBER);
break;
case 'getPRComments':
await getPRComments(octokit, process.env.OWNER, process.env.REPO, process.env.PRNUMBER);
break;
case 'listRepos':
await listRepos(octokit, process.env.OWNER);
break;
case 'closeIssue':
await closeIssue(octokit, process.env.OWNER, process.env.REPO, process.env.ISSUENUMBER);
break;
default:
throw new Error(`Unknown command: ${command}`);
}
} catch (error) {
console.log(`Error running ${command}: ${error.message}`);
process.exit(1);
}
180 changes: 180 additions & 0 deletions apis/github/code/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions apis/github/code/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "github-cli",
"version": "1.0.0",
"description": "A CLI tool to list issues and pull requests from a GitHub repository",
"main": "index.js",
"type": "module",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"@octokit/rest": "^21.0.2"
}
}
Loading