Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
584d840
testing casa deploy
untra Oct 3, 2026
cd646ff
Merge pull request 'testing casa deploy' (#1) from ci/deploy-casa int…
Oct 3, 2026
6fe628a
testing casa deployment, advanced clippy fix
untra Oct 3, 2026
78f3a94
Merge pull request 'testing casa deployment, advanced clippy fix' (#2…
Oct 3, 2026
5526b34
more casa testing, cleanup of encoding reimplementations
untra Oct 3, 2026
0a5c1d9
Merge pull request 'more casa testing, cleanup of encoding reimplemen…
Oct 3, 2026
ebce664
testing pr build with e2e component that verifies checkout can work
untra Oct 3, 2026
463601b
Merge pull request 'testing pr build with e2e component that verifies…
Oct 3, 2026
ec51b16
governance and campaigns
untra Oct 6, 2026
e8b148e
remote target and forgejo deployment ops
untra Oct 11, 2026
6f3d335
updates from otlp implementation
untra Oct 11, 2026
6ac4abe
f
untra Oct 11, 2026
968e1f8
gemfile
untra Oct 11, 2026
8af2f0a
merging
untra Oct 13, 2026
be87b3a
Merge pull request 'fix-merge-oct-2026' (#5) from fix-merge-oct-2026 …
Oct 13, 2026
50214c2
forgejo helm Roll images through this workflow
untra Oct 13, 2026
d974256
deployment
untra Oct 13, 2026
9bd602f
Merge pull request 'casa-markdown-changes-2' (#7) from casa-markdown-…
Oct 13, 2026
19d07b3
premium
untra Oct 13, 2026
6cfef20
Merge pull request 'premium' (#8) from casa-markdown-changes-2 into main
Oct 14, 2026
8fe18ce
feat(telemetry): implement export, agent tracing, and Helm integration
untra Oct 14, 2026
c55229e
forgejo, gitea, kanban aand gitproviders, ticket creation consistency
untra Oct 14, 2026
d85b316
bindings
untra Oct 14, 2026
aec2931
feat(telemetry): implement export, agent tracing, and Helm integration
untra Oct 14, 2026
61dacb4
wip telemetry
untra Oct 14, 2026
258a832
Merge branch 'feat/otlp-telemetry' of github.com:untra/operator into …
untra Oct 14, 2026
4a864f5
fixes from bindings updates
untra Oct 14, 2026
45c0bc6
auth changes
untra Oct 14, 2026
063fe23
safe build optimization, auth oidc implementation
untra Oct 15, 2026
aa04384
Merge branch 'casa-markdown-changes-3' of github.com:untra/operator i…
untra Oct 15, 2026
5c200f9
telemetry and registry and cargo dependency fixes oh my
untra Oct 15, 2026
2446f5a
f
untra Oct 15, 2026
9d400ba
f
untra Oct 15, 2026
3e54246
f
untra Oct 15, 2026
ed0f711
wip
untra Oct 15, 2026
a179a6f
Merge branch 'french' of github.com:untra/operator into next-work-local
untra Oct 15, 2026
009eaa0
oidc support , suggested changes
untra Oct 15, 2026
1c9c75a
suggestions and fixes
untra Oct 15, 2026
3109ce0
deps sca
untra Oct 15, 2026
47dfe6f
clippy fixes
untra Oct 15, 2026
997fd45
lm studio testing
untra Oct 31, 2026
49da222
upgrade macos runners to macos-15
untra Oct 31, 2026
8137f7a
openapi spec
untra Oct 31, 2026
e18ebfc
tests find the sharpest bugs
untra Oct 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
20 changes: 3 additions & 17 deletions .forgejo/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
# Forgejo Actions runbook

`workflows/deploy-casa.yaml` builds `Dockerfile.local` with the dev license keyring and swaps the image on the
`operator` release at `operator.<devhost>`. `workflows/pr.yaml` is the required check on `main`: it builds the
same arm64 image without pushing it, then runs the `e2e/` Playwright suites against it (`scripts/ci/e2e.sh`).
`workflows/deploy-casa.yaml` builds `Dockerfile.local` with the dev license keyring and upgrades the `operator` release at `operator.<devhost>` to that ref's `charts/operator` and image, keeping the release's helmfile values. `workflows/pr.yaml` is the required check on `main`: it builds the same arm64 image without pushing it, then runs the `e2e/` Playwright suites against it (`scripts/ci/e2e.sh`).
Runner egress isn't restricted (jobs reach the internet through OrbStack's NAT), but everything they pull comes
from Forgejo mirrors anyway, for pinning and speed. These commands refresh the mirrors from a workstation.

Expand All @@ -18,7 +16,6 @@ Common shell setup:
FORGEJO=https://forgejo.<devhost>
REPO=untra-operator/operator
MIRROR=forgejo.<devhost>/untra-operator/mirror
CHARTS=forgejo.<devhost>/untra-operator/charts
FORGEJO_TOKEN=... # scopes: write:package, write:repository, write:organization
api() { curl -fsS -H "Authorization: token $FORGEJO_TOKEN" -H 'Content-Type: application/json' "$@"; }
```
Expand Down Expand Up @@ -52,19 +49,6 @@ done
crane digest "$MIRROR/debian:trixie-slim" # must equal the sha256 pinned in Dockerfile.local
```

## Chart mirror

Mirror every chart version that helmfile deploys; `deploy` upgrades at the release's current chart version.

```sh
: "${CHARTS:?run the common shell setup first}"
v=$(helm get metadata operator -n operator | awk '/^VERSION:/ {print $2}')
helm pull oci://ghcr.io/untra/charts/operator --version "$v" -d /tmp
helm registry login forgejo.<devhost> -u <registry-user> --password-stdin <<<"$FORGEJO_TOKEN"
helm push "/tmp/operator-$v.tgz" "oci://$CHARTS"
helm show chart "oci://$CHARTS/operator" --version "$v"
```

## Checkout action mirror

A pull mirror refreshes from the Forgejo server, so only the server needs egress to `code.forgejo.org`.
Expand Down Expand Up @@ -118,6 +102,8 @@ helm rollback operator <revision> -n operator

Job logs are not readable through the API; open the run in the web UI.

Roll images through this workflow or `helm rollback`, not `kubectl set image`: `deploy` runs with `--force-conflicts`, so the next run overwrites out-of-band edits.

## Housekeeping

```sh
Expand Down
41 changes: 24 additions & 17 deletions .forgejo/workflows/deploy-casa.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ on:

# Builds Dockerfile.local with the dev license keyring and rolls it out to operator.kube.untra.casa.
# build runs-on: docker native arm64 buildx push to the Forgejo registry, tagged by commit sha
# deploy runs-on: helmfile swaps the image on the helmfile-owned release, at its deployed chart version and values
# Base images, the chart and the checkout action come from Forgejo mirrors; see .forgejo/README.md.
# deploy runs-on: helmfile upgrades the release to this ref's chart and image, keeping helmfile's values
# Base images and the checkout action come from Forgejo mirrors; see .forgejo/README.md.
#
# Variables: REGISTRY_IMAGE
# Secrets: REGISTRY_USERNAME, REGISTRY_TOKEN, KUBECONFIG,
Expand All @@ -24,6 +24,7 @@ jobs:
build:
runs-on: docker
outputs:
sha: ${{ steps.meta.outputs.sha }}
tag: ${{ steps.meta.outputs.tag }}
digest: ${{ steps.push.outputs.digest }}
steps:
Expand All @@ -46,7 +47,9 @@ jobs:
ref: ${{ inputs.ref || github.ref }}

- id: meta
run: echo "tag=$(git rev-parse --short=12 HEAD)" >> "$GITHUB_OUTPUT"
run: |
echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
echo "tag=$(git rev-parse --short=12 HEAD)" >> "$GITHUB_OUTPUT"

- name: Registry login
run: printf '%s' "$REGISTRY_TOKEN" | docker login "${REGISTRY_IMAGE%%/*}" -u "$REGISTRY_USERNAME" --password-stdin
Expand Down Expand Up @@ -84,30 +87,34 @@ jobs:
needs: build
runs-on: helmfile
steps:
# The helmfile runner is shared, so the kubeconfig and the registry login live in this job's
# temp dir, never in ~/.kube or helm's default registry config.
- uses: https://forgejo.kube.untra.casa/actions/checkout@v4
with:
ref: ${{ needs.build.outputs.sha }}

# The helmfile runner is shared, so the kubeconfig lives in this job's temp dir
- name: Credentials
run: |
umask 077
printf '%s\n' "$KUBECONFIG_DATA" > "$RUNNER_TEMP/kubeconfig"
echo "KUBECONFIG=$RUNNER_TEMP/kubeconfig" >> "$GITHUB_ENV"
echo "HELM_REGISTRY_CONFIG=$RUNNER_TEMP/helm-registry.json" >> "$GITHUB_ENV"
printf '%s' "$REGISTRY_TOKEN" | helm registry login "${REGISTRY_IMAGE%%/*}" -u "$REGISTRY_USERNAME" \
--password-stdin --registry-config "$RUNNER_TEMP/helm-registry.json"
env:
REGISTRY_IMAGE: ${{ vars.REGISTRY_IMAGE }}
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
KUBECONFIG_DATA: ${{ secrets.KUBECONFIG }}

# Helmfile owns the release: keep its chart version and values, and swap only the image.
# The tag carries the digest: a re-run on the same commit pushes a new image under the same
# tag, and a bare tag would leave the StatefulSet unchanged (and IfNotPresent on the old one).
# Charts up to 0.2.14 labelled the immutable volumeClaimTemplates; the upgraded StatefulSet adopts the orphaned pod and PVC.
- name: Adopt legacy StatefulSet
run: |
legacy=$(kubectl -n operator get statefulset operator \
-o jsonpath='{.spec.volumeClaimTemplates[*].metadata.labels.helm\.sh/chart}')
if [ -n "$legacy" ]; then
kubectl -n operator delete statefulset operator --cascade=orphan
fi

# Helmfile owns the values: keep them, take this ref's chart and image, and reclaim fields from out-of-band kubectl edits.
- name: Helm upgrade
run: |
version=$(helm get metadata operator -n operator | awk '/^VERSION:/ {print $2}')
helm upgrade operator "oci://${REGISTRY_IMAGE%/*}/charts/operator" --version "$version" -n operator \
helm upgrade operator ./charts/operator -n operator \
--reset-then-reuse-values \
--force-conflicts \
--set image.repository="$REGISTRY_IMAGE" \
--set image.tag="${{ needs.build.outputs.tag }}@${{ needs.build.outputs.digest }}" \
--wait
Expand All @@ -116,4 +123,4 @@ jobs:

- name: Drop credentials
if: always()
run: rm -f "$RUNNER_TEMP/kubeconfig" "$RUNNER_TEMP/helm-registry.json"
run: rm -f "$RUNNER_TEMP/kubeconfig"
Loading
Loading