Skip to content

Commit 9e0a228

Browse files
katipallyCopilot
andcommitted
fix(release): use robust PEM reconstruction for ASC API key
Copy the battle-tested fold -w 64 + auto-detect PEM/base64 logic from ios-testflight.yml (which passes) into the release workflow. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 8009219 commit 9e0a228

1 file changed

Lines changed: 20 additions & 17 deletions

File tree

.github/workflows/release.yml

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -91,26 +91,29 @@ jobs:
9191
API_KEY_ID_RAW: ${{ secrets.APP_STORE_CONNECT_KEY_ID }}
9292
API_ISSUER_RAW: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
9393
run: |
94-
KEY_ID=$(echo "$API_KEY_ID_RAW" | tr -d '[:space:]')
95-
ISSUER_ID=$(echo "$API_ISSUER_RAW" | tr -d '[:space:]')
96-
KEY_DIR=~/.appstoreconnect/private_keys
97-
mkdir -p "$KEY_DIR"
98-
KEY_PATH="$KEY_DIR/AuthKey_${KEY_ID}.p8"
99-
# Reconstruct proper PEM with 64-char line wraps
100-
RAW=$(echo "$API_KEY" | tr -d '[:space:]')
101-
if echo "$RAW" | grep -q "BEGINPRIVATEKEY\|BEGIN PRIVATE KEY"; then
102-
B64=$(echo "$RAW" | sed 's/-----BEGIN PRIVATE KEY-----//;s/-----END PRIVATE KEY-----//')
94+
set -euo pipefail
95+
API_KEY_ID=$(printf '%s' "$API_KEY_ID_RAW" | tr -d '[:space:]')
96+
API_ISSUER=$(printf '%s' "$API_ISSUER_RAW" | tr -d '[:space:]')
97+
mkdir -p "$HOME/.appstoreconnect/private_keys"
98+
RAW_FILE="$RUNNER_TEMP/api_key_raw.p8"
99+
KEY_FILE="$HOME/.appstoreconnect/private_keys/AuthKey_${API_KEY_ID}.p8"
100+
if printf '%s' "$API_KEY" | head -c 20 | grep -q "^-----BEGIN"; then
101+
printf '%s' "$API_KEY" | tr -d '\r' > "$RAW_FILE"
103102
else
104-
B64="$RAW"
103+
printf '%s' "$API_KEY" | tr -d '\r ' | base64 -D > "$RAW_FILE"
105104
fi
106-
{ printf -- "-----BEGIN PRIVATE KEY-----\n"
105+
RAW_CONTENT=$(cat "$RAW_FILE" | tr -d '\r')
106+
KEY_TYPE=$(printf '%s' "$RAW_CONTENT" | grep -o -- "-----BEGIN [^-]*-----" | head -1 | sed 's/-----BEGIN //;s/-----//')
107+
B64=$(printf '%s' "$RAW_CONTENT" | grep -v "^-----" | tr -d '\n\r ')
108+
{ printf -- "-----BEGIN %s-----\n" "$KEY_TYPE"
107109
printf '%s' "$B64" | fold -w 64
108-
printf -- "\n-----END PRIVATE KEY-----\n"; } > "$KEY_PATH"
109-
chmod 600 "$KEY_PATH"
110-
echo "key_id=${KEY_ID}" >> "$GITHUB_OUTPUT"
111-
echo "issuer_id=${ISSUER_ID}" >> "$GITHUB_OUTPUT"
112-
echo "key_path=${KEY_PATH}" >> "$GITHUB_OUTPUT"
113-
echo "ASC API key written for key ID: ${KEY_ID}"
110+
printf "\n-----END %s-----\n" "$KEY_TYPE"; } > "$KEY_FILE"
111+
chmod 600 "$KEY_FILE"
112+
rm -f "$RAW_FILE"
113+
echo "key_id=${API_KEY_ID}" >> "$GITHUB_OUTPUT"
114+
echo "issuer_id=${API_ISSUER}" >> "$GITHUB_OUTPUT"
115+
echo "key_path=${KEY_FILE}" >> "$GITHUB_OUTPUT"
116+
echo "ASC API key written ($(wc -l < "$KEY_FILE") lines) for key ID: ${API_KEY_ID}"
114117
115118
- name: Build Release Archive
116119
run: |

0 commit comments

Comments
 (0)