mirror of
https://github.com/jimeh/casecmp.git
synced 2026-02-19 02:16:40 +00:00
Change main vars to be compatible with goreleaser
And also various smaller cleanup and optimizations.
This commit is contained in:
23
Makefile
23
Makefile
@@ -1,8 +1,17 @@
|
|||||||
NAME = casecmp
|
NAME = casecmp
|
||||||
BINARY = bin/${NAME}
|
BINARY = bin/${NAME}
|
||||||
SOURCES = $(shell find . -name '*.go' -o -name 'VERSION' -o -name 'README.md')
|
|
||||||
VERSION ?= $(shell cat VERSION)
|
VERSION ?= $(shell cat VERSION)
|
||||||
WHOAMI ?= $(shell whoami)
|
COMMIT = $(shell git show --format="%h" --no-patch)
|
||||||
|
DATE = $(shell date +%Y-%m-%dT%T%z)
|
||||||
|
|
||||||
|
SOURCES = $(shell find . \
|
||||||
|
-name '*.go' \
|
||||||
|
-o -name 'LICENSE' \
|
||||||
|
-o -name 'Makefile' \
|
||||||
|
-o -name 'README.md' \
|
||||||
|
-o -name 'VERSION')
|
||||||
|
|
||||||
RELEASE_DIR = releases
|
RELEASE_DIR = releases
|
||||||
RELEASE_TARGETS = \
|
RELEASE_TARGETS = \
|
||||||
$(RELEASE_DIR)/$(NAME)-$(VERSION)_darwin_386.tar.gz \
|
$(RELEASE_DIR)/$(NAME)-$(VERSION)_darwin_386.tar.gz \
|
||||||
@@ -16,10 +25,14 @@ RELEASE_TARGETS = \
|
|||||||
$(RELEASE_DIR)/$(NAME)-$(VERSION)_windows_386.zip \
|
$(RELEASE_DIR)/$(NAME)-$(VERSION)_windows_386.zip \
|
||||||
$(RELEASE_DIR)/$(NAME)-$(VERSION)_windows_amd64.zip
|
$(RELEASE_DIR)/$(NAME)-$(VERSION)_windows_amd64.zip
|
||||||
RELEASE_ASSETS = \
|
RELEASE_ASSETS = \
|
||||||
README.md
|
README.md \
|
||||||
|
LICENSE
|
||||||
|
|
||||||
$(BINARY): $(SOURCES)
|
$(BINARY): $(SOURCES)
|
||||||
go build -o ${BINARY} -ldflags "-X main.Version=${VERSION}"
|
go build -o ${BINARY} -ldflags \ "\
|
||||||
|
-X main.version=${VERSION} \
|
||||||
|
-X main.commit=${COMMIT} \
|
||||||
|
-X main.date=${DATE}"
|
||||||
|
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
build: $(BINARY)
|
build: $(BINARY)
|
||||||
@@ -36,7 +49,7 @@ clean:
|
|||||||
|
|
||||||
.PHONY: docker
|
.PHONY: docker
|
||||||
docker:
|
docker:
|
||||||
docker build -t "$(WHOAMI)/$(NAME)" .
|
docker build -t "$(shell whoami)/$(NAME)" .
|
||||||
|
|
||||||
.PHONY: release
|
.PHONY: release
|
||||||
release: $(RELEASE_TARGETS)
|
release: $(RELEASE_TARGETS)
|
||||||
|
|||||||
81
main.go
81
main.go
@@ -1,8 +1,8 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@@ -11,47 +11,57 @@ import (
|
|||||||
"gopkg.in/alecthomas/kingpin.v2"
|
"gopkg.in/alecthomas/kingpin.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Name of application.
|
var (
|
||||||
var Name = "casecmp"
|
name = "casecmp"
|
||||||
|
version = "dev"
|
||||||
// Version gets populated with version at build-time.
|
commit = "unknown"
|
||||||
var Version string
|
date = "unknown"
|
||||||
|
defaultPort = "8080"
|
||||||
// DefaultPort that service runs on.
|
)
|
||||||
var DefaultPort = "8080"
|
|
||||||
|
|
||||||
// Argument parsing setup.
|
// Argument parsing setup.
|
||||||
var (
|
var (
|
||||||
port = kingpin.Flag("port", "Port to listen to.").Short('p').
|
portFlag = kingpin.Flag("port", "Port to listen to.").Short('p').
|
||||||
Default("").String()
|
Default("").String()
|
||||||
bind = kingpin.Flag("bind", "Bind address.").Short('b').
|
bindFlag = kingpin.Flag("bind", "Bind address.").Short('b').
|
||||||
Default("0.0.0.0").String()
|
Default("0.0.0.0").String()
|
||||||
version = kingpin.Flag("version", "Print version info.").
|
versionFlag = kingpin.Flag("version", "Print version info.").
|
||||||
Short('v').Bool()
|
Short('v').Bool()
|
||||||
)
|
)
|
||||||
|
|
||||||
func indexHandler(w http.ResponseWriter, r *http.Request) {
|
func indexHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
resp := Name + " " + Version + "\n" +
|
scheme := "http"
|
||||||
"\n" +
|
if r.TLS != nil {
|
||||||
"Case-insensitive string comparison, as an API. Because ¯\\_(ツ)_/¯\n" +
|
scheme = "https"
|
||||||
"\n" +
|
}
|
||||||
"Example usage:\n" +
|
|
||||||
"curl -X POST -F \"a=Foo Bar\" -F \"b=FOO BAR\" " +
|
|
||||||
"http://" + r.Host + "/\n" +
|
|
||||||
"curl -X POST http://" + r.Host + "/?a=Foo%%20Bar&b=FOO%%20BAR"
|
|
||||||
|
|
||||||
io.WriteString(w, resp)
|
_, err := fmt.Fprintf(w, `%s %s
|
||||||
|
|
||||||
|
Case-insensitive string comparison, as an API. Because ¯\_(ツ)_/¯
|
||||||
|
|
||||||
|
Example usage:
|
||||||
|
curl -X POST -F "a=Foo Bar" -F "b=FOO BAR" %s://%s/
|
||||||
|
curl -X POST "%s://%s/?a=Foo+Bar&b=FOO+BAR"`,
|
||||||
|
name, version, scheme, r.Host, scheme, r.Host)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func casecmpHandler(w http.ResponseWriter, r *http.Request) {
|
func casecmpHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
a := r.FormValue("a")
|
a := r.FormValue("a")
|
||||||
b := r.FormValue("b")
|
b := r.FormValue("b")
|
||||||
|
|
||||||
resp := "0"
|
resp := "0"
|
||||||
|
|
||||||
if strings.EqualFold(string(a), string(b)) {
|
if strings.EqualFold(string(a), string(b)) {
|
||||||
resp = "1"
|
resp = "1"
|
||||||
}
|
}
|
||||||
fmt.Fprintf(w, resp)
|
_, err := fmt.Fprintf(w, resp)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func rootHandler(w http.ResponseWriter, r *http.Request) {
|
func rootHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
@@ -68,22 +78,29 @@ func rootHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func printVersion() {
|
func printVersion() {
|
||||||
fmt.Println(Name + " " + Version)
|
var buffer bytes.Buffer
|
||||||
|
buffer.WriteString(fmt.Sprintf("%s %s", name, version))
|
||||||
|
|
||||||
|
if commit != "unknown" {
|
||||||
|
buffer.WriteString(fmt.Sprintf(" (%s)", commit))
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(buffer.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
func startServer() {
|
func startServer() {
|
||||||
http.HandleFunc("/", rootHandler)
|
http.HandleFunc("/", rootHandler)
|
||||||
|
|
||||||
if *port == "" {
|
if *portFlag == "" {
|
||||||
envPort := os.Getenv("PORT")
|
envPort := os.Getenv("PORT")
|
||||||
if envPort != "" {
|
if envPort != "" {
|
||||||
*port = envPort
|
*portFlag = envPort
|
||||||
} else {
|
} else {
|
||||||
*port = DefaultPort
|
*portFlag = defaultPort
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
address := *bind + ":" + *port
|
address := *bindFlag + ":" + *portFlag
|
||||||
fmt.Println("Listening on " + address)
|
fmt.Println("Listening on " + address)
|
||||||
log.Fatal(http.ListenAndServe(address, nil))
|
log.Fatal(http.ListenAndServe(address, nil))
|
||||||
}
|
}
|
||||||
@@ -91,7 +108,7 @@ func startServer() {
|
|||||||
func main() {
|
func main() {
|
||||||
kingpin.Parse()
|
kingpin.Parse()
|
||||||
|
|
||||||
if *version {
|
if *versionFlag {
|
||||||
printVersion()
|
printVersion()
|
||||||
} else {
|
} else {
|
||||||
startServer()
|
startServer()
|
||||||
|
|||||||
Reference in New Issue
Block a user