diff --git a/Dockerfile b/Dockerfile index 2f52a78..0a7bee4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,6 +5,7 @@ WORKDIR /app COPY . . RUN go mod download -RUN go build -o rove-server . +RUN go build -o rove-server -ldflags="-X version.Version=$(git describe --always --long --dirty)" . + +CMD [ "./rove-server" ] -CMD "./rove-server" \ No newline at end of file diff --git a/main.go b/main.go index ac03668..fabe2ce 100644 --- a/main.go +++ b/main.go @@ -8,13 +8,20 @@ import ( "syscall" "github.com/mdiluz/rove/pkg/server" + "github.com/mdiluz/rove/pkg/version" ) +var ver = flag.Bool("version", false, "Display version number") var port = flag.Int("port", 8080, "The port to host on") func main() { flag.Parse() + if *ver { + fmt.Println(version.Version) + os.Exit(0) + } + s := server.NewServer( server.OptionPort(*port), server.OptionPersistentData()) diff --git a/pkg/server/router.go b/pkg/server/router.go index 842d542..1ae2008 100644 --- a/pkg/server/router.go +++ b/pkg/server/router.go @@ -6,18 +6,40 @@ import ( "net/http" "github.com/mdiluz/rove/pkg/accounts" + "github.com/mdiluz/rove/pkg/version" ) +// Route defines the information for a single path->function route +type Route struct { + path string + handler func(http.ResponseWriter, *http.Request) +} + // NewRouter sets up the server mux func (s *Server) SetUpRouter() { + + // Array of all our routes + var routes = []Route{ + { + path: "/status", + handler: s.HandleStatus, + }, + { + path: "/register", + handler: s.HandleRegister, + }, + } + // Set up the handlers - s.router.HandleFunc("/status", s.HandleStatus) - s.router.HandleFunc("/register", s.HandleRegister) + for _, route := range routes { + s.router.HandleFunc(route.path, route.handler) + } } // StatusResponse is a struct that contains information on the status of the server type StatusResponse struct { - Ready bool `json:"ready"` + Ready bool `json:"ready"` + Version string `json:"version"` } // HandleStatus handles HTTP requests to the /status endpoint @@ -31,7 +53,8 @@ func (s *Server) HandleStatus(w http.ResponseWriter, r *http.Request) { } var response = StatusResponse{ - Ready: true, + Ready: true, + Version: version.Version, } // Be a good citizen and set the header for the return diff --git a/pkg/server/router_test.go b/pkg/server/router_test.go index d92c4b1..09a5c1d 100644 --- a/pkg/server/router_test.go +++ b/pkg/server/router_test.go @@ -21,6 +21,10 @@ func TestHandleStatus(t *testing.T) { if status.Ready != true { t.Errorf("got false for /status") } + + if len(status.Version) == 0 { + t.Errorf("got empty version info") + } } func TestHandleRegister(t *testing.T) { diff --git a/pkg/version/version.go b/pkg/version/version.go new file mode 100644 index 0000000..b8b26bb --- /dev/null +++ b/pkg/version/version.go @@ -0,0 +1,3 @@ +package version + +var Version = "undefined"