Created
September 23, 2021 16:16
-
-
Save sujinnaljin/46256fcd24f10e470e06b22db29e745f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # workflow 이름 지정 | |
| name: deploy | |
| on: | |
| # workflow 를 trigger 조건 설정 - release/ 로 시작하는 branch 가 push 되었을 때 | |
| push: | |
| branches: [ release/* ] | |
| # workflow의 실행은 하나 이상의 job으로 구성 됨 | |
| jobs: | |
| # 이 workflow 는 "deploy" 라는 single job 으로 구성 | |
| deploy: | |
| # job이 실행될 환경 - 최신 mac os | |
| runs-on: macos-latest | |
| env: | |
| # app archive 및 export 에 쓰일 환경 변수 설정 | |
| XC_WORKSPACE: ${{ 'HappyChuseok/HappyChuseok.xcworkspace' }} | |
| XC_SCHEME: ${{ 'HappyChuseok' }} | |
| XC_ARCHIVE: ${{ 'HappyChuseok.xcarchive' }} | |
| # certificate | |
| ENCRYPTED_CERT_FILE_PATH: ${{ '.github/secrets/certification.p12.gpg' }} | |
| DECRYPTED_CERT_FILE_PATH: ${{ '.github/secrets/certification.p12' }} | |
| CERT_ENCRYPTION_KEY: ${{ secrets.CERTS_ENCRYPTION_PWD }} # gpg로 파일 암호화할 때 사용한 암호 | |
| # provisioning | |
| ENCRYPTED_PROVISION_FILE_PATH: ${{ '.github/secrets/HappyChuseok_GithubActions.mobileprovision.gpg' }} | |
| DECRYPTED_PROVISION_FILE_PATH: ${{ '.github/secrets/HappyChuseok_GithubActions.mobileprovision' }} | |
| PROVISIONING_ENCRYPTION_KEY: ${{ secrets.PROVISION_ENCRYPTION_PWD }} # gpg로 파일 암호화할 때 사용한 암호 | |
| # certification export key | |
| CERT_EXPORT_KEY: ${{ secrets.CERT_EXPORT_PWD }} | |
| KEYCHAIN: ${{ 'test.keychain' }} | |
| # Step은 job의 일부로 실행될 일련의 task들을 나타냄 | |
| steps: | |
| # 단계별 task 를 나타낼 이름 | |
| - name: Select latest Xcode | |
| # shell 이용해서 하나의 command 수행 | |
| run: "sudo xcode-select -s /Applications/Xcode.app" | |
| - name: Checkout project | |
| # uses 키워드를 통해 Github Actions에서 기본으로 제공하는 액션을 사용 가능. 아래 액션은 repository 에 체크아웃하는 것 | |
| uses: actions/checkout@v2 | |
| - name: Configure Keychain | |
| # 키체인 초기화 - 임시 키체인 생성 | |
| run: | | |
| security create-keychain -p "" "$KEYCHAIN" | |
| security list-keychains -s "$KEYCHAIN" | |
| security default-keychain -s "$KEYCHAIN" | |
| security unlock-keychain -p "" "$KEYCHAIN" | |
| security set-keychain-settings | |
| - name : Configure Code Signing | |
| run: | | |
| # certificate 복호화 | |
| gpg -d -o "$DECRYPTED_CERT_FILE_PATH" --pinentry-mode=loopback --passphrase "$CERT_ENCRYPTION_KEY" "$ENCRYPTED_CERT_FILE_PATH" | |
| # provisioning 복호화 | |
| gpg -d -o "$DECRYPTED_PROVISION_FILE_PATH" --pinentry-mode=loopback --passphrase "$PROVISIONING_ENCRYPTION_KEY" "$ENCRYPTED_PROVISION_FILE_PATH" | |
| # security를 사용하여 인증서와 개인 키를 새로 만든 키 체인으로 가져옴 | |
| security import "$DECRYPTED_CERT_FILE_PATH" -k "$KEYCHAIN" -P "$CERT_EXPORT_KEY" -A | |
| security set-key-partition-list -S apple-tool:,apple: -s -k "" "$KEYCHAIN" | |
| # Xcode에서 찾을 수 있는 프로비저닝 프로필 설치하기 위해 우선 프로비저닝 디렉토리를 생성 | |
| mkdir -p "$HOME/Library/MobileDevice/Provisioning Profiles" | |
| # 디버깅 용 echo 명령어 | |
| echo `ls .github/secrets/*.mobileprovision` | |
| # 모든 프로비저닝 프로파일을 rename 하고 위에서 만든 디렉토리로 복사하는 과정 | |
| for PROVISION in `ls .github/secrets/*.mobileprovision` | |
| do | |
| UUID=`/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i ./$PROVISION)` | |
| cp "./$PROVISION" "$HOME/Library/MobileDevice/Provisioning Profiles/$UUID.mobileprovision" | |
| done | |
| - name: Archive app | |
| # 빌드 및 아카이브 | |
| run: | | |
| pod install --repo-update --clean-install --project-directory=HappyChuseok/ | |
| xcodebuild clean archive -workspace $XC_WORKSPACE -scheme $XC_SCHEME -configuration release -archivePath $XC_ARCHIVE | |
| - name: Export app | |
| # export 를 통해 ipa 파일 만듦 | |
| run: | | |
| xcodebuild -exportArchive -archivePath $XC_ARCHIVE -exportOptionsPlist ExportOptions.plist -exportPath . -allowProvisioningUpdates | |
| - name: Upload app to TestFlight | |
| uses: apple-actions/upload-testflight-build@v1 | |
| with: | |
| app-path: 'HappyChuseok.ipa' | |
| issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }} | |
| api-key-id: ${{ secrets.APPSTORE_API_KEY_ID }} | |
| api-private-key: ${{ secrets.APPSTORE_API_PRIVATE_KEY }} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment