Skip to content

Release to App Store Connect #22

Release to App Store Connect

Release to App Store Connect #22

Workflow file for this run

name: Release to App Store Connect
on:
release:
types: [published]
jobs:
upload:
runs-on: macos-latest
timeout-minutes: 30
env:
SCHEME: AmorphousDiskMark
PROJECT: AmorphousDiskMark/AmorphousDiskMark.xcodeproj
steps:
- uses: actions/checkout@v5
- name: Select Xcode version 13.4
run: |
ls -1d /Applications/Xcode*
sudo xcode-select --switch /Applications/Xcode_13.4.app
# --- Version from tag ---
- name: Set version from tag
run: |
VERSION="${GITHUB_REF_NAME#v}"
VERSION="${VERSION%-rc*}"
echo "VERSION=$VERSION" >> "$GITHUB_ENV"
- name: Stamp version into Info.plist
run: |
PLIST="AmorphousDiskMark/AmorphousDiskMark/Info.plist"
BUNDLE_VERSION=`expr $GITHUB_RUN_NUMBER + 27`
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $VERSION" "$PLIST"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUNDLE_VERSION" "$PLIST"
# --- Signing ---
- name: Install certificate and provisioning profile
env:
CERTIFICATE_BASE64: ${{ secrets.TWO_CERTS_BASE64 }}
CERTIFICATE_PASSWORD: ${{ secrets.TWO_CERTS_PASSWORD }}
PROVISIONING_PROFILE_BASE64: ${{ secrets.PROVISIONING_PROFILE_BASE64 }}
run: |
CERT_PATH="$RUNNER_TEMP/certs.p12"
PP_PATH="$RUNNER_TEMP/profile.provisionprofile"
KEYCHAIN_PATH="$RUNNER_TEMP/signing.keychain-db"
echo -n "$CERTIFICATE_BASE64" | base64 --decode -o "$CERT_PATH"
echo -n "$PROVISIONING_PROFILE_BASE64" | base64 --decode -o "$PP_PATH"
security create-keychain -p "" "$KEYCHAIN_PATH"
security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH"
security unlock-keychain -p "" "$KEYCHAIN_PATH"
security import "$CERT_PATH" -P "$CERTIFICATE_PASSWORD" \
-A -t cert -f pkcs12 -k "$KEYCHAIN_PATH"
security set-key-partition-list -S apple-tool:,apple: \
-k "" "$KEYCHAIN_PATH"
security list-keychains -d user -s "$KEYCHAIN_PATH"
security find-identity -v
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp "$PP_PATH" ~/Library/MobileDevice/Provisioning\ Profiles/
# --- Install API key ---
- name: Install App Store Connect API key
env:
ASC_KEY_BASE64: ${{ secrets.ASC_KEY_BASE64 }}
ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
run: |
mkdir -p ~/.private_keys
echo -n "$ASC_KEY_BASE64" | base64 --decode \
-o ~/.private_keys/AuthKey_${ASC_KEY_ID}.p8
# --- Archive ---
- name: Archive
run: |
xcodebuild archive \
-project "$PROJECT" \
-scheme "$SCHEME" \
-destination 'generic/platform=macOS' \
-configuration Release \
-archivePath "$RUNNER_TEMP/App.xcarchive" \
CODE_SIGN_STYLE=Manual \
CODE_SIGN_IDENTITY="Apple Distribution"
# --- Export and upload in one step ---
- name: Export and upload to App Store Connect
run: |
xcodebuild -exportArchive \
-archivePath "$RUNNER_TEMP/App.xcarchive" \
-exportOptionsPlist AmorphousDiskMark/ExportOptions.plist \
-exportPath "$RUNNER_TEMP/export" \
-authenticationKeyPath ~/.private_keys/AuthKey_${{ secrets.ASC_KEY_ID }}.p8 \
-authenticationKeyID ${{ secrets.ASC_KEY_ID }} \
-authenticationKeyIssuerID ${{ secrets.ASC_ISSUER_ID }} \
-allowProvisioningUpdates
# --- Cleanup ---
- name: Clean up keychain
if: always()
run: security delete-keychain "$RUNNER_TEMP/signing.keychain-db" || true