-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
132 lines (115 loc) · 4.61 KB
/
build-ios-demos.yml
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
121
122
123
124
125
126
127
128
129
130
131
132
name: Build All iOS Demos
on:
workflow_dispatch:
push:
branches:
- master
paths:
- 'demos/ios/**'
pull_request:
branches:
- master
paths:
- 'demos/**'
- '.github/workflows/build-ios-demos.yml'
jobs:
generate-matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
sparse-checkout: demos/ios
fetch-depth: 2 # Required for git diff in PRs
- name: Generate matrix
id: set-matrix
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
# Get list of changed files in demos/ios/ directory
changed_files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} HEAD -- 'demos/ios/*')
echo "Changed files:"
echo "$changed_files"
# Extract unique demo directories
matrix=$(echo "$changed_files" | grep -oE 'demos/ios/[^/]*/MASTG-DEMO-[^/]+' | sort -u | head -c -1 | tr '\n' ' ' | sed 's/ /","/g')
# If no changes, set empty matrix
if [ -z "$matrix" ]; then
echo "matrix={\"demo\":[]}" >> $GITHUB_OUTPUT
else
echo "matrix={\"demo\":[\"$matrix\"]}" >> $GITHUB_OUTPUT
fi
else
# Default behavior: include all demos for master branch
matrix=$(echo demos/ios/*/MASTG-DEMO-* | sed 's/ /","/g')
echo "matrix={\"demo\":[\"$matrix\"]}" >> $GITHUB_OUTPUT
fi
echo "Print matrix: $matrix"
build:
needs: generate-matrix
runs-on: macos-latest
timeout-minutes: 15
strategy:
matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }}
max-parallel: 3
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
sparse-checkout: ${{ matrix.demo }}
- name: Clone MASTestApp-iOS repository
uses: actions/checkout@v4
with:
repository: cpholguera/MASTestApp-iOS
path: MASTestApp-iOS
- name: Install dependencies
uses: tecolicom/actions-use-homebrew-tools@v1
with:
tools: ldid
- name: Set default scheme and iOS deployment target
run: |
cd MASTestApp-iOS
default=$(xcodebuild -list -json | jq -r '.project.targets[0]')
echo "DEFAULT_SCHEME=$default" >> "$GITHUB_ENV"
echo "Using default scheme: $default"
DEPLOYMENT_TARGET=14.4
echo "Setting iOS Deployment Target to $DEPLOYMENT_TARGET"
sed -i '' "s/IPHONEOS_DEPLOYMENT_TARGET = .*;/IPHONEOS_DEPLOYMENT_TARGET = $DEPLOYMENT_TARGET;/g" "MASTestApp.xcodeproj/project.pbxproj"
- name: Replace files with demo and prepare build
run: |
demo="${{ matrix.demo }}"
[ -d "$demo" ] || (
echo "Demo directory not found: $demo"
exit 1
)
echo "Processing $demo"
[ -f "$demo/MastgTest.swift" ] && cp -f "$demo/MastgTest.swift" MASTestApp-iOS/MASTestApp/MastgTest.swift && echo "Copied MastgTest.swift for $demo" || echo "No MastgTest.swift found for $demo"
[ -f "$demo/Info.plist" ] && cp -f "$demo/Info.plist" MASTestApp-iOS/MASTestApp/Info.plist && echo "Copied Info.plist for $demo" || echo "No Info.plist found for $demo"
- name: Build the app (unsigned)
run: |
cd MASTestApp-iOS
xcodebuild archive \
-project "MASTestApp.xcodeproj" \
-scheme "$DEFAULT_SCHEME" \
-archivePath "$GITHUB_WORKSPACE/build/MASTestApp.xcarchive" \
-configuration Release \
CODE_SIGN_IDENTITY="" \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO
- name: Pseudo sign with entitlements.plist
run: |
ldid -SMASTestApp-iOS/entitlements.plist "$GITHUB_WORKSPACE/build/MASTestApp.xcarchive/Products/Applications/MASTestApp.app/MASTestApp"
- name: Create IPA manually
run: |
cd "$GITHUB_WORKSPACE/build/MASTestApp.xcarchive/Products" || exit 1
mv Applications Payload
zip -r9q MASTestApp.zip Payload
mv MASTestApp.zip MASTestApp.ipa
mkdir -p "$GITHUB_WORKSPACE/output"
mv MASTestApp.ipa "$GITHUB_WORKSPACE/output/$(basename "${{ matrix.demo }}").ipa"
echo "IPA_NAME=$(basename "${{ matrix.demo }}").ipa" >> $GITHUB_ENV
- name: Upload IPA
uses: actions/upload-artifact@v4
with:
name: "${{ env.IPA_NAME }}"
path: "output/${{ env.IPA_NAME }}"