Packages

Librería base para ejecución de comandos del sistema y gestión de tareas asíncronas con resultados estructurados.

Retired package: Release invalid - Versión publicada por error

Current section

Files

Jump to
argos mix.exs
Raw

mix.exs

defmodule Argos.MixProject do
use Mix.Project
def project do
[
app: :argos,
version: "2.0.0",
elixir: "~> 1.18.2-otp-27",
start_permanent: Mix.env() == :prod,
aliases: aliases(),
deps: deps(),
description: description(),
preferred_cli_env: [
bench: :dev,
coveralls: :test,
"coveralls.detail": :test,
"coveralls.post": :test,
"coveralls.html": :test
],
test_coverage: [tool: ExCoveralls],
dialyzer: [ignore_warnings: ".dialyzer_ignore.exs"],
package: package(),
source_url: "https://github.com/lorenzo-sf/argos",
homepage_url: "https://hex.pm/packages/argos",
docs: [
main: "readme",
extras: ["README.md", "CHANGELOG.md", "LICENSE"],
source_ref: "v1.0.0",
source_url: "https://github.com/lorenzo-sf/argos"
],
escript: [main_module: Argos.CLI, path: "argos"]
]
end
def application do
[
extra_applications: [:logger, :runtime_tools],
mod: {Argos.Application, []}
]
end
defp aliases do
[
gen: [
"deps.get",
"compile",
"escript.build",
"deploy",
"tools_version"
],
deploy: fn _ ->
dest_dir = Path.expand("~/.Ypsilon")
File.mkdir_p!(dest_dir)
File.cp!("argos", Path.join(dest_dir, "argos"))
IO.puts("✅ Escript instalado en #{dest_dir}/argos")
end,
tools_version: fn _ ->
dest_dir = Path.expand("~/.Ypsilon")
tool_versions_path = Path.join(dest_dir, ".tool-versions")
File.write!(tool_versions_path, """
erlang 27.2
elixir 1.18.2-otp-27
""")
IO.puts("✅ Archivo .tool-versions creado en #{tool_versions_path}")
end,
formating: [
fn _ ->
case Mix.shell().cmd("mix format --check-formatted", quiet: true) do
0 ->
Mix.shell().info("✅ FORMAT: código formateado correctamente")
0
_ ->
IO.puts("⚠️ FORMAT: Es necesario corregir el formato. Aplicando formateo automático...")
case Mix.shell().cmd("mix format", quiet: true) do
0 ->
IO.puts("✅ FORMAT: formateo aplicado correctamente")
0
code ->
IO.puts("❌ FORMAT: falló con código #{code}. Lanza 'mix format' para más detalles")
code
end
end
end
],
clean_build: [
fn _ ->
IO.write("🧹 CLEAN: limpiando directorios _build y deps...")
File.rm_rf("_build")
File.rm_rf("deps")
IO.puts(" ✅")
0
end
],
deps: [
fn _ ->
IO.write("📦 DEPS: obteniendo dependencias...")
case Mix.shell().cmd("mix deps.get", quiet: true) do
0 ->
IO.puts(" ✅")
0
code ->
IO.puts(" ❌ falló al obtener dependencias. Lanza 'mix deps.get' para más detalles")
code
end
end
],
"compile.strict": [
fn _ ->
IO.write("🔨 COMPILE: compilando con warnings como errores...")
case Mix.shell().cmd("mix compile --warnings-as-errors", quiet: true) do
0 ->
IO.puts(" ✅")
0
code ->
IO.puts(" ❌ encontró problemas (código #{code}). Lanza 'mix compile --warnings-as-errors' para más detalles")
code
end
end
],
testing: [
fn _ ->
IO.write("🧪 TEST: ejecutando tests con cobertura...")
case Mix.shell().cmd("MIX_ENV=test mix coveralls", quiet: true) do
0 ->
IO.puts(" ✅")
0
code ->
IO.puts(" ❌ algunos tests fallaron (código #{code}). Lanza 'MIX_ENV=test mix coveralls' para más detalles")
code
end
end
],
creding: [
fn _ ->
IO.write("🔍 CREDO: analizando código...")
case Mix.shell().cmd("mix credo --strict --format=oneline", quiet: true) do
0 ->
IO.puts(" ✅")
0
code ->
IO.puts(" ❌ encontró problemas (código #{code}). Lanza 'mix credo --strict --format=oneline' para más detalles")
code
end
end
],
dialyzing: [
fn _ ->
IO.write("🔬 DIALYZER: analizando tipos...")
case Mix.shell().cmd("mix dialyzer", quiet: true) do
0 ->
IO.puts(" ✅")
0
code ->
IO.puts(" ❌ encontró problemas (código #{code}). Lanza 'mix dialyzer' para más detalles")
code
end
end
],
check: [
"formating",
"compile.strict",
"testing",
"creding"
],
quality: [
"formating",
"clean_build",
"deps",
"compile.strict",
"testing",
"creding",
"dialyzing",
"bench"
],
bench: [
fn _ ->
case Mix.Task.run("mix run bench", []) do
:ok ->
Mix.shell().info("✅ BENCHEE terminado")
Mix.shell().info("✅✅✅✅ ESTO ES SOFTWARE DE CALIDAD ✅✅✅✅")
{:ok, _} ->
Mix.shell().info("✅ BENCHEE terminado")
Mix.shell().info("✅✅✅✅ ESTO ES SOFTWARE DE CALIDAD ✅✅✅✅")
{:error, _} = error ->
Mix.shell().error("❌ BENCHEE falló")
error
other ->
Mix.shell().error("❌ BENCHEE falló: #{inspect(other)}")
{:error, other}
end
end
],
hex_prepare: [
"quality",
"docs",
"cmd mix hex.build"
],
hex_publish: [
"hex_prepare",
"cmd mix hex.publish"
]
]
end
defp deps do
[
{:benchee, "~> 1.3", only: [:dev, :test]},
{:aurora, "~> 3.0.0"},
{:mix_test_watch, "~> 1.1", only: :dev, runtime: false},
{:propcheck, "~> 1.4", only: :test},
{:credo, "~> 1.7.11", only: [:dev, :test], runtime: false},
{:dialyxir, "~> 1.4", only: [:dev], runtime: false},
{:ex_doc, "~> 0.34", runtime: false},
{:jason, "~> 1.4"},
{:telemetry, "~> 1.0"},
# Test dependencies for 100% coverage
{:excoveralls, "~> 0.18", only: :test, runtime: false},
{:mox, "~> 1.1", only: :test}
]
end
defp description do
"Librería base para ejecución de comandos del sistema y gestión de tareas asíncronas con resultados estructurados."
end
defp package do
[
name: "argos",
licenses: ["Apache-2.0"],
maintainers: ["Lorenzo Sánchez Fraile"],
links: %{
"GitHub" => "https://github.com/lorenzo-sf/argos",
"Docs" => "https://hexdocs.pm/argos"
},
files: ~w(lib mix.exs README.md CHANGELOG.md LICENSE .dialyzer_ignore.exs)
]
end
end