e6bd4e6970
GitHub now recommends using a GitHub App's Client ID for authentication.
This PR adds a first-class `client-id` input, keeps `app-id` available
for compatibility, and makes the migration path explicit in both runtime
behavior and documentation.
### Action inputs
- Adds a new `client-id` input
- Removes `required` from `app-id`
- Marks `app-id` as deprecated in `action.yml`
### Runtime behavior
- Updates input parsing to prefer `client-id`
- Falls back to `app-id` for existing workflows
- Adds a clear error when neither `client-id` nor `app-id` is provided
### Docs
- Updates the README to recommend `client-id`
- Switches usage examples to `client-id`
- Documents that `app-id` is deprecated and that `client-id` takes
precedence if both are set
### Regression coverage
- Adds a focused test proving a client-ID-shaped value works through the
new `client-id` input
- Adds coverage for the missing-ID validation path
- Updates snapshots to lock in the new metadata and runtime behavior
### Resulting usage
Users can migrate to the new input name directly:
```yaml
- uses: actions/create-github-app-token@v3
with:
client-id: ${{ vars.GITHUB_APP_CLIENT_ID }}
private-key: ${{ secrets.GITHUB_APP_PRIVATE_KEY }}
```
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: parkerbxyz <17183625+parkerbxyz@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
321 lines
12 KiB
Plaintext
321 lines
12 KiB
Plaintext
exports[`action-deprecated-inputs.test.js > stdout 1`] = `
|
|
app-id — Use 'client-id' instead.
|
|
`;
|
|
|
|
exports[`main-app-id-fallback.test.js > stdout 1`] = `
|
|
Inputs 'owner' and 'repositories' are not set. Creating token for this repository (actions/create-github-app-token).
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /repos/actions/create-github-app-token/installation
|
|
POST /app/installations/123456/access_tokens
|
|
{"repositories":["create-github-app-token"]}
|
|
`;
|
|
|
|
exports[`main-client-id-precedence.test.js > stdout 1`] = `
|
|
Inputs 'owner' and 'repositories' are not set. Creating token for this repository (actions/create-github-app-token).
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /repos/actions/create-github-app-token/installation
|
|
POST /app/installations/123456/access_tokens
|
|
{"repositories":["create-github-app-token"]}
|
|
`;
|
|
|
|
exports[`main-custom-github-api-url.test.js > stdout 1`] = `
|
|
Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:
|
|
|
|
- actions/create-github-app-token
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /api/v3/repos/actions/create-github-app-token/installation
|
|
POST /api/v3/app/installations/123456/access_tokens
|
|
{"repositories":["create-github-app-token"]}
|
|
`;
|
|
|
|
exports[`main-missing-client-and-app-id.test.js > stderr 1`] = `
|
|
Either 'client-id' or 'app-id' input must be set
|
|
`;
|
|
|
|
exports[`main-missing-client-and-app-id.test.js > stdout 1`] = `
|
|
::error::Either 'client-id' or 'app-id' input must be set
|
|
`;
|
|
|
|
exports[`main-missing-owner.test.js > stderr 1`] = `
|
|
GITHUB_REPOSITORY_OWNER missing, must be set to '<owner>'
|
|
`;
|
|
|
|
exports[`main-missing-repository.test.js > stderr 1`] = `
|
|
GITHUB_REPOSITORY missing, must be set to '<owner>/<repo>'
|
|
`;
|
|
|
|
exports[`main-private-key-with-escaped-newlines.test.js > stdout 1`] = `
|
|
Inputs 'owner' and 'repositories' are not set. Creating token for this repository (actions/create-github-app-token).
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /repos/actions/create-github-app-token/installation
|
|
POST /app/installations/123456/access_tokens
|
|
{"repositories":["create-github-app-token"]}
|
|
`;
|
|
|
|
exports[`main-proxy-requires-native-support.test.js > stderr 1`] = `
|
|
A proxy environment variable is set, but Node.js native proxy support is not enabled. Set NODE_USE_ENV_PROXY=1 for this action step.
|
|
`;
|
|
|
|
exports[`main-proxy-requires-native-support.test.js > stdout 1`] = `
|
|
::error::A proxy environment variable is set, but Node.js native proxy support is not enabled. Set NODE_USE_ENV_PROXY=1 for this action step.
|
|
`;
|
|
|
|
exports[`main-repo-skew.test.js > stderr 1`] = `
|
|
'Issued at' claim ('iat') must be an Integer representing the time that the assertion was issued.
|
|
[@octokit/auth-app] GitHub API time and system time are different by 30 seconds. Retrying request with the difference accounted for.
|
|
`;
|
|
|
|
exports[`main-repo-skew.test.js > stdout 1`] = `
|
|
Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:
|
|
|
|
- actions/failed-repo
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /repos/actions/failed-repo/installation
|
|
GET /repos/actions/failed-repo/installation
|
|
POST /app/installations/123456/access_tokens
|
|
{"repositories":["failed-repo"]}
|
|
`;
|
|
|
|
exports[`main-token-get-owner-set-fail-response.test.js > stdout 1`] = `
|
|
Input 'repositories' is not set. Creating token for all repositories owned by smockle.
|
|
Failed to create token for "smockle" (attempt 1): GitHub API not available
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /users/smockle/installation
|
|
GET /users/smockle/installation
|
|
POST /app/installations/123456/access_tokens
|
|
null
|
|
`;
|
|
|
|
exports[`main-token-get-owner-set-repo-fail-response.test.js > stdout 1`] = `
|
|
Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:
|
|
|
|
- actions/failed-repo
|
|
Failed to create token for "failed-repo" (attempt 1): GitHub API not available
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /repos/actions/failed-repo/installation
|
|
GET /repos/actions/failed-repo/installation
|
|
POST /app/installations/123456/access_tokens
|
|
{"repositories":["failed-repo"]}
|
|
`;
|
|
|
|
exports[`main-token-get-owner-set-repo-set-to-many-newline.test.js > stdout 1`] = `
|
|
Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:
|
|
|
|
- actions/create-github-app-token
|
|
- actions/toolkit
|
|
- actions/checkout
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /repos/actions/create-github-app-token/installation
|
|
POST /app/installations/123456/access_tokens
|
|
{"repositories":["create-github-app-token","toolkit","checkout"]}
|
|
`;
|
|
|
|
exports[`main-token-get-owner-set-repo-set-to-many.test.js > stdout 1`] = `
|
|
Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:
|
|
|
|
- actions/create-github-app-token
|
|
- actions/toolkit
|
|
- actions/checkout
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /repos/actions/create-github-app-token/installation
|
|
POST /app/installations/123456/access_tokens
|
|
{"repositories":["create-github-app-token","toolkit","checkout"]}
|
|
`;
|
|
|
|
exports[`main-token-get-owner-set-repo-set-to-one.test.js > stdout 1`] = `
|
|
Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:
|
|
|
|
- actions/create-github-app-token
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /repos/actions/create-github-app-token/installation
|
|
POST /app/installations/123456/access_tokens
|
|
{"repositories":["create-github-app-token"]}
|
|
`;
|
|
|
|
exports[`main-token-get-owner-set-repo-unset.test.js > stdout 1`] = `
|
|
Input 'repositories' is not set. Creating token for all repositories owned by actions.
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /users/actions/installation
|
|
POST /app/installations/123456/access_tokens
|
|
null
|
|
`;
|
|
|
|
exports[`main-token-get-owner-unset-repo-set.test.js > stdout 1`] = `
|
|
No 'owner' input provided. Using default owner 'actions' to create token for the following repositories:
|
|
- actions/create-github-app-token
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /repos/actions/create-github-app-token/installation
|
|
POST /app/installations/123456/access_tokens
|
|
{"repositories":["create-github-app-token"]}
|
|
`;
|
|
|
|
exports[`main-token-get-owner-unset-repo-unset.test.js > stdout 1`] = `
|
|
Inputs 'owner' and 'repositories' are not set. Creating token for this repository (actions/create-github-app-token).
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /repos/actions/create-github-app-token/installation
|
|
POST /app/installations/123456/access_tokens
|
|
{"repositories":["create-github-app-token"]}
|
|
`;
|
|
|
|
exports[`main-token-permissions-set.test.js > stdout 1`] = `
|
|
Inputs 'owner' and 'repositories' are not set. Creating token for this repository (actions/create-github-app-token).
|
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
|
|
::set-output name=installation-id::123456
|
|
|
|
::set-output name=app-slug::github-actions
|
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a
|
|
::save-state name=expiresAt::2016-07-11T22:14:10Z
|
|
--- REQUESTS ---
|
|
GET /repos/actions/create-github-app-token/installation
|
|
POST /app/installations/123456/access_tokens
|
|
{"repositories":["create-github-app-token"],"permissions":{"issues":"write","pull_requests":"read"}}
|
|
`;
|
|
|
|
exports[`post-proxy-requires-native-support.test.js > stderr 1`] = `
|
|
A proxy environment variable is set, but Node.js native proxy support is not enabled. Set NODE_USE_ENV_PROXY=1 for this action step.
|
|
`;
|
|
|
|
exports[`post-proxy-requires-native-support.test.js > stdout 1`] = `
|
|
::error::A proxy environment variable is set, but Node.js native proxy support is not enabled. Set NODE_USE_ENV_PROXY=1 for this action step.
|
|
`;
|
|
|
|
exports[`post-revoke-token-fail-response.test.js > stdout 1`] = `
|
|
::warning::Token revocation failed:
|
|
`;
|
|
|
|
exports[`post-token-expired.test.js > stdout 1`] = `
|
|
Token expired, skipping token revocation
|
|
`;
|
|
|
|
exports[`post-token-set.test.js > stdout 1`] = `
|
|
Token revoked
|
|
`;
|
|
|
|
exports[`post-token-skipped.test.js > stdout 1`] = `
|
|
Token revocation was skipped
|
|
`;
|
|
|
|
exports[`post-token-unset.test.js > stdout 1`] = `
|
|
Token is not set
|
|
`;
|