Welcome To Athens, Gophers!
Welcome to the Athens project! We are a proxy server for the Go Modules download API.
|We hold weekly developer meetings every Thursday. To join them, watch previous meeting recordings or find more information, please see the docs. Absolutely everyone is invited to attend these, suggest topics, and participate!|
See our documentation site https://docs.gomods.io for more details on the project.
Project Athens is in beta. It's being tested and used on teams and has an experimental deployment for public use.
More Details Please!
The proxy implements the Go modules download protocol.
There is currently an experimental public proxy, and we have plans to host a more stable public proxy with more guarantees. We also have a community of folks using Athens inside their organizations as an internal proxy. In either deployment, developers set their
GOPROXY environment variable to point to the Athens proxy of their choice. At that point,
go build, and
go builds will use the proxy to download dependencies as necessary.
Athens proxies are highly configurable, so they can work for lots of different deployments. For example, proxies support a wide variety of storage drivers including:
- Cloud blob storage services
- Content distribution networks (CDNs)
- Shared disk
See DEVELOPMENT.md for details on how to set up your development environment and start contributing code.
Speaking of contributing, read on!
This project has plenty of interesting and challenging work to do and a wonderful community.
If you find a bug or want to fix a bug, we :heart: PRs and issues! If you see an issue in the queue that you'd like to work on, please just post a comment saying that you want to work on it. Something like "I want to work on this" is fine.
If you decide to contribute (we hope you do :smile:), the process is familiar and easy if you've used Github before. There are no long documents to read or complex setup. If you haven't used Github before, the awesome @bketelsen has created a good overview on how to contribute code - see here.
Before you do start getting involved or contributing, we want to let you know that we follow a general philosophy in how we work together, and we'd really appreciate you getting familiar with it before you start.
It's not too long and it's ok for you to "skim" it (or even just read the first two sections :smile:), just as long as you understand the spirit of who we are and how we work.
If you're not ready to contribute code yet, there are plenty of other great ways to get involved:
- Come talk to us in the
#athenschannel in the Gophers slack. We’re a really friendly group, so come say hi and join us! Ping me (
@arschleson slack) in the channel and I’ll give you the lowdown
- Come to our weekly development meetings! They are a great way to meet folks, ask questions, find some stuff to work on, or just hang out if you want to. Just like with this project, absolutely everyone is welcome to join and participate in those
- Get familiar with the system. There's lots to read about. Here are some places to start:
- Gentle Introduction to the Project - the basics of why we started this project
- The Download Protocol - the core API that the proxy implements and the
goCLI uses to download packages
- Proxy Design - what the proxy is and how it works
- Go modules wiki - context and details on how Go dependency management works in general
- "Go and Versioning" - long articles on Go dependency management details, internals, etc...
Built on the Shoulders of Giants
The Athens project would not be possible without the amazing projects it builds on. Please see SHOULDERS.md to see a list of them.
We all strive to write nice and readable code which can be understood by every person of the team. To achieve that we follow principles described in Brian's talk
Code like the Go team.
Code of Conduct
If you have concerns, notice a code of conduct violation, or otherwise would like to talk about something
related to this code of conduct, please reach out
@arschles on the Gophers Slack.
Athens banner attributed to Golda Manuel
Copyright (c) [year] [fullname]
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.