Skip to content

MissingGhRepo

GH_REPO or checkout is required for using the gh CLI tool.

Defined by MissingGhRepoRule which supports workflows, actions in the "Default" ruleset.

Description

Using the gh CLI tool requires a GitHub repository to be cloned or defined in an environment variable.

GH_REPO: specify the GitHub repository in the [HOST/]OWNER/REPO format for commands that otherwise operate on a local repository. -- gh help environment


For most commands there's also a --repo or -R flag that can be used to specify the repository.

-R, --repo <[HOST/]OWNER/REPO> Select another repository using the [HOST/]OWNER/REPO format -- gh pr

This is not supported yet and will be reported as a violation: https://github.com/TWiStErRob/net.twisterrob.ghlint/issues/280

The rationale behind this is that we're running the gh CLI tool in a GitHub Actions environment, which is usually coupled with a repository hosting the workflow. Since this is an implicit context, it's more natural to use GH_REPO: ${{ github.repository }}. In rare cases when we need to operate on a foreign repository, we might use --repo, but we can still use the same GH_REPO approach.

Compliant examples

Compliant example #1

GH_REPO is defined.

example.yml

on: push
jobs:
  example:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: gh pr list
        env:
          GH_TOKEN: ${{ github.token }}
          GH_REPO: ${{ github.repository }}

Compliant example #2

Code is cloned, so repo is known.

example.yml

on: push
jobs:
  example:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: gh pr list
        env:
          GH_TOKEN: ${{ github.token }}

Non-compliant example

Repository context is not known.

example.yml

on: push
jobs:
  example:
    runs-on: ubuntu-latest
    steps:
      - run: gh pr list
        env:
          GH_TOKEN: ${{ github.token }}

  • Line 6: Step[#0] in Job[example] should see GH_REPO environment variable or have a repository cloned.