Détail du package

new-github-repository

JoshuaKGoldberg28.3kMIT0.2.3

Creates a new repository on GitHub, including waiting for initialization. 🆕

readme

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.

changelog

Changelog

0.2.2 (2025-04-04)

Bug Fixes

  • bump to create-typescript-app@2 with transitions action (#13) (e69f8c7), closes #12

0.2.1 (2025-03-07)

Bug Fixes

  • export from newGitHubRepository.js, not index.js (4a483a3)

0.2.0 (2025-03-07)

Features

  • initial feature commit ✨ (719e38d)

0.1.0 (2025-03-07)

Features