Packages

helijia Skylab deployment package

Current section

Files

Jump to
helijia_skylab lib skylab tag.ex
Raw

lib/skylab/tag.ex

defmodule Skylab.Tag do
@moduledoc """
创建发布 release tag
"""
use HTTPoison.Base
import Skylab.Config, only: [gitlab_api_token: 0]
@endpoint "https://git.helijia.cn/api/v4"
def run(opts) do
Application.ensure_all_started(:timex)
Application.ensure_all_started(:httpoison)
content = body(opts)
"projects/#{opts[:project_id]}/repository/tags"
|> post(content)
|> handle_response()
end
def process_url(url) do
Path.join(@endpoint, url)
end
def process_request_headers(_) do
[
{"PRIVATE-TOKEN", gitlab_api_token()},
{"Content-Type", "application/json"}
]
end
def body(opts) do
rev = ref(opts)
%{
tag_name: "release/#{now()}-auto-#{rev}",
ref: rev,
message: "auto created by @robot with skylab"
}
|> Jason.encode!()
end
defp now do
Timex.now()
|> Timex.to_datetime("Asia/Shanghai")
|> Timex.format!("{YYYY}{M}{D}{h24}{m}{s}")
end
defp ref(opts) do
opts[:ref] || git_rev()
end
defp git_rev() do
"git rev-parse --short HEAD"
|> String.to_charlist()
|> :os.cmd()
|> to_string()
|> String.replace("\n", "")
|> String.slice(0, 8)
end
defp handle_response({:ok, %HTTPoison.Response{status_code: 201, body: _}}), do: :ok
defp handle_response({:ok, res}), do: {:error, res}
defp handle_response({:error, reason}), do: {:error, reason}
end