Cloud Foundry Go(Lang) Buildpack
A Cloud Foundry buildpack for Go(lang) based apps.
This is based on the [Heroku buildpack] (https://github.com/heroku/heroku-buildpack-go).
Additional documentation can be found at CloudFoundry.org.
Usage
This buildpack will get used if you have any files with the .go
extension in your repository, or you request the buildpack with
cf push my_app -b go_buildpack
If your Cloud Foundry deployment does not have the Go Buildpack installed, or the installed version is out of date, you can use the latest version with the command:
cf push my_app -b https://github.com/cloudfoundry/go-buildpack.git
When pushing go apps, you must specify a start command for the app. The start command can be placed in the file Procfile
in your app's root directory, for example if the binary generated by your go project is my-go-server
(note: the name of the built binary is the last segment of the ImportPath
specified in Godeps/Godeps.json
, e.g. if your ImportPath
is either github.com/example/my-go-server
or my-go-server
your binary will be named my-go-server
):
web: my-go-server
You can also specify your app's start command in the manifest.yml
file in the root directory, for example:
---
application
- name: my-app-name
command: my-go-server
Finally, make sure that you have packaged your dependencies using the Godep dependency packager. Cloud Foundry requires a valid Godeps/Godeps.json
file in the root directory for your app to deploy. For further help, please see these fixture apps for examples of valid go applications you can deploy:
Disconnected environments
To use this buildpack on Cloud Foundry, where the Cloud Foundry instance limits some or all internet activity, please read the Disconnected Environments documentation.
Vendoring app dependencies
As stated in the Disconnected Environments documentation, your application must 'vendor' its dependencies.
For the Go buildpack, use Godep:
cf push
uploads your vendored dependencies. The buildpack will compile any dependencies requiring compilation while staging your application.
Building
- Make sure you have fetched submodules
git submodule update --init
- Get latest buildpack dependencies
BUNDLE_GEMFILE=cf.Gemfile bundle
- Build the buildpack
BUNDLE_GEMFILE=cf.Gemfile bundle exec buildpack-packager [ --uncached | --cached ]
-
Use in Cloud Foundry
Upload the buildpack to your Cloud Foundry and optionally specify it by name
cf create-buildpack custom_go_buildpack go_buildpack-cached-custom.zip 1 cf push my_app -b custom_go_buildpack
Supported binary dependencies
The buildpack only supports the stable patches for each dependency listed in the manifest.yml and releases page.
If you try to use a binary that is not currently supported, staging your app will fail and you will see the following error message:
Could not get translated url, exited with: DEPENDENCY_MISSING_IN_MANIFEST: ...
!
! exit
!
Staging failed: Buildpack compilation step failed
Testing
Buildpacks use the Machete framework for running integration tests.
To test a buildpack, run the following command from the buildpack's directory:
BUNDLE_GEMFILE=cf.Gemfile bundle exec buildpack-build
More options can be found on Machete's Github page.
Contributing
Find our guidelines here.
Dependency managment
.godir
If you use .godir
your app will no longer stage.
.godir
has been retired in favor of using
godep in your project to
manage dependencies, and including the generated Godep
directory in your git repository.
Godeps
Godeps is the buildpack's only supported
package manager. The buildpack will run godep
to install your dependencies at
staging.
C dependencies
This buildpack supports building with C dependencies via
cgo. You can set config vars to specify CGO flags
to, e.g., specify paths for vendored dependencies. E.g., to build
gopgsqldriver, add the config var
CGO_CFLAGS
with the value -I/app/code/vendor/include/postgresql
and include
the relevant Postgres header files in vendor/include/postgresql/
in your app.
Help and Support
Join the #buildpacks channel in our [Slack community] (http://slack.cloudfoundry.org/)
Reporting Issues
Open an issue on this project
Active Development
The project backlog is on Pivotal Tracker