Skip to content

Instantly share code, notes, and snippets.

Created July 19, 2012 17:24
Show Gist options
  • Save JeffPaine/3145490 to your computer and use it in GitHub Desktop.
Save JeffPaine/3145490 to your computer and use it in GitHub Desktop.
Make an issue on github using API V3 and Python
import json
import requests
# Authentication for user filing issue (must have read/write access to
# repository to add issue to)
# The repository to add this issue to
def make_github_issue(title, body=None, assignee=None, milestone=None, labels=None):
'''Create an issue on using the given parameters.'''
# Our url to create issues via POST
url = '' % (REPO_OWNER, REPO_NAME)
# Create an authenticated session to create the issue
session = requests.session(auth=(USERNAME, PASSWORD))
# Create our issue
issue = {'title': title,
'body': body,
'assignee': assignee,
'milestone': milestone,
'labels': labels}
# Add the issue to our repository
r =, json.dumps(issue))
if r.status_code == 201:
print 'Successfully created Issue "%s"' % title
print 'Could not create Issue "%s"' % title
print 'Response:', r.content
make_github_issue('Issue Title', 'Body text', 'assigned_user', 3, ['bug'])
Copy link

luna215 commented Apr 18, 2023

@Tamim1992 not sure if you ever got the private repo working, but here is what I did:

import requests
import json

    "molstar": {
        "owner": "molstar",
        "repo": "molstar",
        "custom_repo": "molstar",
        "release": "v3.32.0"
    "indgio": {
        "owner": "epam",
        "repo": "indigo",
        "custom_repo": "Indigo",
        "release": "indigo-1.0.7"
    "ketcher": {
        "owner": "epam",
        "repo": "ketcher",
        "custom_repo": "Ketcher",
        "release": "v2.7.2"

RELEASES_URL = "{owner}/{repo}/releases"
ISSUE_URL = "{owner}/{repo}/issues"
ISSUES_ADD_LABEL = "{owner}/{repo}/issues/{issue_id}"
TOKEN = "" # This is the PAT token

headers = {
    "Authorization": f"token {TOKEN}",
    "Accept": "application/vnd.github+json"

# Create an authenticated session to create the issue
session = requests.Session()
session = requests.Session()
session.auth = ("luna215", TOKEN)

def add_label_to_issue(custom_repo: str, issue_id: str):

    labels = {
        "labels": ["P0 - Critical"]
    }, repo=custom_repo, issue_id=issue_id), data=json.dumps(labels))
    print(f"Labels added to issue {issue_id}")

def create_update_issue(latest_release: str, current_release: str, custom_repo: str): 
    """Create an issue that describes to update the project"""

    issue = {
        "title": f"Update package to {latest_release}!",
        "body": f"The package is currently using {current_release} and we need to update it to {latest_release}"
    response =, repo=custom_repo), data=json.dumps(issue)).json()
    issue_id = response["number"]

    add_label_to_issue(custom_repo, issue_id)

if __name__ == "__main__":

    for project_name, project_info in PROJECT_VERSIONS.items():
        owner = project_info["owner"]
        repo = project_info["repo"]
        custom_repo = project_info["custom_repo"]
        current_release = project_info["release"]

        response = requests.get(RELEASES_URL.format(owner=owner, repo=repo))

        data = response.json()

        latest_release = data[0]["tag_name"]

        if latest_release != current_release:
            # TODO: check if issue exists to update project

            print(f"{project_name} needs to be updated! {current_release} --> {latest_release}")
            create_update_issue(latest_release, current_release, custom_repo)

Copy link

I'll test this script this weekend, its got me thinking of ways to improve upon what you did.

  1. Creating a database of choices
  2. Add this code to my data_workbench when I do EDA.

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