You've already forked directdnsonly-go
Initial Commit.
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
bin
|
||||||
|
vendor
|
||||||
9
AUTHORS.md
Normal file
9
AUTHORS.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Credits
|
||||||
|
|
||||||
|
## Development Lead
|
||||||
|
|
||||||
|
- Aaron Guise [guisea](https://github.com/guisea)
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
None yet. Why not be the first?
|
||||||
81
CONTRIBUTING.md
Normal file
81
CONTRIBUTING.md
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given.
|
||||||
|
|
||||||
|
You can contribute in many ways:
|
||||||
|
|
||||||
|
## Types of Contributions
|
||||||
|
|
||||||
|
### Report Bugs
|
||||||
|
|
||||||
|
Report bugs at https://github.com/guisea/directdnsonly/issues.
|
||||||
|
|
||||||
|
If you are reporting a bug, please include:
|
||||||
|
|
||||||
|
* Your operating system name and version.
|
||||||
|
* Any details about your local setup that might be helpful in troubleshooting.
|
||||||
|
* Detailed steps to reproduce the bug.
|
||||||
|
|
||||||
|
### Fix Bugs
|
||||||
|
|
||||||
|
Look through the GitHub issues for bugs. Anything tagged with "bug"
|
||||||
|
is open to whoever wants to implement it.
|
||||||
|
|
||||||
|
### Implement Features
|
||||||
|
|
||||||
|
Look through the GitHub issues for features. Anything tagged with "feature"
|
||||||
|
is open to whoever wants to implement it.
|
||||||
|
|
||||||
|
### Write Documentation
|
||||||
|
|
||||||
|
directdnsonly could always use more documentation, whether as part of the
|
||||||
|
official directdnsonly docs, in docstrings, or even on the web in blog posts,
|
||||||
|
articles, and such.
|
||||||
|
|
||||||
|
### Submit Feedback
|
||||||
|
|
||||||
|
The best way to send feedback is to file an issue at https://github.com/guisea/directdnsonly/issues.
|
||||||
|
|
||||||
|
If you are proposing a feature:
|
||||||
|
|
||||||
|
* Explain in detail how it would work.
|
||||||
|
* Keep the scope as narrow as possible, to make it easier to implement.
|
||||||
|
* Remember that this is a volunteer-driven project, and that contributions
|
||||||
|
are welcome :)
|
||||||
|
|
||||||
|
## Get Started!
|
||||||
|
|
||||||
|
Ready to contribute? Here's how to set up `directdnsonly` for local development.
|
||||||
|
|
||||||
|
1. Fork the `directdnsonly` repo on GitHub.
|
||||||
|
2. Clone your fork locally::
|
||||||
|
```bash
|
||||||
|
$ git clone git@github.com:your_name_here/directdnsonly.git
|
||||||
|
```
|
||||||
|
3. Create a branch for local development::
|
||||||
|
```bash
|
||||||
|
$ git checkout -b name-of-your-bugfix-or-feature
|
||||||
|
```
|
||||||
|
Now you can make your changes locally.
|
||||||
|
|
||||||
|
4. When you're done making changes, check that your changes pass the tests::
|
||||||
|
```bash
|
||||||
|
$ make test
|
||||||
|
```
|
||||||
|
6. Commit your changes and push your branch to GitHub::
|
||||||
|
```bash
|
||||||
|
$ git add .
|
||||||
|
$ git commit -m "Your detailed description of your changes."
|
||||||
|
$ git push origin name-of-your-bugfix-or-feature
|
||||||
|
```
|
||||||
|
7. Submit a pull request through the GitHub website.
|
||||||
|
|
||||||
|
Pull Request Guidelines
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Before you submit a pull request, check that it meets these guidelines:
|
||||||
|
|
||||||
|
1. The pull request should include tests.
|
||||||
|
2. If the pull request adds functionality, the docs should be updated. Put
|
||||||
|
your new functionality into a function with a docstring, and add the
|
||||||
|
feature to the list in README.md.
|
||||||
40
Dockerfile
Normal file
40
Dockerfile
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# Build Stage
|
||||||
|
FROM lacion/alpine-golang-buildimage:1.13 AS build-stage
|
||||||
|
|
||||||
|
LABEL app="build-directdnsonly"
|
||||||
|
LABEL REPO="https://github.com/guisea/directdnsonly"
|
||||||
|
|
||||||
|
ENV PROJPATH=/go/src/github.com/guisea/directdnsonly
|
||||||
|
|
||||||
|
# Because of https://github.com/docker/docker/issues/14914
|
||||||
|
ENV PATH=$PATH:$GOROOT/bin:$GOPATH/bin
|
||||||
|
|
||||||
|
ADD . /go/src/github.com/guisea/directdnsonly
|
||||||
|
WORKDIR /go/src/github.com/guisea/directdnsonly
|
||||||
|
|
||||||
|
RUN make build-alpine
|
||||||
|
|
||||||
|
# Final Stage
|
||||||
|
FROM lacion/alpine-base-image:latest
|
||||||
|
|
||||||
|
ARG GIT_COMMIT
|
||||||
|
ARG VERSION
|
||||||
|
LABEL REPO="https://github.com/guisea/directdnsonly"
|
||||||
|
LABEL GIT_COMMIT=$GIT_COMMIT
|
||||||
|
LABEL VERSION=$VERSION
|
||||||
|
|
||||||
|
# Because of https://github.com/docker/docker/issues/14914
|
||||||
|
ENV PATH=$PATH:/opt/directdnsonly/bin
|
||||||
|
|
||||||
|
WORKDIR /opt/directdnsonly/bin
|
||||||
|
|
||||||
|
COPY --from=build-stage /go/src/github.com/guisea/directdnsonly/bin/directdnsonly /opt/directdnsonly/bin/
|
||||||
|
RUN chmod +x /opt/directdnsonly/bin/directdnsonly
|
||||||
|
|
||||||
|
# Create appuser
|
||||||
|
RUN adduser -D -g '' directdnsonly
|
||||||
|
USER directdnsonly
|
||||||
|
|
||||||
|
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
|
||||||
|
|
||||||
|
CMD ["/opt/directdnsonly/bin/directdnsonly"]
|
||||||
64
Makefile
Normal file
64
Makefile
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
|
||||||
|
.PHONY: build build-alpine clean test help default
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BIN_NAME=directdnsonly
|
||||||
|
|
||||||
|
VERSION := $(shell grep "const Version " version/version.go | sed -E 's/.*"(.+)"$$/\1/')
|
||||||
|
GIT_COMMIT=$(shell git rev-parse HEAD)
|
||||||
|
GIT_DIRTY=$(shell test -n "`git status --porcelain`" && echo "+CHANGES" || true)
|
||||||
|
BUILD_DATE=$(shell date '+%Y-%m-%d-%H:%M:%S')
|
||||||
|
IMAGE_NAME := "guisea/directdnsonly"
|
||||||
|
|
||||||
|
default: test
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo 'Management commands for directdnsonly:'
|
||||||
|
@echo
|
||||||
|
@echo 'Usage:'
|
||||||
|
@echo ' make build Compile the project.'
|
||||||
|
@echo ' make get-deps runs dep ensure, mostly used for ci.'
|
||||||
|
@echo ' make build-alpine Compile optimized for alpine linux.'
|
||||||
|
@echo ' make package Build final docker image with just the go binary inside'
|
||||||
|
@echo ' make tag Tag image created by package with latest, git commit and version'
|
||||||
|
@echo ' make test Run tests on a compiled project.'
|
||||||
|
@echo ' make push Push tagged images to registry'
|
||||||
|
@echo ' make clean Clean the directory tree.'
|
||||||
|
@echo
|
||||||
|
|
||||||
|
build:
|
||||||
|
@echo "building ${BIN_NAME} ${VERSION}"
|
||||||
|
@echo "GOPATH=${GOPATH}"
|
||||||
|
go build -ldflags "-X github.com/guisea/directdnsonly/version.GitCommit=${GIT_COMMIT}${GIT_DIRTY} -X github.com/guisea/directdnsonly/version.BuildDate=${BUILD_DATE}" -o bin/${BIN_NAME}
|
||||||
|
|
||||||
|
get-deps:
|
||||||
|
dep ensure
|
||||||
|
|
||||||
|
build-alpine:
|
||||||
|
@echo "building ${BIN_NAME} ${VERSION}"
|
||||||
|
@echo "GOPATH=${GOPATH}"
|
||||||
|
go build -ldflags '-w -linkmode external -extldflags "-static" -X github.com/guisea/directdnsonly/version.GitCommit=${GIT_COMMIT}${GIT_DIRTY} -X github.com/guisea/directdnsonly/version.BuildDate=${BUILD_DATE}' -o bin/${BIN_NAME}
|
||||||
|
|
||||||
|
package:
|
||||||
|
@echo "building image ${BIN_NAME} ${VERSION} $(GIT_COMMIT)"
|
||||||
|
docker build --build-arg VERSION=${VERSION} --build-arg GIT_COMMIT=$(GIT_COMMIT) -t $(IMAGE_NAME):local .
|
||||||
|
|
||||||
|
tag:
|
||||||
|
@echo "Tagging: latest ${VERSION} $(GIT_COMMIT)"
|
||||||
|
docker tag $(IMAGE_NAME):local $(IMAGE_NAME):$(GIT_COMMIT)
|
||||||
|
docker tag $(IMAGE_NAME):local $(IMAGE_NAME):${VERSION}
|
||||||
|
docker tag $(IMAGE_NAME):local $(IMAGE_NAME):latest
|
||||||
|
|
||||||
|
push: tag
|
||||||
|
@echo "Pushing docker image to registry: latest ${VERSION} $(GIT_COMMIT)"
|
||||||
|
docker push $(IMAGE_NAME):$(GIT_COMMIT)
|
||||||
|
docker push $(IMAGE_NAME):${VERSION}
|
||||||
|
docker push $(IMAGE_NAME):latest
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@test ! -e bin/${BIN_NAME} || rm bin/${BIN_NAME}
|
||||||
|
|
||||||
|
test:
|
||||||
|
go test ./...
|
||||||
|
|
||||||
18
README.md
Normal file
18
README.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# directdnsonly
|
||||||
|
|
||||||
|
DNSOnly for Directadmin Multi-server
|
||||||
|
|
||||||
|
## Getting started
|
||||||
|
|
||||||
|
This project requires Go to be installed. On OS X with Homebrew you can just run `brew install go`.
|
||||||
|
|
||||||
|
Running it then should be as simple as:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ make
|
||||||
|
$ ./bin/directdnsonly
|
||||||
|
```
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
|
||||||
|
``make test``
|
||||||
58
config/config.go
Normal file
58
config/config.go
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Provider defines a set of read-only methods for accessing the application
|
||||||
|
// configuration params as defined in one of the config files.
|
||||||
|
type Provider interface {
|
||||||
|
ConfigFileUsed() string
|
||||||
|
Get(key string) interface{}
|
||||||
|
GetBool(key string) bool
|
||||||
|
GetDuration(key string) time.Duration
|
||||||
|
GetFloat64(key string) float64
|
||||||
|
GetInt(key string) int
|
||||||
|
GetInt64(key string) int64
|
||||||
|
GetSizeInBytes(key string) uint
|
||||||
|
GetString(key string) string
|
||||||
|
GetStringMap(key string) map[string]interface{}
|
||||||
|
GetStringMapString(key string) map[string]string
|
||||||
|
GetStringMapStringSlice(key string) map[string][]string
|
||||||
|
GetStringSlice(key string) []string
|
||||||
|
GetTime(key string) time.Time
|
||||||
|
InConfig(key string) bool
|
||||||
|
IsSet(key string) bool
|
||||||
|
}
|
||||||
|
|
||||||
|
var defaultConfig *viper.Viper
|
||||||
|
|
||||||
|
// Config returns a default config providers
|
||||||
|
func Config() Provider {
|
||||||
|
return defaultConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoadConfigProvider returns a configured viper instance
|
||||||
|
func LoadConfigProvider(appName string) Provider {
|
||||||
|
return readViperConfig(appName)
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
defaultConfig = readViperConfig("DIRECTDNSONLY")
|
||||||
|
}
|
||||||
|
|
||||||
|
func readViperConfig(appName string) *viper.Viper {
|
||||||
|
v := viper.New()
|
||||||
|
v.SetEnvPrefix(appName)
|
||||||
|
v.AutomaticEnv()
|
||||||
|
|
||||||
|
// global defaults
|
||||||
|
|
||||||
|
v.SetDefault("json_logs", false)
|
||||||
|
v.SetDefault("loglevel", "debug")
|
||||||
|
|
||||||
|
|
||||||
|
return v
|
||||||
|
}
|
||||||
7
go.mod
Normal file
7
go.mod
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
module github.com/guisea/directdnsonly
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/sirupsen/logrus v1.4.1
|
||||||
|
|
||||||
|
github.com/spf13/viper v1.3.2
|
||||||
|
)
|
||||||
216
log/log.go
Normal file
216
log/log.go
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
package log
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
"github.com/guisea/directdnsonly/config"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Logger defines a set of methods for writing application logs. Derived from and
|
||||||
|
// inspired by logrus.Entry.
|
||||||
|
type Logger interface {
|
||||||
|
Debug(args ...interface{})
|
||||||
|
Debugf(format string, args ...interface{})
|
||||||
|
Debugln(args ...interface{})
|
||||||
|
Error(args ...interface{})
|
||||||
|
Errorf(format string, args ...interface{})
|
||||||
|
Errorln(args ...interface{})
|
||||||
|
Fatal(args ...interface{})
|
||||||
|
Fatalf(format string, args ...interface{})
|
||||||
|
Fatalln(args ...interface{})
|
||||||
|
Info(args ...interface{})
|
||||||
|
Infof(format string, args ...interface{})
|
||||||
|
Infoln(args ...interface{})
|
||||||
|
Panic(args ...interface{})
|
||||||
|
Panicf(format string, args ...interface{})
|
||||||
|
Panicln(args ...interface{})
|
||||||
|
Print(args ...interface{})
|
||||||
|
Printf(format string, args ...interface{})
|
||||||
|
Println(args ...interface{})
|
||||||
|
Warn(args ...interface{})
|
||||||
|
Warnf(format string, args ...interface{})
|
||||||
|
Warning(args ...interface{})
|
||||||
|
Warningf(format string, args ...interface{})
|
||||||
|
Warningln(args ...interface{})
|
||||||
|
Warnln(args ...interface{})
|
||||||
|
}
|
||||||
|
|
||||||
|
var defaultLogger *logrus.Logger
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
defaultLogger = newLogrusLogger(config.Config())
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// NewLogger returns a configured logrus instance
|
||||||
|
func NewLogger(cfg config.Provider) *logrus.Logger {
|
||||||
|
return newLogrusLogger(cfg)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func newLogrusLogger(cfg config.Provider) *logrus.Logger {
|
||||||
|
|
||||||
|
l := logrus.New()
|
||||||
|
|
||||||
|
if cfg.GetBool("json_logs") {
|
||||||
|
l.Formatter = new(logrus.JSONFormatter)
|
||||||
|
}
|
||||||
|
l.Out = os.Stderr
|
||||||
|
|
||||||
|
switch cfg.GetString("loglevel") {
|
||||||
|
case "debug":
|
||||||
|
l.Level = logrus.DebugLevel
|
||||||
|
case "warning":
|
||||||
|
l.Level = logrus.WarnLevel
|
||||||
|
case "info":
|
||||||
|
l.Level = logrus.InfoLevel
|
||||||
|
default:
|
||||||
|
l.Level = logrus.DebugLevel
|
||||||
|
}
|
||||||
|
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fields is a map string interface to define fields in the structured log
|
||||||
|
type Fields map[string]interface{}
|
||||||
|
|
||||||
|
// With allow us to define fields in out structured logs
|
||||||
|
func (f Fields) With(k string, v interface{}) Fields {
|
||||||
|
f[k] = v
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithFields allow us to define fields in out structured logs
|
||||||
|
func (f Fields) WithFields(f2 Fields) Fields {
|
||||||
|
for k, v := range f2 {
|
||||||
|
f[k] = v
|
||||||
|
}
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithFields allow us to define fields in out structured logs
|
||||||
|
func WithFields(fields Fields) Logger {
|
||||||
|
return defaultLogger.WithFields(logrus.Fields(fields))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Debug package-level convenience method.
|
||||||
|
func Debug(args ...interface{}) {
|
||||||
|
defaultLogger.Debug(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Debugf package-level convenience method.
|
||||||
|
func Debugf(format string, args ...interface{}) {
|
||||||
|
defaultLogger.Debugf(format, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Debugln package-level convenience method.
|
||||||
|
func Debugln(args ...interface{}) {
|
||||||
|
defaultLogger.Debugln(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error package-level convenience method.
|
||||||
|
func Error(args ...interface{}) {
|
||||||
|
defaultLogger.Error(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Errorf package-level convenience method.
|
||||||
|
func Errorf(format string, args ...interface{}) {
|
||||||
|
defaultLogger.Errorf(format, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Errorln package-level convenience method.
|
||||||
|
func Errorln(args ...interface{}) {
|
||||||
|
defaultLogger.Errorln(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fatal package-level convenience method.
|
||||||
|
func Fatal(args ...interface{}) {
|
||||||
|
defaultLogger.Fatal(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fatalf package-level convenience method.
|
||||||
|
func Fatalf(format string, args ...interface{}) {
|
||||||
|
defaultLogger.Fatalf(format, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fatalln package-level convenience method.
|
||||||
|
func Fatalln(args ...interface{}) {
|
||||||
|
defaultLogger.Fatalln(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Info package-level convenience method.
|
||||||
|
func Info(args ...interface{}) {
|
||||||
|
defaultLogger.Info(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Infof package-level convenience method.
|
||||||
|
func Infof(format string, args ...interface{}) {
|
||||||
|
defaultLogger.Infof(format, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Infoln package-level convenience method.
|
||||||
|
func Infoln(args ...interface{}) {
|
||||||
|
defaultLogger.Infoln(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Panic package-level convenience method.
|
||||||
|
func Panic(args ...interface{}) {
|
||||||
|
defaultLogger.Panic(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Panicf package-level convenience method.
|
||||||
|
func Panicf(format string, args ...interface{}) {
|
||||||
|
defaultLogger.Panicf(format, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Panicln package-level convenience method.
|
||||||
|
func Panicln(args ...interface{}) {
|
||||||
|
defaultLogger.Panicln(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print package-level convenience method.
|
||||||
|
func Print(args ...interface{}) {
|
||||||
|
defaultLogger.Print(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Printf package-level convenience method.
|
||||||
|
func Printf(format string, args ...interface{}) {
|
||||||
|
defaultLogger.Printf(format, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Println package-level convenience method.
|
||||||
|
func Println(args ...interface{}) {
|
||||||
|
defaultLogger.Println(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Warn package-level convenience method.
|
||||||
|
func Warn(args ...interface{}) {
|
||||||
|
defaultLogger.Warn(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Warnf package-level convenience method.
|
||||||
|
func Warnf(format string, args ...interface{}) {
|
||||||
|
defaultLogger.Warnf(format, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Warning package-level convenience method.
|
||||||
|
func Warning(args ...interface{}) {
|
||||||
|
defaultLogger.Warning(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Warningf package-level convenience method.
|
||||||
|
func Warningf(format string, args ...interface{}) {
|
||||||
|
defaultLogger.Warningf(format, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Warningln package-level convenience method.
|
||||||
|
func Warningln(args ...interface{}) {
|
||||||
|
defaultLogger.Warningln(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Warnln package-level convenience method.
|
||||||
|
func Warnln(args ...interface{}) {
|
||||||
|
defaultLogger.Warnln(args...)
|
||||||
|
}
|
||||||
26
main.go
Normal file
26
main.go
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"github.com/guisea/directdnsonly/version"
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
|
||||||
|
versionFlag := flag.Bool("version", false, "Version")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
if *versionFlag {
|
||||||
|
fmt.Println("Build Date:", version.BuildDate)
|
||||||
|
fmt.Println("Git Commit:", version.GitCommit)
|
||||||
|
fmt.Println("Version:", version.Version)
|
||||||
|
fmt.Println("Go Version:", version.GoVersion)
|
||||||
|
fmt.Println("OS / Arch:", version.OsArch)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println("Hello.")
|
||||||
|
|
||||||
|
}
|
||||||
21
version/version.go
Normal file
21
version/version.go
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package version
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GitCommit returns the git commit that was compiled. This will be filled in by the compiler.
|
||||||
|
var GitCommit string
|
||||||
|
|
||||||
|
// Version returns the main version number that is being run at the moment.
|
||||||
|
const Version = "0.1.0"
|
||||||
|
|
||||||
|
// BuildDate returns the date the binary was built
|
||||||
|
var BuildDate = ""
|
||||||
|
|
||||||
|
// GoVersion returns the version of the go runtime used to compile the binary
|
||||||
|
var GoVersion = runtime.Version()
|
||||||
|
|
||||||
|
// OsArch returns the os and arch used to build the binary
|
||||||
|
var OsArch = fmt.Sprintf("%s %s", runtime.GOOS, runtime.GOARCH)
|
||||||
Reference in New Issue
Block a user