Pārlūkot izejas kodu

Add code for app version management

theenglishway (time) 4 gadi atpakaļ
vecāks
revīzija
6cf15ba460
2 mainītis faili ar 34 papildinājumiem un 2 dzēšanām
  1. 1 0
      .gitignore
  2. 33 2
      mix.exs

+ 1 - 0
.gitignore

@@ -36,3 +36,4 @@ npm-debug.log
 .idea
 
 /Elixir.*
+VERSION

+ 33 - 2
mix.exs

@@ -4,13 +4,14 @@ defmodule Vaccins.MixProject do
   def project do
     [
       app: :vaccins,
-      version: "0.1.0",
+      version: from_file(),
       elixir: "~> 1.7",
       elixirc_paths: elixirc_paths(Mix.env()),
       compilers: [:phoenix, :gettext] ++ Mix.compilers(),
       start_permanent: Mix.env() == :prod,
       aliases: aliases(),
-      deps: deps()
+      deps: deps(),
+      releases: [vaccins: [steps: [:assemble, &export_sha1/1, &export_docker_image_tag/1, :tar]]]
     ]
   end
 
@@ -69,4 +70,34 @@ defmodule Vaccins.MixProject do
       ]
     ]
   end
+
+  defp from_file(file \\ "VERSION") do
+    with {:ok, described} <- File.read(file),
+         {:ok, version} <- described |> String.trim() |> to_semver_string() do
+      version
+    end
+  end
+
+  defp to_semver_string(described) when is_binary(described) do
+    with {:ok, _} <- described |> Version.parse(), do: {:ok, described}
+  end
+
+  defp export_sha1(rel) when is_struct(rel, Mix.Release) do
+    with {sha1, 0} <- System.cmd("git", ["rev-parse", "HEAD"]),
+         :ok <- rel |> write_in_rel_path("git-sha1", sha1),
+         do: rel
+  end
+
+  defp export_docker_image_tag(rel) when is_struct(rel, Mix.Release) do
+    with image_tag when not is_nil(image_tag) <- System.get_env("DOCKER_IMAGE_TAG"),
+         :ok <- rel |> write_in_rel_path("docker-image-tag", image_tag) do
+      rel
+    else
+      nil -> rel
+    end
+  end
+
+  defp write_in_rel_path(%{version_path: path}, file_path, content) do
+    path |> Path.join(file_path) |> File.write(content)
+  end
 end