Current section

Files

Jump to
lambda_base lib mix tasks lambda_release.ex
Raw

lib/mix/tasks/lambda_release.ex

defmodule Mix.Tasks.LambdaRelease do
@moduledoc """
Documentation for LambdaRelease.
"""
use Mix.Task
@bootstrap """
#!/bin/sh
set -euo pipefail
export HOME=/
RESPONSE=$(bin/app eval "$(echo "$_HANDLER").start()")
"""
@doc """
Create zip file for AWS Lamdba with custom runtime.
"""
@impl Mix.Task
def run(_args) do
app_name = Mix.Project.config |> Keyword.get(:app) |> to_string
Mix.env(:prod)
Mix.Task.run("release")
File.write("./_build/prod/rel/lambda/bootstrap", @bootstrap)
Mix.Shell.cmd("mv ./_build/prod/rel/lambda/bin/#{app_name} ./_build/prod/rel/lambda/bin/app", &IO.puts/1)
Mix.Shell.cmd("rm -f ./_build/prod/rel/lambda/bin/#{app_name}.bat", &IO.puts/1)
Mix.Shell.cmd("chmod +x ./_build/prod/rel/lambda/bin/app", &IO.puts/1)
Mix.Shell.cmd("chmod +x ./_build/prod/rel/lambda/releases/0.1.0/elixir", &IO.puts/1)
Mix.Shell.cmd("chmod +x ./_build/prod/rel/lambda/erts-10.6/bin/erl", &IO.puts/1)
Mix.Shell.cmd("chmod +x ./_build/prod/rel/lambda/bootstrap", &IO.puts/1)
Mix.Shell.cmd("cd ./_build/prod/rel/lambda; zip #{app_name} -r -q *", &IO.puts/1)
Mix.Shell.cmd("mv -f ./_build/prod/rel/lambda/#{app_name}.zip ./_build/", &IO.puts/1)
end
end