ci: add github checks

Add github actions checks.
This commit is contained in:
Serge Logvinov
2023-04-29 13:12:37 +03:00
committed by Serge
parent cc2dc17de2
commit 0d89bf5d58
21 changed files with 560 additions and 21 deletions

51
.conform.yaml Normal file
View File

@@ -0,0 +1,51 @@
policies:
- type: commit
spec:
header:
length: 89
imperative: true
case: lower
invalidLastCharacters: .
body:
required: true
dco: false
gpg: false
spellcheck:
locale: US
maximumOfOneCommit: false
conventional:
types:
- build
- chore
- ci
- docs
- perf
- refactor
- revert
- style
- test
scopes:
- deps
- main
descriptionLength: 72
- type: license
spec:
skipPaths:
- .git/
allowPrecedingComments: false
header: |
/*
Copyright 2023 The Kubernetes 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.
*/

View File

@@ -33,5 +33,6 @@ jobs:
- name: Build and push
run: make images
env:
USERNAME: ${{ github.repository_owner }}
PUSH: "true"
TAG: "edge"

View File

@@ -26,9 +26,11 @@ jobs:
go-version-file: 'go.mod'
cache: true
- name: Build
run: make build
- name: Lint
uses: golangci/golangci-lint-action@v3
with:
args: --config=.golangci.yml
- name: Unit
run: make unit
- name: Build
run: make build

View File

@@ -24,6 +24,4 @@ jobs:
- name: Run helm chart linter
run: ct --config hack/ct.yml lint
- name: Run helm template
run: |
helm template -n kube-system -f charts/talos-cloud-controller-manager/values-tests.yaml \
ccm charts/talos-cloud-controller-manager > /dev/null
run: make helm-unit

22
.github/workflows/conform.yaml vendored Normal file
View File

@@ -0,0 +1,22 @@
name: Conformance check
on:
pull_request:
branches:
- main
jobs:
conform:
name: Conformance
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
- name: Checkout main branch
run: git fetch --no-tags origin main:main
- name: Conform action
uses: talos-systems/conform@v0.1.0-alpha.27

34
.github/workflows/release-pre.yaml vendored Normal file
View File

@@ -0,0 +1,34 @@
name: Release check
on:
pull_request:
branches:
- main
jobs:
build-publish:
name: "Check release docs"
runs-on: ubuntu-22.04
if: startsWith(github.head_ref, 'release-')
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Unshallow
run: git fetch --prune --unshallow
- name: Release version
shell: bash
id: release
run: |
echo "TAG=${GITHUB_HEAD_REF:8}" >> "$GITHUB_ENV"
- name: Helm docs
uses: gabe565/setup-helm-docs-action@v1
- name: Generate
run: make docs
- name: Check
run: git diff --exit-code

33
.github/workflows/release.yaml vendored Normal file
View File

@@ -0,0 +1,33 @@
name: Release
on:
push:
tags:
- 'v*'
jobs:
build-publish:
name: "Build image and publish"
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Unshallow
run: git fetch --prune --unshallow
- name: Set up docker buildx
run: make docker-init
- name: Github registry login
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
run: make images
env:
PUSH: "true"

View File

@@ -21,7 +21,7 @@ else
BUILD_ARGS += --output type=docker
endif
######
############
# Help Menu
@@ -43,7 +43,10 @@ help: ## This help menu.
@echo "$$HELP_MENU_HEADER"
@grep -E '^[a-zA-Z0-9%_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
############
#
# Build Abstractions
#
build-all-archs:
@for arch in $(ARCHS); do $(MAKE) ARCH=$${arch} build ; done
@@ -58,25 +61,45 @@ build: ## Build
-o bin/proxmox-cloud-controller-manager-$(ARCH) ./cmd/proxmox-cloud-controller-manager
.PHONY: run
run: build
run: build ## Run
./bin/proxmox-cloud-controller-manager-$(ARCH) --v=5 --kubeconfig=kubeconfig --cloud-config=proxmox-config.yaml --controllers=cloud-node,cloud-node-lifecycle \
--use-service-account-credentials --leader-elect=false --bind-address=127.0.0.1
.PHONY: lint
lint: ## Lint
lint: ## Lint Code
golangci-lint run --config .golangci.yml
.PHONY: unit
unit:
unit: ## Unit Tests
go test -tags=unit $(shell go list ./...) $(TESTARGS)
############
.PHONY: helm-unit
helm-unit: ## Helm Unit Tests
@helm lint charts/proxmox-cloud-controller-manager
@helm template -f charts/proxmox-cloud-controller-manager/ci/values.yaml \
proxmox-cloud-controller-manager charts/proxmox-cloud-controller-manager >/dev/null
.PHONY: docs
docs:
helm template -n kube-system proxmox-cloud-controller-manager \
-f charts/proxmox-cloud-controller-manager/values.edge.yaml \
--set-string image.tag=$(TAG) \
charts/proxmox-cloud-controller-manager > docs/deploy/cloud-controller-manager.yml
helm template -n kube-system proxmox-cloud-controller-manager \
-f charts/proxmox-cloud-controller-manager/values.talos.yaml \
--set-string image.tag=$(TAG) \
charts/proxmox-cloud-controller-manager > docs/deploy/cloud-controller-manager-talos.yml
helm-docs charts/proxmox-cloud-controller-manager
# Docker stages
release-update:
git-chglog --config hack/chglog-config.yml -o CHANGELOG.md
############
#
# Docker Abstractions
#
docker-init:
docker run --rm --privileged multiarch/qemu-user-static:register --reset
@@ -87,8 +110,9 @@ docker-init:
docker buildx inspect --bootstrap multiarch
.PHONY: images
images:
images: ## Build images
@docker buildx build $(BUILD_ARGS) \
--build-arg TAG=$(TAG) \
--build-arg SHA=$(SHA) \
-t $(IMAGE):$(TAG) \
-f Dockerfile .

4
OWNERS Normal file
View File

@@ -0,0 +1,4 @@
approvers:
- sergelogvinov
reviewers:
- sergelogvinov

View File

@@ -2,11 +2,19 @@ apiVersion: v2
name: proxmox-cloud-controller-manager
description: A Helm chart for Kubernetes
type: application
home: https://github.com/sergelogvinov/proxmox-cloud-controller-manager
icon: https://proxmox.com/templates/yoo_nano2/favicon.ico
sources:
- https://github.com/sergelogvinov/proxmox-cloud-controller-manager
keywords:
- ccm
maintainers:
- name: sergelogvinov
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0
version: 0.1.1
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to

View File

@@ -0,0 +1,47 @@
# proxmox-cloud-controller-manager
![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.1](https://img.shields.io/badge/AppVersion-0.0.1-informational?style=flat-square)
A Helm chart for Kubernetes
**Homepage:** <https://github.com/sergelogvinov/proxmox-cloud-controller-manager>
## Maintainers
| Name | Email | Url |
| ---- | ------ | --- |
| sergelogvinov | | |
## Source Code
* <https://github.com/sergelogvinov/proxmox-cloud-controller-manager>
## Values
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| affinity | object | `{}` | Affinity for data pods assignment. ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity |
| config.clusters | list | `[]` | |
| enabledControllers | list | `["cloud-node","cloud-node-lifecycle"]` | List of controllers should be enabled. Use '*' to enable all controllers. Support only `cloud-node,cloud-node-lifecycle` controllers. |
| extraArgs | list | `[]` | Any extra arguments for talos-cloud-controller-manager |
| fullnameOverride | string | `""` | |
| image.pullPolicy | string | `"IfNotPresent"` | |
| image.repository | string | `"ghcr.io/sergelogvinov/proxmox-cloud-controller-manager"` | |
| image.tag | string | `""` | |
| imagePullSecrets | list | `[]` | |
| logVerbosityLevel | int | `2` | Log verbosity level. See https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md for description of individual verbosity levels. |
| nameOverride | string | `""` | |
| nodeSelector | object | `{}` | Node labels for data pods assignment. ref: https://kubernetes.io/docs/user-guide/node-selection/ |
| podAnnotations | object | `{}` | Annotations for data pods. ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ |
| podSecurityContext | object | `{"fsGroup":10258,"fsGroupChangePolicy":"OnRootMismatch","runAsGroup":10258,"runAsNonRoot":true,"runAsUser":10258}` | Pods Security Context. ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod |
| priorityClassName | string | `"system-cluster-critical"` | CCM pods' priorityClassName. |
| replicaCount | int | `1` | |
| resources.requests.cpu | string | `"10m"` | |
| resources.requests.memory | string | `"32Mi"` | |
| securityContext | object | `{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"seccompProfile":{"type":"RuntimeDefault"}}` | Container Security Context. ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod |
| serviceAccount | object | `{"annotations":{},"create":true,"name":""}` | Pods Service Account. ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| tolerations | list | `[{"effect":"NoSchedule","key":"node-role.kubernetes.io/control-plane","operator":"Exists"},{"effect":"NoSchedule","key":"node.cloudprovider.kubernetes.io/uninitialized","operator":"Exists"}]` | Tolerations for data pods assignment. ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ |
| updateStrategy | object | `{"rollingUpdate":{"maxUnavailable":1},"type":"RollingUpdate"}` | Deployment update stategy type. ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#updating-a-deployment |
----------------------------------------------
Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0)

View File

@@ -0,0 +1,27 @@
image:
repository: ghcr.io/sergelogvinov/proxmox-cloud-controller-manager
pullPolicy: Always
tag: edge
nodeSelector:
node-role.kubernetes.io/control-plane: ""
logVerbosityLevel: 4
enabledControllers:
- cloud-node
- cloud-node-lifecycle
config:
clusters:
- url: https://cluster-api-1.exmple.com:8006/api2/json
insecure: false
token_id: "user!token-id"
token_secret: "secret"
region: cluster-1
- url: https://cluster-api-2.exmple.com:8006/api2/json
insecure: false
token_id: "user!token-id"
token_secret: "secret"
region: cluster-2

View File

@@ -1,7 +0,0 @@
image:
repository: ghcr.io/sergelogvinov/proxmox-cloud-controller-manager
pullPolicy: Always
tag: edge
logVerbosityLevel: 4

View File

@@ -0,0 +1,13 @@
image:
pullPolicy: Always
tag: edge
nodeSelector:
node-role.kubernetes.io/control-plane: ""
logVerbosityLevel: 4
enabledControllers:
- cloud-node
- cloud-node-lifecycle

View File

@@ -0,0 +1,8 @@
nodeSelector:
node-role.kubernetes.io/control-plane: ""
logVerbosityLevel: 4
enabledControllers:
- cloud-node-lifecycle

View File

@@ -0,0 +1,204 @@
---
# Source: proxmox-cloud-controller-manager/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: proxmox-cloud-controller-manager
labels:
helm.sh/chart: proxmox-cloud-controller-manager-0.1.0
app.kubernetes.io/name: proxmox-cloud-controller-manager
app.kubernetes.io/instance: proxmox-cloud-controller-manager
app.kubernetes.io/version: "0.0.1"
app.kubernetes.io/managed-by: Helm
namespace: kube-system
---
# Source: proxmox-cloud-controller-manager/templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: proxmox-cloud-controller-manager
labels:
helm.sh/chart: proxmox-cloud-controller-manager-0.1.0
app.kubernetes.io/name: proxmox-cloud-controller-manager
app.kubernetes.io/instance: proxmox-cloud-controller-manager
app.kubernetes.io/version: "0.0.1"
app.kubernetes.io/managed-by: Helm
namespace: kube-system
data:
config.yaml: "Y2x1c3RlcnM6IFtd"
---
# Source: proxmox-cloud-controller-manager/templates/role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: system:proxmox-cloud-controller-manager
labels:
helm.sh/chart: proxmox-cloud-controller-manager-0.1.0
app.kubernetes.io/name: proxmox-cloud-controller-manager
app.kubernetes.io/instance: proxmox-cloud-controller-manager
app.kubernetes.io/version: "0.0.1"
app.kubernetes.io/managed-by: Helm
rules:
- apiGroups:
- coordination.k8s.io
resources:
- leases
verbs:
- get
- create
- update
- apiGroups:
- ""
resources:
- events
verbs:
- create
- patch
- update
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- list
- watch
- update
- patch
- delete
- apiGroups:
- ""
resources:
- nodes/status
verbs:
- patch
- apiGroups:
- ""
resources:
- serviceaccounts
verbs:
- create
- get
- apiGroups:
- ""
resources:
- serviceaccounts/token
verbs:
- create
---
# Source: proxmox-cloud-controller-manager/templates/rolebinding.yaml
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: system:proxmox-cloud-controller-manager
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:proxmox-cloud-controller-manager
subjects:
- kind: ServiceAccount
name: proxmox-cloud-controller-manager
namespace: kube-system
---
# Source: proxmox-cloud-controller-manager/templates/rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: system:proxmox-cloud-controller-manager:extension-apiserver-authentication-reader
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccount
name: proxmox-cloud-controller-manager
namespace: kube-system
---
# Source: proxmox-cloud-controller-manager/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: proxmox-cloud-controller-manager
labels:
helm.sh/chart: proxmox-cloud-controller-manager-0.1.0
app.kubernetes.io/name: proxmox-cloud-controller-manager
app.kubernetes.io/instance: proxmox-cloud-controller-manager
app.kubernetes.io/version: "0.0.1"
app.kubernetes.io/managed-by: Helm
namespace: kube-system
spec:
replicas: 1
strategy:
type: RollingUpdate
selector:
matchLabels:
app.kubernetes.io/name: proxmox-cloud-controller-manager
app.kubernetes.io/instance: proxmox-cloud-controller-manager
template:
metadata:
annotations:
checksum/config: c69436cb1e16c36ff708b1003d3ca4c6ee6484d2524e2ba7d9b68f473acaa1ca
labels:
app.kubernetes.io/name: proxmox-cloud-controller-manager
app.kubernetes.io/instance: proxmox-cloud-controller-manager
spec:
enableServiceLinks: false
priorityClassName: system-cluster-critical
serviceAccountName: proxmox-cloud-controller-manager
securityContext:
fsGroup: 10258
fsGroupChangePolicy: OnRootMismatch
runAsGroup: 10258
runAsNonRoot: true
runAsUser: 10258
containers:
- name: proxmox-cloud-controller-manager
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
seccompProfile:
type: RuntimeDefault
image: "ghcr.io/sergelogvinov/proxmox-cloud-controller-manager:edge"
imagePullPolicy: IfNotPresent
command: ["/proxmox-cloud-controller-manager"]
args:
- --v=4
- --cloud-provider=proxmox
- --cloud-config=/etc/proxmox/config.yaml
- --controllers=cloud-node-lifecycle
- --leader-elect-resource-name=cloud-controller-manager-proxmox
- --use-service-account-credentials
- --secure-port=10258
livenessProbe:
httpGet:
path: /healthz
port: 10258
scheme: HTTPS
initialDelaySeconds: 20
periodSeconds: 30
timeoutSeconds: 5
resources:
requests:
cpu: 10m
memory: 32Mi
volumeMounts:
- name: cloud-config
mountPath: /etc/proxmox
readOnly: true
nodeSelector:
node-role.kubernetes.io/control-plane: ""
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
operator: Exists
- effect: NoSchedule
key: node.cloudprovider.kubernetes.io/uninitialized
operator: Exists
volumes:
- name: cloud-config
secret:
secretName: proxmox-cloud-controller-manager
defaultMode: 416 # 0640

View File

@@ -162,10 +162,10 @@ spec:
seccompProfile:
type: RuntimeDefault
image: "ghcr.io/sergelogvinov/proxmox-cloud-controller-manager:edge"
imagePullPolicy: IfNotPresent
imagePullPolicy: Always
command: ["/proxmox-cloud-controller-manager"]
args:
- --v=2
- --v=4
- --cloud-provider=proxmox
- --cloud-config=/etc/proxmox/config.yaml
- --controllers=cloud-node,cloud-node-lifecycle
@@ -188,6 +188,8 @@ spec:
- name: cloud-config
mountPath: /etc/proxmox
readOnly: true
nodeSelector:
node-role.kubernetes.io/control-plane: ""
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane

33
hack/CHANGELOG.tpl.md Executable file
View File

@@ -0,0 +1,33 @@
{{ range .Versions }}
<a name="{{ .Tag.Name }}"></a>
## {{ if .Tag.Previous }}[{{ .Tag.Name }}]({{ $.Info.RepositoryURL }}/compare/{{ .Tag.Previous.Name }}...{{ .Tag.Name }}){{ else }}{{ .Tag.Name }}{{ end }} ({{ datetime "2006-01-02" .Tag.Date }})
Welcome to the {{ .Tag.Name }} release of Kubernetes cloud controller manager for Proxmox!
{{ if .CommitGroups -}}
{{ range .CommitGroups -}}
### {{ .Title }}
{{ range .Commits -}}
- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
{{ end }}
{{ end -}}
{{ end -}}
### Changelog
{{ range .Commits -}}{{ if ne .Subject "" -}}
* {{ .Hash.Short }} {{ .Header }}
{{ end }}{{ end }}
{{- if .NoteGroups -}}
{{ range .NoteGroups -}}
### {{ .Title }}
{{ range .Notes }}
{{ .Body }}
{{ end }}
{{ end -}}
{{ end -}}
{{ end -}}

24
hack/chglog-config.yml Executable file
View File

@@ -0,0 +1,24 @@
style: github
template: CHANGELOG.tpl.md
info:
title: CHANGELOG
repository_url: https://github.com/sergelogvinov/proxmox-cloud-controller-manager
options:
commits:
filters:
Type:
- feat
- fix
commit_groups:
title_maps:
feat: Features
fix: Bug Fixes
header:
pattern: "^(\\w*)(?:\\(([\\w\\$\\.\\-\\*\\s]*)\\))?\\:\\s(.*)$"
pattern_maps:
- Type
- Scope
- Subject
notes:
keywords:
- BREAKING CHANGE

9
hack/ct.yml Normal file
View File

@@ -0,0 +1,9 @@
helm-extra-args: --timeout 300s
check-version-increment: true
debug: true
chart-dirs:
- charts
validate-maintainers: true
namespace: default
release-label: test
target-branch: main

View File

@@ -136,6 +136,8 @@ func (i *instances) InstanceMetadata(_ context.Context, node *v1.Node) (*cloudpr
}, nil
}
klog.Infof("instances.InstanceMetadata() is kubelet has --cloud-provider=external on the node %s?", node.Name)
return &cloudprovider.InstanceMetadata{}, nil
}