- %% Vendored from hex_core v0.7.0, do not edit manually
-
- -module(r3_hex_api_release).
- -export([
- delete/3,
- get/3,
- publish/2,
- publish/3,
- retire/4,
- unretire/3
- ]).
-
- -export_type([publish_params/0, retirement_params/0, retirement_reason/0]).
-
- -type publish_params() :: [{replace, boolean()}].
-
- -type retirement_reason() :: other | invalid | security | deprecated | renamed.
-
- -ifdef(OTP_19).
- -type retirement_params() :: #{reason := retirement_reason(), message => binary()}.
- -else.
- -type retirement_params() :: #{reason => retirement_reason(), message => binary()}.
- -endif.
- %% @doc
- %% Gets a package release.
- %%
- %% Examples:
- %%
- %% ```
- %% > r3_hex_api_release:get(r3_hex_core:default_config(), <<"package">>, <<"1.0.0">>).
- %% {ok, {200, ..., #{
- %% <<"checksum">> => <<"540d210d81f56f17f64309a4896430e727972499b37bd59342dc08d61dff74d8">>,
- %% <<"docs_html_url">> => <<"https://hexdocs.pm/package/1.0.0/">>,
- %% <<"downloads">> => 740,<<"has_docs">> => true,
- %% <<"html_url">> => <<"https://hex.pm/packages/package/1.0.0">>,
- %% <<"inserted_at">> => <<"2014-12-09T18:32:03Z">>,
- %% <<"meta">> =>
- %% #{<<"app">> => <<"package">>,
- %% <<"build_tools">> => [<<"mix">>]},
- %% <<"package_url">> => <<"https://hex.pm/api/packages/package">>,
- %% <<"publisher">> => nil,<<"requirements">> => #{},
- %% <<"retirement">> => nil,
- %% <<"updated_at">> => <<"2019-07-28T21:12:11Z">>,
- %% <<"url">> => <<"https://hex.pm/api/packages/package/releases/1.0.0">>,
- %% <<"version">> => <<"1.0.0">>
- %% }}}
- %% '''
- %% @end
- -spec get(r3_hex_core:config(), binary(), binary()) -> r3_hex_api:response().
- get(Config, Name, Version) when is_map(Config) and is_binary(Name) and is_binary(Version) ->
- Path = r3_hex_api:build_repository_path(Config, ["packages", Name, "releases", Version]),
- r3_hex_api:get(Config, Path).
-
- %% @doc
- %% Publishes a new package release.
- %%
- %% Examples:
- %%
- %% ```
- %% > r3_hex_api_release:publish(r3_hex_core:default_config(), Tarball).
- %% {ok, {200, ..., #{
- %% <<"checksum">> => <<"540d210d81f56f17f64309a4896430e727972499b37bd59342dc08d61dff74d8">>,
- %% <<"docs_html_url">> => <<"https://hexdocs.pm/package/1.0.0/">>,
- %% <<"downloads">> => 740,<<"has_docs">> => true,
- %% <<"html_url">> => <<"https://hex.pm/packages/package/1.0.0">>,
- %% <<"inserted_at">> => <<"2014-12-09T18:32:03Z">>,
- %% <<"meta">> =>
- %% #{<<"app">> => <<"package">>,
- %% <<"build_tools">> => [<<"mix">>]},
- %% <<"package_url">> => <<"https://hex.pm/api/packages/package">>,
- %% <<"publisher">> => nil,<<"requirements">> => #{},
- %% <<"retirement">> => nil,
- %% <<"updated_at">> => <<"2019-07-28T21:12:11Z">>,
- %% <<"url">> => <<"https://hex.pm/api/packages/package/releases/1.0.0">>,
- %% <<"version">> => <<"1.0.0">>
- %% }}}
- %% '''
- %% @end
- -spec publish(r3_hex_core:config(), binary()) -> r3_hex_api:response().
- publish(Config, Tarball) -> publish(Config, Tarball, []).
-
-
- %% @doc
- %% Publishes a new package release with query parameters.
- %%
- %% Supported query params :
- %% - replace : boolean
- %%
- %% Examples:
- %%
- %% ```
- %% > r3_hex_api_release:publish(r3_hex_core:default_config(), Tarball, [{replace, true}]).
- %% {ok, {201, ..., #{
- %% <<"checksum">> => <<"540d210d81f56f17f64309a4896430e727972499b37bd59342dc08d61dff74d8">>,
- %% <<"docs_html_url">> => <<"https://hexdocs.pm/package/1.0.0/">>,
- %% <<"downloads">> => 740,<<"has_docs">> => true,
- %% <<"html_url">> => <<"https://hex.pm/packages/package/1.0.0">>,
- %% <<"inserted_at">> => <<"2014-12-09T18:32:03Z">>,
- %% <<"meta">> =>
- %% #{<<"app">> => <<"package">>,
- %% <<"build_tools">> => [<<"mix">>]},
- %% <<"package_url">> => <<"https://hex.pm/api/packages/package">>,
- %% <<"publisher">> => nil,<<"requirements">> => #{},
- %% <<"retirement">> => nil,
- %% <<"updated_at">> => <<"2019-07-28T21:12:11Z">>,
- %% <<"url">> => <<"https://hex.pm/api/packages/package/releases/1.0.0">>,
- %% <<"version">> => <<"1.0.0">>
- %% }}}
- %% '''
- %% @end
- -spec publish(hexcore:config(), binary(), publish_params()) -> r3_hex_api:response().
- publish(Config, Tarball, Params) when is_map(Config) andalso is_binary(Tarball) andalso is_list(Params)->
- QueryString = r3_hex_api:encode_query_string([{replace, proplists:get_value(replace, Params, false)}]),
- Path = r3_hex_api:join_path_segments(r3_hex_api:build_repository_path(Config, ["publish"])),
- PathWithQuery = <<Path/binary, "?", QueryString/binary>>,
- TarballContentType = "application/octet-stream",
- Config2 = put_header(<<"content-length">>, integer_to_binary(byte_size(Tarball)), Config),
- Body = {TarballContentType, Tarball},
- r3_hex_api:post(Config2, PathWithQuery, Body).
-
- %% @doc
- %% Deletes a package release.
- %%
- %% Examples:
- %%
- %% ```
- %% > r3_hex_api_release:delete(r3_hex_core:default_config(), <<"package">>, <<"1.0.0">>).
- %% {ok, {204, ..., nil}}
- %% '''
- %% @end
- -spec delete(r3_hex_core:config(), binary(), binary()) -> r3_hex_api:response().
- delete(Config, Name, Version) when is_map(Config) and is_binary(Name) and is_binary(Version) ->
- Path = r3_hex_api:build_repository_path(Config, ["packages", Name, "releases", Version]),
- r3_hex_api:delete(Config, Path).
-
- %% @doc
- %% Retires a package release.
- %%
- %% Examples:
- %%
- %% ```
- %% > r3_hex_api_release:retire(r3_hex_core:default_config(), <<"package">>, <<"1.0.0">>, Params).
- %% {ok, {204, ..., nil}}
- %% '''
- %% @end
- -spec retire(r3_hex_core:config(), binary(), binary(), retirement_params()) -> r3_hex_api:response().
- retire(Config, Name, Version, Params) when is_map(Config) and is_binary(Name) and is_binary(Version) ->
- Path = r3_hex_api:build_repository_path(Config, ["packages", Name, "releases", Version, "retire"]),
- r3_hex_api:post(Config, Path, Params).
-
- %% @doc
- %% Unretires a package release.
- %%
- %% Examples:
- %%
- %% ```
- %% > r3_hex_api_release:unretire(r3_hex_core:default_config(), <<"package">>, <<"1.0.0">>).
- %% {ok, {204, ..., nil}}
- %% '''
- %% @end
- -spec unretire(r3_hex_core:config(), binary(), binary()) -> r3_hex_api:response().
- unretire(Config, Name, Version) when is_map(Config) and is_binary(Name) and is_binary(Version) ->
- Path = r3_hex_api:build_repository_path(Config, ["packages", Name, "releases", Version, "retire"]),
- r3_hex_api:delete(Config, Path).
-
- %%====================================================================
- %% Internal functions
- %%====================================================================
-
- put_header(Name, Value, Config) ->
- Headers = maps:get(http_headers, Config, #{}),
- Headers2 = maps:put(Name, Value, Headers),
- maps:put(http_headers, Headers2, Config).
|