ci.yml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. name: "Alamofire CI"
  2. on:
  3. push:
  4. branches:
  5. - master
  6. - hotfix
  7. paths:
  8. - ".github/workflows/**"
  9. - "Package.swift"
  10. - "Source/**"
  11. - "Tests/**"
  12. pull_request:
  13. paths:
  14. - ".github/workflows/**"
  15. - "Package.swift"
  16. - "Source/**"
  17. - "Tests/**"
  18. concurrency:
  19. group: ${{ github.ref_name }}
  20. cancel-in-progress: true
  21. jobs:
  22. macOS:
  23. name: ${{ matrix.name }}
  24. runs-on: ${{ matrix.runsOn }}
  25. env:
  26. DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
  27. timeout-minutes: 10
  28. strategy:
  29. fail-fast: false
  30. matrix:
  31. include:
  32. - xcode: "Xcode_26.2"
  33. runsOn: macos-26
  34. name: "macOS 26, Xcode 26.2, Swift 6.2.3"
  35. testPlan: "macOS"
  36. outputFilter: xcbeautify --renderer github-actions
  37. - xcode: "Xcode_26.1"
  38. runsOn: macos-26
  39. name: "macOS 26, Xcode 26.1, Swift 6.2.1"
  40. testPlan: "macOS"
  41. outputFilter: xcbeautify --renderer github-actions
  42. - xcode: "Xcode_26.0"
  43. runsOn: macos-26
  44. name: "macOS 26, Xcode 26.0, Swift 6.2.0"
  45. testPlan: "macOS"
  46. outputFilter: xcbeautify --renderer github-actions
  47. - xcode: "Xcode_26.0"
  48. runsOn: [self-macos15, self-xcode260]
  49. name: "macOS 15, Xcode 26.0, Swift 6.2.0"
  50. testPlan: "macOS"
  51. outputFilter: xcbeautify --renderer github-actions
  52. - xcode: "Xcode_16.4"
  53. runsOn: macos-15
  54. name: "macOS 15, Xcode 16.4, Swift 6.1.2"
  55. testPlan: "macOS"
  56. outputFilter: xcbeautify --renderer github-actions
  57. - xcode: "Xcode_16.3"
  58. runsOn: macos-15
  59. name: "macOS 15, Xcode 16.1, Swift 6.1.0"
  60. testPlan: "macOS"
  61. outputFilter: xcbeautify --renderer github-actions
  62. - xcode: "Xcode_16.2"
  63. runsOn: macos-15
  64. name: "macOS 15, Xcode 16.2, Swift 6.0.3"
  65. testPlan: "macOS"
  66. outputFilter: xcbeautify --renderer github-actions
  67. - xcode: "Xcode_16.1"
  68. runsOn: macos-15
  69. name: "macOS 14, Xcode 16.1, Swift 6.0.2"
  70. testPlan: "macOS"
  71. outputFilter: xcbeautify --renderer github-actions
  72. - xcode: "Xcode_16.0"
  73. runsOn: macos-15
  74. name: "macOS 15, Xcode 16.0, Swift 6.0"
  75. testPlan: "macOS"
  76. outputFilter: xcbeautify --renderer github-actions
  77. steps:
  78. - uses: actions/checkout@v6
  79. - name: ${{ matrix.name }}
  80. run: |-
  81. set -o pipefail
  82. brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk
  83. firewalk &
  84. env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire macOS" -destination "platform=macOS" -testPlan "${{ matrix.testPlan }}" clean test | ${{ matrix.outputFilter }}
  85. Catalyst:
  86. name: ${{ matrix.name }}
  87. runs-on: ${{ matrix.runsOn }}
  88. env:
  89. DEVELOPER_DIR: /Applications/${{ matrix.xcode }}.app/Contents/Developer
  90. timeout-minutes: 10
  91. strategy:
  92. fail-fast: false
  93. matrix:
  94. include:
  95. - xcode: "Xcode_26.0"
  96. name: "Catalyst 26.0 on macOS 15"
  97. runsOn: [self-macos15, self-xcode260]
  98. - xcode: "Xcode_16.4"
  99. name: "Catalyst 16.4"
  100. runsOn: macOS-15
  101. - xcode: "Xcode_16.3"
  102. name: "Catalyst 16.3"
  103. runsOn: macOS-15
  104. - xcode: "Xcode_16.2"
  105. name: "Catalyst 16.2"
  106. runsOn: macOS-15
  107. - xcode: "Xcode_16.1"
  108. name: "Catalyst 16.1"
  109. runsOn: macOS-15
  110. - xcode: "Xcode_16.0"
  111. name: "Catalyst 16.0"
  112. runsOn: macOS-15
  113. steps:
  114. - uses: actions/checkout@v6
  115. - name: Install Firewalk
  116. run: brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk && firewalk &
  117. - name: Catalyst
  118. run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire iOS" -destination "platform=macOS" clean test 2>&1 | xcbeautify --renderer github-actions
  119. iOS:
  120. name: ${{ matrix.name }}
  121. runs-on: ${{ matrix.runsOn }}
  122. env:
  123. DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
  124. timeout-minutes: 10
  125. strategy:
  126. fail-fast: false
  127. matrix:
  128. include:
  129. - destination: "OS=18.6,name=iPhone 16 Pro"
  130. name: "iOS 18.6"
  131. testPlan: "iOS"
  132. xcode: "Xcode_16.4"
  133. runsOn: self-xcode164
  134. - destination: "OS=18.5,name=iPhone 16 Pro"
  135. name: "iOS 18.5"
  136. testPlan: "iOS"
  137. xcode: "Xcode_16.4"
  138. runsOn: self-xcode164
  139. - destination: "OS=18.4,name=iPhone 16 Pro"
  140. name: "iOS 18.4"
  141. testPlan: "iOS"
  142. xcode: "Xcode_16.4"
  143. runsOn: self-xcode164
  144. - destination: "OS=18.3.1,name=iPhone 16 Pro"
  145. name: "iOS 18.3.1"
  146. testPlan: "iOS"
  147. xcode: "Xcode_16.3"
  148. runsOn: self-xcode163
  149. - destination: "OS=18.2,name=iPhone 16 Pro"
  150. name: "iOS 18.2"
  151. testPlan: "iOS"
  152. xcode: "Xcode_16.2"
  153. runsOn: self-xcode162
  154. - destination: "OS=18.1,name=iPhone 16 Pro"
  155. name: "iOS 18.1"
  156. testPlan: "iOS"
  157. xcode: "Xcode_16.1"
  158. runsOn: self-xcode161
  159. - destination: "OS=18.0,name=iPhone 16 Pro"
  160. name: "iOS 18.0"
  161. testPlan: "iOS"
  162. xcode: "Xcode_16.0"
  163. runsOn: self-xcode160
  164. steps:
  165. - uses: actions/checkout@v6
  166. - name: Install Firewalk
  167. run: brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk && firewalk &
  168. - name: ${{ matrix.name }}
  169. run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire iOS" -destination "${{ matrix.destination }}" -testPlan "${{ matrix.testPlan }}" clean test 2>&1 | xcbeautify --renderer github-actions
  170. tvOS:
  171. name: ${{ matrix.name }}
  172. runs-on: ${{ matrix.runsOn }}
  173. env:
  174. DEVELOPER_DIR: /Applications/${{ matrix.xcode }}.app/Contents/Developer
  175. timeout-minutes: 10
  176. strategy:
  177. fail-fast: false
  178. matrix:
  179. include:
  180. - destination: "OS=18.5,name=Apple TV"
  181. name: "tvOS 18.5"
  182. testPlan: "tvOS"
  183. xcode: "Xcode_16.4"
  184. runsOn: macOS-15
  185. - destination: "OS=18.2,name=Apple TV"
  186. name: "tvOS 18.2"
  187. testPlan: "tvOS"
  188. xcode: "Xcode_16.2"
  189. runsOn: self-xcode162
  190. - destination: "OS=18.1,name=Apple TV"
  191. name: "tvOS 18.1"
  192. testPlan: "tvOS"
  193. xcode: "Xcode_16.1"
  194. runsOn: self-xcode161
  195. - destination: "OS=18.0,name=Apple TV"
  196. name: "tvOS 18.0"
  197. testPlan: "tvOS"
  198. xcode: "Xcode_16.0"
  199. runsOn: self-xcode160
  200. steps:
  201. - uses: actions/checkout@v6
  202. - name: Install Firewalk
  203. run: brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk && firewalk &
  204. - name: ${{ matrix.name }}
  205. run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire tvOS" -destination "${{ matrix.destination }}" -testPlan "${{ matrix.testPlan }}" clean test 2>&1 | xcbeautify --renderer github-actions
  206. visionOS:
  207. name: ${{ matrix.name }}
  208. runs-on: ${{ matrix.runsOn }}
  209. env:
  210. DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
  211. timeout-minutes: 10
  212. strategy:
  213. fail-fast: false
  214. matrix:
  215. include:
  216. - destination: "OS=2.5,name=Apple Vision Pro"
  217. name: "visionOS 2.5"
  218. testPlan: "visionOS"
  219. scheme: "Alamofire visionOS"
  220. xcode: "Xcode_16.4"
  221. runsOn: self-xcode164
  222. - destination: "OS=2.4,name=Apple Vision Pro"
  223. name: "visionOS 2.4"
  224. testPlan: "visionOS"
  225. scheme: "Alamofire visionOS"
  226. xcode: "Xcode_16.4"
  227. runsOn: self-xcode164
  228. - destination: "OS=2.3,name=Apple Vision Pro"
  229. name: "visionOS 2.3"
  230. testPlan: "visionOS"
  231. scheme: "Alamofire visionOS"
  232. xcode: "Xcode_16.3"
  233. runsOn: self-xcode163
  234. - destination: "OS=2.1,name=Apple Vision Pro"
  235. name: "visionOS 2.1"
  236. testPlan: "visionOS"
  237. scheme: "Alamofire visionOS"
  238. xcode: "Xcode_16.1"
  239. runsOn: self-xcode161
  240. - destination: "OS=2.0,name=Apple Vision Pro"
  241. name: "visionOS 2.0"
  242. testPlan: "visionOS"
  243. scheme: "Alamofire visionOS"
  244. xcode: "Xcode_16.0"
  245. runsOn: self-xcode160
  246. steps:
  247. - uses: actions/checkout@v6
  248. - name: Install Firewalk
  249. run: brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk && firewalk &
  250. - name: ${{ matrix.name }}
  251. run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "${{ matrix.scheme }}" -destination "${{ matrix.destination }}" -testPlan "${{ matrix.testPlan }}" clean test 2>&1 | xcbeautify --renderer github-actions
  252. watchOS:
  253. name: ${{ matrix.name }}
  254. runs-on: ${{ matrix.runsOn }}
  255. env:
  256. DEVELOPER_DIR: /Applications/${{ matrix.xcode }}.app/Contents/Developer
  257. timeout-minutes: 10
  258. strategy:
  259. fail-fast: false
  260. matrix:
  261. include:
  262. - destination: "OS=11.5,name=Apple Watch Series 10 (46mm)"
  263. name: "watchOS 11.5"
  264. testPlan: "watchOS"
  265. xcode: "Xcode_16.4"
  266. runsOn: self-xcode164
  267. - destination: "OS=11.4,name=Apple Watch Series 10 (46mm)"
  268. name: "watchOS 11.4"
  269. testPlan: "watchOS"
  270. xcode: "Xcode_16.4"
  271. runsOn: self-xcode164
  272. - destination: "OS=11.2,name=Apple Watch Series 10 (46mm)"
  273. name: "watchOS 11.2"
  274. testPlan: "watchOS"
  275. xcode: "Xcode_16.2"
  276. runsOn: self-xcode162
  277. - destination: "OS=11.1,name=Apple Watch Series 10 (46mm)"
  278. name: "watchOS 11.1"
  279. testPlan: "watchOS"
  280. xcode: "Xcode_16.1"
  281. runsOn: self-xcode161
  282. - destination: "OS=11.0,name=Apple Watch Series 10 (46mm)"
  283. name: "watchOS 11.0"
  284. testPlan: "watchOS"
  285. xcode: "Xcode_16.0"
  286. runsOn: self-xcode160
  287. steps:
  288. - uses: actions/checkout@v6
  289. - name: Install Firewalk
  290. run: brew update && brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk && firewalk &
  291. - name: ${{ matrix.name }}
  292. run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire watchOS" -destination "${{ matrix.destination }}" -testPlan "${{ matrix.testPlan }}" clean test 2>&1 | xcbeautify --renderer github-actions
  293. SPM:
  294. name: ${{ matrix.name }}
  295. runs-on: ${{ matrix.runsOn }}
  296. env:
  297. DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
  298. timeout-minutes: 10
  299. strategy:
  300. fail-fast: false
  301. matrix:
  302. include:
  303. - xcode: "Xcode_26.2"
  304. runsOn: macOS-26
  305. name: "macOS 15, SPM 6.2.3 Test"
  306. outputFilter: xcbeautify --renderer github-actions
  307. - xcode: "Xcode_26.1"
  308. runsOn: macOS-15
  309. name: "macOS 15, SPM 6.2.1 Test"
  310. outputFilter: xcbeautify --renderer github-actions
  311. - xcode: "Xcode_26.0"
  312. runsOn: macOS-15
  313. name: "macOS 15, SPM 6.2.0 Test"
  314. outputFilter: xcbeautify --renderer github-actions
  315. - xcode: "Xcode_16.4"
  316. runsOn: macOS-15
  317. name: "macOS 15, SPM 6.1.2 Test"
  318. outputFilter: xcbeautify --renderer github-actions
  319. - xcode: "Xcode_16.3"
  320. runsOn: macOS-15
  321. name: "macOS 15, SPM 6.1.0 Test"
  322. outputFilter: xcbeautify --renderer github-actions
  323. - xcode: "Xcode_16.2"
  324. runsOn: macOS-15
  325. name: "macOS 15, Xcode 16.2 SPM 6.0.2 Test"
  326. outputFilter: xcbeautify --renderer github-actions
  327. - xcode: "Xcode_16.1"
  328. runsOn: macOS-15
  329. name: "macOS 15, SPM 6.0.2 Test"
  330. outputFilter: xcbeautify --renderer github-actions
  331. - xcode: "Xcode_16.0"
  332. runsOn: macOS-15
  333. name: "macOS 15, SPM 6.0 Test"
  334. outputFilter: xcbeautify --renderer github-actions
  335. steps:
  336. - uses: actions/checkout@v6
  337. - name: Install Firewalk
  338. run: brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk xcbeautify && firewalk &
  339. - name: Test SPM
  340. run: set -o pipefail && swift test -c debug 2>&1 | ${{ matrix.outputFilter }}
  341. Linux:
  342. name: Linux
  343. runs-on: ubuntu-latest
  344. strategy:
  345. fail-fast: false
  346. matrix:
  347. include:
  348. - image: swift:6.0-focal
  349. - image: swift:6.0-jammy
  350. - image: swift:6.0-rhel-ubi9
  351. - image: swift:6.1-focal
  352. - image: swift:6.1-jammy
  353. - image: swift:6.1-rhel-ubi9
  354. - image: swift:6.2-bookworm
  355. - image: swift:6.2-jammy
  356. - image: swift:6.2-noble
  357. - image: swift:6.2-rhel-ubi9
  358. - image: swiftlang/swift:nightly-focal
  359. - image: swiftlang/swift:nightly-jammy
  360. container:
  361. image: ${{ matrix.image }}
  362. timeout-minutes: 10
  363. steps:
  364. - uses: actions/checkout@v6
  365. - name: "Fix @MainActor in Tests"
  366. # cannot build tests with @MainActor (added in https://github.com/Alamofire/Alamofire/pull/3920) due to https://github.com/swiftlang/swift-package-manager/pull/5525
  367. run: sed -i'' 's;@MainActor;;g' Tests/*.swift
  368. - name: ${{ matrix.image }}
  369. run: swift build --build-tests -c debug
  370. Android:
  371. name: Android
  372. strategy:
  373. fail-fast: false
  374. runs-on: ubuntu-latest
  375. steps:
  376. - name: "Checkout"
  377. uses: actions/checkout@v6
  378. - name: "Fix @MainActor in Tests"
  379. # cannot build tests with @MainActor (added in https://github.com/Alamofire/Alamofire/pull/3920) due to https://github.com/swiftlang/swift-package-manager/pull/5525
  380. run: sed -i'' 's;@MainActor;;g' Tests/*.swift
  381. - name: "Build for Android"
  382. uses: skiptools/swift-android-action@v2
  383. with:
  384. build-tests: true
  385. run-tests: false
  386. Windows:
  387. name: ${{ matrix.name }}
  388. runs-on: windows-latest
  389. timeout-minutes: 10
  390. strategy:
  391. fail-fast: false
  392. matrix:
  393. include:
  394. - branch: swift-6.2-release
  395. tag: 6.2-RELEASE
  396. name: Windows Swift 6.2
  397. - branch: swift-6.1-release
  398. tag: 6.1-RELEASE
  399. name: Windows Swift 6.1
  400. # - branch: swift-6.0-release
  401. # tag: 6.0-RELEASE
  402. # name: Windows Swift 6.0
  403. steps:
  404. - name: Setup
  405. uses: compnerd/gha-setup-swift@main
  406. with:
  407. branch: ${{ matrix.branch }}
  408. tag: ${{ matrix.tag }}
  409. - name: Clone
  410. uses: actions/checkout@v6
  411. - name: SPM ${{ matrix.name }}
  412. run: |
  413. swift build --build-tests -c debug -Xlinker /INCREMENTAL:NO -v
  414. CodeQL:
  415. name: Analyze with CodeQL
  416. runs-on: macOS-15
  417. env:
  418. DEVELOPER_DIR: "/Applications/Xcode_16.4.app/Contents/Developer"
  419. timeout-minutes: 20
  420. steps:
  421. - name: Clone
  422. uses: actions/checkout@v6
  423. - name: Initialize CodeQL
  424. uses: github/codeql-action/init@v4
  425. with:
  426. languages: swift
  427. - name: Build macOS
  428. run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire macOS" -destination "platform=macOS" clean build | xcpretty
  429. - name: Perform CodeQL Analysis
  430. uses: github/codeql-action/analyze@v4
  431. with:
  432. category: "/language:swift"