GitHub Actions $/: Use Same-Repository Actions Without checkout
Use GitHub Actions’ $/ syntax when a workflow needs an action or reusable workflow from the same repository at the exact commit that is running. It removes the checkout requirement for resolving that action and does not need an @ref suffix:
jobs: verify: runs-on: ubuntu-latest steps: - name: Run the repository lint action uses: $/.github/actions/lintThis is different from ./.github/actions/lint, which resolves against the runner’s checked-out workspace. The self-repository form is useful when the workflow itself is pinned to a commit and its internal action references should follow that same commit automatically.
Use the same syntax for reusable workflows
At the job level, call a reusable workflow in the same repository like this:
jobs: deploy: uses: $/.github/workflows/reusable-deploy.yml secrets: inheritThe reference must not include @main, @v1, or a commit suffix. GitHub resolves the file from the same repository and running commit. The reusable workflow documentation lists this as the recommended same-repository form and notes that it is not available on GitHub Enterprise Server.
GitHub’s workflow syntax reference summarizes the three common forms:
| Syntax | Resolution | Checkout needed to resolve the reference? |
|---|---|---|
$/path/to/action | Same repository as the running workflow or action, at the running commit | No |
owner/repo/path@ref | A specified repository and ref | No for the reference itself |
./path/to/action | A path in the runner’s checked-out workspace | Yes |
The new form is not a shorthand for a local filesystem path. It tells GitHub which repository object to load before the job’s workspace is available.
What “without checkout” does and does not mean
$/ removes actions/checkout as a prerequisite for loading the action or reusable workflow. It does not populate the job workspace with every repository file.
Keep checkout when a step needs to read application source, package manifests, generated files, Dockerfiles, or scripts with run:. For example:
steps: - uses: $/.github/actions/lint - uses: actions/checkout@v4 - run: pnpm lintThe first step can load the repository action directly. The second step is still required before pnpm lint can read the project files from the workspace. If the action itself needs files outside its own directory, either make those inputs explicit or retain checkout before calling it.
The same distinction applies to composite actions. A composite action can use $/ to call a sibling action without relying on the caller’s checkout, but a later run step still needs the files it reads to exist in the workspace.
Check the runner before rollout
GitHub announced the feature on July 30, 2026 and requires GitHub Actions runner 2.336.0 or newer. That is a feature floor, not the same boundary as the 2.329.0 registration and enforcement work covered in the self-hosted runner minimum-version guide.
Before replacing local references across a fleet, verify:
- The workflow runs on
github.com, because the$/form is not available on GitHub Enterprise Server. - Every self-hosted runner that can receive the workflow is at least
2.336.0. - The action path contains a valid
action.ymloraction.yaml. - Any reusable workflow declares the required
workflow_callinterface. - Steps that read source files still have an intentional checkout or another input mechanism.
If the same workflow must run on older runners or GHES, keep the workspace-relative ./ form with an explicit checkout, or use a repository reference supported by that environment. Do not add @ref to $/; it changes the syntax into an invalid reference.
Migrate one internal reference at a time
Start with an action that does not need the caller’s source tree:
steps: - uses: $/.github/actions/setup-toolingRun it from a branch and from a full-commit workflow invocation. Confirm that the action version matches the workflow commit, then migrate sibling actions and reusable workflows. Keep a checkout for jobs whose shell commands need the repository.
The Node24 self-hosted runner guide covers a separate runtime requirement for JavaScript actions. A workflow can satisfy the $/ feature floor and still fail because an action needs a newer Node runtime or a tool that is not installed on the host.
The practical benefit is consistency: internal actions and workflows follow the commit already being executed, so a caller pinned to a full-length SHA does not quietly load an internal action from a different branch. Treat the syntax as a repository-reference change, then verify the workspace assumptions independently.
FAQ
Q: Does $/ mean I can remove actions/checkout from every job?
A: No. You can remove checkout only when the job needs the referenced action or reusable workflow but does not need repository files in its workspace. Shell commands, builds, tests, and Docker steps usually still need checkout.
Q: Can I write $/.github/actions/lint@main?
A: No. The self-repository syntax must not include an @ref suffix. It resolves at the running commit by design.
Q: Does the syntax work on GitHub Enterprise Server?
A: No. GitHub documents $/ for github.com and says it is not available on GitHub Enterprise Server. Keep a compatible ./ or repository-reference path for GHES workflows.
References:
GitHub Changelog: same-repository actions with self-repository syntax
Report a typo or broken link, or suggest a related topic.