Skip to content

Feat/app token refresh #2695

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 12 commits into
base: main
Choose a base branch
from

Conversation

sreejesh123
Copy link

@sreejesh123 sreejesh123 commented Jul 4, 2025

Resolves #977


Before the change?

After the change?

Pull request checklist

  • Tests for the changes have been added (for bug fixes / features)
  • Docs have been reviewed and added / updated if needed (for bug fixes / features)

Does this introduce a breaking change?

Please see our docs on breaking changes to help!

  • Yes
  • No

…ations#977)

This commit addresses issue integrations#977 by introducing an automatic token refresh mechanism for GitHub App-based authentication. When using short-lived GitHub App tokens (JWT + installation token), the provider now refreshes the token transparently before expiry, avoiding auth failures during long-lived Terraform runs or plan/apply cycles.

Key enhancements:
- Added `NewRefreshingTokenSource()` to wrap token acquisition and refresh.
- Refactored `Config.AuthenticatedHTTPClient()` to detect GitHub App env vars (`GITHUB_APP_ID`, `GITHUB_APP_INSTALLATION_ID`, `GITHUB_APP_PEM` or `GITHUB_APP_PEM_FILE`) and enable refreshable OAuth2 token source.
- Fallbacks gracefully to using a Personal Access Token (PAT) when `GITHUB_TOKEN` is set.
- Environment-based discovery of GitHub App credentials avoids Terraform schema changes.
- Added unit tests covering:
  - Refreshing logic (initial, expired, and error conditions)
  - Config behavior (anonymous and authenticated client behavior)
  - Error cases for missing App ID, installation ID, or PEM
- No change to existing configuration schema or behavior for current users using PAT-based authentication.

This upgrade enables more resilient GitHub App usage and prepares the provider for robust automation scenarios.
…ations#977)

This commit addresses issue integrations#977 by introducing an automatic token refresh mechanism for GitHub App-based authentication. When using short-lived GitHub App tokens (JWT + installation token), the provider now refreshes the token transparently before expiry, avoiding auth failures during long-lived Terraform runs or plan/apply cycles.

Key enhancements:
- Added `NewRefreshingTokenSource()` to wrap token acquisition and refresh.
- Refactored `Config.AuthenticatedHTTPClient()` to detect GitHub App env vars (`GITHUB_APP_ID`, `GITHUB_APP_INSTALLATION_ID`, `GITHUB_APP_PEM` or `GITHUB_APP_PEM_FILE`) and enable refreshable OAuth2 token source.
- Fallbacks gracefully to using a Personal Access Token (PAT) when `GITHUB_TOKEN` is set.
- Environment-based discovery of GitHub App credentials avoids Terraform schema changes.
- Added unit tests covering:
  - Refreshing logic (initial, expired, and error conditions)
  - Config behavior (anonymous and authenticated client behavior)
  - Error cases for missing App ID, installation ID, or PEM
- No change to existing configuration schema or behavior for current users using PAT-based authentication.

This upgrade enables more resilient GitHub App usage and prepares the provider for robust automation scenarios.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

app_auth credentials expire after an hour
1 participant