Packages

Elixir SDK for Linear with committed upstream schema artifacts and generated GraphQL API reference docs.

Current section

Files

Jump to
linear_sdk mix.exs
Raw

mix.exs

Code.require_file("build_support/dependency_resolver.exs", __DIR__)
defmodule LinearSDK.MixProject do
use Mix.Project
alias LinearSDK.Build.DependencyResolver
@version "0.1.0"
@source_url "https://github.com/nshkrdotcom/linear_sdk"
def project do
[
app: :linear_sdk,
version: @version,
elixir: "~> 1.18",
start_permanent: Mix.env() == :prod,
elixirc_paths: elixirc_paths(Mix.env()),
deps: deps(),
aliases: aliases(),
dialyzer: dialyzer(),
description: description(),
package: package(),
name: "LinearSDK",
source_url: @source_url,
homepage_url: @source_url,
docs: docs()
]
end
defp elixirc_paths(:dev), do: if(include_tooling_deps?(), do: ["lib", "codegen"], else: ["lib"])
defp elixirc_paths(:test),
do:
if(include_tooling_deps?(),
do: ["lib", "codegen", "test/support"],
else: ["lib", "test/support"]
)
defp elixirc_paths(_), do: ["lib"]
def application do
[
extra_applications: [:logger]
]
end
defp deps do
[
prismatic_runtime_dep(),
codegen_deps(),
{:jason, "~> 1.4"},
{:telemetry, "~> 1.4"},
{:mox, "~> 1.2", only: :test, runtime: false},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
{:credo, "~> 1.7", only: [:dev, :test], runtime: false},
{:ex_doc, "~> 0.40", only: :dev, runtime: false}
]
|> List.flatten()
end
defp prismatic_runtime_dep do
if use_hex_runtime_dep?() do
{:prismatic, "~> 0.1.0"}
else
{:prismatic, path: "../prismatic/apps/prismatic_runtime"}
end
end
defp codegen_deps do
if include_tooling_deps?() do
[
DependencyResolver.prismatic_codegen(only: [:dev, :test], runtime: false),
DependencyResolver.prismatic_provider_testkit(only: :test, runtime: false)
]
else
[]
end
end
defp aliases do
[
"linear.ir": ["prismatic.codegen.ir --provider LinearSDK.Codegen.Provider"],
"linear.generate": ["prismatic.codegen.generate --provider LinearSDK.Codegen.Provider"],
"linear.verify": ["prismatic.codegen.verify --provider LinearSDK.Codegen.Provider"],
ci: [
"format --check-formatted",
"compile --warnings-as-errors",
"linear.verify",
"cmd MIX_ENV=test mix test",
"credo --strict",
"dialyzer --force-check",
"cmd rm -rf doc",
"docs",
"cmd elixir build_support/docs_assertions.exs"
]
]
end
defp dialyzer do
plt_add_apps =
if include_tooling_deps?() do
[:mix, :ex_unit, :prismatic_codegen]
else
[:mix, :ex_unit]
end
[
ignore_warnings: ".dialyzer_ignore.exs",
plt_add_deps: :app_tree,
plt_add_apps: plt_add_apps,
plt_core_path: "priv/plts/core",
plt_local_path: "priv/plts/project/dialyzer.plt"
]
end
defp description do
"""
Elixir SDK for Linear with committed upstream schema artifacts and generated GraphQL API reference docs.
"""
end
defp package do
[
name: "linear_sdk",
description: description(),
files: ~w(
build_support/dependency_resolver.exs
build_support/docs_assertions.exs
lib
codegen
priv/upstream/documents
priv/upstream/official_manifests
CHANGELOG.md
LICENSE
README.md
mix.exs
),
licenses: ["MIT"],
links: %{
"GitHub" => @source_url
},
maintainers: ["nshkrdotcom"]
]
end
defp docs do
[
main: "LinearSDK",
assets: %{"assets" => "assets"},
logo: "assets/linear_sdk.svg",
canonical: "https://hexdocs.pm/linear_sdk",
source_url: @source_url,
source_ref: "v#{@version}",
extras: extras(),
groups_for_extras: groups_for_extras(),
groups_for_modules: groups_for_modules()
]
end
defp extras do
["README.md"] ++
user_guides() ++
[
"examples/README.md",
"CHANGELOG.md",
"LICENSE"
]
end
defp groups_for_extras do
[
{"Overview", ["README.md"]},
{"User Guides", user_guides()},
{"Examples", ["examples/README.md"]},
{"Project", ["CHANGELOG.md", "LICENSE"]}
]
end
defp user_guides do
[
"guides/getting-started.md",
"guides/client-configuration.md",
"guides/real-linear-usage.md",
"guides/executing-graphql-documents.md",
"guides/generation-and-verification.md",
"guides/upstream-artifacts.md"
]
end
defp groups_for_modules do
[
{"Core", [LinearSDK, LinearSDK.Client, LinearSDK.Response, LinearSDK.Error]},
{"Queries", ~r/^LinearSDK\.Queries(\.|$)/},
{"Mutations", ~r/^LinearSDK\.Mutations(\.|$)/},
{"Subscriptions", ~r/^LinearSDK\.Subscriptions(\.|$)/},
{"Objects", ~r/^LinearSDK\.Objects(\.|$)/},
{"Inputs", ~r/^LinearSDK\.Inputs(\.|$)/},
{"Interfaces", ~r/^LinearSDK\.Interfaces(\.|$)/},
{"Unions", ~r/^LinearSDK\.Unions(\.|$)/},
{"Enums", ~r/^LinearSDK\.Enums(\.|$)/},
{"Scalars", ~r/^LinearSDK\.Scalars(\.|$)/}
]
end
defp publishing_package? do
Enum.any?(System.argv(), &(&1 in ["hex.build", "hex.publish"]))
end
defp use_hex_runtime_dep? do
publishing_package?() or installing_as_dependency?() or force_hex_runtime_dep?()
end
defp include_tooling_deps? do
not use_hex_runtime_dep?()
end
defp installing_as_dependency? do
Enum.member?(Path.split(__DIR__), "deps")
end
defp force_hex_runtime_dep? do
System.get_env("LINEAR_SDK_HEX_DEPS") in ["1", "true", "TRUE", "yes", "YES"]
end
end