Current section

Files

Jump to
version_tasks lib mix tasks inc.ex
Raw

lib/mix/tasks/inc.ex

defmodule Mix.Tasks.Version.Inc do
use Mix.Task
use VersionTasks.FnExpr
alias Mix.Tasks.Version
@shortdoc "Inc to the next (major|minor|patch) version of your project"
def run(mode) do
current = Version.Current.calc(mode)
next = Version.Next.calc(mode)
IO.puts("Updating mix.exs from #{current} to #{next}")
update_file("mix.exs", current, next, &update_mix_version/3)
update_file("README.md", current, next, &update_readme_version/3)
next
end
defp update_file(filename, current, next, update_fn) do
if File.exists?(filename) do
IO.puts(" -- Updating #{filename}")
filename
|> File.read()
|> invoke(fn {:ok, content} -> content end)
|> String.split("\n")
|> Enum.map(fn line -> update_fn.(line, current, next) end)
|> Enum.join("\n")
|> invoke(fn content -> File.write!(filename, content) end)
else
IO.puts(" -- Skipping missing file #{filename}")
end
end
defp update_mix_version(line, current, next) do
line
|> String.replace("@version \"#{current}\"", "@version \"#{next}\"")
|> String.replace("version: \"#{current}\"", "version: \"#{next}\"")
end
defp update_readme_version(line, current, next) do
line
|> String.replace("~> #{current}", "~> #{next}")
end
end