Initial Commit.

This commit is contained in:
nicksherron 2020-02-07 03:02:18 -05:00
commit 1ea90f91aa
12 changed files with 329 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
bin
vendor

9
.travis.yml Normal file
View file

@ -0,0 +1,9 @@
language: go
go:
- 1.8.x
- master
install:
- go get -v github.com/Masterminds/glide
- make get-deps

9
AUTHORS.md Normal file
View file

@ -0,0 +1,9 @@
# Credits
## Development Lead
- Nick Sherron [nicksherron](https://github.com/nicksherron)
## Contributors
None yet. Why not be the first?

81
CONTRIBUTING.md Normal file
View 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/nicksherron/bashhub-server/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
bashhub-server could always use more documentation, whether as part of the
official bashhub-server 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/nicksherron/bashhub-server/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 `bashhub-server` for local development.
1. Fork the `bashhub-server` repo on GitHub.
2. Clone your fork locally::
```bash
$ git clone git@github.com:your_name_here/bashhub-server.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
View file

@ -0,0 +1,40 @@
# Build Stage
FROM nicksherron/bashhub-server-build:1.13 AS build-stage
LABEL app="build-bashhub-server"
LABEL REPO="https://github.com/nicksherron/bashhub-server"
ENV PROJPATH=/go/src/github.com/nicksherron/bashhub-server
# Because of https://github.com/docker/docker/issues/14914
ENV PATH=$PATH:$GOROOT/bin:$GOPATH/bin
ADD . /go/src/github.com/nicksherron/bashhub-server
WORKDIR /go/src/github.com/nicksherron/bashhub-server
RUN make build-alpine
# Final Stage
FROM nicksherron/bashhub-server
ARG GIT_COMMIT
ARG VERSION
LABEL REPO="https://github.com/nicksherron/bashhub-server"
LABEL GIT_COMMIT=$GIT_COMMIT
LABEL VERSION=$VERSION
# Because of https://github.com/docker/docker/issues/14914
ENV PATH=$PATH:/opt/bashhub-server/bin
WORKDIR /opt/bashhub-server/bin
COPY --from=build-stage /go/src/github.com/nicksherron/bashhub-server/bin/bashhub-server /opt/bashhub-server/bin/
RUN chmod +x /opt/bashhub-server/bin/bashhub-server
# Create appuser
RUN adduser -D -g '' bashhub-server
USER bashhub-server
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
CMD ["/opt/bashhub-server/bin/bashhub-server"]

61
Makefile Normal file
View file

@ -0,0 +1,61 @@
.PHONY: build build-alpine clean test help default
BIN_NAME=bashhub-server
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 := "nicksherron/bashhub-server"
default: test
help:
@echo 'Management commands for bashhub-server:'
@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/nicksherron/bashhub-server/version.GitCommit=${GIT_COMMIT}${GIT_DIRTY} -X github.com/nicksherron/bashhub-server/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/nicksherron/bashhub-server/version.GitCommit=${GIT_COMMIT}${GIT_DIRTY} -X github.com/nicksherron/bashhub-server/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
View file

@ -0,0 +1,18 @@
# bashhub-server
Private BashHub 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/bashhub-server
```
### Testing
``make test``

43
cmd/root.go Normal file
View file

@ -0,0 +1,43 @@
package cmd
import (
"fmt"
"os"
"github.com/spf13/cobra"
)
var cfgFile string
// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "generated code example",
Short: "A brief description of your application",
Long: `A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
// Uncomment the following line if your bare application
// has an action associated with it:
// Run: func(cmd *cobra.Command, args []string) { },
}
// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute() {
if err := rootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}
func init() {
cobra.OnInitialize()
// Cobra also supports local flags, which will only run
// when this action is called directly.
// rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}

25
cmd/version.go Normal file
View file

@ -0,0 +1,25 @@
package cmd
import (
"fmt"
"github.com/lacion/cookiecutter_golang_example/version"
"github.com/spf13/cobra"
)
// versionCmd represents the version command
var versionCmd = &cobra.Command{
Use: "version",
Short: "Print the version number of generated code example",
Long: `All software has versions. This is generated code example`,
Run: func(cmd *cobra.Command, args []string) {
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)
},
}
func init() {
rootCmd.AddCommand(versionCmd)
}

7
go.mod Normal file
View file

@ -0,0 +1,7 @@
module github.com/nicksherron/bashhub-server
require (
github.com/spf13/cobra v0.0.3
)

13
main.go Normal file
View file

@ -0,0 +1,13 @@
package main
import (
"github.com/nicksherron/bashhub-server/cmd"
)
func main() {
cmd.Execute()
}

21
version/version.go Normal file
View 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)