Skip to content

Commit

Permalink
Merge pull request #102 from schemahero/kubectl-plugin
Browse files Browse the repository at this point in the history
Add a schemahero kubectl plugin and v1alpha3
  • Loading branch information
marccampbell committed Jan 14, 2020
2 parents d8992a1 + 8d397c9 commit cc0348f
Show file tree
Hide file tree
Showing 97 changed files with 4,162 additions and 1,508 deletions.
28 changes: 28 additions & 0 deletions .github/workflows/build-and-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: "Build and test"
on: [push]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-go@v1
with:
go-version: '1.12.14'
- name: setup goenv
run: |
echo "::set-env name=GOPATH::$(go env GOPATH)"
echo "::add-path::$(go env GOPATH)/bin"
shell: bash
- uses: actions/checkout@master
- name: setup kubebuilder
run: |
echo "::add-path::/usr/local/kubebuilder/bin"
- run: make kubebuilder all
- uses: actions/upload-artifact@v1
with:
name: schemahero
path: bin/schemahero
- uses: actions/upload-artifact@v1
with:
name: manager
path: bin/manager
23 changes: 4 additions & 19 deletions Dockerfile.schemahero
Original file line number Diff line number Diff line change
@@ -1,21 +1,3 @@
# Build the manager binary
FROM golang:1.12 as builder

# Copy in the go src
WORKDIR /go/src/github.com/schemahero/schemahero
COPY go.mod ./
COPY go.sum ./
COPY Makefile ./

# Download vendored deps
ENV GO111MODULE=on
RUN go mod vendor

# Build
COPY cmd/ cmd/
COPY pkg/ pkg/
RUN make bin/schemahero

# Copy schemahero into a thin image
FROM debian:buster
WORKDIR /
Expand All @@ -24,7 +6,10 @@ RUN apt-get update \
&& apt-get -y install \
ca-certificates

COPY --from=builder /go/src/github.com/schemahero/schemahero/bin/schemahero .
ADD ./bin/schemahero /schemahero
ADD ./bin/manager /manager
ADD ./bin/kubectl-schemahero /kubectl-schemahero

RUN chmod a+x /schemahero

RUN useradd -c 'schemahero user' -m -d /home/schemahero -s /bin/bash -u 1001 schemahero
Expand Down
38 changes: 31 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ endef
export GO111MODULE=on
# export GOPROXY=https://proxy.golang.org

all: test bin/schemahero manager
all: generate fmt vet manifests bin/schemahero bin/kubectl-schemahero manager

.PHONY: clean-and-tidy
clean-and-tidy:
Expand Down Expand Up @@ -61,7 +61,7 @@ run: generate fmt vet bin/schemahero
go run ./cmd/manager/main.go

.PHONY: install
install: manifests microk8s
install: manifests generate microk8s
kubectl apply -f config/crds

.PHONY: deploy
Expand All @@ -82,8 +82,9 @@ vet:
go vet ./pkg/... ./cmd/...

.PHONY: generate
generate: controller-gen
generate: controller-gen client-gen
$(CONTROLLER_GEN) object:headerFile=./hack/boilerplate.go.txt paths=./pkg/api/...
$(CLIENT_GEN) --output-package=github.com/schemahero/schemahero/pkg/client --clientset-name schemaheroclientset --input-base github.com/schemahero/schemahero/pkg/apis --input databases/v1alpha3 --input schemas/v1alpha3 -h ./hack/boilerplate.go.txt

.PHONY: bin/schemahero
bin/schemahero:
Expand All @@ -94,9 +95,14 @@ bin/schemahero:
./cmd/schemahero
@echo "built bin/schemahero"

.PHONY: docker-login
docker-login:
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
.PHONY: bin/kubectl-schemahero
bin/kubectl-schemahero:
go build \
${LDFLAGS} \
-i \
-o bin/kubectl-schemahero \
./cmd/kubectl-schemahero
@echo "built bin/kubectl-schemahero"

.PHONY: snapshot-release
snapshot-release: build-snapshot-release
Expand All @@ -108,7 +114,7 @@ build-snapshot-release:
curl -sL https://git.io/goreleaser | bash -s -- --rm-dist --snapshot --config deploy/.goreleaser.snapshot.yml

.PHONY: microk8s
microk8s:
microk8s: bin/schemahero bin/kubectl-schemahero manager
docker build -t schemahero/schemahero -f ./Dockerfile.schemahero .
docker tag schemahero/schemahero localhost:32000/schemahero/schemahero:latest
docker push localhost:32000/schemahero/schemahero:latest
Expand All @@ -126,3 +132,21 @@ CONTROLLER_GEN=$(shell go env GOPATH)/bin/controller-gen
else
CONTROLLER_GEN=$(shell which controller-gen)
endif

.PHONY: client-gen
client-gen:
ifeq (, $(shell which client-gen))
go get k8s.io/code-generator/cmd/client-gen@kubernetes-1.16.4
CLIENT_GEN=$(shell go env GOPATH)/bin/client-gen
else
CLIENT_GEN=$(shell which client-gen)
endif

.PHONY: kubebuilder
kubebuilder:
ifeq (, $(shell which kubebuilder))
curl -L -O "https://github.com/kubernetes-sigs/kubebuilder/releases/download/v1.0.8/kubebuilder_1.0.8_darwin_amd64.tar.gz"
tar -zxvf kubebuilder_1.0.8_darwin_amd64.tar.gz
mv kubebuilder_1.0.8_darwin_amd64 kubebuilder && sudo mv kubebuilder /usr/local/
echo "export PATH=\$PATH:/usr/local/kubebuilder/bin" | sudo tee -a /etc/profile > /dev/null
endif
7 changes: 7 additions & 0 deletions cmd/kubectl-schemahero/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package main

import "github.com/schemahero/schemahero/pkg/cli/schemaherokubectlcli"

func main() {
schemaherokubectlcli.InitAndExecute()
}
36 changes: 12 additions & 24 deletions cmd/manager/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,72 +18,60 @@ package main

import (
"flag"
"fmt"
"os"

_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
"sigs.k8s.io/controller-runtime/pkg/client/config"
"sigs.k8s.io/controller-runtime/pkg/manager"
logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
"sigs.k8s.io/controller-runtime/pkg/runtime/signals"

"github.com/schemahero/schemahero/pkg/apis"
"github.com/schemahero/schemahero/pkg/controller"
"github.com/schemahero/schemahero/pkg/logger"
"github.com/schemahero/schemahero/pkg/version"
"github.com/schemahero/schemahero/pkg/webhook"
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
"sigs.k8s.io/controller-runtime/pkg/client/config"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/runtime/signals"
)

func main() {
var metricsAddr string
flag.StringVar(&metricsAddr, "metrics-addr", ":8088", "The address the metric endpoint binds to.")
flag.Parse()
logf.SetLogger(logf.ZapLogger(false))
log := logf.Log.WithName("entrypoint")

log.Info(fmt.Sprintf("%+v", version.GetBuild()))
logger.Infof("Starting schemahero version %+v", version.GetBuild())

// Get a config to talk to the apiserver
log.Info("setting up client for manager")
cfg, err := config.GetConfig()
if err != nil {
log.Error(err, "unable to set up client config")
logger.Error(err)
os.Exit(1)
}

// Create a new Cmd to provide shared dependencies and start components
log.Info("setting up manager")
mgr, err := manager.New(cfg, manager.Options{MetricsBindAddress: metricsAddr})
if err != nil {
log.Error(err, "unable to set up overall controller manager")
logger.Error(err)
os.Exit(1)
}

log.Info("Registering Components.")

// Setup Scheme for all resources
log.Info("setting up scheme")
if err := apis.AddToScheme(mgr.GetScheme()); err != nil {
log.Error(err, "unable add APIs to scheme")
logger.Error(err)
os.Exit(1)
}

// Setup all Controllers
log.Info("Setting up controller")
if err := controller.AddToManager(mgr); err != nil {
log.Error(err, "unable to register controllers to the manager")
logger.Error(err)
os.Exit(1)
}

log.Info("setting up webhooks")
if err := webhook.AddToManager(mgr); err != nil {
log.Error(err, "unable to register webhooks to the manager")
logger.Error(err)
os.Exit(1)
}

// Start the Cmd
log.Info("Starting the Cmd.")
if err := mgr.Start(signals.SetupSignalHandler()); err != nil {
log.Error(err, "unable to run the manager")
logger.Error(err)
os.Exit(1)
}
}
4 changes: 2 additions & 2 deletions cmd/schemahero/main.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package main

import "github.com/schemahero/schemahero/pkg/cli"
import "github.com/schemahero/schemahero/pkg/cli/schemaherocli"

func main() {
cli.InitAndExecute()
schemaherocli.InitAndExecute()
}

0 comments on commit cc0348f

Please sign in to comment.