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

1.0.3 • Public • Published

🐙 github-tree

Build Status npm version

Github API commits made easy peasy.

Overview

This library helps you create commits to Github using a simple API that abstracts away core git functionality.

Installation

yarn add github-tree

How to use it?

It's very simple! There's a commit method that takes Octokit instance as an argument and a handful of other inputs, including tree, that represent your next commit.

⚠️ Note that the current state of github-tree doesn't support partial commits. Every folder you make in a tree wipes all existing data out.

import { Octokit } from '@octokit/rest'
import fs from 'fs'
import { commit, utf8, base64 } from 'github-tree'
 
const tree = {
  'README.md': utf8(`# A cool README!`),
  'src/index.ts': base64(fs.readFileSync('/path.ts', { encoding: 'base64' })),
}
 
await commit({
  owner: 'maticzav',
  repo: 'label-sync',
  message: 'Additions from our server',
  ref: 'heads/master',
  tree,
})

This will create one file in the repository root - README.md - and one in folder src - index.ts.


It is common that you want to commit more files during a particular commit. Perhaps even a whole repository setup! In case you need such functionality, there's a loadTreeFromPath method that can help you load files from your file system and convert them into a Tree.

import { commit, loadTreeFromPath } from 'github-tree'
 
const tree = loadTreeFromPath(PATH_TO_TREE, [
  'ignored_folders',
  'node_nodules',
  /.*regex./,
])
 
// ...
 
await commit(_, {
  tree,
})

Other methods

/* Tree */
 
type Tree = { [path: string]: File }
 
/**
 * Creates an utf-8 encoded file.
 */
export function utf8(content: string): File
 
/**
 * Creates a base64 encoded file.
 */
export function base64(content: string): File
 
/* Github */
 
/**
 * Input variables for commit method.
 */
export type CommitInput = {
  /**
   * Name of the owner of the repository.
   */
  owner: string
  /**
   * Name of the repository.
   */
  repo: string
  /**
   * Message of a commit.
   */
  message: string
  /**
   * Make sure that your ref follows heads/<ref> format.
   */
  ref: string
  /**
   * Your files.
   */
  tree: Tree
}
 
/**
 * Create a commit to Github using Github API v3.
 */
async function commit(
  github: Octokit,
  commit: CommitInput,
): Promise<Octokit.GitCreateCommitResponse>
 
/* Utility functions */
 
/**
 * Loads a tree of utf-8 decoded files at paths.
 */
function loadTreeFromPath(root: string, ignore: (string | RegExp)[]): Tree
 
/**
 * Lets you map files asynchornously.
 */
async function mapFiles(
  tree: Tree,
  fn: (file: File, path: string) => Promise<File>,
): Promise<Tree>
 
/**
 * Lets you manipulate file paths.
 */
function mapPaths(tree: Tree, fn: (path: string, file: File) => string): Tree

License

MIT @ Matic Zavadlal

Readme

Keywords

none

Package Sidebar

Install

npm i github-tree

Weekly Downloads

2

Version

1.0.3

License

MIT

Unpacked Size

18 kB

Total Files

17

Last publish

Collaborators

  • maticzav