The clowder.yaml File

The examples are based on the swift projects clowder.yaml files


The defaults specify the default ref, source, remote, and protocol for projects. Optionally, a default depth can be specified

    ref: refs/heads/master
    remote: origin
    source: github
    protocol: ssh


Multiple sources can be specified. A name and url are required

    - name: github
    - name: bitbucket

Groups and Projects

The groups each require a name and associated projects

At a minimum, projects require the name from the project's url, and the path to clone relative to the base directory. The default remote, source, ref, depth, and timestamp_author values can be overridden on a per-project basis. It's also possible to add a reference to a fork by adding fork to a project, with a required name and remote. When a fork is present the clowder start -t, clowder prune -r, and clowder prune -a commands will apply to the fork's remote

    - name: swift
        - name: apple/swift
          path: swift
          remote: upstream
              name: JrGoodle/swift
              remote: origin
    - name: llvm
      ref: refs/heads/stable
        - name: apple/swift-llvm
          path: llvm
          timestamp_author: swift-ci
        - name: apple/swift-clang
          path: clang
          timestamp_author: swift-ci
        - name: apple/swift-compiler-rt
          path: compiler-rt
        - name: apple/swift-lldb
          path: lldb
          timestamp_author: swift-ci
    - name: swift-corelibs
        - name: apple/swift-corelibs-foundation
          path: swift-corelibs-foundation
        - name: apple/swift-corelibs-libdispatch
          path: swift-corelibs-libdispatch
        - name: apple/swift-corelibs-xctest
          path: swift-corelibs-xctest
        - name: apple/swift-integration-tests
          path: swift-integration-tests
        - name: apple/swift-xcode-playground-support
          path: swift-xcode-playground-support


The ref can specify a branch, tag, or commit hash with the following patterns

# branch
ref: refs/heads/stable # track branch 'stable'
# tag
ref: refs/tags/swift-4.0-RELEASE # point to commit with tag 'swift-4.0-RELEASE'
# commit
ref: 3416108abd0df3997a533a14c5ad06de20ba8a60 # point to commit hash


A clowder.yaml file can import another clowder.yaml file and override values from the other file, add new groups, and add new projects. If a file contains an import, then the normal requirements for a base clowder.yaml are relaxed. There must be at least one additional customization specified for a clowder.yaml with an import to be considered valid. To import the primary clowder.yaml specify default, otherwise specify the version name

The swift-4.1-branch-import clowder.yaml file demonstrates import usage. This version will import the primary clowder.yaml and override the default ref with refs/heads/swift-4.1-branch. The llvm group ref also requires an override since it was specified to be refs/heads/stable in the default clowder.yaml

import default

    ref: refs/heads/swift-4.1-branch
    source: github-https

    - name: llvm
      ref: refs/heads/swift-4.1-branch

An example that might be located at versions/v0.1-depth-1/clowder.yaml. This will override the default depth option

Note: If v0.1 was previously saved by the clowder save command, the depth value will be explicitly specified for all projects, so that would need to be removed in order for this customization to have an effect

import: v0.1

    depth: 1