omneval-devloop 0.0.3__tar.gz → 0.0.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/.github/workflows/build-image.yml +27 -8
  2. omneval_devloop-0.0.4/.github/workflows/publish-devloop-chart.yml +50 -0
  3. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/PKG-INFO +1 -1
  4. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/charts/devloop/templates/poller-deployment.yaml +6 -4
  5. omneval_devloop-0.0.4/charts/devloop/tests/discord-bot_test.yaml +43 -0
  6. omneval_devloop-0.0.4/charts/devloop/tests/poller_test.yaml +120 -0
  7. omneval_devloop-0.0.4/charts/devloop/tests/temporal-worker_test.yaml +74 -0
  8. omneval_devloop-0.0.3/.github/workflows/publish-devloop-chart.yml +0 -30
  9. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/.github/workflows/build-agent-base-image.yml +0 -0
  10. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/.github/workflows/ci.yml +0 -0
  11. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/.github/workflows/publish-discord-bot-image.yml +0 -0
  12. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/.github/workflows/publish-poller-image.yml +0 -0
  13. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/.github/workflows/publish-temporal-worker-image.yml +0 -0
  14. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/.github/workflows/release.yml +0 -0
  15. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/.gitignore +0 -0
  16. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/CODEOWNERS +0 -0
  17. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/CONTEXT.md +0 -0
  18. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/LICENSE +0 -0
  19. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/README.md +0 -0
  20. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/charts/devloop/Chart.yaml +0 -0
  21. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/charts/devloop/templates/NOTES.txt +0 -0
  22. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/charts/devloop/templates/_helpers.tpl +0 -0
  23. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/charts/devloop/templates/discord-bot-deployment.yaml +0 -0
  24. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/charts/devloop/templates/temporal-worker-deployment.yaml +0 -0
  25. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/charts/devloop/templates/temporal-worker-service.yaml +0 -0
  26. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/charts/devloop/test-values.yaml +0 -0
  27. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/charts/devloop/values.yaml +0 -0
  28. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/docs/getting-started.md +0 -0
  29. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/docs/temporal-prerequisites.md +0 -0
  30. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/Dockerfile +0 -0
  31. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/entrypoint.py +0 -0
  32. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/prompts/diagnosis.md +0 -0
  33. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/prompts/implement.md +0 -0
  34. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/prompts/merge.md +0 -0
  35. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/prompts/plan.md +0 -0
  36. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/prompts/review.md +0 -0
  37. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/pyproject.toml +0 -0
  38. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/pytest.ini +0 -0
  39. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/test_entrypoint.py +0 -0
  40. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/test_human_question.py +0 -0
  41. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/test_project_tests.py +0 -0
  42. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/agent-base/test_run_agent.py +0 -0
  43. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/discord-bot/Dockerfile +0 -0
  44. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/discord-bot/activities.py +0 -0
  45. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/discord-bot/discord_client.py +0 -0
  46. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/discord-bot/main.py +0 -0
  47. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/discord-bot/pyproject.toml +0 -0
  48. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/discord-bot/pytest.ini +0 -0
  49. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/discord-bot/test_text_utils.py +0 -0
  50. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/discord-bot/test_thread_store.py +0 -0
  51. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/discord-bot/text_utils.py +0 -0
  52. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/discord-bot/thread_store.py +0 -0
  53. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/discord-bot/uv.lock +0 -0
  54. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/poller/Dockerfile +0 -0
  55. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/poller/poll.py +0 -0
  56. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/poller/pyproject.toml +0 -0
  57. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/poller/pytest.ini +0 -0
  58. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/poller/test_poll.py +0 -0
  59. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/poller/uv.lock +0 -0
  60. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/temporal-worker/Dockerfile +0 -0
  61. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/images/temporal-worker/pyproject.toml +0 -0
  62. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/plan.md +0 -0
  63. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/pyproject.toml +0 -0
  64. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/__init__.py +0 -0
  65. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/cluster.py +0 -0
  66. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/dev_loop.py +0 -0
  67. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/dev_loop_logic.py +0 -0
  68. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/github_ops.py +0 -0
  69. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/k8s_jobs.py +0 -0
  70. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/projects.py +0 -0
  71. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/schedules.py +0 -0
  72. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/shared.py +0 -0
  73. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/summarization.py +0 -0
  74. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/summarize_activities.py +0 -0
  75. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/webhook.py +0 -0
  76. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/worker.py +0 -0
  77. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/src/devloop/workflows.py +0 -0
  78. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/tests/test_cluster.py +0 -0
  79. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/tests/test_dev_loop.py +0 -0
  80. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/tests/test_docs.py +0 -0
  81. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/tests/test_github_ops.py +0 -0
  82. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/tests/test_github_webhook.py +0 -0
  83. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/tests/test_k8s_jobs.py +0 -0
  84. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/tests/test_projects.py +0 -0
  85. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/tests/test_pure_logic.py +0 -0
  86. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/tests/test_stub_roundtrip.py +0 -0
  87. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/tests/test_summarization.py +0 -0
  88. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/tests/test_worker.py +0 -0
  89. {omneval_devloop-0.0.3 → omneval_devloop-0.0.4}/uv.lock +0 -0
@@ -62,24 +62,43 @@ jobs:
62
62
  username: ${{ github.actor }}
63
63
  password: ${{ secrets.GITHUB_TOKEN }}
64
64
 
65
- - name: Wait for the pinned SDK to appear on PyPI
65
+ - name: Wait for the pinned SDK to be downloadable from PyPI
66
66
  if: inputs.wait_for_pypi != ''
67
67
  run: |
68
68
  pkg_ver='${{ inputs.wait_for_pypi }}'
69
69
  name="${pkg_ver%%==*}"
70
70
  ver="${pkg_ver##*==}"
71
71
  url="https://pypi.org/pypi/${name}/${ver}/json"
72
- echo "Waiting for ${pkg_ver} at ${url}"
72
+ echo "Waiting for ${pkg_ver} files to be downloadable (metadata at ${url})"
73
+ # The JSON metadata endpoint flips to 200 the instant the release is
74
+ # registered, but the wheel/sdist files on files.pythonhosted.org lag a
75
+ # few seconds behind. Polling the metadata alone let the build start in
76
+ # that window, where uv saw the version, failed to download the file,
77
+ # and exited 1 (see v0.0.3). So wait until every published file actually
78
+ # HEADs 200 — the same CDN uv pulls from — not just until metadata exists.
73
79
  for i in $(seq 1 40); do
74
- code=$(curl -s -o /dev/null -w '%{http_code}' "$url")
75
- if [ "$code" = "200" ]; then
76
- echo "Found ${pkg_ver} on PyPI (attempt $i)"
77
- exit 0
80
+ file_urls=$(curl -s "$url" | jq -r '.urls[].url')
81
+ if [ -n "$file_urls" ]; then
82
+ all_ok=1
83
+ for fu in $file_urls; do
84
+ code=$(curl -s -o /dev/null -w '%{http_code}' --head "$fu")
85
+ if [ "$code" != "200" ]; then
86
+ all_ok=0
87
+ echo "Attempt $i/40: ${fu##*/} not downloadable yet (HTTP $code)"
88
+ break
89
+ fi
90
+ done
91
+ if [ "$all_ok" = "1" ]; then
92
+ echo "Found all ${pkg_ver} files downloadable (attempt $i)"
93
+ exit 0
94
+ fi
95
+ else
96
+ echo "Attempt $i/40: ${pkg_ver} metadata not on PyPI yet"
78
97
  fi
79
- echo "Attempt $i/40: ${pkg_ver} not on PyPI yet (HTTP $code); retrying in 15s"
98
+ echo "Retrying in 15s"
80
99
  sleep 15
81
100
  done
82
- echo "ERROR: ${pkg_ver} did not appear on PyPI within ~10 minutes"
101
+ echo "ERROR: ${pkg_ver} files did not become downloadable within ~10 minutes"
83
102
  exit 1
84
103
 
85
104
  - name: Compute sha-<short>-<epoch> tag
@@ -0,0 +1,50 @@
1
+ name: Test & Lint Devloop Helm Chart
2
+
3
+ # Validates the devloop Helm chart on pull requests: unit tests (helm-unittest)
4
+ # plus packaging + lint. Packaging and publishing the chart as an OCI artifact to
5
+ # ghcr.io/omneval/charts/devloop happens in release.yml on a v* tag.
6
+
7
+ on:
8
+ pull_request:
9
+
10
+ jobs:
11
+ unittest:
12
+ name: Unit test chart
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - name: Check out the repo
16
+ uses: actions/checkout@v4
17
+
18
+ - name: Set up Helm
19
+ uses: azure/setup-helm@v4
20
+ with:
21
+ # helm-unittest's plugin.yaml uses platformHooks, which requires Helm
22
+ # >= 3.15; this tracks the Helm 4 line used for local development.
23
+ version: v4.2.0
24
+
25
+ - name: Install helm-unittest plugin
26
+ run: helm plugin install https://github.com/helm-unittest/helm-unittest --verify=false
27
+
28
+ - name: Run chart unit tests
29
+ run: helm unittest charts/devloop
30
+
31
+ lint:
32
+ name: Package and lint chart
33
+ runs-on: ubuntu-latest
34
+ steps:
35
+ - name: Check out the repo
36
+ uses: actions/checkout@v4
37
+
38
+ - name: Set up Helm
39
+ uses: azure/setup-helm@v4
40
+ with:
41
+ version: v4.2.0
42
+
43
+ - name: Package chart
44
+ id: package
45
+ run: |
46
+ helm package charts/devloop/ -u -d .cr-release-packages
47
+ echo "chart=$(ls .cr-release-packages/devloop-*.tgz)" >> "$GITHUB_OUTPUT"
48
+
49
+ - name: Lint chart
50
+ run: helm lint ${{ steps.package.outputs.chart }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omneval-devloop
3
- Version: 0.0.3
3
+ Version: 0.0.4
4
4
  License-File: LICENSE
5
5
  Requires-Python: >=3.12
6
6
  Requires-Dist: fastapi>=0.115.6
@@ -2,6 +2,8 @@
2
2
  {{- if and .Values.poller.enabled .Values.poller.projects }}
3
3
  {{- range $idx, $project := .Values.poller.projects }}
4
4
  {{- $sanitizedRepoName := regexReplaceAll "[^a-zA-Z0-9]" .repo "" | lower | trunc 52 -}}
5
+ {{- /* A Kubernetes label value cannot contain "/" (as in owner/name), so derive a valid value. */ -}}
6
+ {{- $projectLabel := .repo | replace "/" "." | trunc 63 | trimSuffix "." -}}
5
7
  {{- if $.Values.poller.persistence.enabled }}
6
8
  ---
7
9
  apiVersion: v1
@@ -11,7 +13,7 @@ metadata:
11
13
  labels:
12
14
  {{- include "devloop.labels" $ | nindent 4 }}
13
15
  app.kubernetes.io/component: poller
14
- app.kubernetes.io/project: {{ .repo | quote }}
16
+ app.kubernetes.io/project: {{ $projectLabel | quote }}
15
17
  spec:
16
18
  accessModes:
17
19
  - {{ $.Values.poller.persistence.accessMode }}
@@ -30,20 +32,20 @@ metadata:
30
32
  labels:
31
33
  {{- include "devloop.labels" $ | nindent 4 }}
32
34
  app.kubernetes.io/component: poller
33
- app.kubernetes.io/project: {{ .repo | quote }}
35
+ app.kubernetes.io/project: {{ $projectLabel | quote }}
34
36
  spec:
35
37
  replicas: 1
36
38
  selector:
37
39
  matchLabels:
38
40
  app.kubernetes.io/component: poller
39
41
  app.kubernetes.io/instance: {{ $.Release.Name }}
40
- app.kubernetes.io/project: {{ .repo | quote }}
42
+ app.kubernetes.io/project: {{ $projectLabel | quote }}
41
43
  template:
42
44
  metadata:
43
45
  labels:
44
46
  app.kubernetes.io/component: poller
45
47
  app.kubernetes.io/instance: {{ $.Release.Name }}
46
- app.kubernetes.io/project: {{ .repo | quote }}
48
+ app.kubernetes.io/project: {{ $projectLabel | quote }}
47
49
  spec:
48
50
  {{- with $.Values.poller.imagePullSecrets }}
49
51
  imagePullSecrets:
@@ -0,0 +1,43 @@
1
+ suite: discord bot deployment
2
+ templates:
3
+ - templates/discord-bot-deployment.yaml
4
+ tests:
5
+ - it: renders nothing when the bot is disabled
6
+ set:
7
+ temporalHost: "temporal-frontend.agents.svc:7233"
8
+ discordBot.enabled: false
9
+ asserts:
10
+ - hasDocuments:
11
+ count: 0
12
+
13
+ - it: sources the token from a Secret when tokenSecret is set
14
+ set:
15
+ temporalHost: "temporal-frontend.agents.svc:7233"
16
+ discordBot.tokenSecret:
17
+ name: discord-homelab-agent-bot
18
+ key: TOKEN
19
+ asserts:
20
+ - containsDocument:
21
+ kind: Deployment
22
+ apiVersion: apps/v1
23
+ name: RELEASE-NAME-discord-bot
24
+ - contains:
25
+ path: spec.template.spec.containers[0].env
26
+ content:
27
+ name: DISCORD_TOKEN
28
+ valueFrom:
29
+ secretKeyRef:
30
+ name: discord-homelab-agent-bot
31
+ key: TOKEN
32
+
33
+ - it: falls back to a plain token value when no secret is given
34
+ set:
35
+ temporalHost: "temporal-frontend.agents.svc:7233"
36
+ discordBot.tokenSecret: {}
37
+ discordBot.token: "plain-token"
38
+ asserts:
39
+ - contains:
40
+ path: spec.template.spec.containers[0].env
41
+ content:
42
+ name: DISCORD_TOKEN
43
+ value: "plain-token"
@@ -0,0 +1,120 @@
1
+ suite: poller deployment and PVC
2
+ templates:
3
+ - templates/poller-deployment.yaml
4
+ tests:
5
+ - it: renders nothing when the poller is disabled
6
+ set:
7
+ temporalHost: "temporal-frontend.agents.svc:7233"
8
+ poller.enabled: false
9
+ poller.projects:
10
+ - repo: "omneval/omneval"
11
+ webhookUrl: "http://x"
12
+ asserts:
13
+ - hasDocuments:
14
+ count: 0
15
+
16
+ - it: renders nothing when no projects are configured
17
+ set:
18
+ temporalHost: "temporal-frontend.agents.svc:7233"
19
+ poller.enabled: true
20
+ poller.projects: []
21
+ asserts:
22
+ - hasDocuments:
23
+ count: 0
24
+
25
+ - it: creates one Deployment per project (no PVC when persistence is off)
26
+ set:
27
+ temporalHost: "temporal-frontend.agents.svc:7233"
28
+ poller.enabled: true
29
+ poller.persistence.enabled: false
30
+ poller.projects:
31
+ - repo: "omneval/omneval"
32
+ webhookUrl: "http://x"
33
+ - repo: "omneval/devloop"
34
+ webhookUrl: "http://x"
35
+ asserts:
36
+ - hasDocuments:
37
+ count: 2
38
+ - containsDocument:
39
+ kind: Deployment
40
+ apiVersion: apps/v1
41
+ name: RELEASE-NAME-poller-omnevalomneval
42
+ documentIndex: 0
43
+ - containsDocument:
44
+ kind: Deployment
45
+ apiVersion: apps/v1
46
+ name: RELEASE-NAME-poller-omnevaldevloop
47
+ documentIndex: 1
48
+
49
+ # --- Regression guard for the bug that blocked install: an owner/name repo
50
+ # was used verbatim as a label value, which Kubernetes rejects (no "/"). ---
51
+ - it: derives a label-safe project value (never contains a slash)
52
+ set:
53
+ temporalHost: "temporal-frontend.agents.svc:7233"
54
+ poller.enabled: true
55
+ poller.persistence.enabled: true
56
+ poller.projects:
57
+ - repo: "omneval/omneval"
58
+ webhookUrl: "http://x"
59
+ documentIndex: 0
60
+ asserts:
61
+ - isKind:
62
+ of: PersistentVolumeClaim
63
+ - equal:
64
+ path: metadata.labels["app.kubernetes.io/project"]
65
+ value: omneval.omneval
66
+ - notMatchRegex:
67
+ path: metadata.labels["app.kubernetes.io/project"]
68
+ pattern: "/"
69
+ # Must satisfy the Kubernetes label-value grammar.
70
+ - matchRegex:
71
+ path: metadata.labels["app.kubernetes.io/project"]
72
+ pattern: "^[A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?$"
73
+
74
+ - it: keeps the PVC and its claimName name in sync with the Deployment
75
+ set:
76
+ temporalHost: "temporal-frontend.agents.svc:7233"
77
+ poller.enabled: true
78
+ poller.persistence.enabled: true
79
+ poller.persistence.storageClassName: longhorn
80
+ poller.persistence.size: 100Mi
81
+ poller.projects:
82
+ - repo: "omneval/omneval"
83
+ webhookUrl: "http://x"
84
+ asserts:
85
+ - hasDocuments:
86
+ count: 2
87
+ - containsDocument:
88
+ kind: PersistentVolumeClaim
89
+ apiVersion: v1
90
+ name: RELEASE-NAME-poller-omnevalomneval-state
91
+ documentIndex: 0
92
+ - equal:
93
+ path: spec.storageClassName
94
+ value: longhorn
95
+ documentIndex: 0
96
+ - equal:
97
+ path: spec.template.spec.volumes[0].persistentVolumeClaim.claimName
98
+ value: RELEASE-NAME-poller-omnevalomneval-state
99
+ documentIndex: 1
100
+
101
+ - it: passes the full repo to GITHUB_REPO and defaults the agent label
102
+ set:
103
+ temporalHost: "temporal-frontend.agents.svc:7233"
104
+ poller.enabled: true
105
+ poller.persistence.enabled: false
106
+ poller.projects:
107
+ - repo: "omneval/omneval"
108
+ webhookUrl: "http://hook"
109
+ documentIndex: 0
110
+ asserts:
111
+ - contains:
112
+ path: spec.template.spec.containers[0].env
113
+ content:
114
+ name: GITHUB_REPO
115
+ value: "omneval/omneval"
116
+ - contains:
117
+ path: spec.template.spec.containers[0].env
118
+ content:
119
+ name: AGENT_LABEL
120
+ value: "agent-ready"
@@ -0,0 +1,74 @@
1
+ suite: temporal worker deployment and service
2
+ templates:
3
+ - templates/temporal-worker-deployment.yaml
4
+ - templates/temporal-worker-service.yaml
5
+ tests:
6
+ - it: fails when temporalHost is not provided
7
+ # The validation helper is included in every template; helm aborts the whole
8
+ # render at the first fail() call, which it attributes to this template.
9
+ template: templates/temporal-worker-service.yaml
10
+ set:
11
+ temporalHost: ""
12
+ asserts:
13
+ - failedTemplate:
14
+ errorMessage: "temporalHost is required but was not set. Provide a value like 'temporal-frontend.agents.svc:7233'"
15
+
16
+ - it: renders nothing when the worker is disabled
17
+ set:
18
+ temporalHost: "temporal-frontend.agents.svc:7233"
19
+ temporalWorker.enabled: false
20
+ asserts:
21
+ - hasDocuments:
22
+ count: 0
23
+
24
+ - it: names the workload and wires the temporal host
25
+ template: templates/temporal-worker-deployment.yaml
26
+ set:
27
+ temporalHost: "temporal-frontend.agents.svc:7233"
28
+ asserts:
29
+ - containsDocument:
30
+ kind: Deployment
31
+ apiVersion: apps/v1
32
+ name: RELEASE-NAME-temporal-worker
33
+ - contains:
34
+ path: spec.template.spec.containers[0].env
35
+ content:
36
+ name: TEMPORAL_HOST
37
+ value: "temporal-frontend.agents.svc:7233"
38
+
39
+ - it: appends extraEnv verbatim and sets the service account
40
+ template: templates/temporal-worker-deployment.yaml
41
+ set:
42
+ temporalHost: "temporal-frontend.agents.svc:7233"
43
+ temporalWorker.serviceAccountName: orchestration-worker
44
+ temporalWorker.extraEnv:
45
+ - name: ORCHESTRATION_QUEUE
46
+ value: homelab-orchestration
47
+ asserts:
48
+ - equal:
49
+ path: spec.template.spec.serviceAccountName
50
+ value: orchestration-worker
51
+ - contains:
52
+ path: spec.template.spec.containers[0].env
53
+ content:
54
+ name: ORCHESTRATION_QUEUE
55
+ value: homelab-orchestration
56
+
57
+ - it: exposes webhook and health ports on the service
58
+ template: templates/temporal-worker-service.yaml
59
+ set:
60
+ temporalHost: "temporal-frontend.agents.svc:7233"
61
+ temporalWorker.webhookPort: 8088
62
+ temporalWorker.healthPort: 8080
63
+ asserts:
64
+ - containsDocument:
65
+ kind: Service
66
+ apiVersion: v1
67
+ name: RELEASE-NAME-temporal-worker
68
+ - contains:
69
+ path: spec.ports
70
+ content:
71
+ name: webhook
72
+ port: 8088
73
+ targetPort: webhook
74
+ protocol: TCP
@@ -1,30 +0,0 @@
1
- name: Lint Devloop Helm Chart
2
-
3
- # Validates the devloop Helm chart on pull requests. Packaging and publishing the
4
- # chart as an OCI artifact to ghcr.io/omneval/charts/devloop happens in
5
- # release.yml on a v* tag.
6
-
7
- on:
8
- pull_request:
9
-
10
- jobs:
11
- lint:
12
- name: Package and lint chart
13
- runs-on: ubuntu-latest
14
- steps:
15
- - name: Check out the repo
16
- uses: actions/checkout@v4
17
-
18
- - name: Set up Helm
19
- uses: azure/setup-helm@v4
20
- with:
21
- version: v3.14.0
22
-
23
- - name: Package chart
24
- id: package
25
- run: |
26
- helm package charts/devloop/ -u -d .cr-release-packages
27
- echo "chart=$(ls .cr-release-packages/devloop-*.tgz)" >> "$GITHUB_OUTPUT"
28
-
29
- - name: Lint chart
30
- run: helm lint ${{ steps.package.outputs.chart }}
File without changes
File without changes
File without changes