runner: set github.actor/triggering_actor in the job context (was empty -> docker/login 'Username required')
edf0da5 · gmorell · 2026-07-02 21:37
Files changed
modified
lib/git_gud_web/controllers/runner_controller.ex
+12
−0
@@ -261,12 +261,24 @@ defmodule GitGudWeb.RunnerController do
| 261 | 261 | # preloaded, done in build_task/1). |
| 262 | 262 | owner = GitGud.Repositories.Storage.repo_handle(repo) |
| 263 | 263 | |
| 264 | + # `github.actor` / `github.triggering_actor`: the pusher's handle when | |
| 265 | + # attributable, else the repo owner. Without this, `${{ github.actor }}` | |
| 266 | + # is empty and steps like `docker/login-action` fail with | |
| 267 | + # "Username required". | |
| 268 | + actor = | |
| 269 | + case run.triggered_by_id && GitGud.Repo.get(GitGud.Accounts.User, run.triggered_by_id) do | |
| 270 | + %GitGud.Accounts.User{handle: h} when is_binary(h) and h != "" -> h | |
| 271 | + _ -> owner | |
| 272 | + end | |
| 273 | + | |
| 264 | 274 | %{ |
| 265 | 275 | "event" => run.trigger || "push", |
| 266 | 276 | "ref" => run.head_ref || "", |
| 267 | 277 | "sha" => if(run.head_sha, do: GitGud.Git.to_hex(run.head_sha), else: ""), |
| 268 | 278 | "repository" => owner <> "/" <> repo.name, |
| 269 | 279 | "repository_owner" => owner, |
| 280 | + "actor" => actor, | |
| 281 | + "triggering_actor" => actor, | |
| 270 | 282 | "run_number" => maybe_int_to_string(run.number), |
| 271 | 283 | "workflow" => run.workflow_name || run.workflow_path, |
| 272 | 284 | "job" => job.job_id, |
Parents: 5a6d751