Packages
rebar3_hex
0.3.0
7.1.0
7.0.11
7.0.10
7.0.9
7.0.8
7.0.7
7.0.6
7.0.5
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.11.9
6.11.8
6.11.7
6.11.6
6.11.5
6.11.4
6.11.3
6.11.2
6.11.1
6.11.0
6.10.3
6.10.2
6.10.1
6.10.0
6.9.6
6.9.5
6.9.4
6.9.3
6.9.2
6.9.1
6.9.0
6.8.0
6.7.0
6.6.0
6.5.0
6.4.0
6.3.0
6.2.0
6.1.0
6.0.0
4.1.0
4.0.0
3.1.0
3.0.0
2.5.1
2.5.0
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
1.20.0
1.19.0
1.18.0
1.17.0
1.16.0
1.15.0
1.14.0
1.13.0
1.12.0
1.11.0
1.10.0
1.9.1
1.9.0
1.8.1
1.8.0
1.7.2
1.7.1
1.7.0
1.6.3
1.6.1
1.6.0
1.5.0
1.4.0
1.3.0
1.2.0
1.1.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Hex.pm plugin for rebar3
Current section
Files
Jump to
Current section
Files
src/rebar3_hex_docs.erl
-module(rebar3_hex_docs).
-behaviour(provider).
-export([init/1,
do/1,
format_error/1]).
-include("rebar3_hex.hrl").
-include_lib("providers/include/providers.hrl").
-define(PROVIDER, docs).
-define(DEPS, [{default, edoc}]).
-define(ENDPOINT, "packages").
%% ===================================================================
%% Public API
%% ===================================================================
-spec init(rebar_state:t()) -> {ok, rebar_state:t()}.
init(State) ->
Provider = providers:create([
{name, ?PROVIDER},
{module, ?MODULE},
{namespace, hex},
{bare, false},
{deps, ?DEPS},
{example, "rebar3 hex docs"},
{short_desc, "."},
{desc, ""},
{opts, [{revert, undefined, "revert", string, "Revert given version."}]}
]),
State1 = rebar_state:add_provider(State, Provider),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
[App] = rebar_state:project_apps(State),
AppDir = rebar_app_info:dir(App),
Files = rebar3_hex_utils:expand_paths(["doc"], AppDir),
Name = binary_to_list(rebar_app_info:name(App)),
{Args, _} = rebar_state:command_parsed_args(State),
Revert = proplists:get_value(revert, Args, undefined),
case Revert of
undefined ->
Vsn = rebar_app_info:original_vsn(App),
Tarball = Name++"-"++Vsn++"-docs.tar.gz",
ok = erl_tar:create(Tarball, file_list(Files)),
{ok, Tar} = file:read_file(Tarball),
file:delete(Tarball),
{ok, Auth} = rebar3_hex_config:auth(),
case rebar3_hex_http:post(filename:join([?ENDPOINT, Name, "releases", Vsn, "docs"])
,Auth
,Tar
,integer_to_list(byte_size(Tar))) of
ok ->
rebar_api:info("Published docs for ~s ~s", [Name, Vsn]),
{ok, State};
{error, _, Error} ->
Message = proplists:get_value(<<"message">>, Error, <<"">>),
?PRV_ERROR({error, Name, Vsn, Message})
end;
Version ->
case delete(Name, Version) of
ok ->
{ok, State};
Error ->
Error
end
end.
-spec format_error(any()) -> iolist().
format_error({error, Name, Vsn, Message}) ->
io_lib:format("Failed to publish docs for ~s ~s. Error: ~s.", [Name, Vsn, Message]).
delete(Name, Version) ->
{ok, Auth} = rebar3_hex_config:auth(),
case rebar3_hex_http:delete(filename:join([?ENDPOINT, Name, "releases", Version, "docs"]), Auth) of
ok ->
rebar_api:info("Successfully deleted docs for ~s ~s", [Name, Version]),
ok;
{error, _} ->
rebar_api:error("Unable to delete docs ~s ~s", [Name, Version])
end.
file_list(Files) ->
[{drop_path(File, ["doc"]), File} || File <- Files].
drop_path(File, Path) ->
filename:join(filename:split(File) -- Path).