Comment on page
Using Remote Sources
You can import two types of remote repositories with Garden:
Remote source: A repository that contains one or more Garden modules or actions and their corresponding
Remote actions: The source code for a single Garden action. In this case, the
garden.ymlconfig file is stored in the main project repository while the action code itself is in the remote repository.
You can import remote sources via the
sourcesdirective in the project-level
- name: web-services
- name: db-services
# use #your-branch to specify a branch, #v0.3.0 for a tag or a full length commit SHA1
Note that the URL must point to a specific branch, tag or commit hash.
Use this when you want to import Garden actions from another repository. The repository can contain one or more actions along with their
garden.ymlconfig files. For example, this is the file tree for the remote
# From the root of the garden-example-remote-sources-web-services repository
$ tree .
│ ├── Dockerfile
│ ├── garden.yml
│ └── ...
You can imagine that this file tree gets merged into the parent project.
If you now run
garden get testsyou will see all the test actions from the remote repositories.
You can import the source code for a single Garden action from another repository via the
source.repository.urldirective in the root-level
As with remote sources, the URL must point to a specific branch or tag.
Use this when you want to configure the action within your main project but import the source from another repository. In this case, the action in the main project looks like this:
$ tree .
You can also import sources from your local file system by setting the
source.repository.urlto a local file path:
# project configuration (remote source)
- name: web-services
# action configuration (remote action)
The URL must point to a specific branch or tag.
In general we don't recommend using local paths except for testing purposes. The
garden.ymlfiles should be checked into your version control system and therefore shouldn't contain anything specific to a particular user's setup.
If you have a local copy of your external source and want to be able to work on it and make changes, you can use the
linkcommand. To link the
web-servicessource from above, you would run:
garden link source web-services /local/path/to/web-services
Now you can edit the local version of the
web-servicesrepository and it will work just the same as when you edit the main project.
To unlink a remote source use the
unlinkcommand. For example:
garden unlink source web-services
Garden will only update a remote source if explicitly asked to do so via the
For example, if we had pointed the repository URL of the
web-servicessource from above to something like a
mainbranch, and we now wanted to pull the latest code from the remote, we would run:
garden update-remote source web-services
To update all remote sources and modules, you can run:
garden update-remote all
Garden git clones the remote repositories to the
.garden/sources/projectsare handled like any other directory in the main project. They're scanned for
garden.ymlfiles and the definitions found are synced to the
In the case of remote actions, Garden first finds the action
garden.ymlfile in the main project and then knows to looks for the source code for that action under
./garden/sources/actions. For builds the code is also synced to the
Linked sources and actions are handled similarly except Garden uses the local path instead of the
./garden/sourcespaths. Additionally, Garden watches the local paths when in watch mode.
Garden keeps track of the repository URL so that it can remove stale sources from the
.garden/sourcesdirectory if the URL changes.