Skip to content

feat: support tokens scoped to multiple repositories within organization #46

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

Merged
merged 29 commits into from
Oct 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
12bf248
support token scope to multiple repos
timreimherr Sep 20, 2023
9c2fe6b
update documentation
timreimherr Sep 20, 2023
4e0d015
if owner not set default to current repo owner
timreimherr Sep 21, 2023
151c72e
default to all repos if none are supplied
timreimherr Sep 21, 2023
84c746a
tests for lib/main.js
timreimherr Sep 21, 2023
98d3657
remove jest test
timreimherr Sep 21, 2023
63a98a7
Update documentation
timreimherr Sep 21, 2023
8f5a382
Merge branch 'main' into main
gr2m Sep 21, 2023
a12bbe4
Merge branch 'main' into main
gr2m Sep 21, 2023
fb1cbf7
allow for 'owner' to be empty
timreimherr Sep 22, 2023
c21d2ca
scope according to input
timreimherr Sep 22, 2023
6d39deb
Update documentation
timreimherr Sep 22, 2023
90239ca
clarify documentation
timreimherr Sep 22, 2023
3cfbd0e
change action name for publishing
timreimherr Sep 22, 2023
e8a138f
fix action name
timreimherr Sep 25, 2023
7c7676d
build: dist/main.cjs
gr2m Sep 29, 2023
4b133dc
Merge branch 'main' into main
parkerbxyz Oct 3, 2023
68894b6
update main
gr2m Sep 29, 2023
02c936f
build update for testing
gr2m Oct 3, 2023
73f98bd
Update README.md
gr2m Oct 3, 2023
91b880c
Update action.yml
gr2m Oct 3, 2023
80484a9
build(package): lock file
gr2m Oct 3, 2023
aa7595e
build files for testing (after updating dependencies)
gr2m Oct 3, 2023
2df34b8
Use sentence case in comments for consistency
parkerbxyz Oct 3, 2023
13b24f0
Remove language codes from GitHub Docs URLs
parkerbxyz Oct 3, 2023
9dcf16e
Move note to a dedicated section
parkerbxyz Oct 3, 2023
dad2c36
Reword step 1
parkerbxyz Oct 3, 2023
0a057cb
Update example usage headers
parkerbxyz Oct 3, 2023
7c0311c
Update lib/main.js
gr2m Oct 4, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 80 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ In order to use this action, you need to:
2. [Store the App's ID in your repository environment variables](https://docs.github.com/actions/learn-github-actions/variables#defining-configuration-variables-for-multiple-workflows) (example: `APP_ID`)
3. [Store the App's private key in your repository secrets](https://docs.github.com/actions/security-guides/encrypted-secrets?tool=webui#creating-encrypted-secrets-for-a-repository) (example: `PRIVATE_KEY`)

### Minimal usage
### Create a token for the current repository

```yaml
on: [issues]
Expand Down Expand Up @@ -57,6 +57,73 @@ jobs:
github_token: ${{ steps.app-token.outputs.token }}
```

### Create a token for all repositories in the current owner's installation

```yaml
on: [workflow_dispatch]

jobs:
hello-world:
runs-on: ubuntu-latest
steps:
- uses: actions/create-github-app-token@v1
id: app-token
with:
app_id: ${{ vars.APP_ID }}
private_key: ${{ secrets.PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
- uses: peter-evans/create-or-update-comment@v3
with:
token: ${{ steps.app-token.outputs.token }}
issue-number: ${{ github.event.issue.number }}
body: "Hello, World!"
```

### Create a token for multiple repositories in the current owner's installation

```yaml
on: [issues]

jobs:
hello-world:
runs-on: ubuntu-latest
steps:
- uses: actions/create-github-app-token@v1
id: app-token
with:
app_id: ${{ vars.APP_ID }}
private_key: ${{ secrets.PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
repositories: "repo1,repo2"
- uses: peter-evans/create-or-update-comment@v3
with:
token: ${{ steps.app-token.outputs.token }}
issue-number: ${{ github.event.issue.number }}
body: "Hello, World!"
```

### Create a token for all repositories in another owner's installation

```yaml
on: [issues]

jobs:
hello-world:
runs-on: ubuntu-latest
steps:
- uses: actions/create-github-app-token@v1
id: app-token
with:
app_id: ${{ vars.APP_ID }}
private_key: ${{ secrets.PRIVATE_KEY }}
owner: another-owner
- uses: peter-evans/create-or-update-comment@v3
with:
token: ${{ steps.app-token.outputs.token }}
issue-number: ${{ github.event.issue.number }}
body: "Hello, World!"
```

## Inputs

### `app_id`
Expand All @@ -67,6 +134,17 @@ jobs:

**Required:** GitHub App private key.

### `owner`

**Optional:** GitHub App installation owner. If empty, defaults to the current repository owner.

### `repositories`

**Optional:** Comma-separated list of repositories to grant access to.

> [!NOTE]
> If `owner` is set and `repositories` is empty, access will be scoped to all repositories in the provided repository owner's installation. If `owner` and `repositories` are empty, access will be scoped to only the current repository.

## Outputs

### `token`
Expand All @@ -77,7 +155,7 @@ GitHub App installation access token.

The action creates an installation access token using [the `POST /app/installations/{installation_id}/access_tokens` endpoint](https://docs.github.com/rest/apps/apps?apiVersion=2022-11-28#create-an-installation-access-token-for-an-app). By default,

1. The token is scoped to the current repository.
1. The token is scoped to the current repository or `repositories` if set.
2. The token inherits all the installation's permissions.
3. The token is set as output `token` which can be used in subsequent steps.
4. The token is revoked in the `post` step of the action, which means it cannot be passed to another job.
Expand Down
6 changes: 6 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ inputs:
private_key:
description: "GitHub App private key"
required: true
owner:
description: "GitHub App owner (defaults to current repository owner)"
required: false
repositories:
description: "Repositories to install the GitHub App on (defaults to current repository if owner is unset)"
required: false
outputs:
token:
description: "GitHub installation access token"
Expand Down
Loading