cli/cli

GH should not require git repository to exist where operation does not affect one

arcivanov opened this issue · 5 comments

Describe the bug

I've attempted to use gh run cancel <id> from a directory that was not a repository.
While the cancel operation would've proceeded normally due to having GH_TOKEN in the env, gh started balking at not being in a git repository. When I initialized the directory with git init as a workaround, gh run cancel further complained there were no remotes in the repository.

Case 1 (empty dir):
https://github.com/karellen/karellen-llvm/actions/runs/9047154513/job/24858809382#step:2:26
Case 2 (git init with no remotes):
https://github.com/karellen/karellen-llvm/actions/runs/9047223038/job/24858879136#step:2:39

Version is 2.49.0.

Steps to reproduce the behavior

The exact code is linked above in the publicly accessible workflows.

Expected vs actual behavior

Expected: GH CLI has no git repository requirements for operations not affecting git repositories.
Actual: GH CLI performs git repository validation for operations not affecting git repositories.

Logs

Linked above in the action runs.

Doing git init followed by git init add remote <url> is a workaround for this problem.
Here are the logs of the functional workaround: https://github.com/karellen/karellen-llvm/actions/runs/9047299097/job/24859062533

Unfortunately the REST API does require the repo ID which is why the CLI needs to know the repo to which the run belongs. However, instead of initialising a git repo I would suggest you use gh cancel run -R [HOST/]OWNER/REPO <ID> which will be used in place of interrogating your filesystem for a git repository.

let me try that, thanks!

While I'm trying it, gh can also do what I'm going to do is use GITHUB_REPOSITORY and GITHUB_SERVER_URL env variables to determine the host/owner/repo.

https://github.com/karellen/karellen-llvm/actions/runs/9049315253/job/24863292405#step:2:25

This worked, thank you!

I still think that in the presence of GITHUB_SERVER_URL and GITHUB_REPOSITORY there should be no need to query git. The order should be -R, env vars, git.