Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
c6b5a1c
Skip project if query can't be validated
TrishGillett Sep 29, 2025
6df9a73
chore(deps): Bump hynek/build-and-inspect-python-package from 2.13.0 …
dependabot[bot] Oct 13, 2025
5a94b0d
chore(deps): Bump singer-sdk from 0.50.1 to 0.50.2 in the runtime-dep…
dependabot[bot] Oct 13, 2025
ae8823b
chore(deps-dev): Bump types-python-dateutil from 2.9.0.20250822 to 2.…
dependabot[bot] Oct 13, 2025
89476e6
fix: String to int conversion in scraping (#474)
rluvaton Oct 14, 2025
60964cd
chore(deps): Bump singer-sdk from 0.50.2 to 0.51.0 (#476)
dependabot[bot] Oct 20, 2025
1c2c39b
chore(deps): Bump cryptography from 46.0.2 to 46.0.3 in the runtime-d…
dependabot[bot] Oct 20, 2025
67ac7f2
fix: Bump Singer SDK to 0.52 (#477)
edgarrmondragon Oct 22, 2025
4a83750
chore(deps): Bump actions/download-artifact from 5.0.0 to 6.0.0 in th…
dependabot[bot] Oct 27, 2025
791270d
chore(deps): Bump singer-sdk from 0.52.1 to 0.52.2 in the runtime-dep…
dependabot[bot] Oct 27, 2025
d7b9f56
feat: Add ReviewCommentReactions stream (#480)
linbug Oct 31, 2025
0e39765
chore(deps): Bump singer-sdk from 0.52.2 to 0.52.5 in the runtime-dep…
dependabot[bot] Nov 3, 2025
7c797f2
chore: pre-commit autoupdate (#482)
pre-commit-ci[bot] Nov 3, 2025
58255df
chore(deps-dev): Bump the development-dependencies group with 2 updat…
dependabot[bot] Nov 10, 2025
50afa2a
packaging: Use PEP 621 and PEP 735 (#484)
edgarrmondragon Nov 13, 2025
9801107
prototyping changes to support org-specific auth
TrishGillett Nov 13, 2025
6a32dcd
chore: Add `lockfile-only` Dependabot strategy
edgarrmondragon Nov 13, 2025
f490f22
Revert "chore: Add `lockfile-only` Dependabot strategy"
edgarrmondragon Nov 13, 2025
14897ae
Switch authentication when switching orgs [working]
linbug Nov 17, 2025
e313568
Backwards compatibility
linbug Nov 17, 2025
0240023
Fix get_next_auth_token rotation
linbug Nov 17, 2025
2bfa07a
Update tests
linbug Nov 17, 2025
52522d9
Clean up authenticator
linbug Nov 18, 2025
150c400
Clean up logging
linbug Nov 18, 2025
4a2828e
fix: Bump Singer SDK to 0.53 (#485)
edgarrmondragon Nov 19, 2025
241e02f
Add fallback to using tokens from any org
linbug Nov 20, 2025
8d14937
Update tests
linbug Nov 20, 2025
b2d56ec
Override parent method to set organization-specific authentication
linbug Nov 24, 2025
baa75ea
chore(deps): Bump the actions group with 2 updates (#486)
dependabot[bot] Nov 24, 2025
37f14a6
chore(deps): Bump singer-sdk from 0.53.2 to 0.53.3 in the runtime-dep…
dependabot[bot] Nov 27, 2025
f225770
Merge branch 'main' into multiorg-auth
linbug Nov 28, 2025
e4486a4
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Nov 28, 2025
1212498
Reduce complexity of prepare_tokens()
linbug Nov 28, 2025
31c61a0
Fix linter errors
linbug Nov 28, 2025
ee32595
Docs update
linbug Nov 28, 2025
6dfdd48
Update README
linbug Dec 1, 2025
23e1d88
chore(deps): Bump actions/setup-python from 6.0.0 to 6.1.0 in the act…
dependabot[bot] Dec 1, 2025
8c48d2e
Merge branch 'main' into multiorg-auth
linbug Dec 1, 2025
6cf53f8
chore: pre-commit autoupdate (#492)
pre-commit-ci[bot] Dec 1, 2025
ddae164
Merge branch 'main' into multiorg-auth
linbug Dec 1, 2025
2f09f79
chore(deps-dev): Bump mypy from 1.18.2 to 1.19.0 in the development-d…
dependabot[bot] Dec 1, 2025
074e87d
chore(deps): Bump the runtime-dependencies group with 2 updates (#491)
dependabot[bot] Dec 1, 2025
5adf3cc
Merge branch 'main' into multiorg-auth
edgarrmondragon Dec 1, 2025
b6df8fc
chore: Lock file maintenance (#493)
edgarrmondragon Dec 1, 2025
41ac79a
Merge branch 'main' into multiorg-auth
linbug Dec 2, 2025
0a4dfb9
Simplify else statement
linbug Dec 3, 2025
301abf8
Add org_auth_app_keys instead of combining in auth_app_keys
linbug Dec 3, 2025
9b6d3c6
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Dec 3, 2025
d98e464
nit: Update types
edgarrmondragon Dec 3, 2025
549a0d1
Remove unused organization and github_organization params
linbug Dec 4, 2025
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
8 changes: 4 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ jobs:
outputs:
version: ${{ steps.baipp.outputs.package_version }}
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
fetch-depth: 0
- uses: hynek/build-and-inspect-python-package@c52c3a4710070b50470d903818a7b25115dcd076 # v2.13.0
- uses: hynek/build-and-inspect-python-package@efb823f52190ad02594531168b7a2d5790e66516 # v2.14.0
id: baipp

publish:
Expand All @@ -30,12 +30,12 @@ jobs:
if: startsWith(github.ref, 'refs/tags/')

steps:
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
name: Packages
path: dist
- name: Upload wheel to release
uses: svenstaro/upload-release-action@81c65b7cd4de9b2570615ce3aad67a41de5b1a13 # 2.11.2
uses: svenstaro/upload-release-action@6b7fa9f267e90b50a19fef07b3596790bb941741 # 2.11.3
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: dist/*.whl
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test_tap.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
max-parallel: 1

steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- name: Get Date
id: get-date
run: |
Expand All @@ -73,7 +73,7 @@ jobs:
virtualenvs-in-project: true
- name: Set up Python ${{ matrix.python-version }}
id: setup-python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ repos:


- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.13.3
rev: v0.14.7
hooks:
- id: ruff-check
args: [ --fix ]
Expand Down
27 changes: 24 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,20 @@ This tap accepts the following configuration options:
- `auth_token` - Takes a single token.
- `additional_auth_tokens` - Takes a list of tokens. Can be used together with `auth_token` or as the sole source of PATs.
- Any environment variables beginning with `GITHUB_TOKEN` will be assumed to be PATs. These tokens will be used in addition to `auth_token` (if provided), but will not be used if `additional_auth_tokens` is provided.
- GitHub App keys are another option for authentication, and can be used in combination with PATs if desired. App IDs and keys should be assembled into the format `:app_id:;;-----BEGIN RSA PRIVATE KEY-----\n_YOUR_P_KEY_\n-----END RSA PRIVATE KEY-----` (replace `:app_id:` with your actual GitHub App ID and `_YOUR_P_KEY_` with your private key content) where the key can be generated from the `Private keys` section on https://github.com/organizations/:organization_name/settings/apps/:app_name. Read more about GitHub App quotas [here](https://docs.github.com/en/enterprise-server@3.3/developers/apps/building-github-apps/rate-limits-for-github-apps#server-to-server-requests). Formatted app keys can be provided in 2 ways:
- `auth_app_keys` - List of GitHub App keys in the prescribed format.
- If `auth_app_keys` is not provided but there is an environment variable with the name `GITHUB_APP_PRIVATE_KEY`, it will be assumed to be an App key in the prescribed format.
- GitHub App keys are another option for authentication, and can be used in combination with PATs if desired. App IDs and keys should be assembled into the format `:app_id:;;-----BEGIN RSA PRIVATE KEY-----\n_YOUR_P_KEY_\n-----END RSA PRIVATE KEY-----` (replace `:app_id:` with your actual GitHub App ID and `_YOUR_P_KEY_` with your private key content) where the key can be generated from the `Private keys` section on https://github.com/organizations/:organization_name/settings/apps/:app_name. Read more about GitHub App quotas [here](https://docs.github.com/en/enterprise-server@3.3/developers/apps/building-github-apps/rate-limits-for-github-apps#server-to-server-requests). Formatted app keys can be provided in 3 ways:
- `auth_app_keys` - List of GitHub App keys in the prescribed format. These keys are organization-agnostic and will be used as fallback for all organizations.
- `org_auth_app_keys` - Object/dictionary mapping organization names to lists of GitHub App keys. This allows you to specify different app credentials for different organizations, enabling better rate limit management across multiple organizations. Example:
```yaml
auth_app_keys:
- "fallback_app_id;;-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"
org_auth_app_keys:
my-org:
- "app_id_1;;-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"
- "app_id_2;;-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"
another-org:
- "app_id_3;;-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"
```
- If `auth_app_keys` is not provided but there is an environment variable with the name `GITHUB_APP_PRIVATE_KEY`, it will be assumed to be an App key in the prescribed format (organization-agnostic).
- Optional:
- `user_agent`
- `start_date`
Expand All @@ -65,6 +76,16 @@ tap-github --about

A small number of records may be pulled without an auth token. However, a Github auth token should generally be considered "required" since it gives more realistic rate limits. (See GitHub API docs for more info.)

#### Multi-Organization Authentication

When using `org_auth_app_keys`, the tap will automatically switch authentication contexts based on the organization being processed. This enables:

- **Organization-specific rate limits**: Each organization can have its own set of GitHub App credentials, preventing rate limit exhaustion when processing multiple organizations.
- **Automatic token selection**: When processing repositories from a specific organization, the tap will prefer tokens configured for that organization.
- **Fallback behavior**: If no organization-specific tokens are available, the tap will fall back to:
1. Organization-agnostic tokens (personal tokens or `auth_app_keys`)
2. Tokens from other organizations (for accessing public data)

## Usage

### API Limitation - Pagination
Expand Down
2 changes: 2 additions & 0 deletions meltano.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ plugins:
kind: array
- name: auth_app_keys
kind: array
- name: org_auth_app_keys
kind: object
- name: rate_limit_buffer
kind: integer
- name: expiry_time_buffer
Expand Down
Loading