- A way to authenticate to your cloud provider — so they can push to your container registry and talk to your cluster’s Kubernetes API
- A way to write back to your Git repos — semver bumps on release, GitOps overlay updates, commits against a separate deployment repo
Three GitHub integrations, three purposes
If you run through full onboarding you’ll set up as many as three separate GitHub integrations. They do different things — don’t install one and assume it covers the others:| Integration | What it does | When you need it | Set up with |
|---|---|---|---|
| GitHub Actions OIDC | Lets your CI/CD workflows authenticate to AWS, GCP, or Azure without long-lived keys. | Every project that uses the generated workflows with a cloud provider. | skyhook github setup |
| Deployment GitHub App | Lets workflows push commits to a separate deployment repo (GitOps overlays, image-tag bumps). Issues short-lived App tokens, not user creds. | Only if your Kubernetes manifests live in a different repo from your code. | skyhook onboard deploy-auth |
| ArgoCD GitHub App | Lets ArgoCD read your GitOps repo from inside the cluster. Completely separate from the one above. | Only if you’re using GitOps with ArgoCD. | skyhook onboard argocd configure-access — covered in GitOps with ArgoCD |
Cloud authentication
The recommended path for AWS and GCP is OIDC — GitHub Actions authenticates to your cloud provider with a short-lived token, no long-lived keys to rotate. The Skyhook CLI can set this up end-to-end.- CLI (recommended)
- GCP manual (service account key)
- AWS manual (access keys)
- Azure
- BYOK / other registries
skyhook github setup creates the cloud-side trust relationship — the OIDC identity provider and an IAM role on AWS, or a Workload Identity Federation pool and service account on GCP — and prints the GitHub repository variables you need to add.--cloud gcp/--cloud aws— skip the cloud prompt--github-org <org>— explicit GitHub org (auto-detected from git remote otherwise)--template-only— print CloudFormation/Terraform instead of running cloud CLI commands, useful when you don’t haveaws/gcloudlocally or want the setup applied by a platform team--dry-run— show what would change without touching anything
gh plus the relevant cloud CLI (gcloud or aws) to be installed and authenticated. If they’re not, it falls back to template mode.On success you’ll see the variables to add to GitHub → Settings → Secrets and variables → Actions → Variables:- AWS:
AWS_BUILD_ROLE,AWS_DEPLOY_ROLE - GCP:
WIF_PROVIDER,WIF_SERVICE_ACCOUNT
Writing back to your repos
The workflows push commits back to Git for a few reasons: bumping a service’sVERSION file on release, writing new image tags into GitOps overlays, and (for services with a separate deployment repository) updating manifests in a repo other than the source repo. Each of those needs something more privileged than the default GITHUB_TOKEN.
Separate deployment repositories
If your Kubernetes manifests live in a different repo from your code, workflows need cross-repo access. Skyhook’s Deployment GitHub App is the recommended way — fine-grained permissions, auto-rotating tokens, and attribution under a bot identity instead of a user.- CLI (recommended)
- UI
- Personal Access Token
skyhook onboard deploy-auth walks through creating the GitHub App, installing it on the deployment repo, and storing the credentials where the workflows can find them. Supports re-running for reconfiguration.On success you’ll have GH_APP_ID and GH_APP_PK as GitHub secrets (organization-wide or per-repo, depending on your GitHub plan).Protected branches
If your default branch is protected with required reviews, the workflow can’t pushVERSION bumps or GitOps overlay updates with the built-in GITHUB_TOKEN — GitHub doesn’t grant it bypass permissions.
The simplest fix is to use the GH_APP_ID/GH_APP_PK secrets from the Deployment GitHub App (recommended above) and allow that app to bypass branch protection under Repository settings → Branches → Branch protection rules → Allow specified actors to bypass required pull requests.
As a fallback, you can use a PAT from a user with bypass permissions (organization admin, repository admin, or an explicit bypass actor):
-
Create a PAT at https://github.com/settings/tokens with full
repoaccess. -
Add it as an org or repo secret named
GHA_PAT. -
Reference it in the checkout step of
release.ymland (for GitOps)deploy.yml:
GHA_PAT automatically when it’s set, so step 3 isn’t needed if you’re on the current template.
Verify the setup
Once credentials are in place, trigger a run to confirm. From the service directory, useskyhook deploy to build and deploy to a safe environment: