Categorygithub.com/whosonfirst/go-writer-github/v2
modulepackage
2.1.1
Repository: https://github.com/whosonfirst/go-writer-github.git
Documentation: pkg.go.dev

# README

go-writer-github

GitHub API support for the go-writer Writer interface.

This package supersedes the go-whosonfirst-readwrite-github package.

Documentation

Documentation is incomplete.

Example

package main

import (
	"context"
	"flag"
	"fmt"	
	"github.com/whosonfirst/go-writer/v2"
	_ "github.com/whosonfirst/go-writer-github/v2"		
	"io/ioutil"
	"strings"
	"time"
)

func main() {

	owner := "example"
	repo := "example-repo"
	access_token := "s33kret"
	branch := "example"

	ctx := context.Background()
	
	source := fmt.Sprintf("githubapi://%s/%s?access_token=%s&branch=%s", owner, repo, access_token, branch)
			
	wr, _ := writer.NewWriter(ctx, source)

	now := time.Now()
	msg := fmt.Sprintf("This is a test: %v", now)
	
	br := strings.NewReader(msg)
	fh := ioutil.NopCloser(br)

	wr.Write(ctx, "TEST.md", fh)
}

Error handling has been omitted for brevity.

URIs

Note: The githubapi-pr, githubapi-tree and githubapi-branch URI schemes (and packages) developed independently to address specific needs. It is possible (desirable) that these three packages get merged in to a single scheme with specific query parameters. That has not happened yet.

githubapi

The githubapi scheme is used to publish individual documents to a Git repository using the GitHub API.

The URI structure for go-writer-github (API) writers is:

ComponentValueNotes
Schemegithubapi
HoststringA valid GitHub owner or organization
PathstringA valid GitHub respository
Querydescribed below

The following query parameters are supported for go-writer-github writers:

NameValueRequiredNotes
access_tokenstringyesA valid GitHub API access token
branchstringnoA valid Git repository branch. Default is main.
prefixstringnoAn optional path to prepend URIs (for writing) with.
newstringnoA valid string for formatting new file commit messages. Default is Created %s.
updatestringnoA valid string for formatting updated file commit messages. Default is Updated %s.
retry-on-ratelimitboolean (string)noIf true and the writer encounters a GitHub rate-limit error trying to write data it will sleep until the "reset" time (published by GitHub) and retry the write operation.
retry-on-conflictboolean (string)noIf true and the writer encounters a GitHub 409 Conflict error trying to write data it will keep trying (by refreshing the current hash) until it succeeds, with the limits of the ?max-retry-attempts flag.
max-retry-attemptsintnoDefault is 10. If <=0 then checks on the maximum number of retry attempts will be disabled.

For example:

githubapi://whosonfirst-data/whosonfirst-data-admin-us \
	?access_token={access_token} \
	&branch=main

githubapi-pr

The githubapi-pr scheme is used to write documents to a GitHub pull request using the GitHub API. Records are commited when when the writer's Flush() or Close() methods are called. The PR is created when the writer's Close() method is called.

The URI structure for go-writer-github (API Pull Request) writers is:

ComponentValueNotes
Schemegithubapi-pr
HoststringA valid GitHub owner or organization
PathstringA valid GitHub respository
Querydescribed below

The following query parameters are supported for githubapi-pr writers:

NameValueRequiredNotes
access_tokenstringyesA valid GitHub API access token
branchstringnoA valid Git repository branch. Default is main.
prefixstringnoAn optional path to prepend URIs (for writing) with.
pr-ownerstringnoThe user or organization name where the pull request will be created. If empty will default to GitHub owner or organization defined in URI host field.
pr-repostringnoThe repository name where the pull request will be created. If empty will default to GitHub owner or organization defined in URI path field.
pr-branchstringyesThe name of branch that the pull request will be created for.
pr-titlestringyesThe title of the pull request being created.
pr-descriptionstringyesThe description of the pull request being created.
pr-authorstringnoThe author of the pull request being created. If empty the name associated with the GitHub access token will be used (must not be empty).
pr-emailstringnoThe email address associated with the pull request being created. If empty the email address associated with the GitHub access token will be used (must not be empty).
pr-ensure-repoboolnoIf true then the existence of {pr_owner}/{pr_repo} will be checked. If it does not exist then it will be forked (and if necessary renamed) from the organization and repo defined in the URI Host and Path fields.

For example:

githubapi-pr://sfomuseum-data/sfomuseum-data-collection \
	?access_token={access_token} \
	&branch=main \
	&prefix=data/ \
	&pr-branch=aaronc \
	&pr-title=testing \
	&pr-description=testing \
	&pr-email=aaron@localhost \
	&pr-repo=sfomuseum-data-testing \
	&pr-owner=aaronland \
	&ensure-repo=true

Which might yield something like this:

githubapi-tree

The githubapi-tree scheme is used to write multiple documents to a GitHub tree commit using the GitHub API. Documents are written is created when the writer's Flush() or Close() methods are called.

The URI structure for go-writer-github (API Pull Request) writers is:

ComponentValueNotes
Schemegithubapi-tree
HoststringA valid GitHub owner or organization
PathstringA valid GitHub respository
Querydescribed below

The following query parameters are supported for githubapi-tree writers:

NameValueRequiredNotes
access_tokenstringyesA valid GitHub API access token
branchstringnoA valid Git repository branch. Default is main.
prefixstringnoAn optional path to prepend URIs (for writing) with.
to-branchstringyesThe name of branch that the pull request will be created for.
descriptionstringyesThe description of the pull request being created.
authorstringnoThe author of the pull request being created. If empty the name associated with the GitHub access token will be used (must not be empty).
emailstringnoThe email address associated with the pull request being created. If empty the email address associated with the GitHub access token will be used (must not be empty).

For example:

githubapi-tree://sfomuseum-data/sfomuseum-data-collection \
	?access_token={access_token} \
	&branch=main \
	&prefix=data/ \
	&to-branch=testing \
	&description=testing \
	&email=aaron@localhost 

githubapi-branch

The githubapi-branch scheme is used to write multiple documents to a GitHub commit using the GitHub API, optionally merging and removing that branch when complete. Documents are written is created when the writer's Flush() or Close() methods are called. Branches are merged and removed when the writer's Close() method is called.

The URI structure for go-writer-github (API Pull Request) writers is:

ComponentValueNotes
Schemegithubapi-branch
HoststringA valid GitHub owner or organization
PathstringA valid GitHub respository
Querydescribed below

The following query parameters are supported for githubapi-branch writers:

NameValueRequiredNotes
access_tokenstringyesA valid GitHub API access token
branchstringnoA valid Git repository branch. Default is main.
prefixstringnoAn optional path to prepend URIs (for writing) with.
to-branchstringyesThe name of branch that the pull request will be created for.
descriptionstringyesThe description of the pull request being created.
authorstringnoThe author of the pull request being created. If empty the name associated with the GitHub access token will be used (must not be empty).
emailstringnoThe email address associated with the pull request being created. If empty the email address associated with the GitHub access token will be used (must not be empty).
mergeboolnoMerge commits made to to-branch in to the main branch when the writer's Close() method is invoked. Default is false.
remove-on-mergeboolnoRemove the to-branch branch when the writer's Close() method is invoked. Default is false.

For example:

githubapi-branch://sfomuseum-data/sfomuseum-data-collection \
	?access_token={access_token} \
	&branch=main \
	&prefix=data/ \
	&description=testing \
	&email=aaron@localhost \
	&to-commit=testing \
	&merge=true \
	&remove-on-merge=true

See also

# Functions

EnsureGitHubAccessToken ensures that 'writer_uri' contains a '?access_token=VALUE' parameter.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Constants

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author