-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
initiate the structure of the bomservice with parser and handler (#2)
- Loading branch information
Showing
32 changed files
with
3,142 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,6 +4,9 @@ | |
*.dll | ||
*.so | ||
*.dylib | ||
*.DS_Store | ||
|
||
hollow-bomservice | ||
|
||
# Test binary, built with `go test -c` | ||
*.test | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
FROM alpine:3.18.0 | ||
|
||
ENTRYPOINT ["/usr/sbin/hollow-bomservice"] | ||
|
||
COPY hollow-bomservice /usr/sbin/hollow-bomservice | ||
RUN chmod +x /usr/sbin/hollow-bomservice |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
export DOCKER_BUILDKIT=1 | ||
LDFLAG_LOCATION := github.com/metal-toolbox/hollow-bomservice/internal/version | ||
GIT_COMMIT := $(shell git rev-parse --short HEAD) | ||
GIT_BRANCH := $(shell git symbolic-ref -q --short HEAD) | ||
GIT_SUMMARY := $(shell git describe --tags --dirty --always) | ||
VERSION := $(shell git describe --tags 2> /dev/null) | ||
BUILD_DATE := $(shell date +%s) | ||
GIT_COMMIT_FULL := $(shell git rev-parse HEAD) | ||
GO_VERSION := $(shell expr `go version |cut -d ' ' -f3 |cut -d. -f2` \>= 16) | ||
DOCKER_IMAGE := "ghcr.io/metal-toolbox/hollow-bomservice" | ||
REPO := "https://github.com/metal-toolbox/hollow-bomservice.git" | ||
|
||
.DEFAULT_GOAL := help | ||
|
||
## lint | ||
lint: | ||
golangci-lint run | ||
|
||
## Go test | ||
test: lint | ||
CGO_ENABLED=0 go test -timeout 1m -v -covermode=atomic ./... | ||
|
||
|
||
## generate mock store - invoke when changes are made to the store interface | ||
gen-store-mock: | ||
go install github.com/golang/mock/[email protected] | ||
mockgen -package=mock -source=internal/store/interface.go > internal/store/mock/mock.go | ||
|
||
## build osx bin | ||
build-osx: | ||
ifeq ($(GO_VERSION), 0) | ||
$(error build requies go version 1.17.n or higher) | ||
endif | ||
GOOS=darwin GOARCH=amd64 go build -o hollow-bomservice \ | ||
-ldflags \ | ||
"-X $(LDFLAG_LOCATION).GitCommit=$(GIT_COMMIT) \ | ||
-X $(LDFLAG_LOCATION).GitBranch=$(GIT_BRANCH) \ | ||
-X $(LDFLAG_LOCATION).GitSummary=$(GIT_SUMMARY) \ | ||
-X $(LDFLAG_LOCATION).AppVersion=$(VERSION) \ | ||
-X $(LDFLAG_LOCATION).BuildDate=$(BUILD_DATE)" | ||
|
||
|
||
|
||
## Build linux bin | ||
build-linux: | ||
ifeq ($(GO_VERSION), 0) | ||
$(error build requies go version 1.20.x+ or higher) | ||
endif | ||
GOOS=linux GOARCH=amd64 go build -o hollow-bomservice \ | ||
-ldflags \ | ||
"-X $(LDFLAG_LOCATION).GitCommit=$(GIT_COMMIT) \ | ||
-X $(LDFLAG_LOCATION).GitBranch=$(GIT_BRANCH) \ | ||
-X $(LDFLAG_LOCATION).GitSummary=$(GIT_SUMMARY) \ | ||
-X $(LDFLAG_LOCATION).AppVersion=$(VERSION) \ | ||
-X $(LDFLAG_LOCATION).BuildDate=$(BUILD_DATE)" | ||
|
||
|
||
## build docker image and tag as ghcr.io/metal-toolbox/hollow-bomservice:latest | ||
build-image: build-linux | ||
@echo ">>>> NOTE: You may want to execute 'make build-image-nocache' depending on the Docker stages changed" | ||
docker build --rm=true -f Dockerfile -t ${DOCKER_IMAGE}:latest . \ | ||
--label org.label-schema.schema-version=1.0 \ | ||
--label org.label-schema.vcs-ref=$(GIT_COMMIT_FULL) \ | ||
--label org.label-schema.vcs-url=$(REPO) | ||
|
||
## build and push devel docker image to KIND image repo | ||
push-image-devel: build-image | ||
docker tag ${DOCKER_IMAGE}:latest localhost:5001/hollow-bomservice:latest | ||
docker push localhost:5001/hollow-bomservice:latest | ||
kind load docker-image localhost:5001/hollow-bomservice:latest | ||
|
||
## push docker image | ||
push-image: | ||
docker push ${DOCKER_IMAGE}:latest | ||
|
||
|
||
# https://gist.github.com/prwhite/8168133 | ||
# COLORS | ||
GREEN := $(shell tput -Txterm setaf 2) | ||
YELLOW := $(shell tput -Txterm setaf 3) | ||
WHITE := $(shell tput -Txterm setaf 7) | ||
RESET := $(shell tput -Txterm sgr0) | ||
|
||
|
||
TARGET_MAX_CHAR_NUM=20 | ||
## Show help | ||
help: | ||
@echo '' | ||
@echo 'Usage:' | ||
@echo ' ${YELLOW}make${RESET} ${GREEN}<target>${RESET}' | ||
@echo '' | ||
@echo 'Targets:' | ||
@awk '/^[a-zA-Z\-\\_0-9]+:/ { \ | ||
helpMessage = match(lastLine, /^## (.*)/); \ | ||
if (helpMessage) { \ | ||
helpCommand = substr($$1, 0, index($$1, ":")-1); \ | ||
helpMessage = substr(lastLine, RSTART + 3, RLENGTH); \ | ||
printf " ${YELLOW}%-$(TARGET_MAX_CHAR_NUM)s${RESET} ${GREEN}%s${RESET}\n", helpCommand, helpMessage; \ | ||
} \ | ||
} \ | ||
{ lastLine = $$0 }' $(MAKEFILE_LIST) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
/* | ||
Copyright © 2022 Metal toolbox authors <> | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
*/ | ||
package cmd | ||
|
||
import ( | ||
"fmt" | ||
"os" | ||
|
||
"github.com/spf13/cobra" | ||
) | ||
|
||
var ( | ||
logLevel string | ||
cfgFile string | ||
) | ||
|
||
// rootCmd represents the base command when called without any subcommands | ||
var rootCmd = &cobra.Command{ | ||
Use: "hollow-bomservice", | ||
Short: "server hollow bomservice", | ||
} | ||
|
||
// 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() { | ||
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "bomservice.yaml", "default is ./bomservice.yaml") | ||
rootCmd.PersistentFlags().StringVar(&logLevel, "log-level", "info", "set logging level - debug, trace") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
package cmd | ||
|
||
import ( | ||
"context" | ||
"errors" | ||
"log" | ||
"net/http" | ||
"time" | ||
|
||
"github.com/metal-toolbox/hollow-bomservice/internal/app" | ||
"github.com/metal-toolbox/hollow-bomservice/internal/model" | ||
"github.com/metal-toolbox/hollow-bomservice/internal/server" | ||
"github.com/metal-toolbox/hollow-bomservice/internal/store" | ||
"github.com/spf13/cobra" | ||
) | ||
|
||
var ( | ||
shutdownTimeout = 10 * time.Second | ||
) | ||
|
||
// install server command | ||
var cmdServer = &cobra.Command{ | ||
Use: "server", | ||
Short: "Run hollow bomservice server", | ||
Run: func(cmd *cobra.Command, args []string) { | ||
app, termCh, err := app.New(model.AppKindServer, cfgFile, model.LogLevel(logLevel)) | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
|
||
ctx, cancel := context.WithCancel(cmd.Context()) | ||
defer cancel() | ||
repository, err := store.NewStore(ctx, app.Config, app.Logger) | ||
if err != nil { | ||
app.Logger.Fatal(err) | ||
} | ||
|
||
options := []server.Option{ | ||
server.WithLogger(app.Logger), | ||
server.WithListenAddress(app.Config.ListenAddress), | ||
server.WithStore(repository), | ||
server.WithAuthMiddlewareConfig(app.Config.APIServerJWTAuth), | ||
} | ||
|
||
srv := server.New(options...) | ||
go func() { | ||
if err := srv.ListenAndServe(); err != nil && errors.Is(err, http.ErrServerClosed) { | ||
app.Logger.Fatal(err) | ||
} | ||
}() | ||
|
||
// sit around for term signal | ||
<-termCh | ||
app.Logger.Info("got TERM signal, shutting down server...") | ||
|
||
sCtx, sCancel := context.WithTimeout(ctx, shutdownTimeout) | ||
defer sCancel() | ||
if err := srv.Shutdown(sCtx); err != nil { | ||
app.Logger.Fatal("server shutdown error:", err) | ||
} | ||
}, | ||
} | ||
|
||
// install command flags | ||
func init() { | ||
rootCmd.AddCommand(cmdServer) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
module github.com/metal-toolbox/hollow-bomservice | ||
|
||
go 1.21.0 | ||
|
||
require ( | ||
github.com/banzaicloud/logrus-runtime-formatter v0.0.0-20190729070250-5ae5475bae5e | ||
github.com/coreos/go-oidc v2.2.1+incompatible | ||
github.com/gin-gonic/gin v1.9.1 | ||
github.com/golang/mock v1.6.0 | ||
github.com/hashicorp/go-retryablehttp v0.7.4 | ||
github.com/pkg/errors v0.9.1 | ||
github.com/sirupsen/logrus v1.9.3 | ||
github.com/spf13/cobra v1.7.0 | ||
github.com/spf13/viper v1.16.0 | ||
github.com/tealeg/xlsx v1.0.5 | ||
go.hollow.sh/serverservice v0.16.1 | ||
go.hollow.sh/toolbox v0.6.1 | ||
golang.org/x/oauth2 v0.11.0 | ||
) | ||
|
||
require ( | ||
github.com/bytedance/sonic v1.10.0 // indirect | ||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect | ||
github.com/chenzhuoyu/iasm v0.9.0 // indirect | ||
github.com/cockroachdb/cockroach-go/v2 v2.3.5 // indirect | ||
github.com/davecgh/go-spew v1.1.1 // indirect | ||
github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05 // indirect | ||
github.com/friendsofgo/errors v0.9.2 // indirect | ||
github.com/fsnotify/fsnotify v1.6.0 // indirect | ||
github.com/gabriel-vasile/mimetype v1.4.2 // indirect | ||
github.com/gin-contrib/sse v0.1.0 // indirect | ||
github.com/go-logr/logr v1.2.4 // indirect | ||
github.com/go-logr/stdr v1.2.2 // indirect | ||
github.com/go-playground/locales v0.14.1 // indirect | ||
github.com/go-playground/universal-translator v0.18.1 // indirect | ||
github.com/go-playground/validator/v10 v10.15.0 // indirect | ||
github.com/goccy/go-json v0.10.2 // indirect | ||
github.com/gofrs/uuid v4.4.0+incompatible // indirect | ||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | ||
github.com/golang/protobuf v1.5.3 // indirect | ||
github.com/google/uuid v1.3.1 // indirect | ||
github.com/googleapis/gax-go/v2 v2.12.0 // indirect | ||
github.com/gosimple/slug v1.13.1 // indirect | ||
github.com/gosimple/unidecode v1.0.1 // indirect | ||
github.com/hashicorp/errwrap v1.1.0 // indirect | ||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect | ||
github.com/hashicorp/go-multierror v1.1.1 // indirect | ||
github.com/hashicorp/hcl v1.0.0 // indirect | ||
github.com/inconshreveable/mousetrap v1.1.0 // indirect | ||
github.com/jackc/chunkreader/v2 v2.0.1 // indirect | ||
github.com/jackc/pgconn v1.14.1 // indirect | ||
github.com/jackc/pgio v1.0.0 // indirect | ||
github.com/jackc/pgpassfile v1.0.0 // indirect | ||
github.com/jackc/pgproto3/v2 v2.3.2 // indirect | ||
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect | ||
github.com/jackc/pgtype v1.14.0 // indirect | ||
github.com/jackc/pgx/v4 v4.18.1 // indirect | ||
github.com/jmoiron/sqlx v1.3.5 // indirect | ||
github.com/json-iterator/go v1.1.12 // indirect | ||
github.com/klauspost/compress v1.16.7 // indirect | ||
github.com/klauspost/cpuid/v2 v2.2.5 // indirect | ||
github.com/leodido/go-urn v1.2.4 // indirect | ||
github.com/lib/pq v1.10.9 // indirect | ||
github.com/magiconair/properties v1.8.7 // indirect | ||
github.com/mattn/go-colorable v0.1.13 // indirect | ||
github.com/mattn/go-isatty v0.0.19 // indirect | ||
github.com/mitchellh/mapstructure v1.5.0 // indirect | ||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | ||
github.com/modern-go/reflect2 v1.0.2 // indirect | ||
github.com/nats-io/jwt/v2 v2.4.0 // indirect | ||
github.com/nats-io/nats.go v1.28.0 // indirect | ||
github.com/nats-io/nkeys v0.4.4 // indirect | ||
github.com/nats-io/nuid v1.0.1 // indirect | ||
github.com/pelletier/go-toml/v2 v2.0.9 // indirect | ||
github.com/pmezard/go-difflib v1.0.0 // indirect | ||
github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 // indirect | ||
github.com/rogpeppe/go-internal v1.10.0 // indirect | ||
github.com/spf13/afero v1.9.5 // indirect | ||
github.com/spf13/cast v1.5.1 // indirect | ||
github.com/spf13/jwalterweatherman v1.1.0 // indirect | ||
github.com/spf13/pflag v1.0.5 // indirect | ||
github.com/stretchr/testify v1.8.4 // indirect | ||
github.com/subosito/gotenv v1.6.0 // indirect | ||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect | ||
github.com/ugorji/go/codec v1.2.11 // indirect | ||
github.com/volatiletech/inflect v0.0.1 // indirect | ||
github.com/volatiletech/null v8.0.0+incompatible // indirect | ||
github.com/volatiletech/null/v8 v8.1.2 // indirect | ||
github.com/volatiletech/randomize v0.0.1 // indirect | ||
github.com/volatiletech/sqlboiler v3.7.1+incompatible // indirect | ||
github.com/volatiletech/sqlboiler/v4 v4.15.0 // indirect | ||
github.com/volatiletech/strmangle v0.0.5 // indirect | ||
go.opencensus.io v0.24.0 // indirect | ||
go.opentelemetry.io/otel v1.17.0 // indirect | ||
go.opentelemetry.io/otel/metric v1.17.0 // indirect | ||
go.opentelemetry.io/otel/trace v1.17.0 // indirect | ||
go.uber.org/multierr v1.11.0 // indirect | ||
go.uber.org/zap v1.25.0 // indirect | ||
gocloud.dev v0.33.0 // indirect | ||
golang.org/x/arch v0.4.0 // indirect | ||
golang.org/x/crypto v0.12.0 // indirect | ||
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect | ||
golang.org/x/net v0.14.0 // indirect | ||
golang.org/x/sys v0.11.0 // indirect | ||
golang.org/x/text v0.12.0 // indirect | ||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect | ||
google.golang.org/api v0.137.0 // indirect | ||
google.golang.org/appengine v1.6.7 // indirect | ||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230815205213-6bfd019c3878 // indirect | ||
google.golang.org/grpc v1.57.0 // indirect | ||
google.golang.org/protobuf v1.31.0 // indirect | ||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect | ||
gopkg.in/ini.v1 v1.67.0 // indirect | ||
gopkg.in/square/go-jose.v2 v2.6.0 // indirect | ||
gopkg.in/yaml.v3 v3.0.1 // indirect | ||
) |
Oops, something went wrong.