208 lines
4.9 KiB
Elixir
208 lines
4.9 KiB
Elixir
|
defmodule EctoSQL.MixProject do
|
||
|
use Mix.Project
|
||
|
|
||
|
@source_url "https://github.com/elixir-ecto/ecto_sql"
|
||
|
@version "3.11.1"
|
||
|
@adapters ~w(pg myxql tds)
|
||
|
|
||
|
def project do
|
||
|
[
|
||
|
app: :ecto_sql,
|
||
|
version: @version,
|
||
|
elixir: "~> 1.11",
|
||
|
deps: deps(),
|
||
|
test_paths: test_paths(System.get_env("ECTO_ADAPTER")),
|
||
|
xref: [
|
||
|
exclude: [
|
||
|
MyXQL,
|
||
|
Ecto.Adapters.MyXQL.Connection,
|
||
|
Postgrex,
|
||
|
Ecto.Adapters.Postgres.Connection,
|
||
|
Tds,
|
||
|
Tds.Ecto.UUID,
|
||
|
Ecto.Adapters.Tds.Connection
|
||
|
]
|
||
|
],
|
||
|
|
||
|
# Custom testing
|
||
|
aliases: [
|
||
|
"test.all": ["test", "test.adapters", "test.as_a_dep"],
|
||
|
"test.adapters": &test_adapters/1,
|
||
|
"test.as_a_dep": &test_as_a_dep/1
|
||
|
],
|
||
|
preferred_cli_env: ["test.all": :test, "test.adapters": :test],
|
||
|
|
||
|
# Hex
|
||
|
description: "SQL-based adapters for Ecto and database migrations",
|
||
|
package: package(),
|
||
|
|
||
|
# Docs
|
||
|
name: "Ecto SQL",
|
||
|
docs: docs()
|
||
|
]
|
||
|
end
|
||
|
|
||
|
def application do
|
||
|
[
|
||
|
extra_applications: [:logger, :eex],
|
||
|
env: [postgres_map_type: "jsonb"],
|
||
|
mod: {Ecto.Adapters.SQL.Application, []}
|
||
|
]
|
||
|
end
|
||
|
|
||
|
defp deps do
|
||
|
[
|
||
|
ecto_dep(),
|
||
|
{:telemetry, "~> 0.4.0 or ~> 1.0"},
|
||
|
|
||
|
# Drivers
|
||
|
{:db_connection, "~> 2.5 or ~> 2.4.1"},
|
||
|
postgrex_dep(),
|
||
|
myxql_dep(),
|
||
|
tds_dep(),
|
||
|
|
||
|
# Bring something in for JSON during tests
|
||
|
{:jason, ">= 0.0.0", only: [:test, :docs]},
|
||
|
|
||
|
# Docs
|
||
|
{:ex_doc, "~> 0.21", only: :docs},
|
||
|
|
||
|
# Benchmarks
|
||
|
{:benchee, "~> 1.0", only: :bench}
|
||
|
]
|
||
|
end
|
||
|
|
||
|
defp ecto_dep do
|
||
|
if path = System.get_env("ECTO_PATH") do
|
||
|
{:ecto, path: path}
|
||
|
else
|
||
|
{:ecto, "~> 3.11.0"}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defp postgrex_dep do
|
||
|
if path = System.get_env("POSTGREX_PATH") do
|
||
|
{:postgrex, path: path}
|
||
|
else
|
||
|
{:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", optional: true}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defp myxql_dep do
|
||
|
if path = System.get_env("MYXQL_PATH") do
|
||
|
{:myxql, path: path}
|
||
|
else
|
||
|
{:myxql, "~> 0.6.0", optional: true}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defp tds_dep do
|
||
|
if path = System.get_env("TDS_PATH") do
|
||
|
{:tds, path: path}
|
||
|
else
|
||
|
{:tds, "~> 2.1.1 or ~> 2.2", optional: true}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defp test_paths(adapter) when adapter in @adapters, do: ["integration_test/#{adapter}"]
|
||
|
defp test_paths(nil), do: ["test"]
|
||
|
defp test_paths(other), do: raise("unknown adapter #{inspect(other)}")
|
||
|
|
||
|
defp package do
|
||
|
[
|
||
|
maintainers: ["Eric Meadows-Jönsson", "José Valim", "James Fish", "Michał Muskała"],
|
||
|
licenses: ["Apache-2.0"],
|
||
|
links: %{"GitHub" => @source_url},
|
||
|
files:
|
||
|
~w(.formatter.exs mix.exs README.md CHANGELOG.md lib) ++
|
||
|
~w(integration_test/sql integration_test/support)
|
||
|
]
|
||
|
end
|
||
|
|
||
|
defp test_as_a_dep(args) do
|
||
|
IO.puts("==> Compiling ecto_sql from a dependency")
|
||
|
File.rm_rf!("tmp/as_a_dep")
|
||
|
File.mkdir_p!("tmp/as_a_dep")
|
||
|
|
||
|
File.cd!("tmp/as_a_dep", fn ->
|
||
|
File.write!("mix.exs", """
|
||
|
defmodule DepsOnEctoSQL.MixProject do
|
||
|
use Mix.Project
|
||
|
|
||
|
def project do
|
||
|
[
|
||
|
app: :deps_on_ecto_sql,
|
||
|
version: "0.0.1",
|
||
|
deps: [{:ecto_sql, path: "../.."}]
|
||
|
]
|
||
|
end
|
||
|
end
|
||
|
""")
|
||
|
|
||
|
mix_cmd_with_status_check(["do", "deps.get,", "compile", "--force" | args])
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
defp test_adapters(args) do
|
||
|
for adapter <- @adapters, do: env_run(adapter, args)
|
||
|
end
|
||
|
|
||
|
defp env_run(adapter, args) do
|
||
|
IO.puts("==> Running tests for ECTO_ADAPTER=#{adapter} mix test")
|
||
|
|
||
|
mix_cmd_with_status_check(
|
||
|
["test", ansi_option() | args],
|
||
|
env: [{"ECTO_ADAPTER", adapter}]
|
||
|
)
|
||
|
end
|
||
|
|
||
|
defp ansi_option do
|
||
|
if IO.ANSI.enabled?(), do: "--color", else: "--no-color"
|
||
|
end
|
||
|
|
||
|
defp mix_cmd_with_status_check(args, opts \\ []) do
|
||
|
{_, res} = System.cmd("mix", args, [into: IO.binstream(:stdio, :line)] ++ opts)
|
||
|
|
||
|
if res > 0 do
|
||
|
System.at_exit(fn _ -> exit({:shutdown, 1}) end)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defp docs do
|
||
|
[
|
||
|
main: "Ecto.Adapters.SQL",
|
||
|
source_ref: "v#{@version}",
|
||
|
canonical: "http://hexdocs.pm/ecto_sql",
|
||
|
source_url: @source_url,
|
||
|
extras: ["CHANGELOG.md"],
|
||
|
skip_undefined_reference_warnings_on: ["CHANGELOG.md"],
|
||
|
groups_for_modules: [
|
||
|
# Ecto.Adapters.SQL,
|
||
|
# Ecto.Adapters.SQL.Sandbox,
|
||
|
# Ecto.Migration,
|
||
|
# Ecto.Migrator,
|
||
|
|
||
|
"Built-in adapters": [
|
||
|
Ecto.Adapters.MyXQL,
|
||
|
Ecto.Adapters.Tds,
|
||
|
Ecto.Adapters.Postgres
|
||
|
],
|
||
|
"TDS Types": [
|
||
|
Tds.Ecto.UUID,
|
||
|
Tds.Ecto.VarChar
|
||
|
],
|
||
|
"Adapter specification": [
|
||
|
Ecto.Adapter.Migration,
|
||
|
Ecto.Adapter.Structure,
|
||
|
Ecto.Adapters.SQL.Connection,
|
||
|
Ecto.Migration.Command,
|
||
|
Ecto.Migration.Constraint,
|
||
|
Ecto.Migration.Index,
|
||
|
Ecto.Migration.Reference,
|
||
|
Ecto.Migration.Table
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
end
|
||
|
end
|