diff --git a/docs/module-spec.md b/docs/module-spec.md index 801954c..ebb0dfe 100644 --- a/docs/module-spec.md +++ b/docs/module-spec.md @@ -14,7 +14,8 @@ containers | map? | A docker-compose [`services`](https://docs.docker.com/compos Field | Type | Description -|-|- url | string | The github repo identifier of a remote module in the form `/`. Currently this is the only supported value but in future this will be expanded to support additional remote sources. -ref | string? | A git ref that the remote module should be resolved against. Defaults to `master` +ref | string? | A git ref that the remote module should be resolved against. Defaults to the default branch of the repo +or`master` sha | string? | An exact sha that should be used instead of dynamically resolving it from a ref. Exclusive with ref. subdir | string? | A directory path within the remote repository that the `module` config file should be resolved from. Defaults to `.kl` diff --git a/src/k16/kl/api/resolver.clj b/src/k16/kl/api/resolver.clj index 0c783d3..5f5b30d 100644 --- a/src/k16/kl/api/resolver.clj +++ b/src/k16/kl/api/resolver.clj @@ -23,11 +23,23 @@ (:sha data))) +(defn- get-default-branch [identifier] + (let [res (api.github/request {:path (str "/repos/" identifier)}) + data (json/read-value (:body res) json/keyword-keys-object-mapper)] + + (when (not= 200 (:status res)) + (log/info (str "Failed to resolve default branch for " identifier)) + (cli.util/exit! (:message data) 1)) + + (or (:default_branch data) + "master"))) + (defn- resolve-module-ref [{:keys [url sha ref subdir]}] (when-not sha (log/debug (str "Resolving " url (if subdir (str "/" subdir) "")))) - (let [sha (if sha sha (get-commit-for-ref url ref))] + (let [ref (if ref ref (get-default-branch url)) + sha (if sha sha (get-commit-for-ref url ref))] (cond-> {:url url :sha sha :ref ref} subdir (assoc :subdir subdir)))) @@ -45,12 +57,6 @@ (let [lock-entry (get lock submodule-name) current-reference (:ref lock-entry) - ref (when (and (not (:sha partial-ref)) - (not (:ref partial-ref))) - "master") - partial-ref (cond-> partial-ref - ref (assoc :ref ref)) - should-resolve? (or (not (:sha current-reference))