diff --git a/Dockerfile b/Dockerfile index 9e93d32..e1dea52 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM centurylink/ca-certs +FROM golang:1.11-stretch ENV VERSION=1.0 -ADD ./build/hetzner-sb-notifier_linux_amd64_1.0 / -ENTRYPOINT ["/hetzner-sb-notifier_linux_amd64_1.0"] \ No newline at end of file +ADD ./builds/hetzner-sb-notifier_linux_amd64_$VERSION /root/hetzner-sb-notifier +ENTRYPOINT ["/root/hetzner-sb-notifier"] \ No newline at end of file diff --git a/Dockerfile_only_build b/Dockerfile_only_build new file mode 100644 index 0000000..3f60896 --- /dev/null +++ b/Dockerfile_only_build @@ -0,0 +1,10 @@ +FROM golang:1.11-stretch + +RUN mkdir /hetzner-sb-notifier +COPY . /hetzner-sb-notifier/ +WORKDIR /hetzner-sb-notifier + +RUN chmod +x build.sh + +RUN /hetzner-sb-notifier/build.sh linux +RUN ls -lth /hetzner-sb-notifier/builds \ No newline at end of file diff --git a/Dockerfile_with_build b/Dockerfile_with_build index 9ae0f43..44e1691 100644 --- a/Dockerfile_with_build +++ b/Dockerfile_with_build @@ -9,6 +9,6 @@ RUN chmod +x build.sh RUN /hetzner-sb-notifier/build.sh linux RUN ls -lth /hetzner-sb-notifier/builds -FROM centurylink/ca-certs +FROM golang:alpine COPY --from=builder /hetzner-sb-notifier/builds /root ENTRYPOINT ["/root/hetzner-sb-notifier_linux_amd64_1.0"] \ No newline at end of file diff --git a/build.sh b/build.sh index efb16b5..ee55ada 100644 --- a/build.sh +++ b/build.sh @@ -7,6 +7,7 @@ GOARCH=amd64 echo "Fetching dependencies" go get ./... echo "Building project" -mkdir builds -go build -a -installsuffix cgo -o ./builds/hetzner-sb-notifier_${GOOS}_${GOARCH}_${VERSION} . +mkdir -p builds +go build -o ./builds/hetzner-sb-notifier_${GOOS}_${GOARCH}_${VERSION} . +#go build -a -installsuffix cgo -o ./builds/hetzner-sb-notifier_${GOOS}_${GOARCH}_${VERSION} . echo "Done" diff --git a/build_gox.sh b/build_gox.sh new file mode 100644 index 0000000..3dfd5e7 --- /dev/null +++ b/build_gox.sh @@ -0,0 +1,10 @@ +VERSION=1.0 +GO111MODULE=on + +echo "Fetching dependencies" +go get ./... +go get github.com/mitchellh/gox +echo "Building project" +mkdir -p builds +gox -output="builds/hetzner-sb-notifier_{{.OS}}_{{.Arch}}_$VERSION" +echo "Done" diff --git a/go.mod b/go.mod index 8c35265..ec28d39 100644 --- a/go.mod +++ b/go.mod @@ -1,15 +1 @@ module github.com/mrahbar/my-bloody-hetzner-sb-notifier - -require ( - cloud.google.com/go v0.31.0 - github.com/golang/protobuf v1.2.0 - github.com/googleapis/gax-go v2.0.0+incompatible // indirect - github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7 // indirect - github.com/mitchellh/gox v0.4.0 // indirect - github.com/mitchellh/iochan v1.0.0 // indirect - go.opencensus.io v0.18.0 // indirect - golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519 // indirect - google.golang.org/api v0.0.0-20181021000519-a2651947f503 // indirect - google.golang.org/genproto v0.0.0-20181016170114-94acd270e44e - google.golang.org/grpc v1.16.0 // indirect -) diff --git a/main.go b/main.go index 091443b..1005e90 100644 --- a/main.go +++ b/main.go @@ -3,10 +3,10 @@ package main import ( "flag" "fmt" - "github.com/iancoleman/strcase" "github.com/mrahbar/my-bloody-hetzner-sb-notifier/client" "github.com/mrahbar/my-bloody-hetzner-sb-notifier/crawler" "github.com/mrahbar/my-bloody-hetzner-sb-notifier/hetzner" + "github.com/mrahbar/my-bloody-hetzner-sb-notifier/strcase" "github.com/mrahbar/my-bloody-hetzner-sb-notifier/writer" "io" "net/http" diff --git a/strcase/camel.go b/strcase/camel.go new file mode 100644 index 0000000..7c2e2b7 --- /dev/null +++ b/strcase/camel.go @@ -0,0 +1,75 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2015 Ian Coleman + * Copyright (c) 2018 Ma_124, + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, Subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or Substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package strcase + +import ( + "strings" +) + +// Converts a string to CamelCase +func toCamelInitCase(s string, initCase bool) string { + s = addWordBoundariesToNumbers(s) + s = strings.Trim(s, " ") + n := "" + capNext := initCase + for _, v := range s { + if v >= 'A' && v <= 'Z' { + n += string(v) + } + if v >= '0' && v <= '9' { + n += string(v) + } + if v >= 'a' && v <= 'z' { + if capNext { + n += strings.ToUpper(string(v)) + } else { + n += string(v) + } + } + if v == '_' || v == ' ' || v == '-' { + capNext = true + } else { + capNext = false + } + } + return n +} + +// Converts a string to CamelCase +func ToCamel(s string) string { + return toCamelInitCase(s, true) +} + +// Converts a string to lowerCamelCase +func ToLowerCamel(s string) string { + if s == "" { + return s + } + if r := rune(s[0]); r >= 'A' && r <= 'Z' { + s = strings.ToLower(string(r)) + s[1:] + } + return toCamelInitCase(s, false) +} diff --git a/strcase/numbers.go b/strcase/numbers.go new file mode 100644 index 0000000..fdf07cb --- /dev/null +++ b/strcase/numbers.go @@ -0,0 +1,38 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2015 Ian Coleman + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, Subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or Substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package strcase + +import ( + "regexp" +) + +var numberSequence = regexp.MustCompile(`([a-zA-Z])(\d+)([a-zA-Z]?)`) +var numberReplacement = []byte(`$1 $2 $3`) + +func addWordBoundariesToNumbers(s string) string { + b := []byte(s) + b = numberSequence.ReplaceAll(b, numberReplacement) + return string(b) +}