yewang
yewang

Reputation: 625

create repo using github api (only curl and no oauth)

I'm trying to create a github repo using the v3 api, but I always get a Not Found error. I want to do it only with curl and without oauth. This is what I'm trying:

curl -u myusername https://api.github.com/users/repos -d '{"name": "reponame"}'

What am I missing?

Upvotes: 1

Views: 3734

Answers (1)

ConfusedDeer
ConfusedDeer

Reputation: 3415

You can't do it without an Access Token. Also, please feel free to look at my GitHub open source project Git-Captain.

I created a web-application with a Node.js back-end and HTML/JS front-end that you can setup to have an API do many of these calls for you. It has a step-by-step for a windows server and I'll be adding a Linux step-by-step soon.

It would only take a slight tweak to the project to add a new end-point to the source to do this for you.

To answer your question,

The GitHub API documentation explains exactly how to do what you are requesting on this link.

Giving this example:

as you requested in CURL and obviously replace the token "5199..." with your own:

curl -i -H "Authorization: token 5199831f4dd3b79e7c5b7e0ebe75d67aa66e79d4" \
    -d '{ \
        "name": "blog", \
        "auto_init": true, \
        "private": true, \
        "gitignore_template": "nanoc" \
      }' \
    https://api.github.com/user/repos

OR

Not in CURL and according to this StackOverflow question you can do the following:

https://api.github.com/orgs/<organisation_name>/repos?access_token=<generated token>
       or
https://api.github.com/users/<username>/repos?access_token=<generated token> 

In body, pass this as a payload:

{
  <br/>"name": "<Repo Name>",<br/>
  "description": "<Whateveryour description is>",<br/>
  "homepage": "https://github.com",<br/>
  "private": false,<br/>
}

You can get a "personal access token in GitHub" by going to Settings->Developer Settings-> Personal Access Tokens->Generate new token

In Settings->Developer Settings-> Personal Access Tokens->Generate new token


OR do all of the following

  • Write a script (let's call this script #1) that takes the username,password, and repoName as a parameter.
  • That script will call script #2, which is curl -u ' USER-NAME-HERE' https://api.github.com/user/repos -d '{"name": "REPO-NAME-HERE"}' which will prompt for your user password,
  • have your script #1 listen for script #2's response and then have it enter in the password which the user passed in as a parameter in script#1
  • Finally programmatically hit enter which fires off the curl to create your repo.

UPDATE*

So for some reason, the CURL won't work at all, but the Git-Hub API end point https://api.github.com/user/repos does indeed work. Using POSTMAN, I was able to create a new POST with the URL being https://api.github.com/user/repos and the BODY set to:

{
  "name": "Hello-World",
  "description": "This is your first repository",
  "homepage": "https://github.com",
  "private": false,
  "has_issues": true,
  "has_projects": true,
  "has_wiki": true
}

Then I went to the 'Authorization' section of postman and under 'Type' I selected "Basic Auth" entered my username and password. Clicked update request and then send and my repo was created!

Upvotes: 1

Related Questions