- Overview
- Features
- Installation
- Usage
- Configuration Options
- CI Tips
- Troubleshooting
- Limitations
- Contributing
- License
Zero‑boilerplate access to GitHub Packages (Maven) for your organization.
This plugin family configures the GitHub Packages Maven repository for your org and provides credentials automatically from one of three sources (in order):
- Environment variable (name configurable, default
GITHUB_TOKEN) - Gradle property (key configurable, default
gpr.token) - GitHub CLI: parses
gh auth status --show-token(requiresread:packages, read:org)
Note
This allows you to onboard this plugin to existing production CI/CD pipelines with minimal changes, while also supporting local development via the GitHub CLI.
It works as a settings plugin (centralized repository management for the whole build) and/or a project plugin (per‑project repository + a ghCliAuth extension to read the token).
- Registers your authenticated GitHub Packages Maven repository for your organization automatically.
- Complete backwards compatibility with existing environment-based and Gradle property-based token provisioning.
- Ensures common “trusted” repos are present at settings level (added only if missing) such as Maven Central and Gradle Plugin Portal.
- Most importantly, No need to rely on hardcoded tokens local configs anymore, just use the GitHub CLI for local dev!
You can use either plugin—or both together.
Tip
Recommendation: In multi‑module builds (or when using RepositoriesMode.FAIL_ON_PROJECT_REPOS), prefer the settings plugin to centralize repository configuration. The project plugin declares repositories at project level and may conflict with FAIL_ON_PROJECT_REPOS.
Kotlin DSL – settings.gradle.kts
plugins {
id("io.github.adelinosousa.gradle.plugins.settings.gh-cli-auth") version "2.0.0"
}Groovy DSL – settings.gradle
plugins {
id 'io.github.adelinosousa.gradle.plugins.settings.gh-cli-auth' version '2.0.0'
}With the settings plugin applied, your build will have:
- GitHub Packages repo for your org in both
pluginManagementanddependencyResolutionManagement. - Default repos added if missing: Gradle Plugin Portal, Google, Maven Central.
- A shared token available at
gradle.extra["gh.cli.auth.token"].
Kotlin DSL – build.gradle.kts
plugins {
id("io.github.adelinosousa.gradle.plugins.project.gh-cli-auth") version "2.0.0"
}Groovy DSL – build.gradle
plugins {
id 'io.github.adelinosousa.gradle.plugins.project.gh-cli-auth' version '2.0.0'
}With the project plugin applied, your project will have:
- GitHub Packages repo for your org at
project.repositories. - The
ghCliAuthextension exposing the token:- Kotlin:
val token: String? = extensions.getByName("ghCliAuth") as io.github.adelinosousa.gradle.extensions.GhCliAuthExtension; token.token.get() - Groovy:
def token = extensions.getByName("ghCliAuth").token.get()
- Kotlin:
Add this to your gradle.properties (root of the build):
gh.cli.auth.github.org=<your-organization>You can do nothing (and rely on the GitHub CLI path below), or pick one of these:
-
Environment variable (fastest for CI):
- Leave default: export
GITHUB_TOKEN - Or choose a name: set
gh.cli.auth.env.nameingradle.propertiesand export that variable.
- Leave default: export
-
Gradle property (CLI args or
gradle.properties):- Leave default key:
gpr.token - Or choose a key: set
gh.cli.auth.property.nameand pass-P<that-key>=<token>(or define it ingradle.properties).
- Leave default key:
-
GitHub CLI fallback:
-
Make sure
ghis installed and authenticated with the required scopes:gh auth login --scopes "read:packages,read:org" # or, if already logged in: gh auth refresh --scopes "read:packages,read:org" gh auth status
-
Warning
If both ENV and Gradle property are absent, the plugin automatically falls back to the GitHub CLI route.
| Key / Surface | Where to set/read | Default | Purpose |
|---|---|---|---|
gh.cli.auth.github.org |
gradle.properties |
(required) | GitHub Organization used to build the repo URL and name the repo entry (https://maven.pkg.github.com/<org>/*). |
gh.cli.auth.env.name |
gradle.properties |
GITHUB_TOKEN |
Name of the environment variable the plugin checks first for the token. |
gh.cli.auth.property.name |
gradle.properties |
gpr.token |
Name of the Gradle property the plugin checks second for the token (e.g., pass -Pgpr.token=... or define in properties). |
gradle.extra["gh.cli.auth.token"] |
read in settings.gradle(.kts) |
n/a | Token shared by the settings plugin for use by other settings logic/plugins. |
ghCliAuth.token |
read in build.gradle(.kts) |
n/a | Token exposed by the project plugin’s extension. |
-Dgh.cli.binary.path=/path/to/gh |
JVM/system property | auto‑detect | Override the gh binary path used by the CLI fallback. Useful for custom installs (e.g., Homebrew prefix, Nix). |
ENV (name = gh.cli.auth.env.name, default GITHUB_TOKEN)
└── if unset/empty → GRADLE PROPERTY (key = gh.cli.auth.property.name, default gpr.token)
└── if unset/empty → GitHub CLI: gh auth status --show-token
Below is the required scopes for the token retrieved via the GitHub CLI:
read:packagesread:org
If the token lacks these scopes, the plugin will fail with an error message prompting you to refresh your authentication.
https://maven.pkg.github.com/<org>/* (name = <org>), with credentials automatically supplied by the selected token source.
Note
Note on username: when the CLI path is used, the plugin extracts your GitHub login and uses it as the repository credential username; when ENV/Gradle property is used, the username is left empty.
- GitHub Actions: the default
GITHUB_TOKENenvironment variable is already present → no extra config needed; just setgh.cli.auth.github.org. - Local development: Rely on the GitHub CLI route (make sure you’ve logged in with the correct scopes).
-
“Please set
gh.cli.auth.github.orgin gradle.properties.”
Addgh.cli.auth.github.org=<your-org>togradle.properties. -
“GitHub CLI token is missing required scopes …”
Run:gh auth refresh --scopes "read:packages,read:org" gh auth status -
Custom
ghinstall not found
Point the plugin at your binary:./gradlew -Dgh.cli.binary.path=/absolute/path/to/gh <task> -
Using
RepositoriesMode.FAIL_ON_PROJECT_REPOS
Prefer the settings plugin (the project plugin adds repositories at the project level and may conflict with this mode).
- Only Maven repositories are configured.
- GitHub Enterprise/custom hosts and CLI profile selection are not supported; the CLI path expects
github.comdefault auth.
PRs and issues are welcome! See CONTRIBUTING.md.
This project is licensed under the AGPL-3.0 License - see the LICENSE for details.