11#! /usr/bin/env bash
2- # Writes Maven Central credentials to Vault at kv/k8s/gitlab-runner/java-reggie/maven-central .
3- # The GitLab CI runner reads them automatically from that path via its K8s service account.
2+ # Writes Maven Central credentials to AWS SSM Parameter Store .
3+ # The GitLab CI runner reads them via the java-reggie K8s service account IAM role .
44#
55# Credentials are resolved in order:
66# 1. 1Password item "Maven Central Portal Token" (vault: Shared-Public-Software-Repositories)
99#
1010# Usage: ./scripts/update-maven-central-secrets.sh [--dry-run]
1111#
12- # Prerequisites:
13- # - ddtool (for Vault OIDC login)
14- # - vault CLI
15- # - op (1Password CLI) — optional but recommended
12+ # AWS credentials are obtained automatically via aws-vault (sso-build-stable-developer).
13+ # 1Password CLI (op) is optional but recommended.
1614
1715set -euo pipefail
1816
17+ AWS_PROFILE=" sso-build-stable-developer"
1918DRY_RUN=0
20- VAULT_ADDR_DEFAULT= " https://vault.us1.ddbuild.io "
21- VAULT_PATH= " kv/k8s/gitlab-runner/ java-reggie/maven-central "
19+ AWS_REGION= " us-east-1 "
20+ SSM_PREFIX= " ci. java-reggie"
2221KEYCHAIN_SERVICE=" java-reggie-maven-central"
2322OP_ITEM_NAME=" Maven Central Portal Token"
2423OP_VAULT=" Shared-Public-Software-Repositories"
@@ -34,7 +33,13 @@ for arg in "$@"; do
3433 esac
3534done
3635
37- export VAULT_ADDR=" ${VAULT_ADDR:- $VAULT_ADDR_DEFAULT } "
36+ # ── Re-exec via aws-vault if not already running inside it ────────────────────
37+
38+ if [[ -z " ${AWS_VAULT:- } " ]]; then
39+ command -v aws-vault > /dev/null 2>&1 || { echo " ERROR: aws-vault is required" ; exit 1; }
40+ echo " Re-executing via aws-vault ($AWS_PROFILE )..."
41+ exec aws-vault exec " $AWS_PROFILE " -- " $0 " " $@ "
42+ fi
3843
3944# ── Platform detection ────────────────────────────────────────────────────────
4045
@@ -43,9 +48,7 @@ IS_MACOS=0
4348
4449# ── Prerequisites ─────────────────────────────────────────────────────────────
4550
46- for cmd in vault ddtool; do
47- command -v " $cmd " > /dev/null 2>&1 || { echo " ERROR: $cmd is required" ; exit 1; }
48- done
51+ command -v aws > /dev/null 2>&1 || { echo " ERROR: aws CLI is required" ; exit 1; }
4952
5053# ── Helpers ───────────────────────────────────────────────────────────────────
5154
@@ -54,8 +57,16 @@ op_read() {
5457 op item get " $OP_ITEM_NAME " --vault " $OP_VAULT " --field " $field " --reveal 2> /dev/null || true
5558}
5659
57- op_available () {
58- command -v op > /dev/null 2>&1 && op whoami & > /dev/null
60+ op_signin () {
61+ if ! command -v op > /dev/null 2>&1 ; then
62+ return 1
63+ fi
64+ if op whoami & > /dev/null; then
65+ return 0
66+ fi
67+ echo " 1Password CLI found but not signed in — signing in..."
68+ eval " $( op signin) " || return 1
69+ op whoami & > /dev/null
5970}
6071
6172keychain_read () {
@@ -82,14 +93,24 @@ prompt_secret() {
8293 printf ' %s' " $value "
8394}
8495
96+ ssm_put () {
97+ local name=" $1 " value=" $2 "
98+ aws ssm put-parameter \
99+ --region " $AWS_REGION " \
100+ --name " $name " \
101+ --value " $value " \
102+ --type SecureString \
103+ --overwrite
104+ }
105+
85106# ── Resolve credentials ───────────────────────────────────────────────────────
86107
87108USERNAME=" "
88109PASSWORD=" "
89110SOURCE=" "
90111
91112# 1. Try 1Password
92- if op_available ; then
113+ if op_signin ; then
93114 echo " Reading from 1Password (\" $OP_ITEM_NAME \" in $OP_VAULT )..."
94115 USERNAME=$( op_read " username" )
95116 PASSWORD=$( op_read " password" )
@@ -99,8 +120,6 @@ if op_available; then
99120 else
100121 echo " Item not found or missing fields — falling back"
101122 fi
102- else
103- command -v op > /dev/null 2>&1 && echo " 1Password CLI found but not signed in (run: op signin). Falling back..."
104123fi
105124
106125# 2. Try macOS Keychain
130149
131150[ -n " $SOURCE " ] || SOURCE=" prompt"
132151
133- # ── Vault login (skip if already authenticated) ───────────────────────────────
134-
135- echo " "
136- if vault token lookup & > /dev/null; then
137- echo " Already authenticated to Vault ($VAULT_ADDR )"
138- else
139- echo " Authenticating to Vault ($VAULT_ADDR )..."
140- ddtool auth login
141- fi
142-
143- # ── Write to Vault ────────────────────────────────────────────────────────────
152+ # ── Write to SSM ──────────────────────────────────────────────────────────────
144153
145154echo " "
146155if [ $DRY_RUN -eq 1 ]; then
147- echo " [dry-run] would write: vault kv put $VAULT_PATH username=<...> password=<...>"
156+ echo " [dry-run] would write:"
157+ echo " ${SSM_PREFIX} .maven_central_username"
158+ echo " ${SSM_PREFIX} .maven_central_password"
148159else
149- vault kv put " $VAULT_PATH " username=" $USERNAME " password=" $PASSWORD "
150- echo " ✓ $VAULT_PATH "
160+ ssm_put " ${SSM_PREFIX} .maven_central_username" " $USERNAME "
161+ echo " ✓ ${SSM_PREFIX} .maven_central_username"
162+ ssm_put " ${SSM_PREFIX} .maven_central_password" " $PASSWORD "
163+ echo " ✓ ${SSM_PREFIX} .maven_central_password"
151164fi
152165
153166# ── Offer to save to Keychain if values came from a prompt ───────────────────
@@ -163,4 +176,4 @@ if [ "$SOURCE" = "prompt" ] && [ $IS_MACOS -eq 1 ] && [ $DRY_RUN -eq 0 ]; then
163176fi
164177
165178echo " "
166- echo " Done. GitLab CI reads from: $VAULT_PATH "
179+ echo " Done. GitLab CI reads from: ${SSM_PREFIX} .maven_central_{username,password} "
0 commit comments