1+ name : CI
2+
3+ # Comprehensive CI workflow that includes builds, tests, and validations
4+ on :
5+ push :
6+ branches : [ main, master, develop ]
7+ pull_request :
8+ branches : [ main, master, develop ]
9+
10+ # Cancel any in-progress workflow runs for the same branch
11+ concurrency :
12+ group : ${{ github.workflow }}-${{ github.ref }}
13+ cancel-in-progress : true
14+
15+ env :
16+ DEVELOPER_DIR : /Applications/Xcode_16.2.app/Contents/Developer
17+
18+ jobs :
19+ # Swift Package Manager Build
20+ spm-build :
21+ name : SPM Build
22+ runs-on : macos-latest
23+ strategy :
24+ matrix :
25+ platform : [iOS, macOS, tvOS, watchOS, visionOS]
26+
27+ steps :
28+ - name : Checkout Repository
29+ uses : actions/checkout@v4
30+
31+ - name : Setup Xcode
32+ uses : maxim-lobanov/setup-xcode@v1
33+ with :
34+ xcode-version : 16.2
35+
36+ - name : Build with SPM
37+ run : |
38+ case "${{ matrix.platform }}" in
39+ iOS)
40+ SDK_PATH=$(xcrun --sdk iphonesimulator --show-sdk-path)
41+ swift build \
42+ -Xcc "-isysroot" -Xcc "$SDK_PATH" \
43+ -Xswiftc "-sdk" -Xswiftc "$SDK_PATH" \
44+ -Xswiftc "-target" -Xswiftc "arm64-apple-ios13.0-simulator"
45+ ;;
46+ macOS)
47+ swift build
48+ ;;
49+ tvOS)
50+ SDK_PATH=$(xcrun --sdk appletvsimulator --show-sdk-path)
51+ swift build \
52+ -Xcc "-isysroot" -Xcc "$SDK_PATH" \
53+ -Xswiftc "-sdk" -Xswiftc "$SDK_PATH" \
54+ -Xswiftc "-target" -Xswiftc "arm64-apple-tvos13.0-simulator" \
55+ -Xlinker "-syslibroot" -Xlinker "$SDK_PATH"
56+ ;;
57+ watchOS)
58+ SDK_PATH=$(xcrun --sdk watchsimulator --show-sdk-path)
59+ swift build \
60+ -Xcc "-isysroot" -Xcc "$SDK_PATH" \
61+ -Xswiftc "-sdk" -Xswiftc "$SDK_PATH" \
62+ -Xswiftc "-target" -Xswiftc "arm64-apple-watchos6.0-simulator" \
63+ -Xlinker "-syslibroot" -Xlinker "$SDK_PATH"
64+ ;;
65+ visionOS)
66+ SDK_PATH=$(xcrun --sdk xrsimulator --show-sdk-path)
67+ swift build \
68+ -Xcc "-isysroot" -Xcc "$SDK_PATH" \
69+ -Xswiftc "-sdk" -Xswiftc "$SDK_PATH" \
70+ -Xswiftc "-target" -Xswiftc "arm64-apple-xros1.0-simulator" \
71+ -Xlinker "-syslibroot" -Xlinker "$SDK_PATH"
72+ ;;
73+ esac
74+
75+ # Xcode Build Test
76+ xcode-build :
77+ name : Xcode Build
78+ runs-on : macos-latest
79+ strategy :
80+ matrix :
81+ destination :
82+ - ' platform=iOS Simulator,name=iPhone 15,OS=latest'
83+ - ' platform=macOS'
84+ - ' platform=tvOS Simulator,name=Apple TV,OS=latest'
85+ - ' platform=watchOS Simulator,name=Apple Watch Series 9 (45mm),OS=latest'
86+ - ' platform=visionOS Simulator,name=Apple Vision Pro,OS=latest'
87+
88+ steps :
89+ - name : Checkout Repository
90+ uses : actions/checkout@v4
91+
92+ - name : Setup Xcode
93+ uses : maxim-lobanov/setup-xcode@v1
94+ with :
95+ xcode-version : 16.2
96+
97+ - name : Build with Xcode
98+ run : |
99+ xcodebuild clean build \
100+ -workspace EFQRCode.xcworkspace \
101+ -scheme "${{ contains(matrix.destination, 'iOS') && 'iOS Example' || contains(matrix.destination, 'macOS') && 'macOS Example' || contains(matrix.destination, 'tvOS') && 'tvOS Example' || contains(matrix.destination, 'watchOS') && 'watchOS Example' || 'iOS Example' }}" \
102+ -destination "${{ matrix.destination }}" \
103+ CODE_SIGN_IDENTITY="" \
104+ CODE_SIGNING_REQUIRED=NO \
105+ ONLY_ACTIVE_ARCH=NO
106+
107+ # Documentation Check
108+ documentation-check :
109+ name : Documentation Check
110+ runs-on : macos-latest
111+ steps :
112+ - uses : actions/checkout@v4
113+ - name : Install Jazzy
114+ run : sudo gem install jazzy
115+ - name : Resolve Swift Package dependencies
116+ run : xcodebuild -resolvePackageDependencies
117+ - name : Generate Documentation
118+ run : ./docs.sh
119+ continue-on-error : false
120+
121+ # Final Status Check
122+ status-check :
123+ name : Status Check
124+ runs-on : macos-latest
125+ needs : [spm-build, xcode-build, documentation-check]
126+ if : always()
127+
128+ steps :
129+ - name : Check Results
130+ run : |
131+ if [[ "${{ needs.spm-build.result }}" != "success" ]] || [[ "${{ needs.xcode-build.result }}" != "success" ]]; then
132+ echo "❌ Build checks failed - PR will be blocked"
133+ exit 1
134+ fi
135+
136+ echo "✅ All checks passed successfully!"
0 commit comments