88 pull_request :
99 workflow_dispatch :
1010
11+ concurrency :
12+ group : ${{ github.workflow }}-${{ github.ref }}
13+ cancel-in-progress : true
14+
1115jobs :
1216 skip :
1317 name : Pre-Check & Skip
@@ -27,46 +31,96 @@ jobs:
2731 runs-on : macos-latest
2832
2933 steps :
34+
35+ # 🚦 Prepare & Checkout
36+
3037 - name : Checkout Git
3138 uses : actions/checkout@v6
3239 with :
3340 submodules : recursive
3441
42+ - name : Set up Homebrew
43+ run : brew install mint xcbeautify
3544
36- # ⚙️ Tools
37-
38- - name : Install Homebrew
39- uses : tecolicom/actions-use-homebrew-tools@v1
45+ - name : Cache Mint
46+ id : cache-mint
47+ uses : actions/cache@v5
4048 with :
41- tools : xcbeautify swiftlint
42- cache : yes
49+ path : ~/.mint
50+ key : ${{ runner.os }}-mint-${{ hashFiles('Mintfile') }}
51+ restore-keys : ${{ runner.os }}-mint-
52+
53+ # - name: Set up Mint
54+ # run: mint bootstrap
55+
56+
57+ # 💅 Lint
4358
59+ # - name: Run SwiftLint
60+ # run: mint run swiftlint lint --quiet --strict ./source
61+ #
62+ # - name: Run SwiftFormat
63+ # run: mint run swiftformat --lint ./source
4464
45- # 📦 Cache
65+
66+ # 🐧 SPM
4667
4768 - name : Cache SPM
4869 id : cache-spm
49- uses : actions/cache@v4
70+ uses : actions/cache@v5
5071 with :
51- path : .build
52- key : ${{ runner.os }}-spm-${{ hashFiles('Package.swift', 'Package.resolved') }}
72+ path : |
73+ dependency/Swift
74+ dependency/Xcode
75+ key : ${{ runner.os }}-spm-${{ hashFiles('Package.swift', 'Package.resolved', 'Observatory.xcworkspace/xcshareddata/swiftpm/Package.resolved') }}
5376 restore-keys : ${{ runner.os }}-spm-
5477
55-
56- # 💅 Lint
57-
58- - name : Run SwiftLint
59- run : swiftlint lint --quiet --strict # --reporter github-actions-logging
78+ - name : Resolve Swift dependencies
79+ if : steps.cache-spm.outputs.cache-hit != 'true'
80+ run : swift package --scratch-path dependency/Swift resolve
6081
6182
62- # 🧪 Resolve, Build, Test SPM
83+ # 🛠️ Xcode
6384
64- - name : Resolve SPM
85+ - name : Resolve Xcode dependencies
6586 if : steps.cache-spm.outputs.cache-hit != 'true'
66- run : swift package resolve
67-
68- - name : Build SPM
69- run : swift build --build-tests
70-
71- - name : Test SPM
72- run : swift test 2>&1 | xcbeautify
87+ run : |
88+ xcodebuild \
89+ -workspace "Observatory.xcworkspace" \
90+ -scheme "Observatory" \
91+ -resolvePackageDependencies \
92+ -clonedSourcePackagesDirPath dependency/Xcode
93+
94+
95+ # 🚧 Build
96+
97+ - name : Build Swift tests
98+ run : swift build --build-tests --scratch-path dependency/Swift
99+
100+ - name : Build Xcode tests
101+ run : |
102+ set -o pipefail && xcodebuild clean build-for-testing \
103+ -workspace "Observatory.xcworkspace" \
104+ -scheme "Observatory-Test" \
105+ -destination "platform=macOS,arch=$(uname -m)" \
106+ -disableAutomaticPackageResolution \
107+ -clonedSourcePackagesDirPath "dependency/Xcode" \
108+ | tee "build.log" | xcbeautify
109+
110+
111+ # 🧪 Test
112+
113+ - name : Test Swift
114+ run : set -o pipefail && swift test --scratch-path dependency/Swift 2>&1 | xcbeautify
115+
116+ - name : Test Xcode
117+ env :
118+ TEST_RUNNER_ACCESSIBILITY_CONTROL : 0
119+ run : |
120+ set -o pipefail && xcodebuild test \
121+ -workspace "Observatory.xcworkspace" \
122+ -scheme "Observatory-Test" \
123+ -destination "platform=macOS,arch=$(uname -m)" \
124+ -disableAutomaticPackageResolution \
125+ -clonedSourcePackagesDirPath "dependency/Xcode" \
126+ | xcbeautify
0 commit comments