{"id":14155440,"url":"https://github.com/sdboyer/gps","last_synced_at":"2025-08-06T01:31:24.146Z","repository":{"id":57522323,"uuid":"53911920","full_name":"sdboyer/gps","owner":"sdboyer","description":"your dependencies have arrived","archived":true,"fork":false,"pushed_at":"2017-10-15T20:34:52.000Z","size":1425,"stargazers_count":270,"open_issues_count":45,"forks_count":24,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-09-28T06:18:03.861Z","etag":null,"topics":["golang","library","package-manager"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sdboyer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-03-15T03:33:42.000Z","updated_at":"2023-10-15T18:57:40.000Z","dependencies_parsed_at":"2022-09-26T19:43:03.429Z","dependency_job_id":null,"html_url":"https://github.com/sdboyer/gps","commit_stats":null,"previous_names":["sdboyer/vsolver"],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdboyer%2Fgps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdboyer%2Fgps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdboyer%2Fgps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdboyer%2Fgps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sdboyer","download_url":"https://codeload.github.com/sdboyer/gps/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228821405,"owners_count":17977166,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","library","package-manager"],"created_at":"2024-08-17T08:03:14.539Z","updated_at":"2024-12-09T02:31:22.151Z","avatar_url":"https://github.com/sdboyer.png","language":"Go","funding_links":[],"categories":["package-manager"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg \n    src=\"header.png\"\n    width=\"800\" height=\"255\" border=\"0\" alt=\"gps\"\u003e\n\u003cbr\u003e\n\u003ca href=\"https://circleci.com/gh/sdboyer/gps\"\u003e\u003cimg src=\"https://circleci.com/gh/sdboyer/gps.svg?style=shield\" alt=\"Build Status\"\u003e\u003c/a\u003e\n\u003ca href=\"https://ci.appveyor.com/project/sdboyer/gps\"\u003e\u003cimg src=\"https://ci.appveyor.com/api/projects/status/github/sdboyer/gps?svg=true\u0026branch=master\u0026passingText=Windows%20-%20OK\u0026failingText=Windows%20-%20failed\u0026pendingText=Windows%20-%20pending\" alt=\"Windows Build Status\"\u003e\u003c/a\u003e\n\u003ca href=\"https://goreportcard.com/report/github.com/sdboyer/gps\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/sdboyer/gps\" alt=\"Build Status\"\u003e\u003c/a\u003e\n\u003ca href=\"https://codecov.io/gh/sdboyer/gps\"\u003e\u003cimg src=\"https://codecov.io/gh/sdboyer/gps/branch/master/graph/badge.svg\" alt=\"Codecov\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://godoc.org/github.com/sdboyer/gps\"\u003e\u003cimg src=\"https://godoc.org/github.com/sdboyer/gps?status.svg\" alt=\"GoDoc\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n### gps has moved into [dep](https://github.com/golang/dep) - this repository is no longer maintained.\n\n`gps` is the Go Packaging Solver. It is an engine for tackling dependency\nmanagement problems in Go. It is trivial - [about 35 lines of\ncode](https://github.com/sdboyer/gps/blob/master/example.go) - to replicate the\nfetching bits of `go get` using `gps`.\n\n`gps` is _not_ Yet Another Go Package Management Tool. Rather, it's a library\nthat package management (and adjacent) tools can use to solve the\n[hard](https://en.wikipedia.org/wiki/Boolean_satisfiability_problem) parts of\nthe problem in a consistent,\n[holistic](https://medium.com/@sdboyer/so-you-want-to-write-a-package-manager-4ae9c17d9527)\nway. It is a distillation of the ideas behind language package managers like\n[bundler](http://bundler.io), [npm](https://www.npmjs.com/),\n[elm-package](https://github.com/elm-lang/elm-package),\n[cargo](https://crates.io/) (and others) into a library, artisanally\nhandcrafted with ❤️ for Go's specific requirements.\n\n`gps` was [on track](https://github.com/Masterminds/glide/issues/565) to become\nthe engine behind [glide](https://glide.sh); however, those efforts have been\ndiscontinued in favor of gps powering the [experimental, eventually-official\nGo tooling](https://github.com/golang/dep).\n\nThe wiki has a [general introduction to the `gps`\napproach](https://github.com/sdboyer/gps/wiki/Introduction-to-gps), as well\nas guides for folks [implementing\ntools](https://github.com/sdboyer/gps/wiki/gps-for-Implementors) or [looking\nto contribute](https://github.com/sdboyer/gps/wiki/gps-for-Contributors).\n\n## Wait...a package management _library_?!\n\nYup. See [the rationale](https://github.com/sdboyer/gps/wiki/Rationale).\n\n## Features\n\nA feature list for a package management library is a bit different than one for\na package management tool. Instead of listing the things an end-user can do,\nwe list the choices a tool *can* make and offer, in some form, to its users, as\nwell as the non-choices/assumptions/constraints that `gps` imposes on a tool.\n\n### Non-Choices\n\nWe'd love for `gps`'s non-choices to be noncontroversial. But that's not always\nthe case.\n\nNevertheless, these non-choices remain because, taken as a whole, they make\nexperiments and discussion around Go package management coherent and\nproductive.\n\n* Go \u003e=1.6, or 1.5 with `GO15VENDOREXPERIMENT = 1` set\n* Everything under `vendor/` is volatile and controlled solely by the tool\n* A central cache of repositories is used (cannot be `GOPATH`)\n* A [**project**](https://godoc.org/github.com/sdboyer/gps#ProjectRoot) concept:\n  a tree of packages, all covered by one `vendor` directory\n* A [**manifest** and\n  **lock**](https://github.com/sdboyer/gps/wiki/gps-for-Implementors#manifests-and-locks)\n  approach to tracking version and constraint information\n* Upstream sources are one of `git`, `bzr`, `hg` or `svn` repositories\n* What the available versions are for a given project/repository (all branches, tags, or revs are eligible)\n  * In general, semver tags are preferred to branches, are preferred to plain tags\n* The actual packages that must be present (determined through import graph static analysis)\n  * How the import graph is statically analyzed - similar to `go/build`, but with a combinatorial view of build tags ([not yet implemented](https://github.com/sdboyer/gps/issues/99))\n* All packages from the same source (repository) must be the same version\n* Package import cycles are not allowed ([not yet implemented](https://github.com/sdboyer/gps/issues/66))\n\nThere are also some current non-choices that we would like to push into the realm of choice:\n\n* Importable projects that are not bound to the repository root\n* Source inference around different import path patterns (e.g., how `github.com/*` or `my_company/*` are handled)\n\n### Choices\n\nThese choices represent many of the ways that `gps`-based tools could\nsubstantively differ from each other.\n\nSome of these are choices designed to encompass all options for topics on which\nreasonable people have disagreed. Others are simply important controls that no\ngeneral library could know _a priori_.\n\n* How to store manifest and lock information (file(s)? a db?)\n* Which of the other package managers to interoperate with\n* Which types of version constraints to allow the user to specify (e.g., allowing [semver ranges](https://docs.npmjs.com/misc/semver) or not)\n* Whether or not to strip nested `vendor` directories\n* Which packages in the import graph to [ignore](https://github.com/sdboyer/gps/wiki/gps-for-Implementors#ignoring-packages) (if any)\n* What constraint [overrides](https://github.com/sdboyer/gps/wiki/gps-for-Implementors#overrides) to apply (if any)\n* What [informational output](https://github.com/sdboyer/gps/wiki/gps-for-Implementors#trace-and-tracelogger) to show the end user\n* What dependency version constraints are declared by the [root project](https://github.com/sdboyer/gps/wiki/gps-for-Implementors#manifest-data)\n* What dependency version constraints are declared by [all dependencies](https://github.com/sdboyer/gps/wiki/gps-for-Implementors#the-projectanalyzer)\n* Given a [previous solution](https://github.com/sdboyer/gps/wiki/gps-for-Implementors#lock-data), [which versions to let change, and how](https://github.com/sdboyer/gps/wiki/gps-for-Implementors#tochange-changeall-and-downgrade)\n  * In the absence of a previous solution, whether or not to use [preferred versions](https://github.com/sdboyer/gps/wiki/gps-for-Implementors#preferred-versions)\n* Allowing, or not, the user to [swap in different source locations](https://github.com/sdboyer/gps/wiki/gps-for-Implementors#projectidentifier) for import paths (e.g. forks)\n* Specifying additional input/source packages not reachable from the root import graph\n\nThis list may not be exhaustive - see the\n[implementor's guide](https://github.com/sdboyer/gps/wiki/gps-for-Implementors)\nfor a proper treatment.\n\n## Contributing\n\nYay, contributing! Please see\n[CONTRIBUTING.md](https://github.com/sdboyer/gps/blob/master/CONTRIBUTING.md).\nNote that `gps` also abides by a [Code of\nConduct](https://github.com/sdboyer/gps/blob/master/CODE_OF_CONDUCT.md), and is MIT-licensed.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsdboyer%2Fgps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsdboyer%2Fgps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsdboyer%2Fgps/lists"}