1- name : Build and Upload to TestFlight
1+ name : TestFlight Upload
22
33on :
4- workflow_dispatch : # Manual trigger only for safety
4+ workflow_dispatch :
55 inputs :
66 build_type :
77 description : ' Build Type'
1212 - development
1313 - release
1414
15+ env :
16+ DEVELOPER_DIR : /Applications/Xcode.app/Contents/Developer
17+ TEAMID : " 5S2WW965AG"
18+ FASTLANE_ISSUER_ID : " 289e8063-2271-4b0a-9e3b-6376644ca657"
19+ FASTLANE_KEY_ID : " KUT22ULSV9"
20+
1521jobs :
1622 build-and-upload :
1723 name : Build and Upload to TestFlight
1824 runs-on : macos-latest
1925
20- # Only run if required secrets are available
21- if : |
22- secrets.TEAMID != '' &&
23- secrets.FASTLANE_KEY_ID != '' &&
24- secrets.FASTLANE_ISSUER_ID != '' &&
25- secrets.FASTLANE_KEY != ''
26-
2726 steps :
2827 - uses : actions/checkout@v4
2928 with :
3029 submodules : recursive
3130
32- - name : Select Xcode
33- run : sudo xcode-select -s /Applications/Xcode.app
34-
35- - name : Install Fastlane
31+ - name : Install Apple Certificate
32+ env :
33+ BUILD_CERTIFICATE_BASE64 : ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
34+ P12_PASSWORD : ${{ secrets.P12_PASSWORD }}
35+ KEYCHAIN_PASSWORD : ${{ secrets.KEYCHAIN_PASSWORD }}
36+ run : |
37+ # Create keychain
38+ security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
39+ security default-keychain -s build.keychain
40+ security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
41+ security set-keychain-settings -t 3600 -u build.keychain
42+
43+ # Import certificate
44+ echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output certificate.p12
45+ security import certificate.p12 -k build.keychain -P "$P12_PASSWORD" -T /usr/bin/codesign
46+ security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain
47+
48+ - name : Install Ruby and Fastlane
3649 run : |
3750 gem install bundler
3851 bundle install
3952
4053 - name : Setup Provisioning
4154 env :
42- TEAMID : ${{ secrets.TEAMID }}
43- FASTLANE_KEY_ID : ${{ secrets.FASTLANE_KEY_ID }}
44- FASTLANE_ISSUER_ID : ${{ secrets.FASTLANE_ISSUER_ID }}
55+ MATCH_PASSWORD : ${{ secrets.MATCH_PASSWORD }}
4556 FASTLANE_KEY : ${{ secrets.FASTLANE_KEY }}
46- GH_PAT : ${{ secrets.GH_PAT }}
4757 run : |
48- bundle exec fastlane setup
58+ # Create fastlane match config
59+ echo "FASTLANE_KEY='$FASTLANE_KEY'" > .env
60+ bundle exec fastlane match appstore
4961
5062 - name : Build and Upload
5163 env :
52- TEAMID : ${{ secrets.TEAMID }}
53- FASTLANE_KEY_ID : ${{ secrets.FASTLANE_KEY_ID }}
54- FASTLANE_ISSUER_ID : ${{ secrets.FASTLANE_ISSUER_ID }}
64+ MATCH_PASSWORD : ${{ secrets.MATCH_PASSWORD }}
5565 FASTLANE_KEY : ${{ secrets.FASTLANE_KEY }}
56- BUILD_TYPE : ${{ github.event.inputs.build_type }}
5766 run : |
58- if [ "$BUILD_TYPE " = "release" ]; then
67+ if [ "${{ github.event.inputs.build_type }} " = "release" ]; then
5968 bundle exec fastlane release
6069 else
6170 bundle exec fastlane beta
6877 path : |
6978 Loop.ipa
7079 ExportOptions.plist
71-
72- - name : Upload Build Logs
80+
81+ - name : Clean up keychain
7382 if : always()
74- uses : actions/upload-artifact@v3
75- with :
76- name : build-logs
77- path : buildlog/
83+ run : |
84+ security delete-keychain build.keychain
0 commit comments