defmodule Mix.Tasks.Riva.Modules.Compile do @moduledoc "Printed when the user requests `mix help echo`" @shortdoc "Compile nvidia riva elixir modules from common proto definitions" use Mix.Task alias Mix.Context @impl Mix.Task def run(args) do ctx = Context.new(args) cmd = "earthly -P --ci \ --build-arg ELIXIR_VERSION=\"#{ctx.elixir_version}\" \ --build-arg PROTOC_VERSION=\"#{ctx.protoc_version}\" \ --build-arg NVIDIA_RIVA_COMMON_TAG=\"#{ctx.nvidia_riva_common_tag}\" \ --artifact +build/riva #{ctx.module_output_dir}" IO.inspect(cmd) Mix.shell().cmd(cmd) update_package_version(ctx.nvidia_riva_common_tag) update_readme_version(ctx.nvidia_riva_common_tag) update_elixir_version(ctx.elixir_version_major_and_minor) end defp update_readme_version(tag) do {:ok, content} = File.read("README.md") release_version = Regex.replace(~r/^[^0-9]*/, tag, "") # perform the regex replacement new_content = Regex.replace( ~r/(\{:ex_nvidia_riva_modules, \")~>[^"]+"/, content, "\\1~> #{release_version}\"" ) # write the modified content back to the file File.write!("README.md", new_content) end defp update_package_version(tag) do {:ok, content} = File.read("mix.exs") release_version = Regex.replace(~r/^[^0-9]*/, tag, "") # perform the regex replacement new_content = Regex.replace( ~r/(version:\s*)"[0-9]+\.[0-9]+"/, content, "\\1\"#{release_version}\"" ) # write the modified content back to the file File.write!("mix.exs", new_content) end defp update_elixir_version(elixir_version) do {:ok, content} = File.read("mix.exs") # perform the regex replacement new_content = Regex.replace( ~r/(elixir: ~>) "[0-9]+\.[0-9]+"/, content, "\\1 \"#{elixir_version}\"" ) # write the modified content back to the file File.write!("mix.exs", new_content) end end