GitHub identity plugin for Imbi (github.com / GHEC / GHES)
Project description
imbi-plugin-github
GitHub plugins for Imbi. Three flavors (github.com, GitHub Enterprise Cloud, GitHub Enterprise Server) of each plugin type so the admin UI can wire projects to the right backend.
Plugin types
| Type | Slugs |
|---|---|
| Identity | github, github-enterprise-cloud, github-enterprise-server |
| Deployment | github-deployment, github-deployment-ec, github-deployment-es |
| Lifecycle | github-lifecycle, github-lifecycle-ec, github-lifecycle-es |
| Webhook | github-commit-sync |
Identity
Implements the OAuth App flow. The access token returned by the OAuth
grant is passed straight to GitHub APIs as a Bearer token, so
materialize() is a no-op.
Deployment
Drives the GitHub Deployments API (POST /repos/{owner}/{repo}/deployments)
plus tag and release creation. Promote behaviour is inferred from the
ref shape by the host (semver → trigger Deployment, raw SHA → cut tag
- Release). Per-env workflow inputs ride on the
USES_PLUGINedge asenv_payloadsand arrive onPluginContext.environment_config.
Lifecycle
Reacts to project archive / unarchive by archiving the matching repo via
PATCH /repos/{owner}/{repo} with {"archived": true|false}. When the
archive_target_org option is set, archive also transfers the repo to
that org first via POST /repos/{owner}/{repo}/transfer — useful for
moving sunset projects into a dedicated "archive" org so they no longer
crowd primary-org searches.
GitHub refuses to transfer archived repos, so an already-archived source
is briefly unarchived, transferred, and re-archived at the destination.
On unarchive the plugin only flips archived back to false at the
repo's current location — it does not transfer back to the original
org.
Archiving requires admin scope on the repo; transferring additionally requires admin permission on the target organization.
Webhook (commit / tag sync)
A single github-commit-sync webhook-action plugin exposes two actions
the gateway dispatches on push deliveries:
| Action | Handler | Records into ClickHouse |
|---|---|---|
sync_commits |
github-commit-sync#sync_commits |
commits |
sync_tags |
github-commit-sync#sync_tags |
tags |
sync_commits fetches the full set of commits in a push via the compare
API (paginated, so it isn't capped by the 20-commit inline payload limit);
sync_tags records the pushed tag and, with reconcile_all, the repo's
full tag list. Branch/tag gating is the rule's CEL filter_expression
(e.g. ref == "refs/heads/main", ref.startsWith("refs/tags/")). The API
flavor (github.com / GHEC / GHES) is resolved at runtime — explicit
api_base_url, else a connected GitHub plugin on the same service, else
the service endpoint, else the payload's repository.url.
Unlike identity/deployment/lifecycle (which act as the OAuth user), commit-sync runs without an actor and authenticates with a service credential in one of two modes, resolved per call:
- PAT — a static
access_token. - GitHub App —
app_id+private_key; the plugin signs an App JWT and mints a short-lived installation token (cached process-wide until shortly before it expires), so no static, expiring token is stored.installation_idis optional — when unset it is discovered from the pushed repository (GET /repos/{owner}/{repo}/installation). The App needs Contents: Read-only.
Manifest options (identity)
| Option | Required | Description |
|---|---|---|
host |
GHEC/GHES | Tenant or appliance host (e.g. tenant.ghe.com, github.example.com). |
default_scopes |
no | Space-separated default OAuth scopes (default: read:user user:email repo workflow). |
Credentials (identity)
| Field | Required |
|---|---|
client_id |
yes |
client_secret |
yes |
Credentials (commit-sync)
Provide either the PAT field or the GitHub App fields (all individually optional; validated per call):
| Field | Mode | Description |
|---|---|---|
access_token |
PAT | Static personal/service token. |
app_id |
App | GitHub App identifier. |
private_key |
App | App private key — raw PEM or base64-encoded PEM. |
installation_id |
App | Optional; discovered from the repo when unset. |
License
BSD-3-Clause.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file imbi_plugin_github-2.11.2.tar.gz.
File metadata
- Download URL: imbi_plugin_github-2.11.2.tar.gz
- Upload date:
- Size: 166.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ced4d6cc9c2b2d3222ae795b21d8a39437adb716acab2bebc32942d397dd8526
|
|
| MD5 |
88d06620194ea9d820922d61529dbe52
|
|
| BLAKE2b-256 |
01adc5e35af877a21821b8dc8c5da1ca2fec853709461d1a4e937e75fb980654
|
Provenance
The following attestation bundles were made for imbi_plugin_github-2.11.2.tar.gz:
Publisher:
publish.yml on AWeber-Imbi/imbi-plugin-github
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
imbi_plugin_github-2.11.2.tar.gz -
Subject digest:
ced4d6cc9c2b2d3222ae795b21d8a39437adb716acab2bebc32942d397dd8526 - Sigstore transparency entry: 1792591325
- Sigstore integration time:
-
Permalink:
AWeber-Imbi/imbi-plugin-github@9ea7752057c0260d8f3ad0e94d365fb17ec18caa -
Branch / Tag:
refs/tags/v2.11.2 - Owner: https://github.com/AWeber-Imbi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ea7752057c0260d8f3ad0e94d365fb17ec18caa -
Trigger Event:
release
-
Statement type:
File details
Details for the file imbi_plugin_github-2.11.2-py3-none-any.whl.
File metadata
- Download URL: imbi_plugin_github-2.11.2-py3-none-any.whl
- Upload date:
- Size: 49.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6502fdec5233473d92f1293d81dcfe9ae83eb966de7e6a06f900124c4cb6f410
|
|
| MD5 |
12cd0255180b568c86c2de67918af578
|
|
| BLAKE2b-256 |
cf209a4a03f4316240d7e7c489a1d187116cbe0d4fc5cc0cbbb31e61cc3962b1
|
Provenance
The following attestation bundles were made for imbi_plugin_github-2.11.2-py3-none-any.whl:
Publisher:
publish.yml on AWeber-Imbi/imbi-plugin-github
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
imbi_plugin_github-2.11.2-py3-none-any.whl -
Subject digest:
6502fdec5233473d92f1293d81dcfe9ae83eb966de7e6a06f900124c4cb6f410 - Sigstore transparency entry: 1792591440
- Sigstore integration time:
-
Permalink:
AWeber-Imbi/imbi-plugin-github@9ea7752057c0260d8f3ad0e94d365fb17ec18caa -
Branch / Tag:
refs/tags/v2.11.2 - Owner: https://github.com/AWeber-Imbi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ea7752057c0260d8f3ad0e94d365fb17ec18caa -
Trigger Event:
release
-
Statement type: