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.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 : latest
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+ ;;
56+ watchOS)
57+ SDK_PATH=$(xcrun --sdk watchsimulator --show-sdk-path)
58+ swift build \
59+ -Xcc "-isysroot" -Xcc "$SDK_PATH" \
60+ -Xswiftc "-sdk" -Xswiftc "$SDK_PATH" \
61+ -Xswiftc "-target" -Xswiftc "arm64-apple-watchos6.0-simulator"
62+ ;;
63+ visionOS)
64+ SDK_PATH=$(xcrun --sdk xrsimulator --show-sdk-path)
65+ swift build \
66+ -Xcc "-isysroot" -Xcc "$SDK_PATH" \
67+ -Xswiftc "-sdk" -Xswiftc "$SDK_PATH" \
68+ -Xswiftc "-target" -Xswiftc "arm64-apple-xros1.0-simulator"
69+ ;;
70+ esac
71+
72+ # Xcode Build Test
73+ xcode-build :
74+ name : Xcode Build
75+ runs-on : macos-latest
76+ strategy :
77+ matrix :
78+ destination :
79+ - ' platform=iOS Simulator,name=iPhone 15,OS=latest'
80+ - ' platform=macOS'
81+ - ' platform=tvOS Simulator,name=Apple TV,OS=latest'
82+ - ' platform=watchOS Simulator,name=Apple Watch Series 9 (45mm),OS=latest'
83+ - ' platform=visionOS Simulator,name=Apple Vision Pro,OS=latest'
84+
85+ steps :
86+ - name : Checkout Repository
87+ uses : actions/checkout@v4
88+
89+ - name : Setup Xcode
90+ uses : maxim-lobanov/setup-xcode@v1
91+ with :
92+ xcode-version : latest
93+
94+ - name : Build with Xcode
95+ run : |
96+ xcodebuild clean build \
97+ -workspace EFQRCode.xcworkspace \
98+ -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' }}" \
99+ -destination "${{ matrix.destination }}" \
100+ CODE_SIGN_IDENTITY="" \
101+ CODE_SIGNING_REQUIRED=NO \
102+ ONLY_ACTIVE_ARCH=NO
103+
104+ # Documentation Check
105+ documentation-check :
106+ name : Documentation Check
107+ runs-on : macos-latest
108+ steps :
109+ - uses : actions/checkout@v4
110+ - name : Install Jazzy
111+ run : sudo gem install jazzy
112+ - name : Resolve Swift Package dependencies
113+ run : xcodebuild -resolvePackageDependencies
114+ - name : Generate Documentation
115+ run : ./docs.sh
116+ continue-on-error : false
117+
118+ # Final Status Check
119+ status-check :
120+ name : Status Check
121+ runs-on : macos-latest
122+ needs : [spm-build, xcode-build, documentation-check]
123+ if : always()
124+
125+ steps :
126+ - name : Check Results
127+ run : |
128+ if [[ "${{ needs.spm-build.result }}" != "success" ]] || [[ "${{ needs.xcode-build.result }}" != "success" ]]; then
129+ echo "❌ Build checks failed - PR will be blocked"
130+ exit 1
131+ fi
132+
133+ echo "✅ All checks passed successfully!"
0 commit comments