defmodule Burrito.Steps.Build.CopyRelease do alias Burrito.Builder.Context alias Burrito.Builder.Step @behaviour Step @success_banner """ \n\n 🌯 Burrito has wrapped your Elixir app! 🌯 """ @impl Step def execute(%Context{} = context) do app_path = File.cwd!() release_name = Atom.to_string(context.mix_release.name) target_name = Atom.to_string(context.target.alias) orig_bin_name = if context.target.os == :windows do "#{release_name}.exe" else release_name end bin_name = if context.target.os == :windows do "#{release_name}_#{target_name}.exe" else "#{release_name}_#{target_name}" end bin_path = Path.join(context.self_dir, ["zig-out", "/bin", "/#{orig_bin_name}"]) bin_out_path = Path.join(app_path, ["burrito_out"]) File.mkdir_p!(bin_out_path) output_bin_path = Path.join(bin_out_path, [bin_name]) # Delete the existing bin, to prevent a MacOS bug # where exiting bins modified in place cause SIP to be upset if File.exists?(output_bin_path) do File.rm!(output_bin_path) end File.copy!(bin_path, output_bin_path) File.rm!(bin_path) # Mark resulting bin as executable File.chmod!(output_bin_path, 0o744) IO.puts(@success_banner <> "\tOutput Path: #{output_bin_path}\n\n") context end end