ar.kalmykov created page: continuous integration authored by Artem Kalmykov's avatar Artem Kalmykov
Continuous integration is this guide is based on Gitlab CI. Each step of this setup, except of the first one, is optional - implement only what you need. Continuous integration is this guide is based on Gitlab CI. Each step of this setup, except of the first one, is optional - implement only what you need.
1. **Gitlab CI.**
**1. Gitlab CI.**
To setup Gitlab CI you need to add .gitlab-ci.yml file to the root of project's source. It should look like this: To setup Gitlab CI you need to add .gitlab-ci.yml file to the root of project's source. It should look like this:
```stages:
```
stages:
- analyze - analyze
- test - test
- crashlytics - crashlytics
...@@ -28,52 +32,70 @@ crashlytics_build: ...@@ -28,52 +32,70 @@ crashlytics_build:
only: only:
- develop - develop
except: except:
- triggers``` - triggers
```
Add only stages you need. Add only stages you need.
2. **Analyzation Stage** **2. Analyzation Stage**
To setup analyzation you need to do the following: To setup analyzation you need to do the following:
* Properly configure the project for Release configuration, especially enable almost all warnings: * Properly configure the project for Release configuration, especially enable almost all warnings:
- Set `Treat Warnings as Errors` to Yes. - Set `Treat Warnings as Errors` to Yes.
- Set `Documentation Comments` to Yes. - Set `Documentation Comments` to Yes.
- Set `Empty Loop Bodies` to Yes. - Set `Empty Loop Bodies` to Yes.
- Set `Four Character Literals` to Yes. - Set `Four Character Literals` to Yes.
- Set `Hidden Local Variables` to Yes. - Set `Hidden Local Variables` to Yes.
- Set `Implicit Boolean Conversions` to Yes. - Set `Implicit Boolean Conversions` to Yes.
- Set `Implicit Constant Conversions` to Yes. - Set `Implicit Constant Conversions` to Yes.
- Set `Implicit Conversion to 32 Bit type` to Yes. - Set `Implicit Conversion to 32 Bit type` to Yes.
- Set `Implicit Enum Conversions` to Yes. - Set `Implicit Enum Conversions` to Yes.
- Set `Implicit Integer to Pointer Conversion` to Yes. - Set `Implicit Integer to Pointer Conversion` to Yes.
- Set `Implicit Signedness Conversions` to Yes. - Set `Implicit Signedness Conversions` to Yes.
- Set `Infinite Recursion` to Yes. - Set `Infinite Recursion` to Yes.
- Set `Initializer Not Fully Bracketed` to Yes. - Set `Initializer Not Fully Bracketed` to Yes.
- Set `Mismatched Return Type` to Yes (treat as error). - Set `Mismatched Return Type` to Yes (treat as error).
- Set `Missing Fields in Structure Initializers` to Yes. - Set `Missing Fields in Structure Initializers` to Yes.
- Set `Missing Function Prototypes` to Yes. - Set `Missing Function Prototypes` to Yes.
- Set `Missing Newline At End of File` to Yes. - Set `Missing Newline At End of File` to Yes.
- Set `Out-of-Range Enum Assignments` to Yes. - Set `Out-of-Range Enum Assignments` to Yes.
- Set `Sign Comparison` to Yes. - Set `Sign Comparison` to Yes.
- Set `Suspicious Implicit Conversions` to Yes. - Set `Suspicious Implicit Conversions` to Yes.
- Set `Uninitialized Variables` to Yes (Aggressive). - Set `Uninitialized Variables` to Yes (Aggressive).
- Set `Unknown Pragma` to Yes. - Set `Unknown Pragma` to Yes.
- Set `Unreachable Code` to Yes. - Set `Unreachable Code` to Yes.
- Set `Unused Functions` to Yes. - Set `Unused Functions` to Yes.
- Set `Unused Labels` to Yes. - Set `Unused Labels` to Yes.
- Set `Unused Parameters` to Yes. - Set `Unused Parameters` to Yes.
- Set `Unused Variables` to Yes. - Set `Unused Variables` to Yes.
- Set `Suspicious Moves` to Yes. - Set `Suspicious Moves` to Yes.
- Set `Direct Usage of 'isa'` to Yes (treat as error). - Set `Direct Usage of 'isa'` to Yes (treat as error).
- Set `Duplicate Method Definitions` to Yes. - Set `Duplicate Method Definitions` to Yes.
- Set `Implicit Atomic Objective-C Properties` to Yes. - Set `Implicit Atomic Objective-C Properties` to Yes.
- Set `Overriding Deprecated Objective-C Methods` to Yes. - Set `Overriding Deprecated Objective-C Methods` to Yes.
- Set `Strict Selector Matching` to Yes. - Set `Strict Selector Matching` to Yes.
- Set `Undeclared Selector` to Yes. - Set `Undeclared Selector` to Yes.
- Set `Unintentional Root Class` to Yes (treat as error). - Set `Unintentional Root Class` to Yes (treat as error).
- Set `Implicit Ownership Types on our parameters` to Yes. - Set `Implicit Ownership Types on our parameters` to Yes.
- Set `Implicit Retain of 'self' within blocks` to Yes. - Set `Implicit Retain of 'self' within blocks` to Yes.
- Set `Repeatedly using a __weak reference` to Yes. - Set `Repeatedly using a __weak reference` to Yes.
- Set `Misuse of 'nonnull'` to Yes (Aggressive). - Set `Misuse of 'nonnull'` to Yes (Aggressive).
- Set `Missing Localizability` to Yes. - Set `Missing Localizability` to Yes.
- Set `Floating Point Value used as Loop Counter` to Yes. - Set `Floating Point Value used as Loop Counter` to Yes.
- Set `Use of 'rand' functions` to Yes. - Set `Use of 'rand' functions` to Yes.
- Set `Use of 'strcpy' and 'strcat'` to Yes. - Set `Use of 'strcpy' and 'strcat'` to Yes.
\ No newline at end of file * Add analyze.sh script to the project's root folder:
Replace MyWorkspace, MyScheme and MyConfiguration with appropriate values.
* Add analyzation stage to .gitlab-ci.yml file, it should look like the following:
```
analyzation:
stage: analyze
script:
- ./analyze.sh
except:
- triggers
```