Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dcb2a86f9a | |||
| be739c319f | |||
| 28cf9faf77 |
@@ -0,0 +1,34 @@
|
||||
name: CI
|
||||
|
||||
# The release workflow gates a tag, which is late: a broken commit sits green
|
||||
# until somebody decides to publish. This runs the same checks on the way in.
|
||||
#
|
||||
# push is scoped to main rather than all branches for two reasons: a branch
|
||||
# pushed as part of a pull request would otherwise be checked twice, and
|
||||
# gh-pages holds the published Helm chart index with no Go code in it, so
|
||||
# `go vet ./...` there would fail on a missing go.mod.
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
|
||||
# A rapid series of pushes only needs the last one checked.
|
||||
concurrency:
|
||||
group: ci-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version-file: go.mod
|
||||
|
||||
- name: Vet
|
||||
run: go vet ./...
|
||||
|
||||
- name: Test
|
||||
run: go test ./...
|
||||
@@ -7,7 +7,25 @@ on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
# Gates every publishing job below. A tag that fails here publishes nothing:
|
||||
# the binaries, the image and the chart are all downstream of it.
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version-file: go.mod
|
||||
|
||||
- name: Vet
|
||||
run: go vet ./...
|
||||
|
||||
- name: Test
|
||||
run: go test ./...
|
||||
|
||||
build:
|
||||
needs: test
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -44,6 +62,7 @@ jobs:
|
||||
path: terdut-${{ github.ref_name }}-${{ matrix.goos }}-${{ matrix.goarch }}
|
||||
|
||||
docker:
|
||||
needs: test
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -76,6 +95,7 @@ jobs:
|
||||
ghcr.io/yeniklas/terdut-server:${{ github.ref_name }}
|
||||
|
||||
chart:
|
||||
needs: test
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
@@ -50,6 +50,31 @@ docker run -p 8080:8080 -v $(pwd)/data:/data \
|
||||
terdut-server
|
||||
```
|
||||
|
||||
### Kubernetes
|
||||
|
||||
A Helm chart is published from this repository:
|
||||
|
||||
```bash
|
||||
helm repo add terdut-server https://yeniklas.github.io/terdut-server
|
||||
helm upgrade --install terdut-server terdut-server/terdut-server \
|
||||
--namespace terdut-server --create-namespace \
|
||||
--set networking.hostname=terdut.example.com
|
||||
```
|
||||
|
||||
The chart expects a [Gateway API](https://gateway-api.sigs.k8s.io/) Gateway named `envoy-main` in
|
||||
the `envoy-gateway-system` namespace to already exist — it renders an `HTTPRoute` against it rather
|
||||
than an `Ingress`. TLS is terminated at the gateway, so the server itself never sees a certificate.
|
||||
|
||||
| Value | Default | Description |
|
||||
|---|---|---|
|
||||
| `networking.hostname` | `terdut.example.com` | Hostname the `HTTPRoute` serves |
|
||||
| `networking.listener` | `""` | Gateway listener (`sectionName`) to bind to. Empty attaches to every matching listener, **including plaintext HTTP** — set it to the HTTPS listener's name to serve TLS only |
|
||||
| `networking.servicePort` | `8080` | Port the route forwards to; keep in sync with `service.port` |
|
||||
| `bootstrap.enabled` | `true` | Runs a post-install hook that creates the first user and stores its API key in the `<release>-admin-key` Secret. Already-bootstrapped servers are left alone |
|
||||
|
||||
The API key travels in an `Authorization: Bearer` header, so set `networking.listener` whenever the
|
||||
hostname is reachable outside a trusted network.
|
||||
|
||||
---
|
||||
|
||||
## Configuration
|
||||
|
||||
@@ -2,5 +2,5 @@ apiVersion: v2
|
||||
name: terdut-server
|
||||
description: A Helm chart for Terminal Duty — on-call alert management server
|
||||
type: application
|
||||
version: 0.2.0
|
||||
version: 0.5.0
|
||||
appVersion: "latest"
|
||||
|
||||
@@ -9,6 +9,9 @@ spec:
|
||||
parentRefs:
|
||||
- name: envoy-main
|
||||
namespace: envoy-gateway-system
|
||||
{{- with .Values.networking.listener }}
|
||||
sectionName: {{ . | quote }}
|
||||
{{- end }}
|
||||
rules:
|
||||
- backendRefs:
|
||||
- name: {{ include "terdut-server.fullname" . }}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
networking:
|
||||
hostname: "terdut.example.com"
|
||||
servicePort: 8080
|
||||
# Gateway listener to bind the HTTPRoute to. Empty attaches to every matching
|
||||
# listener, including plaintext HTTP. Set this to the name of the HTTPS
|
||||
# listener to serve the API over TLS only.
|
||||
listener: ""
|
||||
|
||||
image:
|
||||
repository: ghcr.io/yeniklas/terdut-server
|
||||
|
||||
Reference in New Issue
Block a user