gget

command module
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 1, 2020 License: MIT Imports: 13 Imported by: 0

README

gget

A small utility for downloading files from git repositories.

You may find this useful for:

  • automating downloads from the command line;
  • downloading individual source files without a full clone; and
  • avoiding hard-coded versions or download URLs.

With notable support for:

  • public and private repositories;
  • user-managed release assets, source files, and git export archives;
  • tag, branch, and commit-based references;
  • convenience methods for renaming files, marking executable, and verifying checksums; and
  • GitHub and GitLab repositories (with hopes of adding Bitbucket).

Command Line Usage

Pass the repository you want to download from. By default, all user-uploaded assets of the latest release will be downloaded.

gget github.com/gohugoio/hugo

Include a tag to download files from something other than the latest published version.

gget github.com/gohugoio/hugo@v0.63.1

Provide file names (or globs) to limit the files downloaded. Use --exclude= to avoid files with overlapping matches.

gget github.com/gohugoio/hugo --exclude='*extended*' 'hugo_*_Linux-ARM.deb'

Prefix remote file names with a local path to use a custom location. Use --executable to mark it executable.

gget --executable github.com/stedolan/jq /usr/local/bin/jq=jq-osx-amd64

The --ref-* options may be used when no tag/ref is passed with the repository. Use --ref-version= to find the latest match of a version constraint.

gget --ref-version=1.0.x github.com/prometheus/pushgateway '*dragonfly*'

Use --type= to download files other than user-uploaded release assets. Use archive to access zip or tarball archives of the repository files.

gget --type=archive github.com/stedolan/jq '*.zip'

Use the blob type to download repository source files. Branch and commit references may also be used for these types.

gget --type=blob github.com/stedolan/jq@jq-1.5-branch README.md

Use --help to see additional options and learn more for advanced usage.

Installation

Binaries for Linux, macOS, and Windows can be downloaded from the releases page.

A Homebrew recipe is available for Linux and macOS.

brew install dpb587/tap/gget

Use go get to build the latest development version.

go get -u github.com/dpb587/gget

Docker Usage

The gget image can be used as a build stage to download assets for a later stage.

FROM docker.pkg.github.com/dpb587/gget/gget as gget
RUN gget --executable github.com/cloudfoundry/bosh-cli bosh=bosh-cli-*-linux-amd64
RUN gget --executable github.com/cloudfoundry/bosh-bootloader bbl=bbl-*_linux_x86-64
RUN gget --stdout github.com/pivotal-cf/om om-linux-*.tar.gz | tar -xzf- om

FROM ubuntu
COPY --from=gget /result/* /usr/local/bin/
# ...everything else for your image...

Services

The following services are supported through their APIs:

  • GitHub – personal access tokens may be set via $GITHUB_TOKEN or a .netrc password
  • GitLab – personal access tokens may be set via $GITLAB_TOKEN or a .netrc password

Technical Notes

Checksum Verification

When downloading files, gget attempts to validate checksums when they are found for files (erroring if they do not match). Since checksums are generally not an official feature for repository assets, this is a convention-based approach.

  • Algorithms: sha512, sha256, sha1, md5
  • Format:
    • *sum command output - {checksum} {file}
  • Sources:
    • release notes - code block or code fence
    • sibling files with an algorithm suffix (case-insensitive) - *.{algorithm}
    • checksum list files (case-insensitive) - checksum, checksums, *checksums.txt, {algorithm}sum.txt, {algorithm}sums.txt

Some personal recommendations/learnings/preferences:

  • do not use sha1 or md5 - they are considered weak (gget uses the strongest checksum it finds)
  • use two spaces instead of one when generating *sum command output - it is more widely supported by *sum --check tools (although gget supports both)
  • include checksums in the release notes - they are then stored in a different backend than the assets being verified
  • use a single checksums file rather than one per file, per algorithm - for predictable references and avoiding individual file checksum downloads requiring API requests

Alternatives

  • wget/curl -- if you want to manually maintain version download URLs and private signing
  • hub release download ... -- if you already have git configured and a cloned GitHub repository

License

MIT License

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL