https://github.com/digitalocean/gta
gta: do transitive analysis to find packages whose dependencies have changed
https://github.com/digitalocean/gta
Last synced: about 1 year ago
JSON representation
gta: do transitive analysis to find packages whose dependencies have changed
- Host: GitHub
- URL: https://github.com/digitalocean/gta
- Owner: digitalocean
- License: apache-2.0
- Created: 2016-03-11T13:58:13.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2025-04-01T15:31:55.000Z (about 1 year ago)
- Last Synced: 2025-04-01T15:36:33.960Z (about 1 year ago)
- Language: Go
- Homepage:
- Size: 3.41 MB
- Stars: 205
- Watchers: 99
- Forks: 23
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Authors: AUTHORS
Awesome Lists containing this project
README
# gta
## Overview
`gta` is an application which finds Go packages that have deviated from their upstream
source in git. A typical situation is when a project is using a
[monorepo](https://www.digitalocean.com/blog/taming-your-go-dependencies/).
At build or continuous integration time, you won't have to build every single package
since you will know which packages (and dependencies) have changed.

## Installation
```sh
go install github.com/digitalocean/gta/cmd/gta
```
After installation, you will have a `gta` binary in `$GOPATH/bin/`
## Usage
List packages that should be tested since they have deviated from master.
```sh
gta -include "$(go list -f '{{ .Module.Path }}')/"
```
List packages that have deviated from the most recent merge commit.
```sh
gta -include "$(go list -f '{{ .Module.Path }}')/"
```
## What gta does
`gta` builds a list of "dirty" (changed) packages from master, using git. This is useful for determining which
tests to run in larger `monorepo` style repositories.
`gta` works by implementing a various set of interfaces, namely the `Differ` and `Packager` interfaces.
Note: When using this tool, it is common to hit the maximum number of open file descriptors limit set by your OS.
On macOS, this may be a measly 256. Consider raising that maximum to something reasonable with:
```
sudo ulimit -n 4096
```
## License
This application is distributed under the Apache 2 license found in [LICENSE](LICENSE)