> TODO: any of this
# Publishing
Creating a new version of your software isn't useful if no-one can get
it. That's why Versio can also publish your software to all kinds of
targets.
For some deploys, you'll need the specific build tools such as
compilers; others might require the package manager (`npm`, `mvn`,
etc.). Some publishing might require authorization, so be sure you're
logged in, or have your credentials handy.
## Common deploys
Many package managers have a central repository that gives access to all
the world. Others allow publications to organisation-level or local
repositories for more limited distribution.
### NPM (Node.js projects)
### Maven (Java projects)
### Crates.io (Rust projects)
### proxy.golang.org (Go projects)
### PyPI (Python)
### RubyGems.org (Ruby)
### Dockerhub (Docker)
### GitHub Releases
A GitHub release is a general-purpose distribution, allowing users to
download source code and/or binary products directly. Although it's not
as suited to direct use by package managers, it's a good spot for users
to download independent resources.
> TODO : single GitHub release for multiple projects
## Custom Docker
One of the advantages of having a monorepo is being able to put both the
source code and the deployment descriptors in different projects. Versio
can take advantage of that: you can deploy your source project using a
separate Docker project.
> TODO: example
## Inline Docker options
There are common patterns for creating docker images. If you planning on
using one of them, you don't need a separate Docker project: just (TODO:
what actually would you do here?)
> TODO: example
If you ever want to customize, just use (TODO: something easy), and
Versio will write the files it uses to a custom project; from there on,
you can customize as you like and deploy from that project.
> TODO: example
### Docker: Rust native cmdline
### Docker: Go native cmdline
### Docker: Java 13 cmdline (Java main)
### Docker: Node.js 12 cmdline (index.js)
### Docker: Ruby 2.7 cmdline (index.rb)
### Docker: Python 3.8 cmdline (\_\_name\_\_)
### Docker: Java webapp (Tomcat 10, Java 12)
### Docker: Node.js webapp (express ?)
### Docker: Ruby 2.7 webapp (Rails ?)
### Docker: Python 3.8 webapp (?)
## Inline webapp options
If you're writing a webapp, you don't need to host it yourself: there
are some common ways to publish a webapp without needing to manage your
own public infrastructure.
> TODO: is this even true?
If you ever want to customize, just use (TODO: something easy), and
Versio will write the files it uses to a custom project.
### Tomcat Java hosting
### Express Node.js hosting
### etc
## Custom Helm
If you're planning to run your software on a Kubernetes cluster, then
Helm / Helmfile is one way to do this. Create a custom helm deployment
in a project that references your docker images (in another project),
and then use `versio deploy` to send everything up.
> TODO: example