Merge pull request 'feat(new): gateway support' (#119) from feat-gateway-api into main
changelog / changelog (push) Successful in 9s
check-and-test / check-and-test (push) Successful in 39s
generate-chart / generate-chart-publish (push) Successful in 31s
generate-chart / release-gitea (push) Successful in 10s

Reviewed-on: #119
This commit was merged in pull request #119.
This commit is contained in:
2026-07-04 16:34:13 +00:00
9 changed files with 286 additions and 0 deletions
+13
View File
@@ -1026,6 +1026,19 @@ To comply with the Gitea helm chart definition of the digest parameter, a "custo
| `ingress.hosts[0].paths[0].path` | Default Ingress path | `/` | | `ingress.hosts[0].paths[0].path` | Default Ingress path | `/` |
| `ingress.tls` | Ingress tls settings | `[]` | | `ingress.tls` | Ingress tls settings | `[]` |
### Gateway
| Name | Description | Value |
| --------------------------------------------- | ---------------------------------------------------------------- | --------------------- |
| `gateway.httpRoute.enabled` | Enable HTTPRoute | `false` |
| `gateway.httpRoute.annotations` | HTTPRoute annotations | `{}` |
| `gateway.httpRoute.hostnames` | HTTPRoute hostnames | `["git.example.com"]` |
| `gateway.httpRoute.parentRefs[0].name` | HTTPRoute Gateway name | `traefik` |
| `gateway.httpRoute.parentRefs[0].sectionName` | HTTPRoute Gateway section name | `https` |
| `gateway.httpRoute.parentRefs[0].kind` | HTTPRoute Gateway kind | `Gateway` |
| `gateway.httpRoute.pathType` | HTTPRoute path match type (PathPrefix, Exact, RegularExpression) | `PathPrefix` |
| `gateway.httpRoute.paths[0].path` | Default HTTPRoute path | `/` |
### deployment ### deployment
| Name | Description | Value | | Name | Description | Value |
+9
View File
@@ -471,3 +471,12 @@ https
{{- define "gitea.metrics-secret-name" -}} {{- define "gitea.metrics-secret-name" -}}
{{ default (printf "%s-metrics-secret" (include "gitea.fullname" .)) }} {{ default (printf "%s-metrics-secret" (include "gitea.fullname" .)) }}
{{- end -}} {{- end -}}
{{/*
Validate that Ingress and Gateway HTTPRoute are not enabled at the same time
*/}}
{{- define "gitea.validate-ingress-gateway-conflict" -}}
{{- if and ((.Values.ingress).enabled) (((.Values.gateway).httpRoute).enabled) -}}
{{- fail "You cannot enable both Ingress and HTTPRoute at the same time" -}}
{{- end -}}
{{- end -}}
+79
View File
@@ -0,0 +1,79 @@
{{- include "gitea.validate-ingress-gateway-conflict" . }}
{{- if .Values.gateway.httpRoute.enabled -}}
{{- $fullName := include "gitea.fullname" . -}}
{{- $httpPort := .Values.service.http.port -}}
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: {{ $fullName }}
namespace: {{ .Values.namespace | default .Release.Namespace }}
labels:
{{- include "gitea.labels" . | nindent 4 }}
annotations:
{{- range $key, $value := .Values.gateway.httpRoute.annotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
spec:
hostnames:
{{- range .Values.gateway.httpRoute.hostnames }}
- {{ tpl . $ | quote }}
{{- end }}
parentRefs:
{{- range .Values.gateway.httpRoute.parentRefs }}
- name: {{ .name | quote }}
{{- if .namespace }}
namespace: {{ .namespace | quote }}
{{- end }}
{{- if .kind }}
kind: {{ .kind | quote }}
{{- end }}
{{- if .group }}
group: {{ .group | quote }}
{{- end }}
{{- if .sectionName }}
sectionName: {{ .sectionName | quote }}
{{- end }}
{{- if .port }}
port: {{ .port }}
{{- end }}
{{- end }}
rules:
{{- if .Values.gateway.httpRoute.paths }}
{{- range .Values.gateway.httpRoute.paths }}
{{- if kindIs "string" . }}
- matches:
- path:
type: {{ default "PathPrefix" $.Values.gateway.httpRoute.pathType }}
value: {{ . }}
backendRefs:
- group: ""
kind: Service
name: {{ $fullName }}-http
namespace: {{ $.Values.namespace | default $.Release.Namespace }}
port: {{ $httpPort }}
{{- else }}
- matches:
- path:
type: {{ .pathType | default "PathPrefix" }}
value: {{ .path | default "/" }}
backendRefs:
- group: ""
kind: Service
name: {{ $fullName }}-http
namespace: {{ $.Values.namespace | default $.Release.Namespace }}
port: {{ $httpPort }}
{{- end }}
{{- end }}
{{- else }}
- matches:
- path:
type: PathPrefix
value: "/"
backendRefs:
- group: ""
kind: Service
name: {{ $fullName }}-http
namespace: {{ .Values.namespace | default .Release.Namespace }}
port: {{ $httpPort }}
{{- end }}
{{- end }}
+1
View File
@@ -1,3 +1,4 @@
{{- include "gitea.validate-ingress-gateway-conflict" . }}
{{- if .Values.ingress.enabled -}} {{- if .Values.ingress.enabled -}}
{{- $fullName := include "gitea.fullname" . -}} {{- $fullName := include "gitea.fullname" . -}}
{{- $httpPort := .Values.service.http.port -}} {{- $httpPort := .Values.service.http.port -}}
+74
View File
@@ -0,0 +1,74 @@
suite: Test httproute.yaml
templates:
- templates/gitea/httproute.yaml
tests:
- it: should enable httproute when gateway.httpRoute.enabled is true
set:
gateway.httpRoute.enabled: true
gateway.httpRoute.annotations:
some-annotation: some-value
gateway.httpRoute.hostnames:
- example.com
gateway.httpRoute.parentRefs:
- name: traefik
sectionName: https
kind: Gateway
gateway.httpRoute.paths:
- path: /
asserts:
- hasDocuments:
count: 1
- isKind:
of: HTTPRoute
- isAPIVersion:
of: gateway.networking.k8s.io/v1
- equal:
path: metadata.name
value: RELEASE-NAME-gitea
- equal:
path: metadata.annotations["some-annotation"]
value: some-value
- equal:
path: spec.hostnames[0]
value: "example.com"
- equal:
path: spec.parentRefs[0].name
value: "traefik"
- equal:
path: spec.parentRefs[0].kind
value: "Gateway"
- equal:
path: spec.parentRefs[0].sectionName
value: "https"
- equal:
path: spec.rules[0].matches[0].path.type
value: "PathPrefix"
- equal:
path: spec.rules[0].matches[0].path.value
value: "/"
- equal:
path: spec.rules[0].backendRefs[0].name
value: "RELEASE-NAME-gitea-http"
- equal:
path: spec.rules[0].backendRefs[0].port
value: 3000
- it: should not create httproute when gateway.httpRoute.enabled is false
set:
gateway.httpRoute.enabled: false
asserts:
- hasDocuments:
count: 0
- it: hostname using TPL
set:
global.giteaHostName: "gitea.example.com"
gateway.httpRoute.enabled: true
gateway.httpRoute.hostnames:
- "{{ .Values.global.giteaHostName }}"
asserts:
- isKind:
of: HTTPRoute
- equal:
path: spec.hostnames[0]
value: "gitea.example.com"
@@ -0,0 +1,19 @@
suite: Test httproute with implicit path defaults
templates:
- templates/gitea/httproute.yaml
tests:
- it: should use default path and pathType when no paths are specified
set:
gateway.httpRoute.enabled: true
gateway.httpRoute.paths: []
asserts:
- hasDocuments:
count: 1
- isKind:
of: HTTPRoute
- equal:
path: spec.rules[0].matches[0].path.type
value: "PathPrefix"
- equal:
path: spec.rules[0].matches[0].path.value
value: "/"
@@ -0,0 +1,56 @@
suite: Test httproute with structured paths
templates:
- templates/gitea/httproute.yaml
tests:
- it: should work with a plain string path
set:
gateway.httpRoute.enabled: true
gateway.httpRoute.paths:
- /
asserts:
- hasDocuments:
count: 1
- isKind:
of: HTTPRoute
- equal:
path: spec.rules[0].matches[0].path.type
value: "PathPrefix"
- equal:
path: spec.rules[0].matches[0].path.value
value: "/"
- it: should work with structured path definitions and per-path pathType
set:
gateway.httpRoute.enabled: true
gateway.httpRoute.paths:
- path: /
- path: /foo
pathType: Exact
asserts:
- hasDocuments:
count: 1
- isKind:
of: HTTPRoute
- equal:
path: spec.rules[0].matches[0].path.type
value: "PathPrefix"
- equal:
path: spec.rules[0].matches[0].path.value
value: "/"
- equal:
path: spec.rules[1].matches[0].path.type
value: "Exact"
- equal:
path: spec.rules[1].matches[0].path.value
value: "/foo"
- it: should allow overriding the default pathType
set:
gateway.httpRoute.enabled: true
gateway.httpRoute.pathType: Exact
gateway.httpRoute.paths:
- /
asserts:
- equal:
path: spec.rules[0].matches[0].path.type
value: "Exact"
@@ -12,3 +12,14 @@ tests:
asserts: asserts:
- failedTemplate: - failedTemplate:
errorMessage: valkey and valkey-cluster cannot be enabled at the same time. Please only choose one. errorMessage: valkey and valkey-cluster cannot be enabled at the same time. Please only choose one.
- it: fails when trying to enable ingress and gateway httpRoute at the same time
set:
ingress:
enabled: true
gateway:
httpRoute:
enabled: true
asserts:
- failedTemplate:
errorMessage: You cannot enable both Ingress and HTTPRoute at the same time
+24
View File
@@ -177,6 +177,30 @@ ingress:
# hosts: # hosts:
# - git.example.com # - git.example.com
## @section Gateway
## @param gateway.httpRoute.enabled Enable HTTPRoute
## @param gateway.httpRoute.annotations HTTPRoute annotations
## @param gateway.httpRoute.hostnames HTTPRoute hostnames
## @param gateway.httpRoute.parentRefs[0].name HTTPRoute Gateway name
## @param gateway.httpRoute.parentRefs[0].sectionName HTTPRoute Gateway section name
## @param gateway.httpRoute.parentRefs[0].kind HTTPRoute Gateway kind
## @param gateway.httpRoute.pathType HTTPRoute path match type (PathPrefix, Exact, RegularExpression)
## @param gateway.httpRoute.paths[0].path Default HTTPRoute path
gateway:
httpRoute:
enabled: false
annotations: {}
hostnames:
- git.example.com
parentRefs:
- name: traefik
sectionName: https
kind: Gateway
pathType: PathPrefix
paths:
- path: /
## @section deployment ## @section deployment
# #
## @param resources Kubernetes resources ## @param resources Kubernetes resources