-
Notifications
You must be signed in to change notification settings - Fork 0
120 lines (107 loc) · 4.72 KB
/
Copy pathios-dev.yml
File metadata and controls
120 lines (107 loc) · 4.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
name: iOS Dev → TestFlight Internal
on:
push:
branches: [dev]
workflow_dispatch:
concurrency:
group: ios-dev-${{ github.ref }}
cancel-in-progress: true
jobs:
testflight:
name: Build + Sign + TestFlight Internal
runs-on: macos-26
timeout-minutes: 60
environment: development
permissions:
contents: write
id-token: write
attestations: write
env:
BUNDLE_ID: app.verifyblind.ios
APP_ATTEST_ENVIRONMENT: development
GIT_COMMIT: ${{ github.sha }}
# dev build'lerde release tag'i "dev-build-N" olur; prod'dan ayrı ve Settings'ten link açılmaz.
DEV_BUILD: "true"
steps:
- uses: actions/checkout@v4
- name: SPM cache
uses: actions/cache@v4
with:
path: ~/Library/Caches/org.swift.swiftpm
key: spm-${{ runner.os }}-${{ hashFiles('Package.resolved') }}
restore-keys: spm-${{ runner.os }}-
# ML Kit CocoaPods'tan geliyor (SPM desteklemiyor). Pods/ indirmesi ~100 MB.
# Anahtar Podfile.lock; henüz commit edilmemişse Podfile.
- name: CocoaPods cache
uses: actions/cache@v4
with:
path: |
Pods
~/.cocoapods
key: pods-${{ runner.os }}-${{ hashFiles('Podfile.lock', 'Podfile') }}
restore-keys: pods-${{ runner.os }}-
- name: Install tools
run: |
brew install xcodegen
# CocoaPods runner imajında standart olarak var; yoksa tek bir CI turu boşa
# gitmesin diye kur (Mac'siz geliştirmede her tur pahalı).
command -v pod >/dev/null 2>&1 || brew install cocoapods
pip3 install --break-system-packages codemagic-cli-tools
- name: Build, sign, upload
env:
APP_STORE_APP_ID: ${{ secrets.APP_STORE_APP_ID }}
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
APP_STORE_CONNECT_KEY_IDENTIFIER: ${{ secrets.APP_STORE_CONNECT_KEY_IDENTIFIER }}
APP_STORE_CONNECT_PRIVATE_KEY: ${{ secrets.APP_STORE_CONNECT_PRIVATE_KEY }}
CERTIFICATE_PRIVATE_KEY: ${{ secrets.CERTIFICATE_PRIVATE_KEY }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
ENCLAVE_DEVELOPER_PUBLIC_KEY: ${{ secrets.ENCLAVE_DEVELOPER_PUBLIC_KEY }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
DROPBOX_IOS_APP_KEY: ${{ secrets.DROPBOX_IOS_APP_KEY }}
GOOGLE_IOS_CLIENT_ID: ${{ secrets.GOOGLE_IOS_CLIENT_ID }}
GOOGLE_IOS_REVERSED_CLIENT_ID: ${{ secrets.GOOGLE_IOS_REVERSED_CLIENT_ID }}
run: bash scripts/ci/ios-build-upload.sh
# Transparency pipeline — prod ile aynı adımlar, yalnız tag "dev-build-N".
# Attestation ios-dev.yml workflow kimliğine bağlı (prod'da ios-prod.yml olur).
# Settings'teki sürüm satırı release sayfasına link AÇMAZ (AppAttest env=development).
- name: Prepare transparency assets (ipa-hashes.json)
run: bash scripts/ci/ios-release-prepare.sh
- name: Attest build provenance (Sigstore)
id: attest
uses: actions/attest-build-provenance@v3
with:
subject-path: release-assets/VerifyBlind.ipa
- name: Publish transparency release (dev-build-N)
env:
GH_TOKEN: ${{ github.token }}
ATTESTATION_BUNDLE: ${{ steps.attest.outputs.bundle-path }}
run: bash scripts/ci/ios-release-publish.sh
- name: Upload IPA artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: ipa-dev-${{ github.run_number }}
path: build/ios/ipa/*.ipa
if-no-files-found: warn
# SPM çözümü sonrası kesin Package.resolved'ı (GoogleSignIn + transitive dahil) yakala.
# Reproducibility: indirip src/VerifyBlind.iOS/Package.resolved'a koy + commit et.
- name: Upload resolved Package.resolved
if: always()
uses: actions/upload-artifact@v4
with:
name: package-resolved-${{ github.run_number }}
path: VerifyBlind.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
if-no-files-found: warn
# Package.resolved ile AYNI desen: Podfile.lock'ı Mac'siz üretemiyoruz. İlk yeşil run'dan
# sonra bu artifact'ı indirip src/VerifyBlind.iOS/Podfile.lock olarak commit et — o andan
# itibaren ML Kit ve tüm transitive Google bağımlılıkları sürüm-kilitli olur.
- name: Upload Podfile.lock
if: always()
uses: actions/upload-artifact@v4
with:
name: podfile-lock-${{ github.run_number }}
path: Podfile.lock
if-no-files-found: warn