-
Notifications
You must be signed in to change notification settings - Fork 0
/
mix.exs
133 lines (116 loc) · 3.32 KB
/
mix.exs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
defmodule TypedStructLens.MixProject do
use Mix.Project
@version "0.1.1"
@repo_url "https://github.com/ejpcmac/typed_struct_lens"
def project do
[
app: :typed_struct_lens,
version: @version,
elixir: "~> 1.6",
elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod,
deps: deps(),
# Tools
dialyzer: dialyzer(),
test_coverage: [tool: ExCoveralls],
preferred_cli_env: cli_env(),
# Docs
name: "TypedStructLens",
docs: [
main: "readme",
source_url: @repo_url,
source_ref: "v#{@version}",
extras: [
"README.md": [title: "Overview"],
"CHANGELOG.md": [title: "Changelog"],
"CONTRIBUTING.md": [title: "Contributing"],
LICENSE: [title: "License"]
]
],
# Package
package: package(),
description: "A TypedStruct plugin for defining a Lens on each field."
]
end
def application do
[
extra_applications: [:logger]
]
end
# Specifies which paths to compile per environment.
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp deps do
[
# Development dependencies
{:ex_check, "~> 0.14.0", only: :dev, runtime: false},
{:credo, "~> 1.0", only: :dev, runtime: false},
{:dialyxir, "~> 1.0", only: :dev, runtime: false},
{:excoveralls, ">= 0.0.0", only: :test, runtime: false},
{:mix_test_watch, ">= 0.0.0", only: :test, runtime: false},
{:ex_unit_notifier, ">= 0.0.0", only: :test, runtime: false},
{:stream_data, "~> 0.5.0", only: :test},
# Project dependencies
{:typed_struct, "~> 0.3.0"},
{:lens, "~> 1.0"},
# Documentation dependencies
{:ex_doc, ">= 0.0.0", only: :docs, runtime: false}
]
end
# Dialyzer configuration
defp dialyzer do
[
# Use a custom PLT directory for continuous integration caching.
plt_core_path: System.get_env("PLT_DIR"),
plt_file: plt_file(),
plt_add_deps: :app_tree,
flags: [
:unmatched_returns,
:error_handling,
:race_conditions
],
ignore_warnings: ".dialyzer_ignore"
]
end
defp plt_file do
case System.get_env("PLT_DIR") do
nil -> nil
plt_dir -> {:no_warn, Path.join(plt_dir, "typed_struct_lens.plt")}
end
end
defp cli_env do
[
# Run mix test.watch in `:test` env.
"test.watch": :test,
# Always run Coveralls Mix tasks in `:test` env.
coveralls: :test,
"coveralls.detail": :test,
"coveralls.html": :test,
# Use a custom env for docs.
docs: :docs
]
end
defp package do
[
licenses: ["MIT"],
links: %{
"Changelog" => "https://hexdocs.pm/typed_struct_lens/changelog.html",
"GitHub" => @repo_url
}
]
end
# Helper to add a development revision to the version. Do NOT make a call to
# Git this way in a production release!!
def dev do
with {rev, 0} <-
System.cmd("git", ["rev-parse", "--short", "HEAD"],
stderr_to_stdout: true
),
{status, 0} <- System.cmd("git", ["status", "--porcelain"]) do
status = if status == "", do: "", else: "-dirty"
"-dev+" <> String.trim(rev) <> status
else
_ -> "-dev"
end
end
end