A monorepo that holds all of Foursquare's opensource projects - https://github.com/foursquare/fsqio

Full Description

Foursquare Fsq.io

All of Foursquare's open source code in a single repo.

All Foursquare code lives in a single repository, an architecture generally called a monorepo.Fsq.io is a subset of that internal monorepo. Fsq.io holds many of Foursquare'sopen source projects that had previously lived in their own separate Github repos. Foursquare contributesto a build tool specifically designed to work with monorepos called Pants.The entire Fsq.io repo is is built and tested by Pants.

Deploying directly from our monorepo has some nice advantages, for consumers of our open source projects aswell as Foursquare itself. The entire repo is built daily by our CIs and internal contributions are open sourcedautomatically without the overhead of publishing. This repo will always contain the latest code that we useinternally, all of the tools can be built just as we use them, directly from HEAD.

Requirements

Internally we use OSX Yosemite or later. Other OS may work but are officially unsupported. (Unofficially, ifbuilding on Linux you should install python-dev, build-essential, and libpq-dev in addition to the above).

Pants build system

Pants is a build system that works particularly well for a source code workspace containing manydistinct but interdependent pieces.

Pants is a true community project, with major contributions from Twitter, Foursquare, Square, among othercompanies and independent contributors. It has friendly documentation here,in this README we will just touch on how to compile and test the code.

Compiling and Testing

First Run

The first run will take a long time aspom-resolve(our custom resolver for 3rdparty dependencies) computes the project graph and downloads the dependencies.Maybe as long as 15-20 mins! A good first run is to get this out of the way:

./pants pom-resolve

Targets and BUILD files

Targets are adressable project or dependency level modules that can be built by Pants. BUILD files areconfiguration files that define targets that can be built by Pants. Each target has a name and can be builtby running a Pants task against the target's name and location.

For example, Fsq.io's JVM projects live under src/jvmhere. You can compile Rogue by running:

./pants compile src/jvm/io/fsq/rogue:rogue

Build and Test every project

Adding a :: to a path will glob every target under that location. So to compile every target in Fsq.io: