Current section

Files

Jump to

mix.exs

defmodule Snodo.Extensions.Tasks.Postgres.MixProject do
  use Mix.Project

  # release-please bumps the version between these markers.
  # x-release-please-start-version
  @version "0.2.0"
  # x-release-please-end
  @source_url "https://github.com/joshrotenberg/snodo"

  def project do
    [
      app: :snodo_tasks_postgres,
      version: @version,
      elixir: "~> 1.18",
      start_permanent: Mix.env() == :prod,
      description: "PostgreSQL store for snodo Tasks",
      source_url: @source_url,
      package: [
        licenses: ["MIT"],
        links: %{"GitHub" => @source_url, "Changelog" => @source_url <> "/blob/main/CHANGELOG.md"},
        files: ~w(lib mix.exs README.md LICENSE .formatter.exs)
      ],
      docs: [
        main: "readme",
        extras: ["README.md"],
        source_ref: "v#{@version}",
        source_url_pattern:
          "#{@source_url}/blob/v#{@version}/extensions/tasks_postgres/%{path}#L%{line}"
      ],
      dialyzer: [
        plt_add_apps: [:mix],
        plt_local_path: "priv/plts",
        flags: [:unmatched_returns, :error_handling]
      ],
      aliases: aliases(),
      deps: deps()
    ]
  end

  def cli do
    [
      preferred_envs: [
        "example.postgres": :dev,
        quality: :test,
        "quality.postgres": :test,
        "quality.types": :dev,
        "tasks.postgres.contract": :test,
        "tasks.postgres.live": :test
      ]
    ]
  end

  def application do
    [extra_applications: [:crypto, :logger]]
  end

  defp deps do
    [
      snodo_dep(:snodo_tasks, "../tasks"),
      {:ecto_sql, "~> 3.14"},
      {:jason, "~> 1.4"},
      {:postgrex, "~> 0.22", optional: true},
      {:credo, "~> 1.7.19", only: [:dev, :test], runtime: false},
      {:dialyxir, "~> 1.4.7", only: [:dev, :test], runtime: false},
      {:ex_doc, "~> 0.40", only: :dev, runtime: false}
    ]
  end

  defp aliases do
    [
      "example.postgres": [
        "compile --warnings-as-errors",
        "snodo.example ../../examples/10_tasks_postgres.exs"
      ],
      quality: [
        "format --check-formatted",
        "compile --warnings-as-errors",
        "credo --strict",
        "test --warnings-as-errors --raise",
        "tasks.postgres.contract"
      ],
      "quality.postgres": [
        "format --check-formatted",
        "compile --warnings-as-errors",
        "tasks.postgres.live",
        "example.postgres"
      ],
      "quality.types": ["dialyzer --force-check --format short --list-unused-filters"]
    ]
  end

  # Inside this repository the snodo packages are path dependencies. Hex does
  # not accept those, so publishing sets SNODO_HEX=1 to depend on the released
  # packages instead. All snodo packages share one version.
  defp snodo_dep(app, path) do
    if System.get_env("SNODO_HEX") == "1",
      do: {app, "~> " <> @version},
      else: {app, path: path}
  end
end