chore: update jenkins and plugins to latest lts, update gh actions, add flake, remove minikube and use kind (#974)

- update to latest jenkins lts
- update github actions
- add nix flake (experimental, build artifacts still wip)
- remove minikube and use kind for a better experience
This commit is contained in:
Luigi Operoso 2024-02-24 17:08:10 +01:00 committed by GitHub
parent 95f0215c37
commit 81251d3ddc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
38 changed files with 1289 additions and 239 deletions

1
.envrc Normal file
View File

@ -0,0 +1 @@
has nix && use flake

View File

@ -12,9 +12,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Codespell
uses: codespell-project/actions-codespell@v1
uses: codespell-project/actions-codespell@v2
with:
check_filenames: true
ignore_words_list: aks,ags,startin

View File

@ -23,7 +23,7 @@ jobs:
steps:
# Checks out a copy of your repository on the ubuntu-latest machine
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
submodules: recursive # Fetch the Docsy theme
fetch-depth: 0
@ -45,7 +45,7 @@ jobs:
# Sets up node - required by Hugo
- name: Setup Node
if: env.IS_CHANGED == 'true'
uses: actions/setup-node@v1
uses: actions/setup-node@v4
with:
node-version: '12.x'
@ -77,7 +77,7 @@ jobs:
# Creates pull request with generated docs
- name: Create Pull Request
if: env.IS_CHANGED == 'true'
uses: peter-evans/create-pull-request@v5
uses: peter-evans/create-pull-request@v6
with:
commit-message: Auto-updated docs
branch: docs-generator

View File

@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Set up env vars
run: |
@ -51,7 +51,7 @@ jobs:
cp chart/jenkins-operator/crds/jenkins-crd.yaml deploy/crds/jenkins.io_jenkins_crd.yaml
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
uses: peter-evans/create-pull-request@v6
with:
commit-message: Auto-updated Kubernetes Manifests
branch: manifest-deploy-update

View File

@ -12,7 +12,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v8
- uses: actions/stale@v9
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
operations-per-run: 200

View File

@ -26,18 +26,18 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Set up env vars
run: |
echo "GO111MODULE=on" >> $GITHUB_ENV
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env)" >> $GITHUB_ENV
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env)" >> $GITHUB_ENV
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env)" >> $GITHUB_ENV
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
- name: Prepare go environment
uses: actions/setup-go@v2
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
@ -45,7 +45,7 @@ jobs:
run: make go-dependencies
- name: Setup Bats and libs
uses: brokenpip3/setup-bats-libs@1.5.2
uses: bats-core/bats-action@1.5.5
with:
support-path: "${{ github.workspace }}/.bats/bats-support"
assert-path: "${{ github.workspace }}/.bats/bats-assert"
@ -53,7 +53,7 @@ jobs:
file-path: "${{ github.workspace }}/.bats/bats-file"
- name: Kind setup
uses: helm/kind-action@v1.5.0
uses: helm/kind-action@v1.9.0
with:
cluster_name: ${{env.KIND_CLUSTER_NAME}}

View File

@ -19,10 +19,6 @@ on:
- 'backup/**'
- '*.md'
env:
MINIKUBE_CPUS_NUMBER: 2
MINIKUBE_MEMORY_AMOUNT: 6144
jobs:
run-tests:
if: github.event.pull_request.draft == false
@ -30,20 +26,18 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Set up env vars
run: |
echo "GO111MODULE=on" >> $GITHUB_ENV
echo "CHANGE_MINIKUBE_NONE_USER=true" >> $GITHUB_ENV
echo "MINIKUBE_WANTUPDATENOTIFICATION=false" >> $GITHUB_ENV
echo "MINIKUBE_WANTREPORTERRORPROMPT=false" >> $GITHUB_ENV
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env)" >> $GITHUB_ENV
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env)" >> $GITHUB_ENV
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
- name: Prepare go environment
uses: actions/setup-go@v2
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
@ -53,16 +47,30 @@ jobs:
- name: Verify code formatting
run: make verify
- name: Kind setup
uses: helm/kind-action@v1.9.0
with:
cluster_name: ${{env.KIND_CLUSTER_NAME}}
config: kind-cluster.yaml
- name: Prepare environment for e2e
run: |
sudo apt-get update
sudo apt-get install socat
sudo mkdir -p $HOME/.kube $HOME/.minikube
sudo chown -R $USER $HOME/.kube $HOME/.minikube
make minikube-start \
MINIKUBE_DRIVER='docker' \
MEMORY_AMOUNT=${{ env.MINIKUBE_MEMORY_AMOUNT }} \
CPUS_NUMBER=${{ env.MINIKUBE_CPUS_NUMBER }}
sudo mkdir -p $HOME/.kube
sudo chown -R $USER $HOME/.kube
- name: Jenkins Operator - e2e - list tests
run: make e2e E2E_TEST_ARGS='-ginkgo.v -ginkgo.dryRun'
- name: Jenkins Operator - e2e
run: make e2e E2E_TEST_ARGS='-ginkgo.v'
- name: Debug
if: failure()
shell: bash
continue-on-error: true
run: |
randomns=$(kubectl get ns| grep -i 'ns[0-9]\+' |cut -d ' ' -f 1)
kubectl get pods -n ${randomns}
kubectl get events -n ${randomns}

View File

@ -19,10 +19,6 @@ on:
- 'backup/**'
- '*.md'
env:
MINIKUBE_CPUS_NUMBER: 2
MINIKUBE_MEMORY_AMOUNT: 6144
jobs:
run-tests:
if: github.event.pull_request.draft == false
@ -30,20 +26,18 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Set up env vars
run: |
echo "GO111MODULE=on" >> $GITHUB_ENV
echo "CHANGE_MINIKUBE_NONE_USER=true" >> $GITHUB_ENV
echo "MINIKUBE_WANTUPDATENOTIFICATION=false" >> $GITHUB_ENV
echo "MINIKUBE_WANTREPORTERRORPROMPT=false" >> $GITHUB_ENV
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env)" >> $GITHUB_ENV
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env)" >> $GITHUB_ENV
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
- name: Prepare go environment
uses: actions/setup-go@v2
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
@ -53,20 +47,21 @@ jobs:
- name: Verify code formatting
run: make verify
- name: Kind setup
uses: helm/kind-action@v1.9.0
with:
cluster_name: ${{env.KIND_CLUSTER_NAME}}
config: kind-cluster.yaml
- name: Prepare environment for e2e
run: |
sudo apt-get update
sudo apt-get install socat
sudo mkdir -p $HOME/.kube $HOME/.minikube
sudo chown -R $USER $HOME/.kube $HOME/.minikube
make minikube-start \
MINIKUBE_DRIVER='docker' \
MEMORY_AMOUNT=${{ env.MINIKUBE_MEMORY_AMOUNT }} \
CPUS_NUMBER=${{ env.MINIKUBE_CPUS_NUMBER }}
sudo mkdir -p $HOME/.kube
sudo chown -R $USER $HOME/.kube
- name: Jenkins Operator - Helm Chart tests
run: |
git reset --hard
make helm-lint
eval $(bin/minikube docker-env)
make helm-e2e E2E_TEST_ARGS='-ginkgo.v'

View File

@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Check envs
run: make -C backup/pvc check-env
@ -46,7 +46,7 @@ jobs:
- name: Login to Quay.io
if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request'
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ secrets.QUAYIO_USERNAME }}

View File

@ -17,7 +17,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Deploy Helm chart
run: |
@ -31,7 +31,7 @@ jobs:
# Creates pull request with new chart version
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
uses: peter-evans/create-pull-request@v6
with:
commit-message: Release Helm chart ${{ github.event.inputs.chartVersion }}
branch: helm-chart-release-${{ github.event.inputs.chartVersion }}

View File

@ -8,41 +8,33 @@ on:
description: "Flag for skipping the tests. If set to true (without quotation marks), the workflow will skip tests and go straight to releasing the nightly build. Use with caution!"
required: false
env:
MINIKUBE_CPUS_NUMBER: 2
MINIKUBE_MEMORY_AMOUNT: 6144
jobs:
publish-image:
name: Publish nightly snapshot
runs-on: ubuntu-latest
steps:
- name: Prep - check out code
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Prep - Set up env vars
run: |
echo "GO111MODULE=on" >> $GITHUB_ENV
echo "CHANGE_MINIKUBE_NONE_USER=true" >> $GITHUB_ENV
echo "MINIKUBE_WANTUPDATENOTIFICATION=false" >> $GITHUB_ENV
echo "MINIKUBE_WANTREPORTERRORPROMPT=false" >> $GITHUB_ENV
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env)" >> $GITHUB_ENV
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env)" >> $GITHUB_ENV
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env)" >> $GITHUB_ENV
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
- name: Prep - setup BATS
- name: Prep - setup Bats and bats libs
if: ${{ github.event.inputs.skipTests != 'true' }}
uses: mig4/setup-bats@v1
uses: bats-core/bats-action@1.5.5
with:
bats-version: 1.9.0
- name: Prep - setup Bats libs
if: ${{ github.event.inputs.skipTests != 'true' }}
uses: brokenpip3/setup-bats-libs@0.1.0
support-path: "${{ github.workspace }}/.bats/bats-support"
assert-path: "${{ github.workspace }}/.bats/bats-assert"
detik-path: "${{ github.workspace }}/.bats/bats-detik"
file-path: "${{ github.workspace }}/.bats/bats-file"
- name: Prep - go environment
uses: actions/setup-go@v2
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
@ -57,12 +49,15 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install socat
sudo mkdir -p $HOME/.kube $HOME/.minikube
sudo chown -R $USER $HOME/.kube $HOME/.minikube
make minikube-start \
MINIKUBE_DRIVER='docker' \
MEMORY_AMOUNT=${{ env.MINIKUBE_MEMORY_AMOUNT }} \
CPUS_NUMBER=${{ env.MINIKUBE_CPUS_NUMBER }}
sudo mkdir -p $HOME/.kube
sudo chown -R $USER $HOME/.kube
- name: Prep - Kind setup
if: ${{ github.event.inputs.skipTests != 'true' }}
uses: helm/kind-action@v1.9.0
with:
cluster_name: ${{env.KIND_CLUSTER_NAME}}
config: kind-cluster.yaml
- name: Test - e2e
if: ${{ github.event.inputs.skipTests != 'true' }}
@ -73,26 +68,14 @@ jobs:
run: |
git reset --hard
make helm-lint
eval $(bin/minikube docker-env)
make helm-e2e E2E_TEST_ARGS='-ginkgo.v'
- name: Prep - Destroy minikube
if: ${{ github.event.inputs.skipTests != 'true' }}
run: |
make minikube-destroy
- name: Prep - Kind setup
if: ${{ github.event.inputs.skipTests != 'true' }}
uses: helm/kind-action@v1.5.0
with:
cluster_name: ${{env.KIND_CLUSTER_NAME}}
- name: Test - bats
if: ${{ github.event.inputs.skipTests != 'true' }}
run: make bats-tests
- name: Post - Login to Quay.io
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ secrets.QUAYIO_USERNAME }}

View File

@ -9,7 +9,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0
@ -20,7 +20,7 @@ jobs:
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
- name: Prepare go environment
uses: actions/setup-go@v2
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
@ -45,7 +45,7 @@ jobs:
tag_name: ${{ env.VERSION }}
- name: Login to Quay.io
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ secrets.QUAYIO_USERNAME }}

3
.gitignore vendored
View File

@ -94,3 +94,6 @@ testbin/*
### Bats
chart/jenkins-operator/deploy.tmp
### Nix
result

103
Makefile
View File

@ -94,13 +94,45 @@ e2e: deepcopy-gen manifests ## Runs e2e tests, you can use EXTRA_ARGS
RUNNING_TESTS=1 go test -parallel=1 "./test/e2e/" -ginkgo.v -tags "$(BUILDTAGS) cgo" -v -timeout 60m -run "$(E2E_TEST_SELECTOR)" \
-jenkins-api-hostname=$(JENKINS_API_HOSTNAME) -jenkins-api-port=$(JENKINS_API_PORT) -jenkins-api-use-nodeport=$(JENKINS_API_USE_NODEPORT) $(E2E_TEST_ARGS)
## HELM Section
.PHONY: helm
HAS_HELM := $(shell command -v helm 2> /dev/null)
helm: ## Download helm if it's not present, otherwise symlink
@echo "+ $@"
ifeq ($(strip $(HAS_HELM)),)
mkdir -p $(PROJECT_DIR)/bin
curl -Lo $(PROJECT_DIR)/bin/helm.tar.gz https://get.helm.sh/helm-v$(HELM_VERSION)-$(PLATFORM)-amd64.tar.gz && tar xzfv $(PROJECT_DIR)/bin/helm.tar.gz -C $(PROJECT_DIR)/bin
mv $(PROJECT_DIR)/bin/$(PLATFORM)-amd64/helm $(PROJECT_DIR)/bin/helm
rm -rf $(PROJECT_DIR)/bin/$(PLATFORM)-amd64
rm -rf $(PROJECT_DIR)/bin/helm.tar.gz
else
test -L $(PROJECT_DIR)/bin/helm || ln -sf $(shell command -v helm) $(PROJECT_DIR)/bin/helm
endif
.PHONY: helm-lint
helm-lint: helm
bin/helm lint chart/jenkins-operator
.PHONY: helm-release-latest
helm-release-latest: helm
mkdir -p /tmp/jenkins-operator-charts
mv chart/jenkins-operator/*.tgz /tmp/jenkins-operator-charts
cd chart && ../bin/helm package jenkins-operator
mv chart/jenkins-operator-*.tgz chart/jenkins-operator/
bin/helm repo index chart/ --url https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/chart/ --merge chart/index.yaml
mv /tmp/jenkins-operator-charts/*.tgz chart/jenkins-operator/
.PHONY: helm-e2e
IMAGE_NAME := quay.io/$(QUAY_ORGANIZATION)/$(QUAY_REGISTRY):$(GITCOMMIT)-amd64
helm-e2e: helm container-runtime-build-amd64 ## Runs helm e2e tests, you can use EXTRA_ARGS
kind load docker-image ${IMAGE_NAME} --name $(KIND_CLUSTER_NAME)
@echo "+ $@"
RUNNING_TESTS=1 go test -parallel=1 "./test/helm/" -ginkgo.v -tags "$(BUILDTAGS) cgo" -v -timeout 60m -run "$(E2E_TEST_SELECTOR)" -image-name=$(IMAGE_NAME) $(E2E_TEST_ARGS)
## CODE CHECKS section
.PHONY: vet
vet: ## Verifies `go vet` passes
@echo "+ $@"
@ -143,6 +175,7 @@ install: ## Installs the executable
.PHONY: update-lts-version
update-lts-version: ## Update the latest lts version
@echo "+ $@"
echo $(LATEST_LTS_VERSION)
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' chart/jenkins-operator/values.yaml
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' test/e2e/test_utility.go
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' test/helm/helm_test.go
@ -153,7 +186,7 @@ run: export WATCH_NAMESPACE = $(NAMESPACE)
run: export OPERATOR_NAME = $(NAME)
run: fmt vet install-crds build ## Run the executable, you can use EXTRA_ARGS
@echo "+ $@"
ifeq ($(KUBERNETES_PROVIDER),minikube)
ifeq ($(KUBERNETES_PROVIDER),kind)
kubectl config use-context $(KUBECTL_CONTEXT)
endif
ifeq ($(KUBERNETES_PROVIDER),crc)
@ -292,12 +325,6 @@ container-runtime-run: ## Run the container in docker, you can use EXTRA_ARGS
--volume $(HOME)/.kube/config:/home/jenkins-operator/.kube/config \
quay.io/${QUAY_ORGANIZATION}/$(QUAY_REGISTRY):$(GITCOMMIT) /usr/bin/jenkins-operator $(OPERATOR_ARGS)
.PHONY: minikube-run
minikube-run: export WATCH_NAMESPACE = $(NAMESPACE)
minikube-run: export OPERATOR_NAME = $(NAME)
minikube-run: minikube-start run ## Run the operator locally and use minikube as Kubernetes cluster, you can use OPERATOR_ARGS
@echo "+ $@"
.PHONY: crc-run
crc-run: export WATCH_NAMESPACE = $(NAMESPACE)
crc-run: export OPERATOR_NAME = $(NAME)
@ -320,14 +347,6 @@ ifndef HAS_GEN_CRD_API_REFERENCE_DOCS
endif
$(GEN_CRD_API)/$(GEN_CRD_API) -config gen-crd-api-config.json -api-dir $(PKG)/api/$(API_VERSION) -template-dir $(GEN_CRD_API)/template -out-file documentation/$(VERSION)/jenkins-$(API_VERSION)-scheme.md
.PHONY: check-minikube
check-minikube: ## Checks if KUBERNETES_PROVIDER is set to minikube
@echo "+ $@"
@echo "KUBERNETES_PROVIDER '$(KUBERNETES_PROVIDER)'"
ifneq ($(KUBERNETES_PROVIDER),minikube)
$(error KUBERNETES_PROVIDER not set to 'minikube')
endif
.PHONY: check-crc
check-crc: ## Checks if KUBERNETES_PROVIDER is set to crc
@echo "+ $@"
@ -336,44 +355,10 @@ ifneq ($(KUBERNETES_PROVIDER),crc)
$(error KUBERNETES_PROVIDER not set to 'crc')
endif
.PHONY: helm
HAS_HELM := $(shell which $(PROJECT_DIR)/bin/helm)
helm: ## Download helm if it's not present
@echo "+ $@"
ifndef HAS_HELM
mkdir -p $(PROJECT_DIR)/bin
curl -Lo bin/helm.tar.gz https://get.helm.sh/helm-v$(HELM_VERSION)-$(PLATFORM)-amd64.tar.gz && tar xzfv bin/helm.tar.gz -C $(PROJECT_DIR)/bin
mv $(PROJECT_DIR)/bin/$(PLATFORM)-amd64/helm $(PROJECT_DIR)/bin/helm
rm -rf $(PROJECT_DIR)/bin/$(PLATFORM)-amd64
rm -rf $(PROJECT_DIR)/bin/helm.tar.gz
endif
.PHONY: minikube
HAS_MINIKUBE := $(shell which $(PROJECT_DIR)/bin/minikube)
minikube: ## Download minikube if it's not present
@echo "+ $@"
ifndef HAS_MINIKUBE
mkdir -p $(PROJECT_DIR)/bin
wget -O $(PROJECT_DIR)/bin/minikube https://github.com/kubernetes/minikube/releases/download/v$(MINIKUBE_VERSION)/minikube-$(PLATFORM)-amd64
chmod +x $(PROJECT_DIR)/bin/minikube
endif
.PHONY: minikube-start
minikube-start: minikube check-minikube ## Start minikube
@echo "+ $@"
bin/minikube status && exit 0 || \
bin/minikube start --kubernetes-version $(MINIKUBE_KUBERNETES_VERSION) --dns-domain=$(CLUSTER_DOMAIN) --extra-config=kubelet.cluster-domain=$(CLUSTER_DOMAIN) --driver=$(MINIKUBE_DRIVER) --memory $(MEMORY_AMOUNT) --cpus $(CPUS_NUMBER)
.PHONY: minikube-destroy
minikube-destroy: ## Stop and destroy minikube
@echo "+ $@"
bin/minikube stop
bin/minikube delete
.PHONY: kind-setup
kind-setup: ## Setup kind cluster
@echo "+ $@"
kind create cluster --name $(KIND_CLUSTER_NAME)
kind create cluster --config kind-cluster.yaml --name $(KIND_CLUSTER_NAME)
.PHONY: kind-clean
kind-clean: ## Delete kind cluster
@ -462,20 +447,6 @@ endif
go mod vendor -v
@echo
.PHONY: helm-lint
helm-lint: helm
@echo "+ $@"
bin/helm lint chart/jenkins-operator
.PHONY: helm-release-latest
helm-release-latest: helm
@echo "+ $@"
mkdir -p /tmp/jenkins-operator-charts
mv chart/jenkins-operator/*.tgz /tmp/jenkins-operator-charts
cd chart && ../bin/helm package jenkins-operator
mv chart/jenkins-operator-*.tgz chart/jenkins-operator/
bin/helm repo index chart/ --url https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/chart/ --merge chart/index.yaml
mv /tmp/jenkins-operator-charts/*.tgz chart/jenkins-operator/
# Download and build hugo extended locally if necessary
HUGO_PATH = $(shell pwd)/bin/hugo
@ -579,10 +550,10 @@ kubebuilder:
source ${ENVTEST_ASSETS_DIR}/setup-envtest.sh; fetch_envtest_tools $(ENVTEST_ASSETS_DIR); setup_envtest_env $(ENVTEST_ASSETS_DIR);
# install cert-manager v1.5.1
install-cert-manager: minikube-start
install-cert-manager: kind-setup
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.yaml
uninstall-cert-manager: minikube-start
uninstall-cert-manager: kind-setup
kubectl delete -f https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.yaml
# Deploy the operator locally along with webhook using helm charts

View File

@ -1,4 +1,3 @@
//go:build !ignore_autogenerated
// +build !ignore_autogenerated
/*
@ -357,6 +356,11 @@ func (in *JenkinsMaster) DeepCopyInto(out *JenkinsMaster) {
*out = make([]Plugin, len(*in))
copy(*out, *in)
}
if in.LatestPlugins != nil {
in, out := &in.LatestPlugins, &out.LatestPlugins
*out = new(bool)
**out = **in
}
if in.HostAliases != nil {
in, out := &in.HostAliases, &out.HostAliases
*out = make([]corev1.HostAlias, len(*in))

View File

@ -1,6 +1,6 @@
# jenkins-operator
![Version: 0.8.0-beta.2](https://img.shields.io/badge/Version-0.8.0--beta.2-informational?style=flat-square) ![AppVersion: 0.8.0-beta.2](https://img.shields.io/badge/AppVersion-0.8.0--beta.2-informational?style=flat-square)
![Version: 0.8.0](https://img.shields.io/badge/Version-0.8.0-informational?style=flat-square) ![AppVersion: 0.8.0](https://img.shields.io/badge/AppVersion-0.8.0-informational?style=flat-square)
Kubernetes native operator which fully manages Jenkins on Kubernetes
@ -44,15 +44,15 @@ Kubernetes native operator which fully manages Jenkins on Kubernetes
| jenkins.backup.volumeMounts[1].mountPath | string | `"/backup"` | |
| jenkins.backup.volumeMounts[1].name | string | `"backup"` | |
| jenkins.basePlugins | list | `[]` | |
| jenkins.configuration.configurationAsCode | object | `{}` | |
| jenkins.configuration.groovyScripts | object | `{}` | |
| jenkins.configuration.configurationAsCode | list | `[]` | |
| jenkins.configuration.groovyScripts | list | `[]` | |
| jenkins.configuration.secretData | object | `{}` | |
| jenkins.configuration.secretRefName | string | `""` | |
| jenkins.disableCSRFProtection | bool | `false` | |
| jenkins.enabled | bool | `true` | |
| jenkins.env | list | `[]` | |
| jenkins.hostAliases | object | `{}` | |
| jenkins.image | string | `"jenkins/jenkins:2.414.1-lts"` | |
| jenkins.image | string | `"jenkins/jenkins:2.440.1-lts"` | |
| jenkins.imagePullPolicy | string | `"Always"` | |
| jenkins.imagePullSecrets | list | `[]` | |
| jenkins.labels | object | `{}` | |
@ -109,4 +109,4 @@ Kubernetes native operator which fully manages Jenkins on Kubernetes
| webhook.enabled | bool | `false` | |
----------------------------------------------
Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0)
Autogenerated from chart metadata using [helm-docs v1.11.2](https://github.com/norwoodj/helm-docs/releases/v1.11.2)

View File

@ -36,7 +36,7 @@ jenkins:
# image is the name (and tag) of the Jenkins instance
# Default: jenkins/jenkins:lts
# It's recommended to use LTS (tag: "lts") version
image: jenkins/jenkins:2.414.1-lts
image: jenkins/jenkins:2.440.1-lts
# env contains jenkins container environment variables
env: []
@ -90,17 +90,17 @@ jenkins:
#
# basePlugins:
# - name: kubernetes
# version: 4029.v5712230ccb_f8
# version: 4186.v1d804571d5d4
# - name: workflow-job
# version: 1342.v046651d5b_dfe
# version: 1385.vb_58b_86ea_fff1
# - name: workflow-aggregator
# version: 596.v8c21c963d92d
# - name: git
# version: 5.2.1
# - name: job-dsl
# version: "1.85"
# version: "1.87"
# - name: configuration-as-code
# version: 1647.ve39ca_b_829b_42
# version: 11775.v810dc950b_514
# - name: kubernetes-credentials-provider
# version: 1.234.vf3013b_35f5b_a
@ -135,7 +135,7 @@ jenkins:
# repositoryUrl: https://github.com/jenkinsci/kubernetes-operator.git
seedJobs: []
# SeedJobAgentImage defines the image that will be used by the seed job agent. If not defined jenkins/inbound-agent:4.10-3 will be used.
# SeedJobAgentImage defines the image that will be used by the seed job agent. If not defined jenkins/inbound-agent:3206.vb_15dcf73f6a_9-3 will be used.
seedJobAgentImage: ""
# Resource limit/request for Jenkins

View File

@ -1,17 +1,16 @@
# Setup variables for the Makefile
NAME=kubernetes-operator
OPERATOR_SDK_VERSION=1.3.0
GO_VERSION=1.15.6
PKG=github.com/jenkinsci/kubernetes-operator
QUAY_ORGANIZATION=jenkins-kubernetes-operator
QUAY_REGISTRY=operator
NAMESPACE=default
API_VERSION=v1alpha2
API_VERSION_NEXT=v1alpha3
ALL_IN_ONE_DEPLOY_FILE_PREFIX=all-in-one
GEN_CRD_API=gen-crd-api-reference-docs
IMAGE_PULL_MODE=local
HELM_VERSION=3.12.3
CLUSTER_DOMAIN=cluster.local
LATEST_LTS_VERSION=2.414.1
KIND_CLUSTER_NAME=jenkins
ALL_IN_ONE_DEPLOY_FILE_PREFIX="all-in-one"
API_VERSION_NEXT="v1alpha3"
API_VERSION="v1alpha2"
CLUSTER_DOMAIN="cluster.local"
GEN_CRD_API="gen-crd-api-reference-docs"
GO_VERSION="1.15.6"
HELM_VERSION="3.12.3"
IMAGE_PULL_MODE="local"
KIND_CLUSTER_NAME="jenkins"
LATEST_LTS_VERSION="2.440.1"
NAME="kubernetes-operator"
NAMESPACE="default"
OPERATOR_SDK_VERSION="1.3.0"
PKG="github.com/jenkinsci/kubernetes-operator"
QUAY_ORGANIZATION="jenkins-kubernetes-operator"
QUAY_REGISTRY="operator"

View File

@ -1,7 +0,0 @@
KUBERNETES_PROVIDER=crc
JENKINS_API_HOSTNAME_COMMAND=crc ip
JENKINS_API_PORT=0
JENKINS_API_USE_NODEPORT=true
CRC_OC_PROJECT=default

5
config.kind.env Normal file
View File

@ -0,0 +1,5 @@
JENKINS_API_HOSTNAME_COMMAND=echo localhost
JENKINS_API_PORT=0
JENKINS_API_USE_NODEPORT=true
KUBERNETES_PROVIDER=kind
KUBECTL_CONTEXT=kind-jenkins

View File

@ -1,10 +0,0 @@
KUBERNETES_PROVIDER=minikube
MINIKUBE_KUBERNETES_VERSION=v1.24.8
MINIKUBE_DRIVER=virtualbox
MINIKUBE_VERSION=1.28.0
KUBECTL_CONTEXT=minikube
JENKINS_API_HOSTNAME_COMMAND=bin/minikube ip
JENKINS_API_PORT=0
JENKINS_API_USE_NODEPORT=true

119
flake.lock Normal file
View File

@ -0,0 +1,119 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1705309234,
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"go_15": {
"locked": {
"lastModified": 1610974077,
"narHash": "sha256-kfU2R7Q6eMU34VooazWvCqxOKwQOApCYh9TH79oZ8VA=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "4eccd6f731627ba5ad9915bcf600c9329a34ca78",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "4eccd6f731627ba5ad9915bcf600c9329a34ca78",
"type": "github"
}
},
"golangci": {
"locked": {
"lastModified": 1593485095,
"narHash": "sha256-cgfJfZKqPgqQ1fdFWdpNnDEO2HmIVIDCvBTGke2LpnI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "e912fb83d2155a393e7146da98cda0e455a80fb6",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "e912fb83d2155a393e7146da98cda0e455a80fb6",
"type": "github"
}
},
"gomod2nix": {
"inputs": {
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1705314449,
"narHash": "sha256-yfQQ67dLejP0FLK76LKHbkzcQqNIrux6MFe32MMFGNQ=",
"owner": "nix-community",
"repo": "gomod2nix",
"rev": "30e3c3a9ec4ac8453282ca7f67fca9e1da12c3e6",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "gomod2nix",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1707451808,
"narHash": "sha256-UwDBUNHNRsYKFJzyTMVMTF5qS4xeJlWoeyJf+6vvamU=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "442d407992384ed9c0e6d352de75b69079904e4e",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"go_15": "go_15",
"golangci": "golangci",
"gomod2nix": "gomod2nix",
"nixpkgs": "nixpkgs"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

58
flake.nix Normal file
View File

@ -0,0 +1,58 @@
{
description = "Jenkins Kubernetes Operator";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
go_15.url = "github:nixos/nixpkgs/4eccd6f731627ba5ad9915bcf600c9329a34ca78";
golangci.url = "github:nixos/nixpkgs/e912fb83d2155a393e7146da98cda0e455a80fb6";
gomod2nix = {
url = "github:nix-community/gomod2nix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
};
};
outputs = { self, nixpkgs, flake-utils, go_15, golangci, gomod2nix, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
go_15_pkgs = go_15.legacyPackages.${system};
golangci_pkgs = golangci.legacyPackages.${system};
operatorVersion = builtins.readFile ./VERSION.txt;
sdkVersion = ((builtins.fromTOML (builtins.readFile ./config.base.env)).OPERATOR_SDK_VERSION);
jenkinsLtsVersion = ((builtins.fromTOML (builtins.readFile ./config.base.env)).LATEST_LTS_VERSION);
in
{
# Nix fmt
formatter = nixpkgs.legacyPackages.${system}.nixpkgs-fmt;
# shell in nix develop
devShells.default = nixpkgs.legacyPackages.${system}.mkShell {
packages = [
pkgs.gnumake
pkgs.wget
pkgs.helm-docs
go_15_pkgs.go
golangci_pkgs.golangci-lint
];
shellHook = ''
echo Operator Version ${operatorVersion}
echo Latest Jenkins LTS version: ${jenkinsLtsVersion}
echo Operator SDK version: ${sdkVersion}
'';
};
# nix shell .#gomod
devShells.gomod = pkgs.callPackage ./nix/shell.nix {
inherit (gomod2nix.legacyPackages.${system}) mkGoEnv gomod2nix;
};
# nix build with gomod2nix
packages.default = pkgs.callPackage ./nix {
inherit (gomod2nix.legacyPackages.${system}) buildGoApplication;
};
}
);
}

9
kind-cluster.yaml Normal file
View File

@ -0,0 +1,9 @@
apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30303
hostPort: 30303
listenAddress: "0.0.0.0"
protocol: tcp

21
nix/default.nix Normal file
View File

@ -0,0 +1,21 @@
{ pkgs ? (
let
inherit (builtins) fetchTree fromJSON readFile;
inherit ((fromJSON (readFile ./flake.lock)).nodes) nixpkgs gomod2nix;
in
import (fetchTree nixpkgs.locked) {
overlays = [
(import "${fetchTree gomod2nix.locked}/overlay.nix")
];
}
)
, buildGoApplication ? pkgs.buildGoApplication
}:
buildGoApplication {
pname = ((builtins.fromTOML (builtins.readFile ../config.base.env)).NAME);
version = builtins.readFile ../VERSION.txt;
pwd = ../.;
src = ../.;
modules = ./gomod2nix.toml;
}

855
nix/gomod2nix.toml Normal file
View File

@ -0,0 +1,855 @@
schema = 3
[mod]
[mod."cloud.google.com/go"]
version = "v0.54.0"
hash = "sha256-0GHaPyaZ6PtSrRPoVDs1zWxgo9kwSm/cxHCD0+Q6C8g="
[mod."cloud.google.com/go/bigquery"]
version = "v1.4.0"
hash = "sha256-niyEg/99kFPoAnQ5CQHfS8GEfQYGKtNbD36nNuSF4zo="
[mod."cloud.google.com/go/datastore"]
version = "v1.1.0"
hash = "sha256-wyOuic/vp33s1QiybElwERALQwPrn8gFHDAdlTBcv1Q="
[mod."cloud.google.com/go/firestore"]
version = "v1.1.0"
hash = "sha256-sxPVdUINjmpjTGXfKqkc5u7MxQe4As35kT/TYeizvII="
[mod."cloud.google.com/go/pubsub"]
version = "v1.2.0"
hash = "sha256-pVKDdQS2A1P0inU6mkI1aUrfIuHgL5ib8RpKt/rYQVI="
[mod."cloud.google.com/go/storage"]
version = "v1.6.0"
hash = "sha256-pF2Ff0UVveFDI5yDX1G3MV4bCx++x+mTQ4OIHgPIGqA="
[mod."dmitri.shuralyov.com/gpu/mtl"]
version = "v0.0.0-20190408044501-666a987793e9"
hash = "sha256-H+xcbVdCNDahWZPgwk4k+XxnM73g0hwaFY7x+OAATcc="
[mod."github.com/Azure/go-ansiterm"]
version = "v0.0.0-20170929234023-d6e3b3328b78"
hash = "sha256-OPSOVNWduO7IQ8PK9NetjeHAyMbMmrU37Sy5CWeGEwQ="
[mod."github.com/Azure/go-autorest"]
version = "v14.2.0+incompatible"
hash = "sha256-dvWOcudtx0NP6U2RDt40hwtELFRdYdLEklRWYterRN0="
[mod."github.com/Azure/go-autorest/autorest"]
version = "v0.11.1"
hash = "sha256-bN1VIsW4p6mx/llR8xQR5w7TZ1IQukp84kPkZei9oiY="
[mod."github.com/Azure/go-autorest/autorest/adal"]
version = "v0.9.5"
hash = "sha256-FXtgMdxDWf9sQIUJT4kD5C+t9qP5WDybd43EwAKkVak="
[mod."github.com/Azure/go-autorest/autorest/date"]
version = "v0.3.0"
hash = "sha256-PWFHUZ9jMJ6gkMCnRpR89s/aI3YdtzskIePj8Ulu4dc="
[mod."github.com/Azure/go-autorest/autorest/mocks"]
version = "v0.4.1"
hash = "sha256-ZzK6AL03DbclhBC8gF9bnQadnAn5hQSEXOlmglZMCEg="
[mod."github.com/Azure/go-autorest/logger"]
version = "v0.2.0"
hash = "sha256-YMh3dvYDlI2yQIQJs91eAcfyQtwOKJD3kC3flSPrMrs="
[mod."github.com/Azure/go-autorest/tracing"]
version = "v0.6.0"
hash = "sha256-CcLYoOyRcMo4aRRYN+TBbaHtJqDra4e0qo3cmGZIB74="
[mod."github.com/BurntSushi/toml"]
version = "v0.3.1"
hash = "sha256-Rqak1dE/Aj/+Kx1/pl3Hifgt+Q3OzuZ5fJR+/x3nTbo="
[mod."github.com/BurntSushi/xgb"]
version = "v0.0.0-20160522181843-27f122750802"
hash = "sha256-ck+gNOSXNYy/ji6mpSX3OTHgCDm2nww+3ZKu4lAXl6I="
[mod."github.com/NYTimes/gziphandler"]
version = "v0.0.0-20170623195520-56545f4a5d46"
hash = "sha256-4mTVrxEH1Cu3MVhm/nB+Zm8b2oYS4SecOHjnbT5Pk7s="
[mod."github.com/OneOfOne/xxhash"]
version = "v1.2.2"
hash = "sha256-JvJnJFr9NFh5u+b7BgNEIwZR6scXW8l8RkT1DXmGTtY="
[mod."github.com/PuerkitoBio/purell"]
version = "v1.1.1"
hash = "sha256-Hjf8ZNNdwcRd50A9QNrcCj17gu/6f1iKzVTVrrMrojA="
[mod."github.com/PuerkitoBio/urlesc"]
version = "v0.0.0-20170810143723-de5bf2ad4578"
hash = "sha256-nL0/0QM0Pec83vBlwXvQ8g5SvvZnCQgzD1apxfHNGlg="
[mod."github.com/agnivade/levenshtein"]
version = "v1.0.1"
hash = "sha256-+f8z3r10jE93Cj/WtIsEb3ydY3Y4JOlnh2dPqhcUMac="
[mod."github.com/alecthomas/template"]
version = "v0.0.0-20190718012654-fb15b899a751"
hash = "sha256-RsS4qxdRQ3q+GejA8D9Iu31A/mZNms4LbJ7518jWiu4="
[mod."github.com/alecthomas/units"]
version = "v0.0.0-20190717042225-c3de453c63f4"
hash = "sha256-vho02JWLkLST8oBHdWufpXZxoDSkCUVkMP6M/eg/Q0s="
[mod."github.com/andreyvit/diff"]
version = "v0.0.0-20170406064948-c7f18ee00883"
hash = "sha256-2XoKB20lN+KGnAb/eVv1NcU/CcSdUPcvVNiXF/uUmOg="
[mod."github.com/armon/circbuf"]
version = "v0.0.0-20150827004946-bbbad097214e"
hash = "sha256-klQjllsJZqZ2KPNx1mZT9XP+UAJkuBhmTnZdNlAflEM="
[mod."github.com/armon/consul-api"]
version = "v0.0.0-20180202201655-eb2c6b5be1b6"
hash = "sha256-aVqUesaJyU/nrgwlfG2p16VxcF6Hyk4s8diMp0Nuzsg="
[mod."github.com/armon/go-metrics"]
version = "v0.0.0-20180917152333-f0300d1749da"
hash = "sha256-+zqX1hlJgc+IrXRzBQDMhR8GYQdc0Oj6PiIDfctgh44="
[mod."github.com/armon/go-radix"]
version = "v0.0.0-20180808171621-7fddfc383310"
hash = "sha256-ZHU4pyBqHHRuQJuYr2K+LqeAnLX9peX07cmSYK+GDHk="
[mod."github.com/asaskevich/govalidator"]
version = "v0.0.0-20190424111038-f61b66f89f4a"
hash = "sha256-pcrINvdGpQExaSQv1j19L0NLWcvZL8jXQMsvMlVq8ss="
[mod."github.com/beorn7/perks"]
version = "v1.0.1"
hash = "sha256-h75GUqfwJKngCJQVE5Ao5wnO3cfKD9lSIteoLp/3xJ4="
[mod."github.com/bgentry/speakeasy"]
version = "v0.1.0"
hash = "sha256-Gt1vj6CFovLnO6wX5u2O4UfecY9V2J9WGw1ez4HMrgk="
[mod."github.com/bketelsen/crypt"]
version = "v0.0.3-0.20200106085610-5cbc8cc4026c"
hash = "sha256-d44/dm431lvmGZQBJjDOWfIa/GX/jNE9y4t49WO1a/U="
[mod."github.com/blang/semver"]
version = "v3.5.0+incompatible"
hash = "sha256-FPuL+G3gZCZ0ujzC748snVZekQK5adlwgnV0GPpyKt0="
[mod."github.com/bndr/gojenkins"]
version = "v1.0.1"
hash = "sha256-H43dVsPhDdQVnMXMfVtr5LhWo1BokTEHM/fGtYEn0JQ="
[mod."github.com/census-instrumentation/opencensus-proto"]
version = "v0.2.1"
hash = "sha256-3RWTfGGuKbkrOQ91ociOgp9igGvU/FAv3NAidPVoYP8="
[mod."github.com/cespare/xxhash"]
version = "v1.1.0"
hash = "sha256-nVDTtXH9PC3yJ0THaQZEN243UP9xgLi/clt5xRqj3+M="
[mod."github.com/cespare/xxhash/v2"]
version = "v2.1.1"
hash = "sha256-cF+sDnnTZ1xRwjsy08SVSV/JoZalwY+dg0Zkghy6BNw="
[mod."github.com/chzyer/logex"]
version = "v1.1.10"
hash = "sha256-BNOaV/CFAqOymWW3R2m1sCikdCwFZM/pVkylzoeU6yI="
[mod."github.com/chzyer/readline"]
version = "v0.0.0-20180603132655-2972be24d48e"
hash = "sha256-2Uj5LGpHEbLQG3d/7z9AL8DknUBZyoTAMs4j+VVDmIA="
[mod."github.com/chzyer/test"]
version = "v0.0.0-20180213035817-a1ea475d72b1"
hash = "sha256-U0irpUSqegh7Nzg1ErPuyjESOcIXXOWf7ikKMbES2mY="
[mod."github.com/client9/misspell"]
version = "v0.3.4"
hash = "sha256-MIKnt4va/nPl+5cCgOvCyRGIORTnguieQhlj8ery4BU="
[mod."github.com/cockroachdb/datadriven"]
version = "v0.0.0-20190809214429-80d97fb3cbaa"
hash = "sha256-l9bswpYsaqhhls7BsJjfhbpDBEreIQtKNjHDn9Tcamc="
[mod."github.com/coreos/bbolt"]
version = "v1.3.2"
hash = "sha256-otoFfHibSdPIg6A/d6yLeKTC0ocTJrtNnpsXZq6hpY0="
[mod."github.com/coreos/etcd"]
version = "v3.3.13+incompatible"
hash = "sha256-Hz8x4xE3ku/xSVlUW/LrKv2Tc9fo/PsIcy5LcE8OD4Q="
[mod."github.com/coreos/go-oidc"]
version = "v2.1.0+incompatible"
hash = "sha256-JSzXrEvaE12Re5Xm/qA0MKcqRaVIuHEh3v/0BRcptNI="
[mod."github.com/coreos/go-semver"]
version = "v0.3.0"
hash = "sha256-ielBK5+kGscOuygfFNNr5iKuuF1qKBiXLlK8eGuA4Bw="
[mod."github.com/coreos/go-systemd"]
version = "v0.0.0-20190321100706-95778dfbb74e"
hash = "sha256-1WiFUSLDPxsSVafwCkzz0xjpC0W7bNX/sJ0wRBVrvn4="
[mod."github.com/coreos/pkg"]
version = "v0.0.0-20180928190104-399ea9e2e55f"
hash = "sha256-R4EcMkhMPi5fSE5SU8Oa1FlvP5VEysXPaX9GYqnW15w="
[mod."github.com/cpuguy83/go-md2man/v2"]
version = "v2.0.0"
hash = "sha256-Pi84FPmTnz+Oq8tV9Lx7cMopiMculHkUtUmtWCuaX1s="
[mod."github.com/creack/pty"]
version = "v1.1.7"
hash = "sha256-o235RbsTlx++gnUf46iU5SPgxX5tQblrT5wYFAWnqvE="
[mod."github.com/davecgh/go-spew"]
version = "v1.1.1"
hash = "sha256-nhzSUrE1fCkN0+RL04N4h8jWmRFPPPWbCuDc7Ss0akI="
[mod."github.com/dgrijalva/jwt-go"]
version = "v3.2.0+incompatible"
hash = "sha256-t5rhczm+60rYmMg0mZTp86dJkzuGp/OLd5ccXek+oiI="
[mod."github.com/dgryski/go-sip13"]
version = "v0.0.0-20181026042036-e10d5fee7954"
hash = "sha256-pgVia6npFluwOrbY1DyEgy5X2zzgHTe+pAkIrdyK3pU="
[mod."github.com/docker/distribution"]
version = "v2.7.1+incompatible"
hash = "sha256-8AFnEYjwqs8AzpSNBYgKmbUfFiCAxS+UH5SBFSuEctc="
[mod."github.com/docker/go-units"]
version = "v0.4.0"
hash = "sha256-f9d4OzZqYcsgP2gqutTPRju5BVFz4/pzefgSipGSD00="
[mod."github.com/docker/spdystream"]
version = "v0.0.0-20160310174837-449fdfce4d96"
hash = "sha256-VB9QUDdmpYNgAx1AeXVE4AgJc/w55j4DjuEkHeNlIpA="
[mod."github.com/docopt/docopt-go"]
version = "v0.0.0-20180111231733-ee0de3bc6815"
hash = "sha256-0mCKIC5x7aauBL8ahXB9ExMfoTJl55HaafWWWPNRmUI="
[mod."github.com/dustin/go-humanize"]
version = "v1.0.0"
hash = "sha256-gy4G1PnHD9iw2MitHX6y1y93qr3C9IncmXL7ttUMDs8="
[mod."github.com/elazarl/goproxy"]
version = "v0.0.0-20180725130230-947c36da3153"
hash = "sha256-aZb2tgdNc9f8k1wdT8+y71+AFJzgH4skELWhHwRVGaQ="
[mod."github.com/emersion/go-sasl"]
version = "v0.0.0-20190704090222-36b50694675c"
hash = "sha256-jI815xYE5ETZ1/kJSIHy5fz/AOP7NB7UlmQJR24Mnb0="
[mod."github.com/emersion/go-smtp"]
version = "v0.11.2"
hash = "sha256-lUV1TG5Dx/KoyoFIWqGAh3rnGKXtvcO1m9UMuVh0nb4="
[mod."github.com/emicklei/go-restful"]
version = "v2.9.5+incompatible"
hash = "sha256-ZsxRjMxQQxlc1FZbY51KyLiaqteSMPs/SjDmKfDxqAg="
[mod."github.com/envoyproxy/go-control-plane"]
version = "v0.9.1-0.20191026205805-5f8ba28d4473"
hash = "sha256-DFjKGsJUiBsD0+6E5zgyUDhjM2MWWqb3a7/0UueFuvg="
[mod."github.com/envoyproxy/protoc-gen-validate"]
version = "v0.1.0"
hash = "sha256-2htufg3hdOHfbDVI5wFpsuaiDIhH6O1taUGJMdVbjlQ="
[mod."github.com/evanphx/json-patch"]
version = "v4.9.0+incompatible"
hash = "sha256-UER1krCnasp2qAPCmG8ytBgcU8JoUab6KSy/mslx8po="
[mod."github.com/facebookgo/ensure"]
version = "v0.0.0-20160127193407-b4ab57deab51"
hash = "sha256-jdCvva9KDH6KTTAtW0fBNw67xd0DhxLQbxU8PdhWLKY="
[mod."github.com/facebookgo/stack"]
version = "v0.0.0-20160209184415-751773369052"
hash = "sha256-o6JL8oyrSBcgbdkvjUi4PT5OnfwgyXgbPQDA82sB2R8="
[mod."github.com/facebookgo/subset"]
version = "v0.0.0-20150612182917-8dac2c3c4870"
hash = "sha256-Ub0cBFwF6MBzTZ7fpqxrC375arBv+au5I/LLzksVzE8="
[mod."github.com/fatih/color"]
version = "v1.7.0"
hash = "sha256-4In7ef7it7d+6oGUJ3pkD0V+lsL40hVtYdy2KD2ovn0="
[mod."github.com/form3tech-oss/jwt-go"]
version = "v3.2.2+incompatible"
hash = "sha256-bwmJjAKIhIM7/6r8Uc/2RdlmR41RF+onJkYa5N/3NxQ="
[mod."github.com/fsnotify/fsnotify"]
version = "v1.4.9"
hash = "sha256-HZBMhbFqcZM9oxSbWqISzEE7GF7JZpco5tyta6c4OcQ="
[mod."github.com/ghodss/yaml"]
version = "v1.0.0"
hash = "sha256-D+2i+EwF2YptR0m/OG4WIVVLL7tUC7XvgRQef2usfGo="
[mod."github.com/globalsign/mgo"]
version = "v0.0.0-20181015135952-eeefdecb41b8"
hash = "sha256-kAxBzot2kKi5pKlE5hZ4GXlhIWXZuTXNL+p9kdaCKXU="
[mod."github.com/go-chi/chi"]
version = "v4.0.0+incompatible"
hash = "sha256-wRaYecq/359G5ebFkwsprfdj3tcc5y44CBbMBdvpXek="
[mod."github.com/go-gl/glfw"]
version = "v0.0.0-20190409004039-e6da0acd62b1"
hash = "sha256-tqPStzM1xOuEWqAv4pBbzB+lNIxEqqyCCP0wWCbrlyY="
[mod."github.com/go-gl/glfw/v3.3/glfw"]
version = "v0.0.0-20200222043503-6f7a984d4dc4"
hash = "sha256-6BfEsip1tEBelFTsKVtn2okCTb+0UsqEdIljg+PIjiE="
[mod."github.com/go-kit/kit"]
version = "v0.9.0"
hash = "sha256-dcW5++iYlt0zxgaZTpWXKl8LX4/npy+MadnXXmzzRUo="
[mod."github.com/go-logfmt/logfmt"]
version = "v0.4.0"
hash = "sha256-qX6aMMNTmN+D7LtQLZxW/LAKxRpze4vO77F2EQLrVRs="
[mod."github.com/go-logr/logr"]
version = "v0.3.0"
hash = "sha256-RKn3Lg2fSW6kD7e4WzHrD+kuYdkgaPj2S9g7pxU0qnc="
[mod."github.com/go-logr/zapr"]
version = "v0.2.0"
hash = "sha256-Uxkz/TEeeVYAZFJ1td2/iBynfhDtWqCWET66TXKJHrE="
[mod."github.com/go-openapi/analysis"]
version = "v0.19.5"
hash = "sha256-OPlDESGRm1hf8OI2ecQ8B0/t8id8DCAE8czd9eagxMQ="
[mod."github.com/go-openapi/errors"]
version = "v0.19.2"
hash = "sha256-Z1ZzcvnHbVgY2c20b5Dn5SRe4b6ZEA149JEoOzQYxr0="
[mod."github.com/go-openapi/jsonpointer"]
version = "v0.19.3"
hash = "sha256-WZL/QvFB0OYyvHPNRhkl1BI0NT0TFMqRFlojX9hZi9Q="
[mod."github.com/go-openapi/jsonreference"]
version = "v0.19.3"
hash = "sha256-XDP7dJdwIl/AYU85bpKXX3twGJBlMhIrt96RE1UPwtI="
[mod."github.com/go-openapi/loads"]
version = "v0.19.4"
hash = "sha256-4p/1ejm/8nO08iDMvqGz7Vazz+fq1AsiKDOKAG5grKc="
[mod."github.com/go-openapi/runtime"]
version = "v0.19.4"
hash = "sha256-r47bBf9kHHRimId2t0BZfEljg64KlwdHaWYIFRDKuOA="
[mod."github.com/go-openapi/spec"]
version = "v0.19.3"
hash = "sha256-klqjQ6mTn5jBWW7M3uPsDsx3ywEaheRTLHKDUm7AM7Y="
[mod."github.com/go-openapi/strfmt"]
version = "v0.19.3"
hash = "sha256-HMKD3i2QrR3IXWUn4+Nqpk8WQZ+WUh1WZq3IVGBaIMg="
[mod."github.com/go-openapi/swag"]
version = "v0.19.5"
hash = "sha256-D8qq6ZbWhLNroEisriI5d4zea5yQ7pzV/tl8XxjeZPw="
[mod."github.com/go-openapi/validate"]
version = "v0.19.5"
hash = "sha256-tC89PC7WY9YXm04868S/fZ1BAEg/DW6vui+0X6Nhm3E="
[mod."github.com/go-stack/stack"]
version = "v1.8.0"
hash = "sha256-26RlTEcAkbewMUtmirKrDGQ1WJlNousp69v7HMopYnI="
[mod."github.com/gogo/protobuf"]
version = "v1.3.1"
hash = "sha256-z1MHtD7vsSbAuOZ+IVXZAHajtS7k+sY/JW4/3PwYoAs="
[mod."github.com/golang/glog"]
version = "v0.0.0-20160126235308-23def4e6c14b"
hash = "sha256-YDyL9TRikSXHSrYtITVA/ovYIYrdnZGym14XnslAYkk="
[mod."github.com/golang/groupcache"]
version = "v0.0.0-20200121045136-8c9f03a8e57e"
hash = "sha256-0E3bzqOQk4xolVEGm0GXZ6tUpgCWF7DolyyKkdPJUm4="
[mod."github.com/golang/mock"]
version = "v1.4.1"
hash = "sha256-5LaaCRbIvFrATowswmQRe+JRRcb4v7u67Qxf21YSw/E="
[mod."github.com/golang/protobuf"]
version = "v1.4.3"
hash = "sha256-GoytLjWoBKfZq3eBDa4rGQNP2la2IrpkFSWjsH/sPBI="
[mod."github.com/google/btree"]
version = "v1.0.0"
hash = "sha256-5gr0RMnlvrzCke3kwpkf92WvW3x5nnKZesoulyoYRC0="
[mod."github.com/google/go-cmp"]
version = "v0.5.2"
hash = "sha256-BRyxX3Sd/ZsxCd0KB1tPFyvmhc+jH1cTFThVGQLxkGE="
[mod."github.com/google/gofuzz"]
version = "v1.1.0"
hash = "sha256-PSNufXo20YXfSNbayCc3hdujKZT5EW4lybsQ+WJ0Imo="
[mod."github.com/google/martian"]
version = "v2.1.0+incompatible"
hash = "sha256-N3tPu89U5MQqmtFIqSEfqEXNgnHf883TAmXKvA2N8KQ="
[mod."github.com/google/pprof"]
version = "v0.0.0-20200229191704-1ebb73c60ed3"
hash = "sha256-bogfN5hWzqf2kxEyA2XsUQu41nPcOBSvs1Z77x2zseI="
[mod."github.com/google/renameio"]
version = "v0.1.0"
hash = "sha256-XQ5yI+LMfFQuK7+T3Xx5jiaRP7GmiQSsPkFmm1TpIs4="
[mod."github.com/google/uuid"]
version = "v1.1.2"
hash = "sha256-DXttjObhEiMn5/OH+mYkJU6u03Gwsx5t08lTsIFyd+U="
[mod."github.com/googleapis/gax-go/v2"]
version = "v2.0.5"
hash = "sha256-2ibpBbDxLVeYHd8gdszHb3w8rgKrChbUNlkaxW9lIhU="
[mod."github.com/googleapis/gnostic"]
version = "v0.5.1"
hash = "sha256-LvWU9aCP3PgUtlGXvH1OcDySKd4jKUB2FVZx1Dkci3s="
[mod."github.com/gopherjs/gopherjs"]
version = "v0.0.0-20181017120253-0766667cb4d1"
hash = "sha256-AuXnjjoLbFZ85Oi8sldH117MBh+yCUB9HU5Y5syJ7Lg="
[mod."github.com/gorilla/websocket"]
version = "v1.4.2"
hash = "sha256-GhBLM/XTm2lFCyDvJbnCLAI2OyYXQV6W+jRPOQ1PdVY="
[mod."github.com/gregjones/httpcache"]
version = "v0.0.0-20180305231024-9cad4c3443a7"
hash = "sha256-2ngFfFuSm8YSTNZWGQuN5yTpsXlwY2R8aaIzjDnjTXI="
[mod."github.com/grpc-ecosystem/go-grpc-middleware"]
version = "v1.0.1-0.20190118093823-f849b5445de4"
hash = "sha256-qxUpPmUdsTGBRyX1PBCsVS6Jf8u0o8KCRuZNlheGo1A="
[mod."github.com/grpc-ecosystem/go-grpc-prometheus"]
version = "v1.2.0"
hash = "sha256-XtdBJuUYTXEokPrUetjD6iEqxFTBgyrm1M0X7r+1Uys="
[mod."github.com/grpc-ecosystem/grpc-gateway"]
version = "v1.9.5"
hash = "sha256-8vRk3cWgXBaq64feKhCcvA9T1J/kwr50AYhZyX2jZNA="
[mod."github.com/hashicorp/consul/api"]
version = "v1.1.0"
hash = "sha256-w2m1ObnPFNFUc8PTXABizzkVVd05g9cUKzMbkNghPoQ="
[mod."github.com/hashicorp/consul/sdk"]
version = "v0.1.1"
hash = "sha256-0UFJskter51L0yMXbr59hyOmCsW3rSZYOix9Nk/WuTc="
[mod."github.com/hashicorp/errwrap"]
version = "v1.0.0"
hash = "sha256-LGSLrefkABG1kH1i+GUWiD2/ggJxiZEJ+D2YNbhZjmo="
[mod."github.com/hashicorp/go-cleanhttp"]
version = "v0.5.1"
hash = "sha256-c54zcHr9THj3MQk7hrDQcpjOcQi1MvXZ4Kpin6EbfR4="
[mod."github.com/hashicorp/go-immutable-radix"]
version = "v1.0.0"
hash = "sha256-JmNxdGaJG63Ty/sVnPjqvTyA4/k5wkzZ/QvpMK2uduw="
[mod."github.com/hashicorp/go-msgpack"]
version = "v0.5.3"
hash = "sha256-2OUYjD/Jt12TFBrtH0wRqg+lzRljDxSIhk2CqBLUczo="
[mod."github.com/hashicorp/go-multierror"]
version = "v1.0.0"
hash = "sha256-iXzjerl96o7QDiSwQjbak8R/t+YzZeoUqm59TCmy3gI="
[mod."github.com/hashicorp/go-rootcerts"]
version = "v1.0.0"
hash = "sha256-4NZJAT5/vocyto+dv6FmW4kFiYldmNvewowsYK/LiTI="
[mod."github.com/hashicorp/go-sockaddr"]
version = "v1.0.0"
hash = "sha256-orG+SHVsp5lgNRCErmhMLABVFQ3ZWfYIJ/4LTFzlvao="
[mod."github.com/hashicorp/go-syslog"]
version = "v1.0.0"
hash = "sha256-YRuq6oPMwAFVY7mvwpMDvZqGwNnb5CjBYyKI/x5mbCc="
[mod."github.com/hashicorp/go-uuid"]
version = "v1.0.1"
hash = "sha256-s1wIvBu37z4U3qK9sdUR1CtbD39N6RwfX4HgDCpCa0s="
[mod."github.com/hashicorp/go.net"]
version = "v0.0.1"
hash = "sha256-JKal3E+wPO+Hk838opKV4HHKB4O72Xy+77ncXlLkWRk="
[mod."github.com/hashicorp/golang-lru"]
version = "v0.5.4"
hash = "sha256-1skUMZX+iIf66J1TBVYGWO1OWwQcaoXut3mne331q+k="
[mod."github.com/hashicorp/hcl"]
version = "v1.0.0"
hash = "sha256-xsRCmYyBfglMxeWUvTZqkaRLSW+V2FvNodEDjTGg1WA="
[mod."github.com/hashicorp/logutils"]
version = "v1.0.0"
hash = "sha256-e8t8Dm8sp/PzKClN1TOmFcrTAWNh4mZHSW7cAjVx3Bw="
[mod."github.com/hashicorp/mdns"]
version = "v1.0.0"
hash = "sha256-ravx4tklQG43OEjPiJn68iJM9ODZ6hgU0idFCEOiJGM="
[mod."github.com/hashicorp/memberlist"]
version = "v0.1.3"
hash = "sha256-IsxqevYulPt+2VGtlq068Jyq1YfIk4Ohh9TgakIGxnc="
[mod."github.com/hashicorp/serf"]
version = "v0.8.2"
hash = "sha256-diRxWOouFLTO75f2E9NlrKgie/qsT+gOOrrbf4tACHw="
[mod."github.com/hpcloud/tail"]
version = "v1.0.0"
hash = "sha256-7ByBr/RcOwIsGPCiCUpfNwUSvU18QAY+HMnCJr8uU1w="
[mod."github.com/ianlancetaylor/demangle"]
version = "v0.0.0-20181102032728-5e5cf60278f6"
hash = "sha256-5cS82VAt2PtDlx18XzvNwhp7zk/fryC9HCzdyEKYEro="
[mod."github.com/imdario/mergo"]
version = "v0.3.10"
hash = "sha256-VySdeGAscETmrtwc1apAIwqL6CwbDgU0yskvj24xByY="
[mod."github.com/inconshreveable/mousetrap"]
version = "v1.0.0"
hash = "sha256-ogTuLrV40FwS4ueo4hh6hi1wPywOI+LyIqfNjsibwNY="
[mod."github.com/jonboulle/clockwork"]
version = "v0.1.0"
hash = "sha256-dEV9aGzJRIrYfPpuJux3guJNvZGi+5dfseGurZqGHd8="
[mod."github.com/json-iterator/go"]
version = "v1.1.10"
hash = "sha256-jdS2C0WsgsWREBSj+YUzSqdZofMfUMecaOQ/lB9Mu6k="
[mod."github.com/jstemmer/go-junit-report"]
version = "v0.9.1"
hash = "sha256-fK6zLXQU8y+h+SqyeCUldA5OFPA/j0Wlbizk6AG60c4="
[mod."github.com/jtolds/gls"]
version = "v4.20.0+incompatible"
hash = "sha256-Zu5naRjnwOYBzRv0CYhIZTizA0AajzOg7mJrL7Bo/cw="
[mod."github.com/julienschmidt/httprouter"]
version = "v1.2.0"
hash = "sha256-xhj9PYKNIfQ/CQb8/3O3OtBmiIAJYtiL23cTnRj1C80="
[mod."github.com/kisielk/errcheck"]
version = "v1.2.0"
hash = "sha256-LWMRYTXVJENYwTYuJrlAiBSjGtSnMu0XQby3G0F4pio="
[mod."github.com/kisielk/gotool"]
version = "v1.0.0"
hash = "sha256-lsdQkue8gFz754PGqczUnvGiCQq87SruQtdrDdQVTpE="
[mod."github.com/konsorten/go-windows-terminal-sequences"]
version = "v1.0.3"
hash = "sha256-9HojTXKv7b3HiEhYaKXDxraEfvU5vrg47FbCjTRpOvs="
[mod."github.com/kr/logfmt"]
version = "v0.0.0-20140226030751-b84e30acd515"
hash = "sha256-CePQbqWGtS8qP/Av9pkLiqZwH6RaZQff/s1l+1//jQo="
[mod."github.com/kr/pretty"]
version = "v0.2.0"
hash = "sha256-127gkrb5HVPOCp0sGZOmiJPaQuQ4zptRw0MNGP53i/s="
[mod."github.com/kr/pty"]
version = "v1.1.5"
hash = "sha256-7wK2dT+rB1SfkhXho6PA3IPKR6zhVGDhtPtJmkiwepo="
[mod."github.com/kr/text"]
version = "v0.1.0"
hash = "sha256-QT65kTrNypS5GPWGvgnCpGLPlVbQAL4IYvuqAKhepb4="
[mod."github.com/liggitt/tabwriter"]
version = "v0.0.0-20181228230101-89fcab3d43de"
hash = "sha256-b6pLitORwgfGpOHpe45ykj00P17utbDv8bv6MCVoCBM="
[mod."github.com/magiconair/properties"]
version = "v1.8.1"
hash = "sha256-y9tzLVKluie7cCruJ86XvjA2rUDeE8Q+gpkBDnrg+Kc="
[mod."github.com/mailgun/mailgun-go/v3"]
version = "v3.6.4"
hash = "sha256-//QGyCNr5csr8DQV27DK0PuCCSFZCgIGnCiuRmwZPtI="
[mod."github.com/mailru/easyjson"]
version = "v0.7.0"
hash = "sha256-YxqTR5fcfOh2jBKdMBEs6rrb+TLuOo/YXzUbzV6j/S8="
[mod."github.com/mattn/go-colorable"]
version = "v0.0.9"
hash = "sha256-fVPF8VxbdggLAZnaexMl6Id1WjXKImzVySxKfa+ukts="
[mod."github.com/mattn/go-isatty"]
version = "v0.0.4"
hash = "sha256-PI32zFAKvQpIFSfuvIFeL4Orxr696dAxkokrzIQUSX8="
[mod."github.com/mattn/go-runewidth"]
version = "v0.0.2"
hash = "sha256-60sxUu16q5jJXQg3qlMhiJAFHgMaTdKjscV+N352eW4="
[mod."github.com/matttproud/golang_protobuf_extensions"]
version = "v1.0.2-0.20181231171920-c182affec369"
hash = "sha256-uovu7OycdeZ2oYQ7FhVxLey5ZX3T0FzShaRldndyGvc="
[mod."github.com/miekg/dns"]
version = "v1.0.14"
hash = "sha256-OeijUgBaEmDapclTxfvjIqrjh4qZu3+DQpHelGGI4aA="
[mod."github.com/mitchellh/cli"]
version = "v1.0.0"
hash = "sha256-4nG7AhRcjTRCwUCdnaNaFrAKDxEEoiihaCA4lk+uM8U="
[mod."github.com/mitchellh/go-homedir"]
version = "v1.1.0"
hash = "sha256-oduBKXHAQG8X6aqLEpqZHs5DOKe84u6WkBwi4W6cv3k="
[mod."github.com/mitchellh/go-testing-interface"]
version = "v1.0.0"
hash = "sha256-/Dpv/4i5xuK8hDH+q8YTdF6Jg6NNtfO4Wqig2JCWgrY="
[mod."github.com/mitchellh/gox"]
version = "v0.4.0"
hash = "sha256-GV3LYxzJt8YVbnSac2orlj2QR3MX/YIDrLkSkPhsjuA="
[mod."github.com/mitchellh/iochan"]
version = "v1.0.0"
hash = "sha256-b5Tp7cw/e8mL++IjsebbmKWXtb9Hrzu4Fc6M4tZKFhU="
[mod."github.com/mitchellh/mapstructure"]
version = "v1.1.2"
hash = "sha256-OU9HZYHtl0qaqMFd84w7snkkRuRY6UMSsfCnL5HYdw0="
[mod."github.com/moby/term"]
version = "v0.0.0-20200312100748-672ec06f55cd"
hash = "sha256-ls9pFDkGX7g8HkHOV95anmTylekre6VlhQGENqpWV3c="
[mod."github.com/modern-go/concurrent"]
version = "v0.0.0-20180306012644-bacd9c7ef1dd"
hash = "sha256-OTySieAgPWR4oJnlohaFTeK1tRaVp/b0d1rYY8xKMzo="
[mod."github.com/modern-go/reflect2"]
version = "v1.0.1"
hash = "sha256-5D1HGVBc/REwPVdlPYcXsbZM80OIh7V5uiyKAbMA5qo="
[mod."github.com/munnerz/goautoneg"]
version = "v0.0.0-20191010083416-a7dc8b61c822"
hash = "sha256-79URDDFenmGc9JZu+5AXHToMrtTREHb3BC84b/gym9Q="
[mod."github.com/mwitkow/go-conntrack"]
version = "v0.0.0-20161129095857-cc309e4a2223"
hash = "sha256-rgZ2fm0Vi04xGDhkeFPDSZ+KPKi0a/5rerjOdea1eVk="
[mod."github.com/mxk/go-flowrate"]
version = "v0.0.0-20140419014527-cca7078d478f"
hash = "sha256-gRTfRfff/LRxC1SXXnQd2tV3UTcTx9qu90DJIVIaGn8="
[mod."github.com/nxadm/tail"]
version = "v1.4.4"
hash = "sha256-S336Q+5j2uVmwLOfEUpU0iFBEEDH+UtdQO0NWPsc9OY="
[mod."github.com/oklog/ulid"]
version = "v1.3.1"
hash = "sha256-LNn883rYNiaoY9sGEPIzlMRx5UwGThdYTjXqfzeGc9k="
[mod."github.com/olekukonko/tablewriter"]
version = "v0.0.0-20170122224234-a0225b3f23b5"
hash = "sha256-ARnzbCFVz0npfCrsnhi64+bhi8i7SijouaMZ/7vJ6S4="
[mod."github.com/onsi/ginkgo"]
version = "v1.14.1"
hash = "sha256-izztwvDMHgP0SVhWY2eOKYrACfHmyHZ0FuNVDN2b2qI="
[mod."github.com/onsi/gomega"]
version = "v1.10.2"
hash = "sha256-cpdElXWK4WJahVbqF8EeaLW71ZPkRVg9KjsUzl7WS8U="
[mod."github.com/opencontainers/go-digest"]
version = "v1.0.0"
hash = "sha256-cfVDjHyWItmUGZ2dzQhCHgmOmou8v7N+itDkLZVkqkQ="
[mod."github.com/openshift/api"]
version = "v3.9.0+incompatible"
hash = "sha256-rawzDdF7xnQYXwKWYCMCLXrtQ8MojTWW2mkpwrzgCeU="
[mod."github.com/pascaldekloe/goe"]
version = "v0.0.0-20180627143212-57f6aae5913c"
hash = "sha256-2KUjqrEC/BwkTZRxImazcI/C3H7QmXfNrlt8slwdDbc="
[mod."github.com/pborman/uuid"]
version = "v1.2.0"
hash = "sha256-zz0hvDdrajoUaOCXvI/2EIGGoWQa0QlCyFV0jqU3JDg="
[mod."github.com/pelletier/go-toml"]
version = "v1.2.0"
hash = "sha256-Yt9MGTbIaU/1FhE7SO5UCQbTLxe+2vsypTdf38i3kFY="
[mod."github.com/peterbourgon/diskv"]
version = "v2.0.1+incompatible"
hash = "sha256-K4mEVjH0eyxyYHQRxdbmgJT0AJrfucUwGB2BplRRt9c="
[mod."github.com/pkg/errors"]
version = "v0.9.1"
hash = "sha256-mNfQtcrQmu3sNg/7IwiieKWOgFQOVVe2yXgKBpe/wZw="
[mod."github.com/pmezard/go-difflib"]
version = "v1.0.0"
hash = "sha256-/FtmHnaGjdvEIKAJtrUfEhV7EVo5A/eYrtdnUkuxLDA="
[mod."github.com/posener/complete"]
version = "v1.1.1"
hash = "sha256-heyPMSBzVlx7ZKgTyzl/xmUfZw3EZCcvGFGrRMIbIr8="
[mod."github.com/pquerna/cachecontrol"]
version = "v0.0.0-20171018203845-0dec1b30a021"
hash = "sha256-0A/9Zx0atCqUZdnuVdlMdnNrQtKn4jxQWjsDszN03pM="
[mod."github.com/prometheus/client_golang"]
version = "v1.7.1"
hash = "sha256-PBgo8EAcqkRYLyFxR3GKOP/zzNvu7A18uq/FgSVfPEU="
[mod."github.com/prometheus/client_model"]
version = "v0.2.0"
hash = "sha256-LTHxYPRgoggl+v89ly2/RkyPIuJlmZRdGs6ZRtK3zkk="
[mod."github.com/prometheus/common"]
version = "v0.10.0"
hash = "sha256-MYAZJFhir6b2fV8ggC7q9kzIG5h52K7/j+5tq7H7R+U="
[mod."github.com/prometheus/procfs"]
version = "v0.1.3"
hash = "sha256-JJk/ZBGd1ZJep6RFjaS6IZCeDklcSLwkWZ4MtJoDeOc="
[mod."github.com/prometheus/tsdb"]
version = "v0.7.1"
hash = "sha256-BPz7YJbfMZgeR+u9YaeWeipVzHIS73EdgXD7VSJSLbA="
[mod."github.com/rogpeppe/fastuuid"]
version = "v0.0.0-20150106093220-6724a57986af"
hash = "sha256-n4HjQqPQwAH49y6AoG6vxa38pkJylgU2kR2a7uAtRos="
[mod."github.com/rogpeppe/go-internal"]
version = "v1.3.0"
hash = "sha256-JgiasZeXDy10syy7wmXtqRffDY7CJ1o5VNY+FmmAjVU="
[mod."github.com/russross/blackfriday/v2"]
version = "v2.0.1"
hash = "sha256-smS2RGP+eOAlWkCJKSQZv7PIKUyJIKM/ty+T1nQ8n1o="
[mod."github.com/ryanuber/columnize"]
version = "v0.0.0-20160712163229-9b3edd62028f"
hash = "sha256-RLUQcU6Z03upKe08v6rjn9/tkyrQsgmpdEmBtWaLQfk="
[mod."github.com/sean-/seed"]
version = "v0.0.0-20170313163322-e2103e2c3529"
hash = "sha256-RQQTjvf8Y91jP5FGOyEnGMFw7zCrcSnUU4eH2CXKkT4="
[mod."github.com/sergi/go-diff"]
version = "v1.0.0"
hash = "sha256-I8rbJFKm44u/wS/gz+2yX9882xXcBdb9mKEKq5OoJRU="
[mod."github.com/shurcooL/sanitized_anchor_name"]
version = "v1.0.0"
hash = "sha256-DtFSzeLmD1fAl103ncgwab7Vv2F0aulsA+gbkq24ab8="
[mod."github.com/sirupsen/logrus"]
version = "v1.6.0"
hash = "sha256-4v27X4yyl52BtZcZEnDe0tfvOaEq+TCcp7R8HBzreDM="
[mod."github.com/smartystreets/assertions"]
version = "v0.0.0-20180927180507-b2de0cb4f26d"
hash = "sha256-PoE+VQEnzJogI/mDBJ6dTCCR217nFjHfYWXQt9Vr9MQ="
[mod."github.com/smartystreets/goconvey"]
version = "v1.6.4"
hash = "sha256-gDEvwEBgCVYi6daVRlQ2DUXFFlpybM1h4HyvvHphmM4="
[mod."github.com/soheilhy/cmux"]
version = "v0.1.4"
hash = "sha256-EGyOVbQFq4k+A2M61ZMZ5aAM8uwOPLOcp3ynhswz47g="
[mod."github.com/spaolacci/murmur3"]
version = "v0.0.0-20180118202830-f09979ecbc72"
hash = "sha256-RWD4PPrlAsZZ8Xy356MBxpj+/NZI7w2XOU14Ob7/Y9M="
[mod."github.com/spf13/afero"]
version = "v1.2.2"
hash = "sha256-SZVSWEvRzFGZm5u384Rp/LU0dyJ00oIqEQOV9nAxOUk="
[mod."github.com/spf13/cast"]
version = "v1.3.0"
hash = "sha256-hbVF7F0YsgSybYEJa7W+Rz0As6OpgmpZOxB5JLFzAXc="
[mod."github.com/spf13/cobra"]
version = "v1.1.1"
hash = "sha256-YdKaCAvr6wAMOQSGzNnNG9LO6Q60T6Z6VSJVTUblomM="
[mod."github.com/spf13/jwalterweatherman"]
version = "v1.0.0"
hash = "sha256-KLftz+gaA5wSkvLqvQ7CuboB79kKEoTJvgTtrXatbiQ="
[mod."github.com/spf13/pflag"]
version = "v1.0.5"
hash = "sha256-w9LLYzxxP74WHT4ouBspH/iQZXjuAh2WQCHsuvyEjAw="
[mod."github.com/spf13/viper"]
version = "v1.7.0"
hash = "sha256-rEBEKDZBAwf429NryLeHHpdzcleC4689hiib584TNiU="
[mod."github.com/stoewer/go-strcase"]
version = "v1.2.0"
hash = "sha256-Vc8Ecx5DBeAK89TgqxaHV7TUrpjGMUdV6cOc3FM297A="
[mod."github.com/stretchr/objx"]
version = "v0.2.0"
hash = "sha256-fx9mfz6FjbV2YtLQzk7Wzd+saejwoad2scLLC7Apvnw="
[mod."github.com/stretchr/testify"]
version = "v1.6.1"
hash = "sha256-GwrZr9lU8698GFal0l/sFQ/TYP/eQIeNnnYJWpe3/IE="
[mod."github.com/subosito/gotenv"]
version = "v1.2.0"
hash = "sha256-RUsfBl9xvHk8H6SPwiLi/BpHjkyO/YLvlFmRfGRIW1U="
[mod."github.com/tidwall/pretty"]
version = "v1.0.0"
hash = "sha256-yYJteRI4Eqz63LE++QD+CSBwGn+iXpWkhgjSAVKRl8s="
[mod."github.com/tmc/grpc-websocket-proxy"]
version = "v0.0.0-20190109142713-0ad062ec5ee5"
hash = "sha256-5OJsX5qqW/MeL4gCapWnU/KvNeAply9cT9xezdMm3Ko="
[mod."github.com/ugorji/go"]
version = "v1.1.4"
hash = "sha256-n64h3QxN01hQlPOYknATipMitT1hlQGmqfeQgqU38+I="
[mod."github.com/urfave/cli"]
version = "v1.20.0"
hash = "sha256-l2ogVVY9/fmxFtjuaphK8myaPzVYDblPrLWm8kHkJn8="
[mod."github.com/vektah/gqlparser"]
version = "v1.1.2"
hash = "sha256-HggIzAVe5vjXHnmEoZQMJSppo6CcrBvo955oB/pkf/c="
[mod."github.com/xiang90/probing"]
version = "v0.0.0-20190116061207-43a291ad63a2"
hash = "sha256-sXyLzdjys2YAQBxz1ELmV3RulY5huFrOEUQWaYKuQvw="
[mod."github.com/xordataexchange/crypt"]
version = "v0.0.3-0.20170626215501-b2862e3d0a77"
hash = "sha256-HuXuIK/V5iNuF7j68acNQ3SW7rrn1efaI/Rfq0xBAxM="
[mod."github.com/yuin/goldmark"]
version = "v1.1.27"
hash = "sha256-Q6Q1tGQ0hbE0A//TT3yrxcvdIrDRB+QZjnyCGC1m4qA="
[mod."go.etcd.io/bbolt"]
version = "v1.3.5"
hash = "sha256-WVxU7zZkP0+gmwjscUWQHE8iiqOSl+0XMOA8tm98xMA="
[mod."go.etcd.io/etcd"]
version = "v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5"
hash = "sha256-Sdrmrh2rvdUDp7eGpzzaq8rI1IJeRmoNQM7YZE8RNek="
[mod."go.mongodb.org/mongo-driver"]
version = "v1.1.2"
hash = "sha256-TMY/sQ0aDKKeflR8O5haS2fOvtSNxM3CMe+vGwXkseU="
[mod."go.opencensus.io"]
version = "v0.22.3"
hash = "sha256-A6qNyBe3ubB3hu8VJKEzo4uohvhP3dI6hOwItlvxVW8="
[mod."go.uber.org/atomic"]
version = "v1.6.0"
hash = "sha256-BR42nmQCrvUSK1qWUcVaP+pYAEJOg5kJgE6q8DKEml0="
[mod."go.uber.org/goleak"]
version = "v1.1.10"
hash = "sha256-1sme1os5aD2mR+Sv/qTJ96PZ32lXbf+uuxdMqSkoREs="
[mod."go.uber.org/multierr"]
version = "v1.5.0"
hash = "sha256-vMCPfQVr5zYI5+9rlZjA64YeJDSPCDDiA3Rkx7+v7nU="
[mod."go.uber.org/tools"]
version = "v0.0.0-20190618225709-2cfd321de3ee"
hash = "sha256-vLL9lT4iMxODR5+I6ZS14V4WcEd7REPNYZt0pCdNKLM="
[mod."go.uber.org/zap"]
version = "v1.15.0"
hash = "sha256-JCzUvn9PEi4LmBdHMrZQ+pMtE8e/qT2Lx8ZG1yHFeXQ="
[mod."golang.org/x/crypto"]
version = "v0.0.0-20201002170205-7f63de1d35b0"
hash = "sha256-odncubE1ux7rzvBPa04mvf1/3cYYaoflyLc2op1MKLc="
[mod."golang.org/x/exp"]
version = "v0.0.0-20200224162631-6cc2880d07d6"
hash = "sha256-bhrVk10F9h0g3uRn+rJEA66KqUNy6fG2H56T04KfXPk="
[mod."golang.org/x/image"]
version = "v0.0.0-20190802002840-cff245a6509b"
hash = "sha256-BP2l1VUXd5afv4fsZ9g6WYy6zEPY782ZAsMrFSe1P0I="
[mod."golang.org/x/lint"]
version = "v0.0.0-20200302205851-738671d3881b"
hash = "sha256-LNkJ9QCzsDgFjrLI+hYNISu9jrsu9tX9tFKm4i/5cUo="
[mod."golang.org/x/mobile"]
version = "v0.0.0-20190719004257-d2bd2a29d028"
hash = "sha256-At0uE2mTr/GHCyF4U8Z+AiU2jlvBVQuX25tooo2ll6M="
[mod."golang.org/x/mod"]
version = "v0.4.2"
hash = "sha256-AMaxD67GPHd887NjhG6ANFtFUPIgHs+hadJ82NJk7Go="
[mod."golang.org/x/net"]
version = "v0.0.0-20201110031124-69a78807bb2b"
hash = "sha256-4HyK8M534grJBjGZLu+z3llChR6N1zc+e3MQa32iYLQ="
[mod."golang.org/x/oauth2"]
version = "v0.0.0-20200107190931-bf48bf16ab8d"
hash = "sha256-r+VK6vgr8pMOmLXonG6YhBSUQ+kZJzdHgpV/YFZsOeo="
[mod."golang.org/x/sync"]
version = "v0.0.0-20190911185100-cd5d95a43a6e"
hash = "sha256-ukGj21BvQcm+cQjIkpabFUeFtABQRlFUZXjj4MX3E9s="
[mod."golang.org/x/sys"]
version = "v0.0.0-20201112073958-5cba982894dd"
hash = "sha256-z/otbS29pjxXRSv7HbpyUtNXyFaUlApmXP7SDu4kBew="
[mod."golang.org/x/text"]
version = "v0.3.4"
hash = "sha256-si28LUeDO14RbU4ZAEYNB3XdClrBvFxy2EIDcgXlB70="
[mod."golang.org/x/time"]
version = "v0.0.0-20200630173020-3af7569d3a1e"
hash = "sha256-eAuotYbzGk6rh6okOQXX0vtw2/uBVONTIlFrugeHGBY="
[mod."golang.org/x/tools"]
version = "v0.0.0-20200616133436-c1934b75d054"
hash = "sha256-s5WyeTDYIOO6qtPVgHFqcqT0qqueHla+T0yW6TaOZyw="
[mod."golang.org/x/xerrors"]
version = "v0.0.0-20200804184101-5ec99f83aff1"
hash = "sha256-62f++IO8Ia32CYy+xX8XDxCcT9r1sbPvVwoKV99gf7U="
[mod."gomodules.xyz/jsonpatch/v2"]
version = "v2.1.0"
hash = "sha256-HuctlpVnROBC74gjJvWGziMP1pjzRmE3ga8yYyACwDg="
[mod."google.golang.org/api"]
version = "v0.20.0"
hash = "sha256-m7nqVlRss1EJbNEn7uIOXxXdspqNtlcxpMQotWCgJm8="
[mod."google.golang.org/appengine"]
version = "v1.6.6"
hash = "sha256-nZnEfsXy3mgzRnlyWGHJKqsosvnAQFkhVszw3DSFe6Y="
[mod."google.golang.org/genproto"]
version = "v0.0.0-20200526211855-cb27e3aa2013"
hash = "sha256-wFVFmWkQLFRBBNTt3C0Dy3GChkYEYnaDLVbQhyq2K1g="
[mod."google.golang.org/grpc"]
version = "v1.27.1"
hash = "sha256-jPk1fgEH3hVbXuSCY2kGXdWZoRom+wkmnx82fyrxnB4="
[mod."google.golang.org/protobuf"]
version = "v1.25.0"
hash = "sha256-3sf57K5A0nmA1UmDe+6FUNJI6UR+SfVyZWNv+2TGHT4="
[mod."gopkg.in/alecthomas/kingpin.v2"]
version = "v2.2.6"
hash = "sha256-uViE2kPj7tMrGYVjjdLOl2jFDmmu+3P7GvnZBse2zVY="
[mod."gopkg.in/alexcesaro/quotedprintable.v3"]
version = "v3.0.0-20150716171945-2caba252f4dc"
hash = "sha256-6cgI1fteSkqNYkNeReaHz0El7hbomNiRyueg44BHI7o="
[mod."gopkg.in/check.v1"]
version = "v1.0.0-20190902080502-41f04d3bba15"
hash = "sha256-Xl5gjoqU26M+Yxm6Xok5VHVpYT5hItwsN7d2Wj9L020="
[mod."gopkg.in/cheggaaa/pb.v1"]
version = "v1.0.25"
hash = "sha256-tw2ZjiPI6xoxFIlftyGI6AP1kdOTkjf8B9v34QyPuG8="
[mod."gopkg.in/errgo.v2"]
version = "v2.1.0"
hash = "sha256-Ir/MuxQFxvVJEciovGOZbM8ZfKJ/AYotPwYfH2FctRg="
[mod."gopkg.in/fsnotify.v1"]
version = "v1.4.7"
hash = "sha256-j/Ts92oXa3k1MFU7Yd8/AqafRTsFn7V2pDKCyDJLah8="
[mod."gopkg.in/gomail.v2"]
version = "v2.0.0-20160411212932-81ebce5c23df"
hash = "sha256-rCKRESTIHR6dkn4HEx6ZlxHfqLTmJvIAtjQFXXaevn0="
[mod."gopkg.in/inf.v0"]
version = "v0.9.1"
hash = "sha256-z84XlyeWLcoYOvWLxPkPFgLkpjyb2Y4pdeGMyySOZQI="
[mod."gopkg.in/ini.v1"]
version = "v1.51.0"
hash = "sha256-gQ77WlSLs7+1ACOxnaSp5qb8KZd1tGsoNL9O4uq/jPE="
[mod."gopkg.in/natefinch/lumberjack.v2"]
version = "v2.0.0"
hash = "sha256-CLir3wRkgNy7tXQWODk7u3RP/W7qIsO2LADdM6/vWtQ="
[mod."gopkg.in/resty.v1"]
version = "v1.12.0"
hash = "sha256-t9KTjlm1K1WdPAZ0L6rLv0ME/iP/gKeKgvDjXMaxVRg="
[mod."gopkg.in/square/go-jose.v2"]
version = "v2.2.2"
hash = "sha256-e33daNofpMyBGiotc9/AiHxQ1SSqWSQdRxXxezh2+7I="
[mod."gopkg.in/tomb.v1"]
version = "v1.0.0-20141024135613-dd632973f1e7"
hash = "sha256-W/4wBAvuaBFHhowB67SZZfXCRDp5tzbYG4vo81TAFdM="
[mod."gopkg.in/yaml.v2"]
version = "v2.3.0"
hash = "sha256-8tPC5nMGvUFs97W6+JXsxJLjU6EpDmPG9tXo1DyFoNU="
[mod."gopkg.in/yaml.v3"]
version = "v3.0.0-20200615113413-eeeca48fe776"
hash = "sha256-c/F4pjTx7j+4DBQnRcWbat0WchqMACovc3ybW0ufoxo="
[mod."gotest.tools"]
version = "v2.2.0+incompatible"
hash = "sha256-BYTGCeD1GH0nUMxaP1ARTpfGk3vQroDNAgb3LYKhon4="
[mod."gotest.tools/v3"]
version = "v3.0.2"
hash = "sha256-R9KZ5NexCr9mexcjZhPlhRy+cx2d19vGD7hQ9xfFy/4="
[mod."honnef.co/go/tools"]
version = "v0.0.1-2020.1.3"
hash = "sha256-UI1MNNdyH+nfW7ShzHHTNNlmxOLeJVMSgf8ZfQtcEV8="
[mod."k8s.io/api"]
version = "v0.20.2"
hash = "sha256-5+6m+A1Wo8kWKay66NKcJ5fqGWxmJr5LPg639lShQDE="
[mod."k8s.io/apiextensions-apiserver"]
version = "v0.19.2"
hash = "sha256-LjasFi2AxTRLb/ys0cLz94NxcTb8psEzfm3DNlycvOI="
[mod."k8s.io/apimachinery"]
version = "v0.20.2"
hash = "sha256-3LXYQvpwquhax2fQ4MuDkPg5FhE7Ay/Vo6Tdv6gIDJc="
[mod."k8s.io/apiserver"]
version = "v0.19.2"
hash = "sha256-JMKW+Kz61PJPh9Z91cz7KyX5IfATp+mgA0NUsSRD6pY="
[mod."k8s.io/cli-runtime"]
version = "v0.20.2"
hash = "sha256-3I41thzbD2NG8yN0+pZKJ4Ka7N2BV+dUymJ5U1/Uz/s="
[mod."k8s.io/client-go"]
version = "v0.20.2"
hash = "sha256-+FQzTagUDGa9ypozeOFV4HLsw1hs09iD5vZoyR0TnOM="
[mod."k8s.io/code-generator"]
version = "v0.19.2"
hash = "sha256-6pGY44kQezwMTzjueHfH0P7GPqvYDJQhv6dRB0JxSDM="
[mod."k8s.io/component-base"]
version = "v0.19.2"
hash = "sha256-30CAvurpb0z+dCxXlscxNOWYjkENLWyo0WHexJsnPXI="
[mod."k8s.io/gengo"]
version = "v0.0.0-20200428234225-8167cfdcfc14"
hash = "sha256-n5N6dWGAE8EmgQOt/NO5Evj2HprLSyYzU3TduciOGDw="
[mod."k8s.io/klog/v2"]
version = "v2.4.0"
hash = "sha256-RA2ciIS20S6bMMeEMuBwYjEd89SA0YYrRChsM7l6mak="
[mod."k8s.io/kube-openapi"]
version = "v0.0.0-20201113171705-d219536bb9fd"
hash = "sha256-auYHc7KbLJy1WS9wgp00m8svxO1GlW7cgPb3PBQQpIU="
[mod."k8s.io/utils"]
version = "v0.0.0-20201110183641-67b214c5f920"
hash = "sha256-tSdQUw13SUGrxis61DFIU50rC5eX6PbQhrb8XrqGYSg="
[mod."rsc.io/binaryregexp"]
version = "v0.2.0"
hash = "sha256-izALTmzybQe67BNXliqQ3xCEOo+b6o8C4YoX5H0FWc0="
[mod."rsc.io/quote/v3"]
version = "v3.1.0"
hash = "sha256-sF7lOq/bInDPtLI+j610WJRAQ09Cxc5lmPzzytuE6DI="
[mod."rsc.io/sampler"]
version = "v1.3.0"
hash = "sha256-UPbUO3GOGn6/fz1EBEYONBX45V6bzQKQv6CoZb2Y3S8="
[mod."sigs.k8s.io/apiserver-network-proxy/konnectivity-client"]
version = "v0.0.9"
hash = "sha256-W57PwBlUDx/gj/Ylf5RUcjRK5dUYPynCxkK7vooEntM="
[mod."sigs.k8s.io/controller-runtime"]
version = "v0.7.0"
hash = "sha256-fj4SrqyXfyK62nU9TgQ4iFVZVe5PZjGuU09Cictlgc0="
[mod."sigs.k8s.io/kustomize"]
version = "v2.0.3+incompatible"
hash = "sha256-GG9d5cAwMMkLByE1XK6kM7TpLeutxhYJzOhq80ca6Ew="
[mod."sigs.k8s.io/structured-merge-diff/v4"]
version = "v4.0.2"
hash = "sha256-IEe1jeQdtgl1r2VCMfjNblXMBQe0htKJjps4PYE0f2w="
[mod."sigs.k8s.io/yaml"]
version = "v1.2.0"
hash = "sha256-HHqIfaFuKGalif3bP2CcHm8MT8Ily1kJQL9Q8Kz2WHA="

24
nix/shell.nix Normal file
View File

@ -0,0 +1,24 @@
{ pkgs ? (
let
inherit (builtins) fetchTree fromJSON readFile;
inherit ((fromJSON (readFile ./flake.lock)).nodes) nixpkgs gomod2nix;
in
import (fetchTree nixpkgs.locked) {
overlays = [
(import "${fetchTree gomod2nix.locked}/overlay.nix")
];
}
)
, mkGoEnv ? pkgs.mkGoEnv
, gomod2nix ? pkgs.gomod2nix
}:
let
goEnv = mkGoEnv { pwd = ../.; };
in
pkgs.mkShell {
packages = [
goEnv
gomod2nix
];
}

View File

@ -46,7 +46,7 @@ const (
AgentName = "seed-job-agent"
// DefaultAgentImage is the default image used for the seed-job agent
defaultAgentImage = "jenkins/inbound-agent:4.10-3"
defaultAgentImage = "jenkins/inbound-agent:3206.vb_15dcf73f6a_9-3"
creatingGroovyScriptName = "seed-job-groovy-script.groovy"

View File

@ -113,7 +113,7 @@ func TestEnsureSeedJobs(t *testing.T) {
var agentDeployment appsv1.Deployment
err = fakeClient.Get(ctx, types.NamespacedName{Namespace: jenkins.Namespace, Name: agentDeploymentName(*jenkins, AgentName)}, &agentDeployment)
assert.NoError(t, err)
assert.Equal(t, "jenkins/inbound-agent:4.10-3", agentDeployment.Spec.Template.Spec.Containers[0].Image)
assert.Equal(t, "jenkins/inbound-agent:3206.vb_15dcf73f6a_9-3", agentDeployment.Spec.Template.Spec.Containers[0].Image)
})
t.Run("delete agent deployment when no seed jobs", func(t *testing.T) {

View File

@ -8,7 +8,7 @@ const (
// SeedJobSuffix is a suffix added for all seed jobs
SeedJobSuffix = "job-dsl-seed"
// DefaultJenkinsMasterImage is the default Jenkins master docker image
DefaultJenkinsMasterImage = "jenkins/jenkins:2.414.1-lts"
DefaultJenkinsMasterImage = "jenkins/jenkins:2.440.1-lts"
// DefaultHTTPPortInt32 is the default Jenkins HTTP port
DefaultHTTPPortInt32 = int32(8080)
// DefaultSlavePortInt32 is the default Jenkins port for slaves

View File

@ -1,13 +1,13 @@
package plugins
const (
configurationAsCodePlugin = "configuration-as-code:1700.v6f448841296e"
configurationAsCodePlugin = "configuration-as-code:1775.v810dc950b_514"
gitPlugin = "git:5.2.1"
jobDslPlugin = "job-dsl:1.85"
kubernetesPlugin = "kubernetes:4029.v5712230ccb_f8"
kubernetesCredentialsProviderPlugin = "kubernetes-credentials-provider:1.234.vf3013b_35f5b_a"
jobDslPlugin = "job-dsl:1.87"
kubernetesPlugin = "kubernetes:4186.v1d804571d5d4"
kubernetesCredentialsProviderPlugin = "kubernetes-credentials-provider:1.258.v95949f923a_a_e"
workflowAggregatorPlugin = "workflow-aggregator:596.v8c21c963d92d"
workflowJobPlugin = "workflow-job:1342.v046651d5b_dfe"
workflowJobPlugin = "workflow-job:1385.vb_58b_86ea_fff1"
)
// basePluginsList contains plugins to install by operator.

View File

@ -24,13 +24,13 @@ import (
const e2e = "e2e"
var expectedBasePluginsList = []plugins.Plugin{
plugins.Must(plugins.New("configuration-as-code:1700.v6f448841296e")),
plugins.Must(plugins.New("configuration-as-code:1775.v810dc950b_514")),
plugins.Must(plugins.New("git:5.2.1")),
plugins.Must(plugins.New("kubernetes:4029.v5712230ccb_f8")),
plugins.Must(plugins.New("kubernetes-credentials-provider:1.234.vf3013b_35f5b_a")),
plugins.Must(plugins.New("job-dsl:1.85")),
plugins.Must(plugins.New("kubernetes:4186.v1d804571d5d4")),
plugins.Must(plugins.New("kubernetes-credentials-provider:1.258.v95949f923a_a_e")),
plugins.Must(plugins.New("job-dsl:1.87")),
plugins.Must(plugins.New("workflow-aggregator:596.v8c21c963d92d")),
plugins.Must(plugins.New("workflow-job:1342.v046651d5b_dfe")),
plugins.Must(plugins.New("workflow-job:1385.vb_58b_86ea_fff1")),
}
func createUserConfigurationSecret(namespace string, stringData map[string]string) {

View File

@ -125,10 +125,10 @@ func createJenkinsCRSafeRestart(name, namespace string, seedJob *[]v1alpha2.Seed
},
},
Plugins: []v1alpha2.Plugin{
{Name: "audit-trail", Version: "3.11"},
{Name: "simple-theme-plugin", Version: "136.v23a_15f86c53d"},
{Name: "github", Version: "1.36.0"},
{Name: "devoptics", Version: "1.1973", DownloadURL: "https://jenkins-updates.cloudbees.com/download/plugins/devoptics/1.1973/devoptics.hpi"},
{Name: "audit-trail", Version: "361.v82cde86c784e"},
{Name: "simple-theme-plugin", Version: "176.v39740c03a_a_f5"},
{Name: "github", Version: "1.38.0"},
{Name: "devoptics", Version: "2.0", DownloadURL: "https://jenkins-updates.cloudbees.com/download/plugins/devoptics/2.0/devoptics.hpi"},
},
PriorityClassName: priorityClassName,
NodeSelector: map[string]string{"kubernetes.io/os": "linux"},
@ -145,6 +145,7 @@ func createJenkinsCRSafeRestart(name, namespace string, seedJob *[]v1alpha2.Seed
Service: v1alpha2.Service{
Type: corev1.ServiceTypeNodePort,
Port: constants.DefaultHTTPPortInt32,
NodePort: 30303,
},
},
}
@ -239,10 +240,12 @@ func verifyJenkinsAPIConnection(jenkins *v1alpha2.Jenkins, namespace string) (je
func restartJenkinsMasterPod(jenkins *v1alpha2.Jenkins) {
_, _ = fmt.Fprintf(GinkgoWriter, "Restarting Jenkins master pod\n")
jenkinsPod := getJenkinsMasterPod(jenkins)
_, _ = fmt.Fprintf(GinkgoWriter, "Jenkins pod: %+v\n", jenkinsPod)
Expect(K8sClient.Delete(context.TODO(), jenkinsPod)).Should(Succeed())
Eventually(func() (bool, error) {
jenkinsPod = getJenkinsMasterPod(jenkins)
fmt.Printf("Jenkins pod deletion timestamp: %v\n", jenkinsPod.DeletionTimestamp)
return jenkinsPod.DeletionTimestamp != nil, nil
}, 45*retryInterval, retryInterval).Should(BeTrue())

View File

@ -53,7 +53,7 @@ func createPVC(namespace string) {
Namespace: namespace,
},
Spec: corev1.PersistentVolumeClaimSpec{
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteMany},
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
Resources: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("1Gi"),
@ -212,6 +212,7 @@ func createJenkinsWithBackupAndRestoreConfigured(name, namespace string) *v1alph
Service: v1alpha2.Service{
Type: corev1.ServiceTypeNodePort,
Port: constants.DefaultHTTPPortInt32,
NodePort: 30303,
},
},
}

View File

@ -21,7 +21,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/envtest"
)
const JenkinsTestImage = "jenkins/jenkins:2.414.1-lts"
const JenkinsTestImage = "jenkins/jenkins:2.440.1-lts"
var (
Cfg *rest.Config
@ -147,10 +147,10 @@ func RenderJenkinsCR(name, namespace string, seedJob *[]v1alpha2.SeedJob, groovy
},
},
Plugins: []v1alpha2.Plugin{
{Name: "audit-trail", Version: "3.11"},
{Name: "simple-theme-plugin", Version: "136.v23a_15f86c53d"},
{Name: "github", Version: "1.36.0"},
{Name: "devoptics", Version: "1.1973", DownloadURL: "https://jenkins-updates.cloudbees.com/download/plugins/devoptics/1.1973/devoptics.hpi"},
{Name: "audit-trail", Version: "361.v82cde86c784e"},
{Name: "simple-theme-plugin", Version: "176.v39740c03a_a_f5"},
{Name: "github", Version: "1.38.0"},
{Name: "devoptics", Version: "2.0", DownloadURL: "https://jenkins-updates.cloudbees.com/download/plugins/devoptics/2.0/devoptics.hpi"},
},
PriorityClassName: priorityClassName,
NodeSelector: map[string]string{"kubernetes.io/os": "linux"},
@ -167,6 +167,7 @@ func RenderJenkinsCR(name, namespace string, seedJob *[]v1alpha2.SeedJob, groovy
Service: v1alpha2.Service{
Type: corev1.ServiceTypeNodePort,
Port: constants.DefaultHTTPPortInt32,
NodePort: 30303,
},
Roles: []rbacv1.RoleRef{
{

View File

@ -20,7 +20,7 @@ import (
)
var (
retryInterval = time.Second * 5
retryInterval = time.Second * 10
)
func WaitForJenkinsBaseConfigurationToComplete(jenkins *v1alpha2.Jenkins) {
@ -53,6 +53,8 @@ func waitForRecreateJenkinsMasterPod(jenkins *v1alpha2.Jenkins) {
}
pods := &corev1.PodList{}
err := K8sClient.List(context.TODO(), pods, lo)
// debug print
_, _ = fmt.Fprintf(ginkgo.GinkgoWriter, "Pods: %+v\n", pods)
if err != nil {
return false, err
}

View File

@ -47,7 +47,7 @@ var _ = Describe("Jenkins Controller", func() {
cmd := exec.Command("../../bin/helm", "upgrade", "jenkins", "../../chart/jenkins-operator", "--namespace", namespace.Name, "--debug",
"--set-string", fmt.Sprintf("jenkins.namespace=%s", namespace.Name),
"--set-string", fmt.Sprintf("jenkins.image=%s", "jenkins/jenkins:2.414.1-lts"),
"--set-string", fmt.Sprintf("jenkins.image=%s", "jenkins/jenkins:2.440.1-lts"),
"--set-string", fmt.Sprintf("operator.image=%s", *imageName), "--install")
output, err := cmd.CombinedOutput()
Expect(err).NotTo(HaveOccurred(), string(output))
@ -80,9 +80,9 @@ var _ = Describe("Jenkins Controller with security validator", func() {
{Name: "github", Version: "1.36.0"},
}
validPlugins = []v1alpha2.Plugin{
{Name: "simple-theme-plugin", Version: "136.v23a_15f86c53d"},
{Name: "audit-trail", Version: "3.11"},
{Name: "github", Version: "1.37.3.1"},
{Name: "simple-theme-plugin", Version: "176.v39740c03a_a_f5"},
{Name: "audit-trail", Version: "361.v82cde86c784e"},
{Name: "github", Version: "1.38.0"},
}
)

View File

@ -1,4 +1,4 @@
SHELL := /bin/bash
SHELL := /usr/bin/env bash
PATH := $(GOPATH)/bin:$(PATH)
OSFLAG :=
@ -14,13 +14,18 @@ else
endif
endif
include config.base.env
define strip_quotes
$(shell echo $(1) | sed -e 's/^"//' -e 's/"$$//')
endef
# Import config
# You can change the default config with `make config="config_special.env" build`
config ?= config.minikube.env
config ?= config.kind.env
include $(config)
include config.base.env
$(foreach var,$(shell cat config.base.env),$(eval $(call strip_quotes,$(var))))
# Set an output prefix, which is the local directory if not specified
PREFIX?=$(shell pwd)
@ -99,4 +104,4 @@ endif
ENVTEST_ASSETS_DIR=$(shell pwd)/testbin
PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))
PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))