add CI pipeline with credo and dialyzer

mix ci alias: compile --warning-as-errors, format --check-formatted,
credo, dialyzer, test. Credo configured with sensible defaults.
Dialyzer ignore file for false positives (Stripe types, Mix tasks,
ExUnit internals). Credo fixes: map_join, filter consolidation,
nesting extraction, cond→if simplification.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
jamey
2026-02-08 15:19:42 +00:00
parent 518da36c8f
commit eaa4bbb3fa
16 changed files with 328 additions and 59 deletions

View File

@@ -89,7 +89,7 @@ defmodule SimpleshopTheme.Clients.Printify do
"""
def get_shop_id do
case get_shops() do
{:ok, shops} when is_list(shops) and length(shops) > 0 ->
{:ok, shops} when is_list(shops) and shops != [] ->
{:ok, hd(shops)["id"]}
{:ok, []} ->

View File

@@ -214,7 +214,7 @@ defmodule SimpleshopTheme.Mockups.Generator do
"""
def find_print_provider(blueprint_id) do
case Client.get_print_providers(blueprint_id) do
{:ok, providers} when is_list(providers) and length(providers) > 0 ->
{:ok, providers} when is_list(providers) and providers != [] ->
# Just pick the first provider for simplicity
{:ok, hd(providers)}

View File

@@ -23,24 +23,27 @@ defmodule SimpleshopTheme.Orders.FulfilmentStatusWorker do
Logger.info("Polling fulfilment status for #{length(orders)} order(s)")
Enum.each(orders, fn order ->
case Orders.refresh_fulfilment_status(order) do
{:ok, updated} ->
if updated.fulfilment_status != order.fulfilment_status do
Logger.info(
"Order #{order.order_number} status: #{order.fulfilment_status}#{updated.fulfilment_status}"
)
end
{:error, reason} ->
Logger.warning(
"Failed to refresh status for order #{order.order_number}: #{inspect(reason)}"
)
end
refresh_order(order)
Process.sleep(200)
end)
:ok
end
end
defp refresh_order(order) do
case Orders.refresh_fulfilment_status(order) do
{:ok, updated} ->
if updated.fulfilment_status != order.fulfilment_status do
Logger.info(
"Order #{order.order_number} status: #{order.fulfilment_status}#{updated.fulfilment_status}"
)
end
{:error, reason} ->
Logger.warning(
"Failed to refresh status for order #{order.order_number}: #{inspect(reason)}"
)
end
end
end

View File

@@ -146,21 +146,22 @@ defmodule SimpleshopTheme.Providers.Printify do
true ->
with api_key when is_binary(api_key) <- ProviderConnection.get_api_key(conn),
:ok <- set_api_key(api_key) do
results =
Enum.map(@webhook_events, fn event ->
case Client.create_webhook(shop_id, webhook_url, event, secret) do
{:ok, response} -> {:ok, event, response}
{:error, reason} -> {:error, event, reason}
end
end)
{:ok, results}
{:ok, create_all_webhooks(shop_id, webhook_url, secret)}
else
nil -> {:error, :no_api_key}
end
end
end
defp create_all_webhooks(shop_id, webhook_url, secret) do
Enum.map(@webhook_events, fn event ->
case Client.create_webhook(shop_id, webhook_url, event, secret) do
{:ok, response} -> {:ok, event, response}
{:error, reason} -> {:error, event, reason}
end
end)
end
@doc """
Lists registered webhooks for the shop.
"""

View File

@@ -128,9 +128,7 @@ defmodule SimpleshopTheme.Theme.Fonts do
[heading_key, body_key]
end
font_keys
|> Enum.map(&generate_font_face_for_font(&1, path_resolver))
|> Enum.join("\n")
Enum.map_join(font_keys, "\n", &generate_font_face_for_font(&1, path_resolver))
end
@doc """
@@ -143,8 +141,7 @@ defmodule SimpleshopTheme.Theme.Fonts do
def generate_all_font_faces(path_resolver \\ &default_path_resolver/1) do
@fonts
|> Map.keys()
|> Enum.map(&generate_font_face_for_font(&1, path_resolver))
|> Enum.join("\n")
|> Enum.map_join("\n", &generate_font_face_for_font(&1, path_resolver))
end
@doc """
@@ -213,8 +210,7 @@ defmodule SimpleshopTheme.Theme.Fonts do
defp generate_font_face_for_font(key, path_resolver) do
case get_font(key) do
%{family: family, file_prefix: prefix, weights: weights} ->
weights
|> Enum.map(fn weight ->
Enum.map_join(weights, "", fn weight ->
weight_suffix = if weight == 400, do: "regular", else: to_string(weight)
font_path = path_resolver.("/fonts/#{prefix}-#{weight_suffix}.woff2")
@@ -228,7 +224,6 @@ defmodule SimpleshopTheme.Theme.Fonts do
}
"""
end)
|> Enum.join("")
nil ->
""

View File

@@ -393,8 +393,7 @@ defmodule SimpleshopTheme.Theme.PreviewData do
# Get available variants for pricing
available_variants =
product.variants
|> Enum.filter(& &1.is_enabled)
|> Enum.filter(& &1.is_available)
|> Enum.filter(&(&1.is_enabled and &1.is_available))
# Get the cheapest available variant for display price
cheapest_variant =