|
19 | 19 | steps: |
20 | 20 | - uses: actions/checkout@v4 |
21 | 21 |
|
22 | | - - name: Fetch CI secrets from Hanzo KMS |
23 | | - id: kms |
24 | | - env: |
25 | | - KMS_CLIENT_ID: ${{ secrets.KMS_CLIENT_ID }} |
26 | | - KMS_CLIENT_SECRET: ${{ secrets.KMS_CLIENT_SECRET }} |
27 | | - run: | |
28 | | - set -euo pipefail |
29 | | - KMS_URL="${KMS_URL:-https://kms.hanzo.ai}" |
30 | | -
|
31 | | - retry() { |
32 | | - local n=0 |
33 | | - until [ $n -ge 5 ]; do |
34 | | - "$@" && return 0 |
35 | | - n=$((n+1)); echo "::warning::Retry $n/5..." >&2; sleep $((n*5)) |
36 | | - done |
37 | | - return 1 |
38 | | - } |
39 | | -
|
40 | | - kms_login() { |
41 | | - curl -fsS -X POST "${KMS_URL}/api/v1/auth/universal-auth/login" \ |
42 | | - -H "Content-Type: application/json" \ |
43 | | - -d "$(jq -nc --arg cid "$KMS_CLIENT_ID" --arg cs "$KMS_CLIENT_SECRET" \ |
44 | | - '{clientId: $cid, clientSecret: $cs}')" \ |
45 | | - | jq -re '.accessToken' |
46 | | - } |
47 | | -
|
48 | | - ACCESS_TOKEN="$(retry kms_login)" |
49 | | - [ -n "${ACCESS_TOKEN}" ] && [ "${ACCESS_TOKEN}" != "null" ] || { |
50 | | - echo "::error::Failed to authenticate to Hanzo KMS"; exit 1; } |
51 | | -
|
52 | | - fetch_secret() { |
53 | | - curl -fsS "${KMS_URL}/api/v3/secrets/raw/${1}?workspaceSlug=gitops&environment=prod&secretPath=/ci&viewSecretValue=true&include_imports=true" \ |
54 | | - -H "Authorization: Bearer ${ACCESS_TOKEN}" \ |
55 | | - | jq -re '.secret.secretValue' |
56 | | - } |
57 | | -
|
58 | | - for name in DOCKERHUB_USERNAME DOCKERHUB_TOKEN DIGITALOCEAN_ACCESS_TOKEN; do |
59 | | - val="$(retry fetch_secret "$name")" |
60 | | - [ -n "$val" ] && [ "$val" != "null" ] || { echo "::error::Missing KMS secret $name"; exit 1; } |
61 | | - echo "::add-mask::${val}" |
62 | | - echo "${name}=${val}" >> "$GITHUB_OUTPUT" |
63 | | - done |
64 | | -
|
65 | 22 | - name: Set up Docker Buildx |
66 | 23 | uses: docker/setup-buildx-action@v3 |
67 | 24 |
|
|
77 | 34 | continue-on-error: true |
78 | 35 | with: |
79 | 36 | registry: docker.io |
80 | | - username: ${{ steps.kms.outputs.DOCKERHUB_USERNAME }} |
81 | | - password: ${{ steps.kms.outputs.DOCKERHUB_TOKEN }} |
| 37 | + username: ${{ secrets.DOCKERHUB_USERNAME }} |
| 38 | + password: ${{ secrets.DOCKERHUB_TOKEN }} |
82 | 39 |
|
83 | 40 | - name: Image metadata |
84 | 41 | id: meta |
@@ -112,51 +69,10 @@ jobs: |
112 | 69 | steps: |
113 | 70 | - uses: actions/checkout@v4 |
114 | 71 |
|
115 | | - - name: Fetch secrets from Hanzo KMS |
116 | | - id: kms |
117 | | - env: |
118 | | - KMS_CLIENT_ID: ${{ secrets.KMS_CLIENT_ID }} |
119 | | - KMS_CLIENT_SECRET: ${{ secrets.KMS_CLIENT_SECRET }} |
120 | | - run: | |
121 | | - set -euo pipefail |
122 | | - KMS_URL="${KMS_URL:-https://kms.hanzo.ai}" |
123 | | -
|
124 | | - retry() { |
125 | | - local n=0 |
126 | | - until [ $n -ge 5 ]; do |
127 | | - "$@" && return 0 |
128 | | - n=$((n+1)); echo "::warning::Retry $n/5..." >&2; sleep $((n*5)) |
129 | | - done |
130 | | - return 1 |
131 | | - } |
132 | | -
|
133 | | - kms_login() { |
134 | | - curl -fsS -X POST "${KMS_URL}/api/v1/auth/universal-auth/login" \ |
135 | | - -H "Content-Type: application/json" \ |
136 | | - -d "$(jq -nc --arg cid "$KMS_CLIENT_ID" --arg cs "$KMS_CLIENT_SECRET" \ |
137 | | - '{clientId: $cid, clientSecret: $cs}')" \ |
138 | | - | jq -re '.accessToken' |
139 | | - } |
140 | | -
|
141 | | - ACCESS_TOKEN="$(retry kms_login)" |
142 | | - [ -n "${ACCESS_TOKEN}" ] && [ "${ACCESS_TOKEN}" != "null" ] || { |
143 | | - echo "::error::Failed to authenticate to Hanzo KMS"; exit 1; } |
144 | | -
|
145 | | - fetch_do_token() { |
146 | | - curl -fsS "${KMS_URL}/api/v3/secrets/raw/DIGITALOCEAN_ACCESS_TOKEN?workspaceSlug=gitops&environment=prod&secretPath=/ci&viewSecretValue=true&include_imports=true" \ |
147 | | - -H "Authorization: Bearer ${ACCESS_TOKEN}" \ |
148 | | - | jq -re '.secret.secretValue' |
149 | | - } |
150 | | -
|
151 | | - val="$(retry fetch_do_token)" |
152 | | - [ -n "$val" ] && [ "$val" != "null" ] || { echo "::error::Missing KMS secret DIGITALOCEAN_ACCESS_TOKEN"; exit 1; } |
153 | | - echo "::add-mask::${val}" |
154 | | - echo "DIGITALOCEAN_ACCESS_TOKEN=${val}" >> "$GITHUB_OUTPUT" |
155 | | -
|
156 | 72 | - name: Install doctl |
157 | 73 | uses: digitalocean/action-doctl@v2 |
158 | 74 | with: |
159 | | - token: ${{ steps.kms.outputs.DIGITALOCEAN_ACCESS_TOKEN }} |
| 75 | + token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} |
160 | 76 |
|
161 | 77 | - name: Configure kubectl (hanzo-k8s) |
162 | 78 | run: doctl kubernetes cluster kubeconfig save hanzo-k8s |
|
0 commit comments