code: function parseTag (tag, repoOwner, imageName, supplyDefaults = true) {
    let sourceTag = tag
    if (!tag && supplyDefaults) {
      sourceTag = 'latest'
    }
    const parts = sourceTag ? sourceTag.split('_') : []
    if (parts.length > 6) {
      // someone has used underscores in their owner/repo/branch name :|
      return parseProblemTag(sourceTag, repoOwner, imageName)
    } else if (parts.length === 0) {
      return [ repoOwner, imageName, undefined, undefined, undefined, undefined ] // allows for upstream filters
    } else if (parts.length === 1) {
      if (sourceTag === 'latest') {
        return [ repoOwner, imageName, 'master', 'latest' ]
      } else {
        return [ repoOwner, imageName, 'master', sourceTag ]
      }
    } else if (parts.length === 2) {
      return [ repoOwner, imageName, 'master', parts[ 0 ], undefined, parts[ 1 ] ]
    } else if (parts.length === 3) {
      return [ repoOwner, imageName, 'master', ...parts ]
    } else if (parts.length === 4) {
      return [ repoOwner, imageName, ...parts ]
    } else if (parts.length === 6) {
      return parts
    }
  }
docs: latest # #.# #.#.# owner_repo_branch_version_build_sha branch_version_build_sha version_sha