https://github.com/maticzav/github-tree
🐙 Github API commits made easy peasy
https://github.com/maticzav/github-tree
github octokit-js
Last synced: about 2 months ago
JSON representation
🐙 Github API commits made easy peasy
- Host: GitHub
- URL: https://github.com/maticzav/github-tree
- Owner: maticzav
- Created: 2020-02-05T15:28:19.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-10-23T16:44:20.000Z (over 1 year ago)
- Last Synced: 2024-10-24T21:15:44.075Z (over 1 year ago)
- Topics: github, octokit-js
- Language: TypeScript
- Homepage:
- Size: 238 KB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🐙 github-tree
[](https://actions-badge.atrox.dev/maticzav/github-tree/goto)
[](https://badge.fury.io/js/github-tree)
> 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
```bash
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.
> :warning: 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.
```ts
import { Octokit } from '@octokit/rest'
import fs from 'fs'
import { commit, utf8, base64 } from 'github-tree'
const octokit = new Octokit()
const tree = {
'README.md': utf8(`# A cool README!`),
'src/index.ts': base64(fs.readFileSync('/path.ts', { encoding: 'base64' })),
}
await commit(octokit, {
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`.
```ts
import { commit, loadTreeFromPath } from 'github-tree'
const tree = loadTreeFromPath(PATH_TO_TREE, [
'ignored_folders',
'node_nodules',
/.*regex./,
])
// ...
await commit(_, {
tree,
})
```
## Other methods
```ts
/* 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/ format.
*/
ref: string
/**
* Your files.
*/
tree: Tree
}
/**
* Create a commit to Github using Github API v3.
*/
async function commit(
github: Octokit,
commit: CommitInput,
): Promise
/* 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,
): Promise
/**
* Lets you manipulate file paths.
*/
function mapPaths(tree: Tree, fn: (path: string, file: File) => string): Tree
```
## License
MIT @ Matic Zavadlal