Akd v0.3.0 Akd.Fetch.Git View Source

A native Hook module that comes shipped with Akd.

This module uses Akd.Hook.

Provides a set of operations that fetch source code using git to a destination, checks out a given branch (defaults to master) and pulls the latest version of the branch on the destination.

Ensures to clean up and empty the desination directory. (Doesn't run this by default)

Doesn't have any Rollback operations.

Options:

  • run_ensure: boolean. Specifies whether to a run a command or not.
  • ignore_failure: boolean. Specifies whether to continue if this hook fails.
  • src: string. Source/Repo from where to clone the project. This is a required option while using this hook.
  • branch: string. Branch of the git repo that is being deployed.

Defaults:

  • run_ensure: false
  • ignore_failure: false
  • branch: master

Link to this section Summary

Functions

Callback implementation for get_hooks/2

Link to this section Functions

Link to this function

get_hooks(deployment, opts) View Source
get_hooks(Akd.Deployment.t(), list()) :: Akd.Hook.t()
get_hooks(Akd.Deployment.t(), Keyword.t()) :: [Akd.Hook.t()]

Callback implementation for get_hooks/2.

This function returns a list of operations that can be used to fetch a source code using git from a branch.

Examples

When no src is given with opts:

iex> deployment = %Akd.Deployment{mix_env: "prod",
...> build_at: Akd.Destination.local("."),
...> publish_to: Akd.Destination.local("."),
...> name: "name",
...> vsn: "0.1.1"}
iex> Akd.Fetch.Git.get_hooks(deployment, [])
** (RuntimeError) No `src` given to [`Akd.Fetch.Git`](Akd.Fetch.Git.html#content). Expected a git repo.

When a src is given:

iex> deployment = %Akd.Deployment{mix_env: "prod",
...> build_at: Akd.Destination.local("."),
...> publish_to: Akd.Destination.local("."),
...> name: "name",
...> vsn: "0.1.1"}
iex> Akd.Fetch.Git.get_hooks(deployment, [src: "url"])
[%Akd.Hook{ensure: [%Akd.Operation{cmd: "rm -rf ./*", cmd_envs: [],
  destination: %Akd.Destination{host: :local, path: ".",
   user: :current}},
  %Akd.Operation{cmd: "rm -rf ./.*", cmd_envs: [],
      destination: %Akd.Destination{host: :local, path: ".",
  user: :current}}], ignore_failure: false,
        main: [%Akd.Operation{cmd: "git status; if [[ $? != 0 ]]; then git clone url .; fi", cmd_envs: [],
   destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git fetch", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
        user: :current}},
  %Akd.Operation{cmd: "git reset --hard", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git clean -fd", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git checkout master", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git pull", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}}], rollback: [], run_ensure: false}]

When a git_src is part of deployment data:

iex> deployment = %Akd.Deployment{mix_env: "prod",
...> build_at: Akd.Destination.local("."),
...> publish_to: Akd.Destination.local("."),
...> name: "name",
...> vsn: "0.1.1",
...> data: %{git_src: "url"}}
iex> Akd.Fetch.Git.get_hooks(deployment)
[%Akd.Hook{ensure: [%Akd.Operation{cmd: "rm -rf ./*", cmd_envs: [],
  destination: %Akd.Destination{host: :local, path: ".",
   user: :current}},
  %Akd.Operation{cmd: "rm -rf ./.*", cmd_envs: [],
      destination: %Akd.Destination{host: :local, path: ".",
  user: :current}}], ignore_failure: false,
        main: [%Akd.Operation{cmd: "git status; if [[ $? != 0 ]]; then git clone url .; fi", cmd_envs: [],
   destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git fetch", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
        user: :current}},
  %Akd.Operation{cmd: "git reset --hard", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git clean -fd", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git checkout master", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git pull", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}}], rollback: [], run_ensure: false}]

When a git_branch is part of deployment data:

iex> deployment = %Akd.Deployment{mix_env: "prod",
...> build_at: Akd.Destination.local("."),
...> publish_to: Akd.Destination.local("."),
...> name: "name",
...> vsn: "0.1.1",
...> data: %{git_src: "url", git_branch: "branch"}}
iex> Akd.Fetch.Git.get_hooks(deployment)
[%Akd.Hook{ensure: [%Akd.Operation{cmd: "rm -rf ./*", cmd_envs: [],
  destination: %Akd.Destination{host: :local, path: ".",
   user: :current}},
  %Akd.Operation{cmd: "rm -rf ./.*", cmd_envs: [],
      destination: %Akd.Destination{host: :local, path: ".",
  user: :current}}], ignore_failure: false,
        main: [%Akd.Operation{cmd: "git status; if [[ $? != 0 ]]; then git clone url .; fi", cmd_envs: [],
   destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git fetch", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
        user: :current}},
  %Akd.Operation{cmd: "git reset --hard", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git clean -fd", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git checkout branch", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git pull", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}}], rollback: [], run_ensure: false}]

When a branch is part of options:

iex> deployment = %Akd.Deployment{mix_env: "prod",
...> build_at: Akd.Destination.local("."),
...> publish_to: Akd.Destination.local("."),
...> name: "name",
...> vsn: "0.1.1",
...> data: %{git_src: "url"}}
iex> Akd.Fetch.Git.get_hooks(deployment, branch: "branch")
[%Akd.Hook{ensure: [%Akd.Operation{cmd: "rm -rf ./*", cmd_envs: [],
  destination: %Akd.Destination{host: :local, path: ".",
   user: :current}},
  %Akd.Operation{cmd: "rm -rf ./.*", cmd_envs: [],
      destination: %Akd.Destination{host: :local, path: ".",
  user: :current}}], ignore_failure: false,
        main: [%Akd.Operation{cmd: "git status; if [[ $? != 0 ]]; then git clone url .; fi", cmd_envs: [],
   destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git fetch", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
        user: :current}},
  %Akd.Operation{cmd: "git reset --hard", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git clean -fd", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git checkout branch", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}},
  %Akd.Operation{cmd: "git pull", cmd_envs: [],
       destination: %Akd.Destination{host: :local, path: ".",
       user: :current}}], rollback: [], run_ensure: false}]