Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions internal/controller/job_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,13 @@ func (b *JobBuilder) buildAgentJob(task *axonv1alpha1.Task, workspace *axonv1alp
Value: task.Spec.Type,
})

if spawner := task.Labels["axon.io/taskspawner"]; spawner != "" {
envVars = append(envVars, corev1.EnvVar{
Name: "AXON_TASKSPAWNER",
Value: spawner,
})
}

switch task.Spec.Credentials.Type {
case axonv1alpha1.CredentialTypeAPIKey:
keyName := apiKeyEnvVar(task.Spec.Type)
Expand Down
70 changes: 70 additions & 0 deletions internal/controller/job_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3482,3 +3482,73 @@ func TestBuildJob_WorkspaceWithInvalidUpstreamRemoteNoEnv(t *testing.T) {
}
}
}

func TestBuildJob_TaskSpawnerLabelInjectsEnv(t *testing.T) {
builder := NewJobBuilder()
task := &axonv1alpha1.Task{
ObjectMeta: metav1.ObjectMeta{
Name: "test-spawner-env",
Namespace: "default",
Labels: map[string]string{
"axon.io/taskspawner": "axon-workers",
},
},
Spec: axonv1alpha1.TaskSpec{
Type: AgentTypeClaudeCode,
Prompt: "Hello",
Credentials: axonv1alpha1.Credentials{
Type: axonv1alpha1.CredentialTypeAPIKey,
SecretRef: axonv1alpha1.SecretReference{Name: "my-secret"},
},
},
}

job, err := builder.Build(task, nil, nil, task.Spec.Prompt)
if err != nil {
t.Fatalf("Build() returned error: %v", err)
}

container := job.Spec.Template.Spec.Containers[0]
found := false
for _, env := range container.Env {
if env.Name == "AXON_TASKSPAWNER" {
found = true
if env.Value != "axon-workers" {
t.Errorf("AXON_TASKSPAWNER: expected %q, got %q", "axon-workers", env.Value)
}
}
}
if !found {
t.Error("Expected AXON_TASKSPAWNER env var to be set when label is present")
}
}

func TestBuildJob_NoTaskSpawnerLabelNoEnv(t *testing.T) {
builder := NewJobBuilder()
task := &axonv1alpha1.Task{
ObjectMeta: metav1.ObjectMeta{
Name: "test-no-spawner-env",
Namespace: "default",
},
Spec: axonv1alpha1.TaskSpec{
Type: AgentTypeClaudeCode,
Prompt: "Hello",
Credentials: axonv1alpha1.Credentials{
Type: axonv1alpha1.CredentialTypeAPIKey,
SecretRef: axonv1alpha1.SecretReference{Name: "my-secret"},
},
},
}

job, err := builder.Build(task, nil, nil, task.Spec.Prompt)
if err != nil {
t.Fatalf("Build() returned error: %v", err)
}

container := job.Spec.Template.Spec.Containers[0]
for _, env := range container.Env {
if env.Name == "AXON_TASKSPAWNER" {
t.Errorf("Expected no AXON_TASKSPAWNER env var when label is absent, but found value %q", env.Value)
}
}
}
8 changes: 1 addition & 7 deletions self-development/axon-fake-strategist.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,7 @@ spec:
```
gh issue create --title "<title>" --body "<description>" --label generated-by-axon --label axon/needs-input
```
- If you can propose a small, concrete change, create a PR:
```
git checkout -b axon-fake-strategist-{{.ID}}
# ... make changes ...
git push -u origin axon-fake-strategist-{{.ID}}
gh pr create --title "<title>" --body "<description>" --label generated-by-axon --label ok-to-test
```
- Do NOT create PRs. Only create issues
- Prefer well-researched issues with clear proposals over broad, vague suggestions

Constraints:
Expand Down
9 changes: 1 addition & 8 deletions self-development/axon-fake-user.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,7 @@ spec:
```
gh issue create --title "<title>" --body "<description>" --label generated-by-axon --label axon/needs-input
```
- If you can fix something small, create a PR:
```
git checkout -b axon-fake-user-{{.ID}}
# ... make changes ...
git push -u origin axon-fake-user-{{.ID}}
gh pr create --title "<title>" --body "<description>" --label generated-by-axon --label ok-to-test
```
- Prefer creating focused issues over large PRs
- Do NOT create PRs. Only create issues

Constraints:
- Focus on ONE area per run, do it thoroughly
Expand Down
7 changes: 1 addition & 6 deletions self-development/tasks/fake-strategist-task.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,7 @@ spec:
Actions:
- Create a GitHub issue with your findings and proposals:
gh issue create --title "<title>" --body "<description>" --label generated-by-axon --label axon/needs-input
- If you can propose a small, concrete change, create a PR:
BRANCH="axon-fake-strategist-manual-${GITHUB_RUN_ID}"
git checkout -b "${BRANCH}"
# ... make changes ...
git push -u origin "${BRANCH}"
gh pr create --title "<title>" --body "<description>" --label generated-by-axon --label ok-to-test
- Do NOT create PRs. Only create issues
- Prefer well-researched issues with clear proposals over broad, vague suggestions

Constraints:
Expand Down