new-github-repository
TypeScript icon, indicating that this package has built-in type declarations

0.2.3Β β€’Β PublicΒ β€’Β Published

New Github Repository

Creates a new repository on GitHub, including waiting for initialization. πŸ†•

πŸ‘ͺ All Contributors: 1 🀝 Code of Conduct: Kept πŸ§ͺ Coverage πŸ“ License: MIT πŸ“¦ npm version πŸ’ͺ TypeScript: Strict

Usage

npm i new-github-repository
import { newGitHubRepository } from "new-github-repository";

await newGitHubRepository({
	owner: "YourUsername",
	repository: "a-great-new-repository",
});

newGitHubRepository returns an object containing:

  • data: response data from the GitHub OpenAPI REST call to create the repository
  • initialized: whether polling the GitHub API (see: Why Polling?) seemed to show the repository done being created

newGitHubRepository allows the following properties in its parameter object:

  • Required:
    • owner (string): owning user or organization to create the repository under
    • repository (string): name of the repository to create
  • Optional:

octokit

Octokit instance to use for requests. If not provided, defaults to creating one with octokit-from-auth.

Manually passing an octokit can be useful if you already have one created separately and/or wish to customize how the GitHub API is interacted with:

import { newGitHubRepository } from "new-github-repository";
import { Octokit } from "octokit";

const octokit = new Octokit({ auth: "personal-access-token123" });

await newGitHubRepository({
	octokit,
	owner: "YourUsername",
	repository: "a-great-new-repository",
});

template

Locator of a GitHub template repository to create from.

Repositories created by a template repository show a "generated from ..." notice in their homepage header that links to their template.

import { newGitHubRepository } from "new-github-repository";

await newGitHubRepository({
	owner: "YourUsername",
	repository: "a-great-new-repository",
	template: {
		owner: "JoshuaKGoldberg",
		repository: "create-typescript-app",
	},
});

Why?

Or: why not create repositories by directly calling the GitHub API?

new-github-repository smooths over two areas of GitHub repository creation:

It also handles creating an authenticated Octokit for you with octokit-from-auth.

Why Polling?

At time of writing, GitHub does not provide an API to determine whether a repository's asynchronous initialization is complete. Most noticeably, repository labels aren't created immediately, or even all at once. Labels are added in over several seconds after a repository is created.

Organization repositories may change default labels -including during repository creation- so it is not enough to check whether the number of repository labels matches an expected number. The only known way to determine whether labels have finished being populated seems to be to check whether they've stopped being added over multiple API calls.

After creating a repository, newGitHubRepository continuously polls the repository labels API up to an arbitrary 35 times. It waits until the number of labels is the same non-zero number three times in a row.

Development

See .github/CONTRIBUTING.md, then .github/DEVELOPMENT.md. Thanks! πŸ†•

Contributors

Josh Goldberg ✨
Josh Goldberg ✨

πŸ’» πŸ–‹ πŸ“– πŸ€” πŸš‡ 🚧 πŸ“† πŸ”§

πŸ’ This package was templated with create-typescript-app using the Bingo framework.

Readme

Keywords

none

Package Sidebar

Install

npm i new-github-repository

Weekly Downloads

6,083

Version

0.2.3

License

MIT

Unpacked Size

13.6 kB

Total Files

9

Last publish

Collaborators

  • joshuakgoldberg