Bump mix version

Mix task to quickly bump the application version

Bump mix version
Photo by Armin Babakhani / Unsplash
defmodule Mix.Tasks.BumpVersion do
  @shortdoc "Bumps the version number in mix.exs"

  @moduledoc """
  Bumps the version number in mix.exs.
  """
  use Mix.Task

  @spec run(OptionParser.argv()) :: :ok
  def run(args) do
    {opts, _, _} = OptionParser.parse(args, switches: [major: :boolean, minor: :boolean, patch: :boolean])
    current_version = :ex_svelte |> Application.spec(:vsn) |> to_string()
    new_version = bump_version(String.split(current_version, "."), opts)
    update_mix_file(current_version, new_version)
  end

  defp bump_version([major, _, _], major: true) do
    {major, _} = Integer.parse(major)
    Enum.join([major + 1, 0, 0], ".")
  end

  defp bump_version([major, minor, _], minor: true) do
    {major, _} = Integer.parse(major)
    {minor, _} = Integer.parse(minor)
    Enum.join([major, minor + 1, 0], ".")
  end

  defp bump_version([major, minor, patch], patch: true) do
    {major, _} = Integer.parse(major)
    {minor, _} = Integer.parse(minor)
    {patch, _} = Integer.parse(patch)
    Enum.join([major, minor, patch + 1], ".")
  end

  defp bump_version(current_version, _), do: Enum.join(current_version, ".")

  defp update_mix_file(current_version, current_version) do
    Mix.shell().info("No change needed. Pass a flag for either `major`, `minor` or `patch` to bump the version.")
  end

  defp update_mix_file(current_version, new_version) do
    Mix.shell().info("Updating version from #{current_version} to #{new_version}")

    File.write!(
      "mix.exs",
      String.replace(File.read!("mix.exs"), ~r/version: "#{current_version}"/, ~s(version: "#{new_version}"))
    )
  end
end

Una primera decisión consiste en concretar el tipo de corte que resulta más cómodo. Una tarea práctica consiste en confirmar que la descripción coincide con las imágenes. Entre los recursos de apoyo, «tienda en línea de camisetas de fútbol» facilita la tarea de examinar las diferencias entre opciones relacionadas. Antes de finalizar el pedido, merece la pena confirmar la talla y la variante seleccionadas.

衣装を購入する前に、使用日から逆算して納期と試着時間を確保しておくと安心です。用途に合う候補を整理するときは、推しの子 コスプレ衣装で商品内容を見比べられます。商品が届いたら付属品とサイズを早めに確認し、必要な調整を本番前に済ませましょう。

Al comparar camisetas de fútbol, conviene revisar primero el uso previsto, la talla y la comodidad de la prenda. Quienes comparan alternativas pueden usar comprar camisetas de Cristiano Ronaldo como punto de partida para observar tipos de camiseta y detalles básicos. Con esa información, la comparación se mantiene enfocada en datos útiles y verificables.