No description, website, or topics provided.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmd
cmdutil
hooks
internal
scripts
testdata
.dockerignore
.gitignore
.hound.yml
.travis.yml
ARCHITECTURE.md
CHANGELOG.md
CODEOWNERS
CONTRIBUTING.md
Dockerfile
Gopkg.lock
Gopkg.toml
LICENSE
Makefile
README.md
linters.json
main.go

README.md

Ghoum

GoDoc Build Status

Configuration 🎛️

Create a personal access token then configure ghoum with it either via a configuration file or an environment variable.

If you opt to use the configuration file approach, create one that looks something like this:

---
token: "<some-random-40-character-github-token>"

Ghoum by default will look for a configuration file in the current working directory i.e. .ghoum.yml or if that's missing, in the current user's home directory i.e. ~/.ghoum.yml. If you want to use a different location, you may do so by specifying the --config flag.

You may also use environment variables. Ghoum environment variables are prefixed with GHOUM_ so to set the GitHub token you may do so like this:

$ export GHOUM_TOKEN="<some-random-40-character-github-token>"

Usage 💻

Getting Started

Create a manifest file using the init command (defaults to owner):

$ ghoum init
INFO[0000] attempting to load manifest: ./manifest.yml
WARN[0000] ./manifest.yml does not exist, will initialize a new one
INFO[0000] fetch profile of the currently authenticated user (owner)
INFO[0001] owner profile fetched, set to itskingori
INFO[0001] get the repositories for user: itskingori
INFO[0004] initialize manifest file from data fetched from github
INFO[0004] saved fetched data to ./manifest.yml

You can also add an organization to the manifest (it will merge with owner profile fetched above):

$ ghoum init -o someorg
INFO[0000] attempting to load manifest: ./manifest.yml
INFO[0000] was able to load ./manifest.yml successfully
INFO[0000] fetching profiles of organizations: someorg
INFO[0000] get the repositories in organization: someorg
INFO[0001] merge fetched data with what was loaded from ./manifest.yml
WARN[0001] about to save, will overwrite ./manifest.yml contents
INFO[0001] saved fetched data to ./manifest.yml

Now that you have a manifest.yml file, you can make changes to it and apply them using the ghoum apply command, or even ghoum apply -d for a dry-run.

Development ⚒️

For normal usage the above instructions should do. Below instructions are only necessary if you intend to work on the source code (find contributing guidelines here).

Building

  1. Fetch the code with go get -v github.com/itskingori/ghoum.
  2. Install the Go development tools via make tools.
  3. Install application dependencies via make dependencies (they'll be placed in ./vendor). Requires golang/dep package manager.
  4. Build and install the binary with make build.
  5. Run the command e.g. ./bin/ghoum help as a basic test.

Testing

  1. Install the Go testing tools via make dependencies.
  2. Run linter using make lint and test using make test.

Releasing

  1. Create a tag (git tag) and push the tags to remote (git push --tags).
  2. CI pipeline (on Travis CI) will detect the tag and create a GitHub release here. To note:
    • Tags matching x.y.z will be marked as final releases.
    • Tags matching x.y.z-* will be marked as pre-releases.
    • Tags not matching either of the above, will be ignored and assumed to be normal tags.
    • Compressed binary with a shasum 256 text file will be uploaded as attachments to the release.
  3. Trigger will start a build on Docker Hub to publish two Docker images (right after GitHub release): kingori/ghoum:latest and kingori/ghoum:x.y.z.

License 📜

King'ori J. Maina © 2018. The Apache License 2.0, is a permissive license whose main conditions require preservation of copyright and license notices. Contributors provide an express grant of patent rights. Licensed works, modifications, and larger works may be distributed under different terms and without source code.