Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
jobs:
test:
name: Run Tests
runs-on: macos-15
runs-on: macos-14

steps:
- name: Checkout
Expand Down Expand Up @@ -61,7 +61,7 @@ jobs:

build:
name: Build Verification
runs-on: macos-15
runs-on: macos-14

steps:
- name: Checkout
Expand Down
263 changes: 132 additions & 131 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -1,135 +1,136 @@
# ============================================================================
# Xcode 26.0을 GitHub Actions에서 지원할 때까지 임시 비활성화
# ============================================================================

# name: Deploy to TestFlight

# on:
# GitHub Actions가 Xcode 26을 지원하면 아래처럼 push 트리거를 추가하세요:
# push:
# branches: [ main ]
# workflow_dispatch:

# jobs:
# deploy:
# name: Deploy to TestFlight
# runs-on: macos-15

# steps:
# - name: Checkout
# uses: actions/checkout@v4
# with:
# fetch-depth: 0

# - name: Setup Xcode
# uses: maxim-lobanov/setup-xcode@v1
# with:
# xcode-version: '16.2'

# - name: Install mise
# uses: jdx/mise-action@v2

# - name: Setup Ruby
# uses: ruby/setup-ruby@v1
# with:
# ruby-version: '3.2'
# bundler-cache: true

# - name: Cache Tuist
# uses: actions/cache@v4
# with:
# path: |
# ~/.tuist/Cache
# Tuist/.build
# key: ${{ runner.os }}-tuist-${{ hashFiles('**/Project.swift') }}
# restore-keys: |
# ${{ runner.os }}-tuist-

# - name: Create APIInfos.swift
# run: |
# mkdir -p Data/Sources/Network/Secrets
# echo "${{ secrets.API_INFOS_SWIFT }}" | base64 --decode > Data/Sources/Network/Secrets/APIInfos.swift

# - name: Create GoogleService-Info.plist
# run: |
# mkdir -p Oreum/Resources
# echo "${{ secrets.GOOGLE_SERVICE_INFO_PLIST }}" | base64 --decode > Oreum/Resources/GoogleService-Info.plist

# - name: Setup App Store Connect API Key
# env:
# APP_STORE_CONNECT_API_KEY_CONTENT: ${{ secrets.APP_STORE_CONNECT_API_KEY }}
# run: |
# mkdir -p ~/.appstoreconnect/private_keys
# echo "$APP_STORE_CONNECT_API_KEY_CONTENT" | base64 --decode > ~/.appstoreconnect/private_keys/AuthKey_${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}.p8

# - name: Import Certificates
# env:
# BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
# P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
# KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
# run: |
# # Decode certificate
# CERTIFICATE_PATH="$RUNNER_TEMP/build_certificate.p12"
# echo "$BUILD_CERTIFICATE_BASE64" | base64 --decode > "$CERTIFICATE_PATH"

# # Create keychain
# KEYCHAIN_PATH="$RUNNER_TEMP/app-signing.keychain-db"
# security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
# security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH"
# security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"

# # Import certificate to keychain
# security import "$CERTIFICATE_PATH" -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k "$KEYCHAIN_PATH"
# security list-keychain -d user -s "$KEYCHAIN_PATH"
# security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"

# # Clean up
# rm "$CERTIFICATE_PATH"

# - name: Install Provisioning Profiles
# env:
# PROVISIONING_PROFILE_BASE64: ${{ secrets.PROVISIONING_PROFILE_BASE64 }}
# WIDGET_PROVISIONING_PROFILE_BASE64: ${{ secrets.WIDGET_PROVISIONING_PROFILE_BASE64 }}
# run: |
# mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles

# # Decode and install main app profile
# PROFILE_PATH="$RUNNER_TEMP/Oreum.mobileprovision"
# echo "$PROVISIONING_PROFILE_BASE64" | base64 --decode > "$PROFILE_PATH"

# # Extract UUID and copy to correct location
# UUID=$(security cms -D -i "$PROFILE_PATH" | plutil -extract UUID raw -o - -)
# cp "$PROFILE_PATH" ~/Library/MobileDevice/Provisioning\ Profiles/"$UUID".mobileprovision
# echo "Installed main app profile with UUID: $UUID"

# # Export UUID for Fastlane
# echo "OREUM_PROFILE_UUID=$UUID" >> $GITHUB_ENV

# # Decode and install widget profile
# WIDGET_PROFILE_PATH="$RUNNER_TEMP/OreumWidget.mobileprovision"
# echo "$WIDGET_PROVISIONING_PROFILE_BASE64" | base64 --decode > "$WIDGET_PROFILE_PATH"

# # Extract UUID and copy to correct location
# WIDGET_UUID=$(security cms -D -i "$WIDGET_PROFILE_PATH" | plutil -extract UUID raw -o - -)
# cp "$WIDGET_PROFILE_PATH" ~/Library/MobileDevice/Provisioning\ Profiles/"$WIDGET_UUID".mobileprovision
# echo "Installed widget profile with UUID: $WIDGET_UUID"

# # Export UUID for Fastlane
# echo "WIDGET_PROFILE_UUID=$WIDGET_UUID" >> $GITHUB_ENV

# echo "Installed provisioning profiles:"
# ls -la ~/Library/MobileDevice/Provisioning\ Profiles/

# # Clean up temp files
# rm "$PROFILE_PATH" "$WIDGET_PROFILE_PATH"

# - name: Deploy to TestFlight
# env:
# FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: ${{ secrets.FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}
# APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}
# APP_STORE_CONNECT_API_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_ISSUER_ID }}
# run: bundle exec fastlane beta

# - name: Clean up keychain
# if: always()
# run: |
# security delete-keychain "$RUNNER_TEMP/app-signing.keychain-db" || true
# ============================================================================

name: Deploy to TestFlight

on:
workflow_dispatch: # 수동 실행만 가능

jobs:
deploy:
name: Deploy to TestFlight
runs-on: macos-14

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16.2'

- name: Install mise
uses: jdx/mise-action@v2

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2'
bundler-cache: true

- name: Cache Tuist
uses: actions/cache@v4
with:
path: |
~/.tuist/Cache
Tuist/.build
key: ${{ runner.os }}-tuist-${{ hashFiles('**/Project.swift') }}
restore-keys: |
${{ runner.os }}-tuist-

- name: Create APIInfos.swift
run: |
mkdir -p Data/Sources/Network/Secrets
echo "${{ secrets.API_INFOS_SWIFT }}" | base64 --decode > Data/Sources/Network/Secrets/APIInfos.swift

- name: Create GoogleService-Info.plist
run: |
mkdir -p Oreum/Resources
echo "${{ secrets.GOOGLE_SERVICE_INFO_PLIST }}" | base64 --decode > Oreum/Resources/GoogleService-Info.plist

- name: Setup App Store Connect API Key
env:
APP_STORE_CONNECT_API_KEY_CONTENT: ${{ secrets.APP_STORE_CONNECT_API_KEY }}
run: |
mkdir -p ~/.appstoreconnect/private_keys
echo "$APP_STORE_CONNECT_API_KEY_CONTENT" | base64 --decode > ~/.appstoreconnect/private_keys/AuthKey_${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}.p8

- name: Import Certificates
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
run: |
# Decode certificate
CERTIFICATE_PATH="$RUNNER_TEMP/build_certificate.p12"
echo "$BUILD_CERTIFICATE_BASE64" | base64 --decode > "$CERTIFICATE_PATH"

# Create keychain
KEYCHAIN_PATH="$RUNNER_TEMP/app-signing.keychain-db"
security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH"
security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"

# Import certificate to keychain
security import "$CERTIFICATE_PATH" -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k "$KEYCHAIN_PATH"
security list-keychain -d user -s "$KEYCHAIN_PATH"
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"

# Clean up
rm "$CERTIFICATE_PATH"

- name: Install Provisioning Profiles
env:
PROVISIONING_PROFILE_BASE64: ${{ secrets.PROVISIONING_PROFILE_BASE64 }}
WIDGET_PROVISIONING_PROFILE_BASE64: ${{ secrets.WIDGET_PROVISIONING_PROFILE_BASE64 }}
run: |
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles

# Decode and install main app profile
PROFILE_PATH="$RUNNER_TEMP/Oreum.mobileprovision"
echo "$PROVISIONING_PROFILE_BASE64" | base64 --decode > "$PROFILE_PATH"

# Extract UUID and copy to correct location
UUID=$(security cms -D -i "$PROFILE_PATH" | plutil -extract UUID raw -o - -)
cp "$PROFILE_PATH" ~/Library/MobileDevice/Provisioning\ Profiles/"$UUID".mobileprovision
echo "Installed main app profile with UUID: $UUID"

# Export UUID for Fastlane
echo "OREUM_PROFILE_UUID=$UUID" >> $GITHUB_ENV

# Decode and install widget profile
WIDGET_PROFILE_PATH="$RUNNER_TEMP/OreumWidget.mobileprovision"
echo "$WIDGET_PROVISIONING_PROFILE_BASE64" | base64 --decode > "$WIDGET_PROFILE_PATH"

# Extract UUID and copy to correct location
WIDGET_UUID=$(security cms -D -i "$WIDGET_PROFILE_PATH" | plutil -extract UUID raw -o - -)
cp "$WIDGET_PROFILE_PATH" ~/Library/MobileDevice/Provisioning\ Profiles/"$WIDGET_UUID".mobileprovision
echo "Installed widget profile with UUID: $WIDGET_UUID"

# Export UUID for Fastlane
echo "WIDGET_PROFILE_UUID=$WIDGET_UUID" >> $GITHUB_ENV

echo "Installed provisioning profiles:"
ls -la ~/Library/MobileDevice/Provisioning\ Profiles/

# Clean up temp files
rm "$PROFILE_PATH" "$WIDGET_PROFILE_PATH"

- name: Deploy to TestFlight
env:
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: ${{ secrets.FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}
APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}
APP_STORE_CONNECT_API_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_ISSUER_ID }}
run: bundle exec fastlane beta

- name: Clean up keychain
if: always()
run: |
security delete-keychain "$RUNNER_TEMP/app-signing.keychain-db" || true