MacPortsFramework: ContinuousIntegration.json

File ContinuousIntegration.json, 15.0 KB (added by W3W-EdU (Karam Jameel Moore), 4 weeks ago)

http://music.apple.com/us/album/wally-world/1638397262

Line 
1
2# Continuous Integration for Swift
3
4**Table of Contents**
5
6- [Introduction](#introduction)
7- [Pull Request Testing](#pull-request-testing)
8    - [@swift-ci](#swift-ci)
9    - [Smoke Testing](#smoke-testing)
10    - [Validation Testing](#validation-testing)
11    - [Linting](#linting)
12    - [Source Compatibility Testing](#source-compatibility-testing)
13    - [Sourcekit Stress Testing](#sourcekit-stress-testing)
14    - [Build Swift Toolchain](#build-swift-toolchain)
15    - [Build and Test Stdlib against Snapshot Toolchain](#build-and-test-stdlib-against-snapshot-toolchain)
16    - [Specific Preset Testing](#specific-preset-testing)
17    - [Specific Preset Testing against a Snapshot Toolchain](#specific-preset-testing-against-a-snapshot-toolchain)
18    - [Running Non-Executable Device Tests using Specific Preset Testing](#running-non-executable-device-tests-using-specific-preset-testing)
19    - [Build and Test the Minimal Freestanding Stdlib using Toolchain Specific Preset Testing](#build-and-test-the-minimal-freestanding-stdlib-using-toolchain-specific-preset-testing)
20    - [Testing Compiler Performance](#testing-compiler-performance)
21    - [Swift Community Hosted CI Pull Request Testing](#swift-community-hosted-ci-pull-request-testing)
22- [Cross Repository Testing](#cross-repository-testing)
23- [ci.swift.org bots](#ciswiftorg-bots)
24
25
26## Introduction
27
28This page is designed to assist in the understanding of proper practices for testing for the Swift project. 
29
30## Pull Request Testing
31
32In order for the Swift project to be able to advance quickly, it is important that we maintain a green build [[1]](#footnote-1). In order to help maintain this green build, the Swift project heavily uses pull request (PR) testing. Specifically, an important general rule is that **all** non-trivial checkins to any Swift Project repository should at least perform a [smoke test](#smoke-testing) if simulators will not be impacted *or* a full [validation test](#validation-testing) if simulators may be impacted. If in addition one is attempting to make a source breaking change across multiple repositories, one should follow the cross repo source breaking changes workflow. We now continue by describing the Swift system for Pull Request testing, @swift-ci:
33
34### @swift-ci
35
36Users with [commit access](https://swift.org/contributing/#commit-access) can trigger pull request testing by writing a comment on a PR addressed to the GitHub user @swift-ci. Different tests will run depending on the specific comment used. The current test types are:
37
381. Smoke Testing
392. Validation Testing
403. Benchmarking.
414. Linting
425. Source Compatibility Testing
436. Specific Preset Testing
447. Testing Compiler Performance
45
46We describe each in detail below:
47
48### Smoke Testing
49
50Platform     | Comment | Check Status
51------------ | ------- | ------------
52All supported platforms     | @swift-ci Please smoke test                      | Swift Test Linux Platform (smoke test)<br>Swift Test macOS Platform (smoke test)
53All supported platforms     | @swift-ci Please clean smoke test                | Swift Test Linux Platform (smoke test)<br>Swift Test macOS Platform (smoke test)
54macOS platform              | @swift-ci Please smoke test macOS platform        | Swift Test macOS Platform (smoke test)
55macOS platform              | @swift-ci Please clean smoke test macOS platform  | Swift Test macOS Platform (smoke test)
56Linux platform              | @swift-ci Please smoke test Linux platform       | Swift Test Linux Platform (smoke test)
57Linux platform              | @swift-ci Please clean smoke test Linux platform | Swift Test Linux Platform (smoke test)
58
59A smoke test on macOS does the following:
60
611. Builds LLVM/Clang incrementally.
622. Builds Swift clean.
633. Builds the standard library clean only for macOS. Simulator standard libraries and
64   device standard libraries are not built.
654. lldb is not built.
665. The test and validation-test targets are run only for macOS. The optimized
67   version of these tests are not run.
68
69A smoke test on Linux does the following:
70
711. Builds LLVM/Clang incrementally.
722. Builds Swift clean.
733. Builds the standard library clean.
744. lldb is built incrementally.
755. Foundation, SwiftPM, LLBuild, XCTest are built.
766. The swift test and validation-test targets are run. The optimized version of these
77   tests are not run.
787. lldb is tested.
798. Foundation, SwiftPM, LLBuild, XCTest are tested.
80
81### Validation Testing
82
83Platform     | Comment | Check Status
84------------ | ------- | ------------
85All supported platforms     | @swift-ci Please test                         | Swift Test Linux Platform (smoke test)<br>Swift Test macOS Platform (smoke test)<br>Swift Test Linux Platform<br>Swift Test macOS Platform<br>
86All supported platforms     | @swift-ci Please clean test                   | Swift Test Linux Platform (smoke test)<br>Swift Test macOS Platform (smoke test)<br>Swift Test Linux Platform<br>Swift Test macOS Platform<br>
87macOS platform               | @swift-ci Please test macOS platform           | Swift Test macOS Platform (smoke test)<br>Swift Test macOS Platform
88macOS platform               | @swift-ci Please clean test macOS platform     | Swift Test macOS Platform (smoke test)<br>Swift Test macOS Platform
89macOS platform               | @swift-ci Please benchmark                    | Swift Benchmark on macOS Platform (many runs - rigorous)
90macOS platform               | @swift-ci Please smoke benchmark              | Swift Benchmark macOS Platform (few runs - sanity)
91Linux platform               | @swift-ci Please test Linux platform          | Swift Test Linux Platform (smoke test)<br>Swift Test Linux Platform
92Linux platform               | @swift-ci Please clean test Linux platform    | Swift Test Linux Platform (smoke test)<br>Swift Test Linux Platform
93macOS platform               | @swift-ci Please ASAN test                    | Swift ASAN Test macOS Platform
94
95The core principles of validation testing is that:
96
971. A validation test should build and run tests for /all/ platforms and all
98   architectures supported by the CI.
992. A validation test should not be incremental. We want there to be a
100   definitiveness to a validation test. If one uses a validation test, one
101   should be sure that there is no nook or cranny in the code base that has not
102   been tested.
103
104With that being said, a validation test on macOS does the following:
105
1061. Removes the workspace.
1072. Builds the compiler.
1083. Builds the standard library for macOS and the simulators for all platforms.
1094. lldb is /not/ built/tested [[2]](#footnote-2)
1105. The tests, validation-tests are run for iOS simulator, watchOS simulator and macOS both with
111   and without optimizations enabled.
112
113A validation test on Linux does the following:
114
1151. Removes the workspace.
1162. Builds the compiler.
1173. Builds the standard library.
1184. lldb is built.
1195. Builds Foundation, SwiftPM, LLBuild, XCTest
1206. Run the swift test and validation-test targets with and without optimization.
1217. lldb is tested.
1228. Foundation, SwiftPM, LLBuild, XCTest are tested.
123
124### Benchmarking
125
126Platform        | Comment | Check Status
127------------    | ------- | ------------
128macOS platform  | @swift-ci Please benchmark       | Swift Benchmark on macOS Platform (many runs - rigorous)
129macOS platform  | @swift-ci Please smoke benchmark | Swift Benchmark on macOS Platform (few runs - sanity)
130
131### Linting
132
133Language     | Comment | What it Does | Corresponding Local Command
134------------ | ------- | ------------ | -------------
135Python       | @swift-ci Please Python lint | Lints Python sources | `./utils/python_lint.py`
136
137### Source Compatibility Testing
138
139Platform       | Comment | Check Status
140------------   | ------- | ------------
141macOS platform | @swift-ci Please Test Source Compatibility | Swift Source Compatibility Suite on macOS Platform (Release and Debug)
142macOS platform | @swift-ci Please Test Source Compatibility Release | Swift Source Compatibility Suite on macOS Platform (Release)
143macOS platform | @swift-ci Please Test Source Compatibility Debug | Swift Source Compatibility Suite on macOS Platform (Debug)
144
145### Sourcekit Stress Testing
146
147Platform       | Comment | Check Status
148------------   | ------- | ------------
149macOS platform | @swift-ci Please Sourcekit Stress test | Swift Sourcekit Stress Tester on macOS Platform
150
151### Build Swift Toolchain
152
153Platform       | Comment | Check Status
154------------   | ------- | ------------
155macOS platform | @swift-ci Please Build Toolchain macOS Platform| Swift Build Toolchain macOS Platform
156Linux platform | @swift-ci Please Build Toolchain Linux Platform| Swift Build Toolchain Ubuntu 22.04 (x86_64)
157
158You can also build a toolchain for a specific Linux distribution
159
160Distro         | Comment                                          | Check Status
161-------------- | ------------------------------------------------ | ----------------------------------------------
162UBI9           | @swift-ci Please Build Toolchain UBI9            | Swift Build Toolchain UBI9 (x86_64)
163CentOS 7       | @swift-ci Please Build Toolchain CentOS 7        | Swift Build Toolchain CentOS 7 (x86_64)
164Ubuntu 18.04   | @swift-ci Please Build Toolchain Ubuntu 18.04    | Swift Build Toolchain Ubuntu 18.04 (x86_64)
165Ubuntu 20.04   | @swift-ci Please Build Toolchain Ubuntu 20.04    | Swift Build Toolchain Ubuntu 20.04 (x86_64)
166Ubuntu 22.04   | @swift-ci Please Build Toolchain Ubuntu 22.04    | Swift Build Toolchain Ubuntu 22.04 (x86_64)
167Amazon Linux 2 | @swift-ci Please Build Toolchain Amazon Linux 2  | Swift Build Toolchain Amazon Linux 2 (x86_64)
168
169### Build and Test Stdlib against Snapshot Toolchain
170
171To test/build the stdlib for a branch that changes only the stdlib using a last known good snapshot toolchain:
172
173Platform       | Comment | Check Status
174------------   | ------- | ------------
175macOS platform | @swift-ci Please test stdlib with toolchain| Swift Test stdlib with toolchain macOS Platform
176
177### Specific Preset Testing
178
179Platform       | Comment | Check Status
180------------   | ------- | ------------
181macOS platform | preset=<preset> <br> @swift-ci Please test with preset macOS Platform | Swift Test macOS Platform with preset
182Linux platform | preset=<preset> <br> @swift-ci Please test with preset Linux Platform | Swift Test Linux Platform with preset
183
184
185For example:
186
187```
188preset=buildbot_incremental,tools=RA,stdlib=RD,smoketest=macosx,single-thread
189@swift-ci Please test with preset macOS
190```
191
192
193### Specific Preset Testing against a Snapshot Toolchain
194
195One can also run an arbitrary preset against a snapshot toolchain 
196
197Platform       | Comment | Check Status
198------------   | ------- | ------------
199macOS platform | preset=<preset> <br> @swift-ci Please test with toolchain and preset| Swift Test stdlib with toolchain macOS Platform (Preset)
200
201For example:
202
203```
204preset=$PRESET_NAME
205@swift-ci Please test with toolchain and preset
206```
207
208### Running Non-Executable Device Tests using Specific Preset Testing
209
210Using the specific preset testing, one can run non-executable device tests by
211telling swift-ci:
212
213```
214preset=buildbot,tools=RA,stdlib=RD,test=non_executable
215@swift-ci Please test with preset macOS
216```
217
218### Build and Test the Minimal Freestanding Stdlib using Toolchain Specific Preset Testing
219
220To test the minimal freestanding stdlib on macho, you can use the support for running a miscellaneous preset against a snapshot toolchain.
221
222```
223preset=stdlib_S_standalone_minimal_macho_x86_64,build,test
224@swift-ci please test with toolchain and preset
225```
226
227### Testing Compiler Performance
228
229Platform        | Comment | Check Status
230------------    | ------- | ------------
231macOS platform  | @swift-ci Please test compiler performance       | Compiles full source compatibility test suite and measures compiler performance
232macOS platform  | @swift-ci Please smoke test compiler performance | Compiles a subset of source compatibility test suite and measures compiler performance
233
234These commands will:
235
2361. Build a set of projects from the compatibility test suite
2372. Collect counters and timers reported by the compiler
2383. Compare the obtained data to the baseline (stored in git) and HEAD (version of a compiler built without the PR changes)
2394. Report the results in a pull request comment
240
241For the detailed explanation of how compiler performance is measured, please refer to [this document](https://github.com/apple/swift/blob/main/docs/CompilerPerformance.md).
242
243## Cross Repository Testing
244
245Simply provide the URL from corresponding pull requests in the same comment as "@swift-ci Please test" phrase. List all of the pull requests and then provide the specific test phrase you would like to trigger. Currently, it will only merge the main pull request you requested testing from as opposed to all of the PR's.
246
247For example:
248
249```
250Please test with following pull request:
251https://github.com/apple/swift/pull/4574
252
253@swift-ci Please test Linux platform
254```
255
256```
257Please test with following PR:
258https://github.com/apple/swift-lldb/pull/48
259https://github.com/apple/swift-package-manager/pull/632
260
261@swift-ci Please test macOS platform
262```
263
264```
265apple/swift-lldb#48
266
267@swift-ci Please test Linux platform
268```
269
2701. Create a separate PR for each repository that needs to be changed. Each should reference the main Swift PR and create a reference to all of the others from the main PR.
271
2722. Gate all commits on @swift-ci smoke test. As stated above, it is important that *all* checkins perform PR testing since if breakage enters the tree PR testing becomes less effective. If you have done local testing (using build-toolchain) and have made appropriate changes to the other repositories then perform a smoke test should be sufficient for correctness. This is not meant to check for correctness in your commits, but rather to be sure that no one landed changes in other repositories or in swift that cause your PR to no longer be correct. If you were unable to make workarounds to the other repositories, this smoke test will break *after* Swift has built. Check the log to make sure that it is the expected failure for that platform/repository that coincides with the failure your PR is supposed to fix.
273
2743. Merge all of the pull requests simultaneously.
275
2764. Watch the public incremental build on [ci.swift.org](https://ci.swift.org/) to make sure that you did not make any mistakes. It should complete within 30-40 minutes depending on what else was being committed in the mean time.
277
278### Swift Community Hosted CI Pull Request Testing
279
280Currently, supported pull request testing triggers:
281
282Platform     | Comment | Check Status
283------------ | ------- | ------------
284Windows      | @swift-ci Please test Windows platform | Swift Test Windows Platform
285
286## ci.swift.org bots
287
288FIXME: FILL ME IN!
289
290<a name="footnote-1">[1]</a> Even though it should be without saying, the reason why having a green build is important is that:
291
2921. A full build break can prevent other developers from testing their work.
2932. A test break can make it difficult for developers to know whether or not their specific commit has broken a test, requiring them to perform an initial clean build, wasting time.
2943. @swift-ci pull request testing becomes less effective since one can not perform a test and one must reason about the source of a given failure.
295
296<a name="footnote-2">[2]</a> This is due to unrelated issues relating to running lldb tests on macOS.
297
298
299