Files
holos/docs/github-auth.md
Jeff McCune 0653a0bbcb manage cert-manager kargo promotion
This patch implements the promotion steps and has been tested up through
triggering the ArgoCD sync.

Note the `git-wait-for-pr` step takes quite a while to complete.  It
appears to poll on a 5 minute interval.

After playing with this a bit it seems we may want to stop the Kargo
process at opening the PR.
2024-12-19 13:47:38 -08:00

4.6 KiB

Kargo Demo

Kargo requires git credentials to promote artifacts. Follow these steps to setup you Local Cluster with these credentials.

Process

First, fork this repo to your account.

We'll create a GitHub App, install the app with write permission to our own fork, then store the private key in "$(mkcert -CAROOT)/kargo.yaml" so it's automatically restored by the reset-cluster script.

GitHub App

GitHub App Authentication

Create a GitHub App in the user or organization where your bank-of-holos fork resides.

In the GitHub App name field, specify a unique name, for example Holos - Local Cluster 1733418802 produced by:

echo -n "Holos - Local Cluster $(date +%s)" | pbcopy

Set the Homepage URL to https://holos.run/docs/local-cluster/.

Under Webhook, de-select Active.

Under PermissionsRepository permissionsContents, select Read and write permissions. The App will receive these permissions on all repositories into which it is installed.

The git-open-pr step requires write permission to pull requests. Add this permission if you get the following error:

step execution failed: step 4 met error threshold of 1: failed to run step
"git-open-pr": error creating pull request: POST
https://api.github.com/repos/jeffmccune/kargo-demo/pulls: 403 Resource not
accessible by integration []

Under Where can this GitHub App be installed?, leave Only on this account selected.

Click Create GitHub App.

Take note of the App ID. In your shell store it for use later using:

export BANK_OF_HOLOS_APP_ID=9999999

Scroll to the bottom of the page and click Generate a private key. The resulting key will be downloaded immediately. Record the path to this file for use later using:

export BANK_OF_HOLOS_APP_KEY="$(ls -lr1 ~/Downloads/holos-local-cluster*.private-key.pem | tail -1)"

On the left-hand side of the page, click Install App.

Choose an account to install the App into by clicking Install.

Select Only select repositories and choose your bank-of-holos fork. Remember that the App will receive the permissions you selected earlier for all repositories you grant access.

Click Install.

In your browser's address bar, take note of the numeric identifier at the end of the current page's URL. This is the Installation ID. Save the installation id for later.

For example, https://github.com/settings/installations/99999999 is saved as:

export BANK_OF_HOLOS_INSTALL_ID=99999999

GitHub App Secret

Generate a Kubernetes Secret to store the Kargo git credentials. We put this in mkcert -CAROOT so reset-cluster restores it each time the local cluster is reset.

Record the Git URL, the same as you set for Organization.RepoURL

export BANK_OF_HOLOS_REPO_URL="https://github.com/${USER}/bank-of-holos.git"

At this point you should have the following values, for example:

env | grep BANK_OF_HOLOS
BANK_OF_HOLOS_APP_ID=1079195
BANK_OF_HOLOS_APP_KEY=/Users/jeff/Downloads/holos-local-cluster-1733419264.2024-12-05.private-key.pem
BANK_OF_HOLOS_INSTALL_ID=58021430
BANK_OF_HOLOS_REPO_URL=https://github.com/jeffmccune/bank-of-holos.git

Generate the secret:

./scripts/kargo-git-creds
Secret created, apply with:
  kubectl apply -f '/Users/jeff/Library/Application Support/mkcert/kargo.yaml'

The reset-cluster script will automatically apply this secret going forward.

And apply it or reset your cluster.

kubectl apply -f '/Users/jeff/Library/Application Support/mkcert/kargo.yaml'

Verification

Make sure you've configured Holos to use your bank-of-holos fork.

cat <<EOF > organization-repo-${USER}.cue
@if($USER)
package holos

Organization: RepoURL: "${BANK_OF_HOLOS_REPO_URL}"
EOF

Then reset the cluster fully. (Note this will delete and re-create your local k3d cluster)

./scripts/full-reset

After a couple of minutes you should be able to log into https://kargo.holos.localhost with the admin password obtained with:

kubectl get secret -n kargo admin-credentials -o json \
  | jq --exit-status -r '.data.password | @base64d'

Make sure to commit to main and push it to your fork, then try and promote the bank frontend.

ArgoCD is available at https://argocd.holos.localhost Most apps except those which have previously been promoted in your fork should be in sync after a full reset.