ci.yml 18 KB

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