Add Traceworks Flux image automation
All checks were successful
sync-to-forgejo / sync (push) Successful in 18s
All checks were successful
sync-to-forgejo / sync (push) Successful in 18s
This commit is contained in:
parent
ca382ff4dc
commit
f0906d2c67
15 changed files with 320 additions and 3 deletions
14
.github/workflows/sync-to-forgejo.yml
vendored
14
.github/workflows/sync-to-forgejo.yml
vendored
|
|
@ -33,6 +33,14 @@ jobs:
|
||||||
FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }}
|
FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
git remote add forgejo "https://admin:${FORGEJO_TOKEN}@ci.nxtgauge.com/ashwin/${{ github.event.repository.name }}.git" 2>/dev/null || \
|
BRANCH="${GITHUB_REF#refs/heads/}"
|
||||||
git remote set-url forgejo "https://admin:${FORGEJO_TOKEN}@ci.nxtgauge.com/ashwin/${{ github.event.repository.name }}.git"
|
REMOTE_URL="https://admin:${FORGEJO_TOKEN}@ci.nxtgauge.com/ashwin/${{ github.event.repository.name }}.git"
|
||||||
git push forgejo "HEAD:${GITHUB_REF#refs/heads/}" --force
|
|
||||||
|
git remote add forgejo "$REMOTE_URL" 2>/dev/null || git remote set-url forgejo "$REMOTE_URL"
|
||||||
|
|
||||||
|
git fetch forgejo "$BRANCH" || true
|
||||||
|
if git show-ref --verify --quiet "refs/remotes/forgejo/$BRANCH"; then
|
||||||
|
git rebase "refs/remotes/forgejo/$BRANCH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
git push forgejo "HEAD:$BRANCH"
|
||||||
|
|
|
||||||
17
apps/traceworks2026/README.md
Normal file
17
apps/traceworks2026/README.md
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Traceworks2026 GitOps
|
||||||
|
|
||||||
|
This app is deployed from `apps/traceworks2026/overlays/prod`.
|
||||||
|
|
||||||
|
Flux image automation watches these Forgejo registry images:
|
||||||
|
|
||||||
|
- `ci.nxtgauge.com/admin/traceworks2026-frontend`
|
||||||
|
- `ci.nxtgauge.com/admin/traceworks2026-api`
|
||||||
|
|
||||||
|
Expected CI flow:
|
||||||
|
|
||||||
|
1. GitHub mirrors the app repo to Forgejo.
|
||||||
|
2. Forgejo Actions builds and pushes timestamped image tags.
|
||||||
|
3. Flux updates `overlays/prod/release-patch.yaml` to the newest tags.
|
||||||
|
4. Flux applies the updated manifests to the cluster.
|
||||||
|
|
||||||
|
Before this works in-cluster, create a `forgejo-regcred` secret in the `flux-system` namespace so Flux can read the private registry.
|
||||||
48
apps/traceworks2026/base/api-deployment.yaml
Normal file
48
apps/traceworks2026/base/api-deployment.yaml
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: traceworks-api
|
||||||
|
namespace: traceworks
|
||||||
|
labels:
|
||||||
|
app: traceworks-api
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: traceworks-api
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: traceworks-api
|
||||||
|
spec:
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: forgejo-regcred
|
||||||
|
containers:
|
||||||
|
- name: api
|
||||||
|
image: ci.nxtgauge.com/admin/traceworks2026-api:19700101000000-000000000000
|
||||||
|
imagePullPolicy: Always
|
||||||
|
ports:
|
||||||
|
- containerPort: 3001
|
||||||
|
name: http
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: traceworks-api-env
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /api/health
|
||||||
|
port: 3001
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 10
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /api/health
|
||||||
|
port: 3001
|
||||||
|
initialDelaySeconds: 15
|
||||||
|
periodSeconds: 20
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 256Mi
|
||||||
10
apps/traceworks2026/base/api-secret.example.yaml
Normal file
10
apps/traceworks2026/base/api-secret.example.yaml
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: traceworks-api-env
|
||||||
|
namespace: traceworks
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
RESEND_API_KEY: replace_me
|
||||||
|
RESEND_FROM_EMAIL: Traceworks <onboarding@resend.dev>
|
||||||
|
RESEND_TO_EMAIL: ashwin@traceworks.in
|
||||||
12
apps/traceworks2026/base/api-service.yaml
Normal file
12
apps/traceworks2026/base/api-service.yaml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: traceworks-api
|
||||||
|
namespace: traceworks
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: traceworks-api
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 3001
|
||||||
|
targetPort: 3001
|
||||||
45
apps/traceworks2026/base/frontend-deployment.yaml
Normal file
45
apps/traceworks2026/base/frontend-deployment.yaml
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: traceworks-frontend
|
||||||
|
namespace: traceworks
|
||||||
|
labels:
|
||||||
|
app: traceworks-frontend
|
||||||
|
spec:
|
||||||
|
replicas: 2
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: traceworks-frontend
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: traceworks-frontend
|
||||||
|
spec:
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: forgejo-regcred
|
||||||
|
containers:
|
||||||
|
- name: nginx
|
||||||
|
image: ci.nxtgauge.com/admin/traceworks2026-frontend:19700101000000-000000000000
|
||||||
|
imagePullPolicy: Always
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
name: http
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: 80
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 10
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: 80
|
||||||
|
initialDelaySeconds: 15
|
||||||
|
periodSeconds: 20
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 256Mi
|
||||||
12
apps/traceworks2026/base/frontend-service.yaml
Normal file
12
apps/traceworks2026/base/frontend-service.yaml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: traceworks-frontend
|
||||||
|
namespace: traceworks
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: traceworks-frontend
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 80
|
||||||
|
targetPort: 80
|
||||||
35
apps/traceworks2026/base/ingress.yaml
Normal file
35
apps/traceworks2026/base/ingress.yaml
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: traceworks
|
||||||
|
namespace: traceworks
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
|
spec:
|
||||||
|
ingressClassName: traefik
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- traceworks.in
|
||||||
|
- www.traceworks.in
|
||||||
|
secretName: traceworks-tls
|
||||||
|
rules:
|
||||||
|
- host: traceworks.in
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: traceworks-frontend
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
- host: www.traceworks.in
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: traceworks-frontend
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
10
apps/traceworks2026/base/kustomization.yaml
Normal file
10
apps/traceworks2026/base/kustomization.yaml
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
namespace: traceworks
|
||||||
|
resources:
|
||||||
|
- namespace.yaml
|
||||||
|
- frontend-deployment.yaml
|
||||||
|
- frontend-service.yaml
|
||||||
|
- api-deployment.yaml
|
||||||
|
- api-service.yaml
|
||||||
|
- ingress.yaml
|
||||||
4
apps/traceworks2026/base/namespace.yaml
Normal file
4
apps/traceworks2026/base/namespace.yaml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: traceworks
|
||||||
7
apps/traceworks2026/overlays/prod/kustomization.yaml
Normal file
7
apps/traceworks2026/overlays/prod/kustomization.yaml
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
namespace: traceworks
|
||||||
|
resources:
|
||||||
|
- ../../base
|
||||||
|
patches:
|
||||||
|
- path: release-patch.yaml
|
||||||
23
apps/traceworks2026/overlays/prod/release-patch.yaml
Normal file
23
apps/traceworks2026/overlays/prod/release-patch.yaml
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: traceworks-frontend
|
||||||
|
namespace: traceworks
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: nginx
|
||||||
|
image: ci.nxtgauge.com/admin/traceworks2026-frontend:19700101000000-000000000000 # {"$imagepolicy": "flux-system:traceworks2026-frontend"}
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: traceworks-api
|
||||||
|
namespace: traceworks
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: api
|
||||||
|
image: ci.nxtgauge.com/admin/traceworks2026-api:19700101000000-000000000000 # {"$imagepolicy": "flux-system:traceworks2026-api"}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: forgejo-regcred
|
||||||
|
namespace: flux-system
|
||||||
|
type: kubernetes.io/dockerconfigjson
|
||||||
|
stringData:
|
||||||
|
.dockerconfigjson: '{"auths":{"ci.nxtgauge.com":{"username":"admin","password":"replace_me","auth":"replace_me_base64"}}}'
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
apiVersion: image.toolkit.fluxcd.io/v1beta2
|
||||||
|
kind: ImageRepository
|
||||||
|
metadata:
|
||||||
|
name: traceworks2026-frontend
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
image: ci.nxtgauge.com/admin/traceworks2026-frontend
|
||||||
|
interval: 1m0s
|
||||||
|
secretRef:
|
||||||
|
name: forgejo-regcred
|
||||||
|
---
|
||||||
|
apiVersion: image.toolkit.fluxcd.io/v1beta2
|
||||||
|
kind: ImagePolicy
|
||||||
|
metadata:
|
||||||
|
name: traceworks2026-frontend
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
imageRepositoryRef:
|
||||||
|
name: traceworks2026-frontend
|
||||||
|
filterTags:
|
||||||
|
pattern: '^[0-9]{14}-[a-f0-9]{12}$'
|
||||||
|
policy:
|
||||||
|
alphabetical:
|
||||||
|
order: asc
|
||||||
|
---
|
||||||
|
apiVersion: image.toolkit.fluxcd.io/v1beta2
|
||||||
|
kind: ImageRepository
|
||||||
|
metadata:
|
||||||
|
name: traceworks2026-api
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
image: ci.nxtgauge.com/admin/traceworks2026-api
|
||||||
|
interval: 1m0s
|
||||||
|
secretRef:
|
||||||
|
name: forgejo-regcred
|
||||||
|
---
|
||||||
|
apiVersion: image.toolkit.fluxcd.io/v1beta2
|
||||||
|
kind: ImagePolicy
|
||||||
|
metadata:
|
||||||
|
name: traceworks2026-api
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
imageRepositoryRef:
|
||||||
|
name: traceworks2026-api
|
||||||
|
filterTags:
|
||||||
|
pattern: '^[0-9]{14}-[a-f0-9]{12}$'
|
||||||
|
policy:
|
||||||
|
alphabetical:
|
||||||
|
order: asc
|
||||||
|
---
|
||||||
|
apiVersion: image.toolkit.fluxcd.io/v1beta2
|
||||||
|
kind: ImageUpdateAutomation
|
||||||
|
metadata:
|
||||||
|
name: traceworks2026
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
interval: 2m0s
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
name: flux-system
|
||||||
|
git:
|
||||||
|
checkout:
|
||||||
|
ref:
|
||||||
|
branch: main
|
||||||
|
commit:
|
||||||
|
author:
|
||||||
|
email: fluxcdbot@nxtgauge.com
|
||||||
|
name: FluxCD Image Automation
|
||||||
|
messageTemplate: 'Update Traceworks2026 images
|
||||||
|
|
||||||
|
Automation: {{range .Updated.Images}}{{println .}}{{end}}'
|
||||||
|
push:
|
||||||
|
branch: main
|
||||||
|
update:
|
||||||
|
path: ./apps/traceworks2026/overlays/prod
|
||||||
|
strategy: Setters
|
||||||
|
|
@ -9,3 +9,5 @@ resources:
|
||||||
- ../../apps/github-actions-runners/base
|
- ../../apps/github-actions-runners/base
|
||||||
- ../../apps/ollama/base
|
- ../../apps/ollama/base
|
||||||
- ../../ops/openobserve-alerts
|
- ../../ops/openobserve-alerts
|
||||||
|
- flux-system/traceworks2026-image-automation.yaml
|
||||||
|
- ../../apps/traceworks2026/overlays/prod
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue