Communication flow

This is the story of a time long ago. A time of myth and legend when the ancient Gods were petty and cruel and they plagued build with irreproducibility. Only one project dared to challenge their power…Athens. Athens possessed a strength the world had never seen. Filling its storage.

Clean plate

At the beginning, there’s theoretical state when a storage of the Athens proxy is empty.

When User makes a request at this ancient time, it works as described on the flow below.

  • User runs go get to acquire new module.
  • Go CLI contacts the Athens proxy asking for module M, version v1.0
  • The Athens proxy checks whether or not it has this module in its storage. It does not.
  • The Athens proxy downloads code from the underlying VCS and converts it into the Go Module format.
  • After it receives all the bits, it stores it into its own storage and serves it to the User.
  • User receives module and is happy.

The process from the user using go get all the way to the user downloading a module is synchronous.

Communication flow for clear state

Happy path

Now that the Athens proxy is aware of module M at version v1.0, it can serve that module immediately to the user, without fetching it from the VCS.

Communication flow for new proxy

Fork me on GitHub