Skip to content

Commit aba73f6

Browse files
committed
Raise if version is not provided in Docs task
1 parent f6b3929 commit aba73f6

File tree

2 files changed

+34
-18
lines changed

2 files changed

+34
-18
lines changed

lib/mix/tasks/docs.ex

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ defmodule Mix.Tasks.Docs do
122122
end
123123

124124
project = to_string(config[:name] || config[:app])
125-
version = config[:version] || "dev"
125+
version = fetch_version!(config)
126126
options =
127127
config
128128
|> get_docs_opts()
@@ -140,6 +140,16 @@ defmodule Mix.Tasks.Docs do
140140
end
141141
end
142142

143+
defp fetch_version!(config) do
144+
try do
145+
Keyword.fetch!(config, :version)
146+
rescue
147+
KeyError ->
148+
stack = System.stacktrace
149+
reraise ArgumentError, ":version key is required in config, got: #{inspect(config)}", stack
150+
end
151+
end
152+
143153
defp get_formatters(options) do
144154
case Keyword.get_values(options, :formatter) do
145155
[] -> options[:formatters] || [ExDoc.Config.default(:formatter)]

test/mix/tasks/docs_test.exs

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,42 +32,42 @@ defmodule Mix.Tasks.DocsTest do
3232
end
3333

3434
test "accepts modules in :main" do
35-
assert [{"ex_doc", "dev", [formatter: "html", deps: _, main: "Sample", source_beam: _, ]}] =
36-
run([], [app: :ex_doc, docs: [main: Sample]])
35+
assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: _, main: "Sample", source_beam: _, ]}] =
36+
run([], [app: :ex_doc, version: "1.2.3-dev", docs: [main: Sample]])
3737
end
3838

3939
test "accepts files in :main" do
40-
assert [{"ex_doc", "dev", [formatter: "html", deps: _, source_beam: _, main: "another"]}] =
41-
run([], [app: :ex_doc, docs: [main: "another"]])
40+
assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: _, source_beam: _, main: "another"]}] =
41+
run([], [app: :ex_doc, version: "1.2.3-dev", docs: [main: "another"]])
4242
end
4343

4444
test "accepts output in :output" do
45-
assert [{"ex_doc", "dev", [formatter: "html", deps: _, source_beam: _, output: "hello"]}] =
46-
run([], [app: :ex_doc, docs: [output: "hello"]])
45+
assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: _, source_beam: _, output: "hello"]}] =
46+
run([], [app: :ex_doc, version: "1.2.3-dev", docs: [output: "hello"]])
4747
end
4848

4949
test "parses output with lower preference than options" do
50-
assert [{"ex_doc", "dev", [formatter: "html", deps: _, source_beam: _, output: "world"]}] =
51-
run(~w(-o world), [app: :ex_doc, docs: [output: "world"]])
50+
assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: _, source_beam: _, output: "world"]}] =
51+
run(~w(-o world), [app: :ex_doc, version: "1.2.3-dev", docs: [output: "world"]])
5252
end
5353

5454
test "includes dependencies" do
55-
assert [{"ex_doc", "dev", [formatter: "html", deps: deps, source_beam: _]}] =
56-
run([], [app: :ex_doc, docs: []])
55+
assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: deps, source_beam: _]}] =
56+
run([], [app: :ex_doc, version: "1.2.3-dev", docs: []])
5757
assert List.keyfind(deps, Application.app_dir(:earmark), 0) ==
5858
{Application.app_dir(:earmark), "https://hexdocs.pm/earmark/#{Application.spec(:earmark, :vsn)}/"}
5959
end
6060

6161
test "allows custom dependency paths" do
62-
assert [{"ex_doc", "dev", [formatter: "html", deps: deps, source_beam: _]}] =
63-
run([], [app: :ex_doc, docs: [deps: [earmark: "foo"]]])
62+
assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: deps, source_beam: _]}] =
63+
run([], [app: :ex_doc, version: "1.2.3-dev", docs: [deps: [earmark: "foo"]]])
6464
assert List.keyfind(deps, Application.app_dir(:earmark), 0) ==
6565
{Application.app_dir(:earmark), "foo"}
6666
end
6767

6868
test "accepts lazy docs" do
69-
assert [{"ex_doc", "dev", [formatter: "html", deps: _, source_beam: _, main: "another"]}] =
70-
run([], [app: :ex_doc, docs: fn -> [main: "another"] end])
69+
assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: _, source_beam: _, main: "another"]}] =
70+
run([], [app: :ex_doc, version: "1.2.3-dev", docs: fn -> [main: "another"] end])
7171
end
7272

7373
test "accepts options from root" do
@@ -85,18 +85,24 @@ defmodule Mix.Tasks.DocsTest do
8585
version: "1.2.3-dev",
8686
])
8787

88-
assert [{"ex_doc", "dev", _}] = run([], [app: :ex_doc])
88+
assert [{"ex_doc", "1.2.3-dev", _}] = run([], [app: :ex_doc, version: "1.2.3-dev"])
8989
end
9090

9191
test "supports umbrella project" do
9292
Mix.Project.in_project(:umbrella, "test/fixtures/umbrella", fn _mod ->
93-
assert [{"umbrella", "dev", [formatter: "html", deps: deps, source_beam: _]}] =
94-
run([], [app: :umbrella, apps_path: "apps/"])
93+
assert [{"umbrella", "1.2.3-dev", [formatter: "html", deps: deps, source_beam: _]}] =
94+
run([], [app: :umbrella, apps_path: "apps/", version: "1.2.3-dev"])
9595

9696
assert List.keyfind(deps, Application.app_dir(:foo), 0) ==
9797
{Application.app_dir(:foo), "https://hexdocs.pm/foo/0.1.0/"}
9898
assert List.keyfind(deps, Application.app_dir(:bar), 0) ==
9999
{Application.app_dir(:bar), "https://hexdocs.pm/bar/0.1.0/"}
100100
end)
101101
end
102+
103+
test "raise when version is not provided" do
104+
assert_raise ArgumentError, ~r/:version key is required in config, got: /, fn ->
105+
run([], [app: :ex_doc])
106+
end
107+
end
102108
end

0 commit comments

Comments
 (0)