Quellcode durchsuchen

Export the docker image tag (if built within docker)

theenglishway (time) vor 4 Jahren
Ursprung
Commit
3724e11f04
2 geänderte Dateien mit 22 neuen und 5 gelöschten Zeilen
  1. 16 3
      mix.exs
  2. 6 2
      priv/build/cross_build.sh

+ 16 - 3
mix.exs

@@ -11,7 +11,7 @@ defmodule Toy.MixProject do
       start_permanent: Mix.env() == :prod,
       aliases: aliases(),
       deps: deps(),
-      releases: [toy: [steps: [:assemble, &export_sha1/1]]]
+      releases: [toy: [steps: [:assemble, &export_sha1/1, &export_docker_image_tag/1]]]
     ]
   end
 
@@ -78,9 +78,22 @@ defmodule Toy.MixProject do
     with {:ok, _} <- described |> Version.parse(), do: {:ok, described}
   end
 
-  defp export_sha1(rel = %{version_path: path}) do
+  defp export_sha1(rel) when is_struct(rel, Mix.Release) do
     with {sha1, 0} <- System.cmd("git", ["rev-parse", "HEAD"]),
-         :ok <- path |> Path.join("git-sha1") |> File.write(sha1),
+         :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

+ 6 - 2
priv/build/cross_build.sh

@@ -1,6 +1,5 @@
 #!/bin/bash
 set -euo pipefail
-set -x
 
 get_app() {
   mix run -e "Mix.Project.config[:app] |> IO.puts" | tail -1
@@ -29,7 +28,12 @@ build_image() {
 }
 
 build_binary() {
-  docker run -e SOURCE_DIR=/app -e MIX_ENV=$MIX_ENV -v $ROOT_DIR:/app $DOCKER_IMAGE_TAG /app/priv/build/build.sh
+  docker run -e SOURCE_DIR=/app \
+             -e MIX_ENV=$MIX_ENV \
+             -e DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG \
+             -v $ROOT_DIR:/app \
+             $DOCKER_IMAGE_TAG \
+             /app/priv/build/build.sh
 }
 
 build_image