package version import ( "io" "net/http" "runtime/debug" "go.uber.org/fx" // import embedded version "payouts/internal/version" ) // Route version route const Route = "/version" // Module is a fx module var Module = fx.Options( fx.Provide(New), ) // New constructs a new config Handler. func New() (Handler, error) { return &handler{ version.Version, }, nil } // Handler config handler interface type Handler interface { VersionHandler(http.ResponseWriter, *http.Request) } type handler struct { version string } // VersionHandler handles the version requests func (h *handler) VersionHandler(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() ver := h.version if ver == "unknown" { buildInfo, ok := debug.ReadBuildInfo() if ok { for _, setting := range buildInfo.Settings { if setting.Key == "vcs.revision" { ver = ver + "-" + setting.Value break } } } } w.Header().Set("Content-Type", "text/plain") w.WriteHeader(http.StatusOK) io.WriteString(w, ver+"\n") }