Skip to content

Commit 59d68b3

Browse files
authored
Release 2026-05-07 (#814)
### Release digest — 2026-05-07 — [#814](#814) #### cortex v0.0.47 (sha-7d1745d8) **New features:** - `ProjectQuota` CRD with per-resource, per-AZ quota breakdown and PAYG calculation ([#796](#796)) - `FlavorGroupCapacity` CRD + background capacity controller for pre-computed per-flavor VM slot capacity per (flavor group × AZ) ([#728](#728)) - Capacity reporting in `POST /commitments/v1/report-capacity` now uses real `FlavorGroupCapacity` CRD values (replaces placeholder zeros) - CommittedResource usage reconciler — moves usage calculation into CRD status, feeding both LIQUID API and quota controller ([#800](#800)) - KVM OS version label on host capacity metrics ([#810](#810)) - KVM project usage metrics (running VMs / resource usage per project/flavor) ([#803](#803)) - `domain_id` + name on vmware project capacity metrics ([#802](#802)) - `domain_id` in vmware project commitment KPI ([#806](#806)) - Weighing explainer for scheduling decisions ([#808](#808)) **Refactors:** - KVM host capacity metric moved to infrastructure plugins package ([#809](#809)) - Deprecated per-compute KPIs removed (`flavor_running_vms`, `host_running_vms`, `resource_capacity_kvm`) ([#807](#807)) - Bundle-specific RBAC templates moved from library chart into `cortex-ironcore` / `cortex-pods` bundles ([#797](#797)) - Webhook templates moved back into `cortex-nova` ([#805](#805)) - `testlib.Ptr` replaced with native `new()` ([#801](#801)) **Fixes:** - Remove `ignoreAllocations` from kvm-report-capacity pipeline to unblock older admission webhook ([#812](#812)) - Suppress nova scheduling alerts on transient `no such host` DNS errors - Add `identity-domains` as KPI dependency - Rename hypervisor `ClusterRoleBinding` to avoid `roleRef` conflict on redeploy ([#804](#804)) #### cortex-nova v0.0.60 (sha-7d1745d8) Includes cortex v0.0.47. Adds Prometheus datasources and KPI CRD templates for KVM project usage/utilization, and updated RBAC for `FlavorGroupCapacity` + `ProjectQuota` CRDs.
2 parents 5865269 + 8f26298 commit 59d68b3

132 files changed

Lines changed: 13321 additions & 3694 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/actions/setup-claude-code-action/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ runs:
4141
- name: Setup Python
4242
uses: actions/setup-python@v6
4343
with:
44-
python-version: "3.14"
44+
python-version: "3.13"
4545

4646
- name: Install LiteLLM dependencies
4747
shell: bash

.github/renovate.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
],
1212
"commitMessageAction": "Renovate: Update",
1313
"constraints": {
14-
"go": "1.26"
14+
"go": "1.26",
15+
"python": "3.13"
1516
},
1617
"dependencyDashboardOSVVulnerabilitySummary": "all",
1718
"osvVulnerabilityAlerts": true,

.github/workflows/claude-assistant.yaml

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
# NOTE: This workflow is temporarily disabled.
2-
# We need to determine a compliant approach for passing AI Core credentials
3-
# and whether utilizing the SAP AI Core Proxy is a viable and compliant option.
4-
# Until this is resolved, no AI Core credentials are configured and no
5-
# communication with AI Core takes place.
6-
71
name: Claude Code Assistant on Issues and PRs
82

93
on:
@@ -18,7 +12,6 @@ on:
1812

1913
jobs:
2014
check-allowlist:
21-
if: false # Temporarily disabled
2215
runs-on: ubuntu-latest
2316
outputs:
2417
allowed: ${{ steps.check.outputs.allowed }}
@@ -38,7 +31,6 @@ jobs:
3831
3932
claude:
4033
needs: check-allowlist
41-
if: false # Temporarily disabled
4234
runs-on: ubuntu-latest
4335
permissions:
4436
contents: write
@@ -52,29 +44,32 @@ jobs:
5244
uses: actions/setup-go@v6
5345
with:
5446
go-version-file: 'go.mod'
55-
47+
- name: Generate GitHub App token
48+
id: app-token
49+
uses: actions/create-github-app-token@v1
50+
with:
51+
app-id: ${{ secrets.CORTEX_AI_AGENTS_APP_ID }}
52+
private-key: ${{ secrets.CORTEX_AI_AGENTS_CLIENT_PKEY }}
5653
- uses: ./.github/actions/setup-claude-code-action
57-
5854
- uses: ./.github/actions/start-litellm-proxy
5955
env:
6056
AICORE_RESOURCE_GROUP: ${{ secrets.AICORE_RESOURCE_GROUP }}
6157
AICORE_BASE_URL: ${{ secrets.AICORE_BASE_URL }}
6258
AICORE_AUTH_URL: ${{ secrets.AICORE_AUTH_URL }}
6359
AICORE_CLIENT_ID: ${{ secrets.AICORE_CLIENT_ID }}
6460
AICORE_CLIENT_SECRET: ${{ secrets.AICORE_CLIENT_SECRET }}
65-
6661
- uses: ./.claude-code-action
6762
with:
6863
claude_args: |
6964
--max-turns 1000
7065
--permission-mode auto
66+
--effort-level max
7167
--allowedTools "Read,Write,Edit,Bash(*),WebSearch,WebFetch"
7268
trigger_phrase: "@claude"
7369
include_comments_by_actor: "auhlig,umswmayj,juliusclausnitzer,mblos,PhilippMatthes,Varsius,henrichter,SoWieMarkus,*[bot]"
7470
use_litellm: "true"
7571
litellm_model: "sap/anthropic--claude-4.6-opus"
76-
github_token: ${{ secrets.GITHUB_TOKEN }}
72+
github_token: ${{ steps.app-token.outputs.token }}
7773
show_full_output: "true"
78-
7974
- uses: ./.github/actions/stop-litellm-proxy
8075
if: always()

.github/workflows/claude-release.yaml

Lines changed: 0 additions & 52 deletions
This file was deleted.

.github/workflows/claude-review.yaml

Lines changed: 0 additions & 74 deletions
This file was deleted.
Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
# NOTE: This workflow is temporarily disabled.
2-
# We need to determine a compliant approach for passing AI Core credentials
3-
# and whether utilizing the SAP AI Core Proxy is a viable and compliant option.
4-
# Until this is resolved, no AI Core credentials are configured and no
5-
# communication with AI Core takes place.
6-
71
name: Weekly Claude Code Repo Analysis and Grooming
82

93
on:
@@ -13,7 +7,6 @@ on:
137

148
jobs:
159
claude:
16-
if: false # Temporarily disabled
1710
runs-on: ubuntu-latest
1811
permissions:
1912
contents: write
@@ -26,28 +19,31 @@ jobs:
2619
uses: actions/setup-go@v6
2720
with:
2821
go-version-file: 'go.mod'
29-
22+
- name: Generate GitHub App token
23+
id: app-token
24+
uses: actions/create-github-app-token@v1
25+
with:
26+
app-id: ${{ secrets.CORTEX_AI_AGENTS_APP_ID }}
27+
private-key: ${{ secrets.CORTEX_AI_AGENTS_CLIENT_PKEY }}
3028
- uses: ./.github/actions/setup-claude-code-action
31-
3229
- uses: ./.github/actions/start-litellm-proxy
3330
env:
3431
AICORE_RESOURCE_GROUP: ${{ secrets.AICORE_RESOURCE_GROUP }}
3532
AICORE_BASE_URL: ${{ secrets.AICORE_BASE_URL }}
3633
AICORE_AUTH_URL: ${{ secrets.AICORE_AUTH_URL }}
3734
AICORE_CLIENT_ID: ${{ secrets.AICORE_CLIENT_ID }}
3835
AICORE_CLIENT_SECRET: ${{ secrets.AICORE_CLIENT_SECRET }}
39-
4036
- uses: ./.claude-code-action
4137
with:
4238
prompt: "/weekly"
4339
claude_args: |
4440
--max-turns 1000
4541
--permission-mode auto
42+
--effort-level max
4643
--allowedTools "Read,Write,Edit,Bash(*),WebSearch,WebFetch"
4744
use_litellm: "true"
4845
litellm_model: "sap/anthropic--claude-4.6-opus"
49-
github_token: ${{ secrets.GITHUB_TOKEN }}
46+
github_token: ${{ steps.app-token.outputs.token }}
5047
show_full_output: "true"
51-
5248
- uses: ./.github/actions/stop-litellm-proxy
5349
if: always()

AGENTS.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ General:
3535
- You can use `maps.Copy` instead of iteratively copying a map
3636
- You can use `strings.Contains` to check if some string is in another
3737
- You can use `slices.Contains` to check if an element is part of a slice
38-
- And definitely use `testlib.Ptr` for test cases that require pointer values
3938

4039
Testing:
4140
- Ideally test files should be short and contain only the necessary cases

CHANGELOG.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,39 @@
11
# Changelog
22

3+
## 2026-05-07 — [#814](https://github.com/cobaltcore-dev/cortex/pull/814)
4+
5+
### cortex v0.0.47 (sha-b8cecd0c)
6+
7+
Non-breaking changes:
8+
- Add `ProjectQuota` CRD with per-resource, per-AZ quota breakdown and PAYG (pay-as-you-go) calculation support ([#796](https://github.com/cobaltcore-dev/cortex/pull/796))
9+
- Add `FlavorGroupCapacity` CRD and background capacity controller that pre-computes per-flavor VM slot capacity for each (flavor group × AZ) pair on a configurable interval ([#728](https://github.com/cobaltcore-dev/cortex/pull/728))
10+
- Report capacity from `FlavorGroupCapacity` CRDs in `POST /commitments/v1/report-capacity` — replaces placeholder zeros with real values; stale CRDs report last-known capacity
11+
- Move CommittedResource usage computation from the API handler into a dedicated reconciler that persists results in CRD status, making usage data available to both the LIQUID API and quota controller ([#800](https://github.com/cobaltcore-dev/cortex/pull/800))
12+
- Add KVM OS version as a label to KVM host capacity metrics ([#810](https://github.com/cobaltcore-dev/cortex/pull/810))
13+
- Add KVM project usage metrics (running VMs and resource usage per project/flavor) ([#803](https://github.com/cobaltcore-dev/cortex/pull/803))
14+
- Add `domain_id` and name to vmware project capacity metrics ([#802](https://github.com/cobaltcore-dev/cortex/pull/802))
15+
- Include `domain_id` in vmware project commitment KPI ([#806](https://github.com/cobaltcore-dev/cortex/pull/806))
16+
- Add weighing explainer for scheduling decisions, surfacing per-host scoring rationale ([#808](https://github.com/cobaltcore-dev/cortex/pull/808))
17+
- Move KVM host capacity metric into infrastructure plugins package ([#809](https://github.com/cobaltcore-dev/cortex/pull/809))
18+
- Remove deprecated per-compute infrastructure KPIs (`flavor_running_vms`, `host_running_vms`, `resource_capacity_kvm`) ([#807](https://github.com/cobaltcore-dev/cortex/pull/807))
19+
- Rename hypervisor `ClusterRoleBinding` objects to avoid `roleRef` conflicts on redeploy ([#804](https://github.com/cobaltcore-dev/cortex/pull/804))
20+
- Move bundle-specific RBAC templates from the library chart into individual bundle charts (`cortex-ironcore`, `cortex-pods`) ([#797](https://github.com/cobaltcore-dev/cortex/pull/797))
21+
- Move webhook templates from library chart back into `cortex-nova` bundle (reverts earlier move) ([#805](https://github.com/cobaltcore-dev/cortex/pull/805))
22+
- Fix: add `identity-domains` as a KPI dependency
23+
- Fix: remove `ignoreAllocations` from kvm-report-capacity pipeline to unblock deployment against older admission webhook ([#812](https://github.com/cobaltcore-dev/cortex/pull/812))
24+
- Fix: suppress nova scheduling alerts on transient `no such host` DNS errors
25+
- Replace `testlib.Ptr` helper with native `new()` across test files ([#801](https://github.com/cobaltcore-dev/cortex/pull/801))
26+
27+
### cortex-nova v0.0.60 (sha-b8cecd0c)
28+
29+
Includes updated chart cortex v0.0.47.
30+
31+
Non-breaking changes:
32+
- Add Prometheus datasource for KVM project usage metrics
33+
- Add KVM project usage KPI CRD templates
34+
- Add KVM project utilization KPI CRD templates
35+
- Update `cortex-nova` RBAC to grant permissions for `FlavorGroupCapacity` and `ProjectQuota` CRDs
36+
337
## 2026-05-04 — [#793](https://github.com/cobaltcore-dev/cortex/pull/793)
438

539
### cortex v0.0.46 (sha-ab6eb45d)

Tiltfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ k8s_yaml(helm('./helm/bundles/cortex-crds', name='cortex-crds', set=crd_extra_va
196196
if 'nova' in ACTIVE_DEPLOYMENTS:
197197
print("Activating Cortex Nova bundle")
198198
k8s_yaml(helm('./helm/bundles/cortex-nova', name='cortex-nova', values=tilt_values, set=env_set_overrides))
199-
k8s_resource('cortex-nova-postgresql', labels=['Cortex-Nova'], port_forwards=[
199+
k8s_resource('cortex-nova-postgresql-v18', labels=['Cortex-Nova'], port_forwards=[
200200
port_forward(8000, 5432),
201201
])
202202
k8s_resource('cortex-nova-scheduling-controller-manager', labels=['Cortex-Nova'], port_forwards=[
@@ -221,7 +221,7 @@ if 'nova' in ACTIVE_DEPLOYMENTS:
221221
if 'manila' in ACTIVE_DEPLOYMENTS:
222222
print("Activating Cortex Manila bundle")
223223
k8s_yaml(helm('./helm/bundles/cortex-manila', name='cortex-manila', values=tilt_values, set=env_set_overrides))
224-
k8s_resource('cortex-manila-postgresql', labels=['Cortex-Manila'], port_forwards=[
224+
k8s_resource('cortex-manila-postgresql-v18', labels=['Cortex-Manila'], port_forwards=[
225225
port_forward(8002, 5432),
226226
])
227227
k8s_resource('cortex-manila-scheduling-controller-manager', labels=['Cortex-Manila'], port_forwards=[
@@ -238,7 +238,7 @@ if 'manila' in ACTIVE_DEPLOYMENTS:
238238

239239
if 'cinder' in ACTIVE_DEPLOYMENTS:
240240
k8s_yaml(helm('./helm/bundles/cortex-cinder', name='cortex-cinder', values=tilt_values, set=env_set_overrides))
241-
k8s_resource('cortex-cinder-postgresql', labels=['Cortex-Cinder'], port_forwards=[
241+
k8s_resource('cortex-cinder-postgresql-v18', labels=['Cortex-Cinder'], port_forwards=[
242242
port_forward(8004, 5432),
243243
])
244244
k8s_resource('cortex-cinder-scheduling-controller-manager', labels=['Cortex-Cinder'], port_forwards=[

0 commit comments

Comments
 (0)