Macaw.Host.Build (macaw_host v0.1.4)

Copy Markdown View Source

An app's build: its version and the commit it was built from, fixed at compile time.

defmodule MyApp.Build do
  use Macaw.Host.Build, otp_app: :my_app
end

MyApp.Build.sha()      # "3f639e84a704"
MyApp.Build.version()  # "1.2.0"

The SHA is BUILD_SHA when the image build sets it, else the app's own git checkout's, else "unknown". It is a macro so it runs while the app compiles, in the app's directory: as a function in this library it would read this library's checkout, or nothing.

When the SHA comes from the checkout, the module declares the checkout's HEAD file and the ref it names (the branch's file, or packed-refs when the branch is only packed), and HEAD's reflog, as @external_resources, so a new commit or a switched branch recompiles it rather than leaving the old SHA in an incremental build. They are read as files, never by running git, and only those that exist are declared. The checkout is the first .git found from the app's directory upward (an umbrella's is at its root; a worktree's .git file is followed), or git_dir: when given.