Git repositories
Connecting GitHub or GitLab, deciding who in the organization may build from your repositories, and what happens when you leave.
Applications are built from repositories reached through a GitHub or GitLab account that someone in your organization connected. Every clone the platform makes goes through that account's credential. So the person who connected an account decides who else may build from its repositories, not the organization's administrators.
Connecting an account
Each member connects their own account, from the Integrations page of the console. Developers can do this; it needs no administrator.
GitHub. You install the ISOGrid GitHub app on your account or on a GitHub organization you manage, and choose which repositories it may read. Only those repositories become visible to the platform. You can widen the selection later in GitHub.
GitLab. You sign in to GitLab and approve access, or paste a group, project or personal access token. Self-hosted GitLab instances work the same way, including projects in nested groups.
Once connected, your repositories appear in the console and in
isogrid repos list, with you as their owner.
Connect only what you intend to deploy. Selecting a handful of repositories in GitHub costs nothing and means a mistake here exposes nothing else.
Who can reach a repository
Every repository has a visibility.
| Visibility | Who can use it |
|---|---|
| Private | You, and whoever you invite. Nobody else, not even the organization's owner. |
| Administrators | Also the organization's owner and administrators. |
| Organization | Also every member, with the capabilities you chose. |
Invitations add to any of the three: a private repository can still be granted to one contractor or one group.
Under Administrators and Organization, the owner and administrators hold everything on the repository except deciding who else gets in. That stays with you.
Under Organization, every member holds what you chose. Unless you choose otherwise, that is: view it, create applications from it, build and deploy them, and change their configuration. Not deleting applications other people built from it, and not sharing it further.
A private repository is not merely hidden from lists. It does not answer to its name, so nobody can find out it exists by guessing.
Defaults, and settings per repository
Visibility is set in two places:
- On the connection, as the default for every repository it brings in. New connections start private. Change the default in the connection's settings on the Integrations page.
- On one repository, overriding the default. Set it back to inherit to follow the connection again.
isogrid repos access acme/api --visibility organization
isogrid repos access acme/api --visibility inherit
isogrid repos list marks a repository that follows its connection with
(default).
Connections made before these settings existed are organization-wide. They were usable by every member before, and they stay so until their owner changes them. If you connected an account a while ago, review it.
Inviting members and groups
Grant a repository to one member or to a permission group, with a preset:
| Preset | Capabilities | They can |
|---|---|---|
repo-viewer |
repo:view |
See it, its branches and commits. |
repo-deployer |
also repo:create-app, repo:deploy |
Create applications from it, and build and deploy them. |
repo-maintainer |
also repo:update |
Also change those applications' configuration and secrets. |
repo-admin |
also repo:delete |
Also delete those applications. |
isogrid repos grant acme/api --member contractor@partner.example --preset repo-deployer
isogrid repos grant acme/api --group backend --preset repo-maintainer
isogrid repos grants acme/api
isogrid repos revoke acme/api contractor@partner.example
No preset includes repo:share: whoever you invite cannot invite others. As
with every grant, you can give only what you hold; see
Roles, permission groups and access.
What a repository capability allows on its applications
A capability on a repository reaches every application built from it, including ones created after the grant. Nobody has to be added to each application separately.
| On the repository | On every application built from it |
|---|---|
repo:view |
Nothing yet: see the repository, its branches and commits. |
repo:create-app |
Create new applications from it. |
repo:deploy |
See it, read its logs, build and deploy it, start and stop it. |
repo:update |
See it, read its logs, change its configuration and secrets. |
repo:delete |
See it and delete it. |
repo:share |
Decide who else may use the repository. |
These add to whatever the person holds on the application itself.
Deploying is gated by the repository
Building or deploying an application needs repo:deploy on its repository,
whatever the person holds on the application. A build clones with the
connector's credential, so the connector's policy has the last word.
This is what makes taking a repository private mean something. Close it, and the applications built from it stop being deployable by anyone you have not invited — including administrators, including members who created those applications while it was open. The applications keep running; they just cannot be rebuilt or redeployed by people the repository is closed to.
When the connector leaves
When the member who connected an account leaves the organization or is suspended in it, nobody is left to decide for its repositories. Whoever may manage the organization's git connections (owners and administrators) takes over: they hold everything on those repositories, can change their visibility, invite and remove people, or disconnect the account.
Everything the connector set stays in force until someone changes it. An organization-wide repository stays organization-wide; a private one stays closed to everyone but those invited, and administrators can open it.
The account itself is still the connector's. If they revoke the app in GitHub or the token in GitLab, builds stop, whatever the settings here say. Plan to reconnect those repositories through someone who is staying.
Disconnecting
The connector can disconnect their own account; an administrator can disconnect anyone's. Applications built from its repositories keep running, but cannot be built again until the repositories are reachable through another connection.
Edge cases worth knowing before you meet them
"is not a repository you have been given access to". It is private, or open
to administrators and you are not one. Ask the owner, shown in
isogrid repos list to those who can see it, to invite you.
"You do not have 'repo:deploy' on acme/api". You can see the repository but
not build from it. You may hold app:deploy on the application; the repository
still has to allow it.
A deployment worked yesterday and is refused today. The repository was made private, or your grant was revoked. The application is untouched; ask the owner.
An administrator cannot change a repository's visibility. While its connector is a member, only they can. Administrators take over once the connector has left.
A repository does not appear at all. It was not selected when the GitHub app was installed, or the GitLab token cannot read it. Widen the selection in GitHub or GitLab; nothing needs to change here.
The CLI is refused where the console works, on a repository open to
administrators. Administrator access to repositories rests on the
github:manage permission. Approve a credential that includes it.