You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							65 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
	
	
							65 lines
						
					
					
						
							2.4 KiB
						
					
					
				| ---
 | |
| id: steps-for-ci
 | |
| title: Recommended flow for CI
 | |
| ---
 | |
| 
 | |
| The recommended flow for CI integration is to determine the modified files, and
 | |
| run the analysis in reactive mode starting from those files. If you would like
 | |
| to run more than one analyzer, it is more efficient to separate the capture
 | |
| phase, so that the result can be used by all the analyzers.
 | |
| 
 | |
| ### Differential Workflow
 | |
| 
 | |
| Here's how to run infer on two versions of a project and compare the results in
 | |
| general.
 | |
| 
 | |
| Assume the project uses git, `feature` is the feature branch (the code change
 | |
| you want to analyze), `master` is the master branch, and `make` builds the
 | |
| project.
 | |
| 
 | |
| ```bash
 | |
| # go to feature branch if not there already
 | |
| git checkout feature
 | |
| # get list of changed files
 | |
| git diff --name-only origin/feature..origin/master > index.txt
 | |
| ## first run: feature branch
 | |
| # run infer on the feature branch
 | |
| infer capture -- make -j 4  # assuming a machine with 4 cores
 | |
| infer analyze --changed-files-index index.txt
 | |
| # store the infer report
 | |
| cp infer-out/report.json report-feature.json
 | |
| ## second run: master branch
 | |
| git checkout master
 | |
| # run capture in reactive mode so that previously-captured source files are kept if they are up-to-date
 | |
| infer capture --reactive -- make -j 4
 | |
| infer analyze --reactive --changed-files-index index.txt
 | |
| # compare reports
 | |
| infer reportdiff --report-current report-feature.json --report-previous infer-out/report.json
 | |
| ```
 | |
| 
 | |
| At the end of this process, "infer-out/differential/" contains three files,
 | |
| which follow the same format as normal infer JSON reports:
 | |
| 
 | |
| - introduced.json contains the issues found in the feature branch but not in
 | |
|   master;
 | |
| - fixed.json contains the issues found in master but not in the feature branch;
 | |
| - preexisting.json contains the issues found in both branches.
 | |
| 
 | |
| ### Example: Android Gradle
 | |
| 
 | |
| The following CI script runs the `infer` and `eradicate` analyzers. Assume again
 | |
| that `feature` is the feature branch, and `master` is the master branch.
 | |
| 
 | |
| ```bash
 | |
| git diff --name-only origin/feature..origin/master > index.txt
 | |
| infer capture -- ./gradlew --offline assembleDebug
 | |
| infer analyze --fail-on-issue --eradicate --changed-files-index ./index.txt
 | |
| ```
 | |
| 
 | |
| Notice that
 | |
| 
 | |
| - We use git to find the changed files `git diff --name-only`
 | |
| - We run capture only once, and the output is kept for the subsequent analyses
 | |
| - We run the eradicate analysis alongside the default analyses: `--eradicate`
 | |
| - We analyze only the changed files `--changed-files-index ./index.txt`
 |