fastlane-plugin-ciutils 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 129a95d51b3aad1d32a14f1a19c8d113a7d399c5
4
- data.tar.gz: 0c31216415d0084b7423982c088cdc5509d9a70d
3
+ metadata.gz: 391de8fd98eca2f9a7a20909cf8bebcd236d9397
4
+ data.tar.gz: 9c7216300bdb4019e642f626253ee10463265e90
5
5
  SHA512:
6
- metadata.gz: 9133b114e21bc602d6b3494674701161440a0591f4b080472e67f2d8dd86e640e6b2e4eb379d4bf87cb44f0e120c6a412cc31f1f4b2ff082368f39935042cab8
7
- data.tar.gz: b9f4e9c1519de1b2b984c8e29dd448154873e516c23e1271483dd24bb5e9fb6b4c8dcb5478b2c3ae5a6175fd07f92d2b121703abb8c8f21271233608cca0898f
6
+ metadata.gz: 610f9211ffe0be990b2021f2964c9667265a6d08fbcec60f6a8b6921c0b24634554e7a040382d8326b81beda162fdb3320afa29ac9904d43944c75aa99b5e80f
7
+ data.tar.gz: c7b230623ae24482688346109b6eb212b23ad9abf75cce3e0dcfa34da0b056fc56306b3eb62eeca05f946a5f91631a111a7c2bab345f2995d1b3c0b560f4af0c
data/README.md CHANGED
@@ -16,21 +16,22 @@ Various utilities for CI and Xcode project configuration.
16
16
 
17
17
  action |description
18
18
  -------------------------|-------
19
- `en_ci_utils_init` | Initializes several environment variables: <br>**gym**<br>`GYM_OUTPUT_DIRECTORY`=**`build`**<br> `GYM_BUILDLOG_PATH`=**`build/logs/gym`** <br><br>**scan**<br>`SCAN_OUTPUT_DIRECTORY`=**`build/reports/unittests`**<br>`SCAN_BUILDLOG_PATH`=**`build/logs/scan/`**<br>`SCAN_DERIVED_DATA_PATH`=**`build/deriveddata`** <br>`SCAN_OUTPUT_TYPES`=**`html,junit,json-compilation-database`**<br><br>**slather**<br>`FL_SLATHER_BUILD_DIRECTORY`=**`build/deriveddata`**<br>`FL_SLATHER_USE_BUNDLE_EXEC`=**`true`**<br>`FL_SLATHER_OUTPUT_DIRECTORY`=**`build/reports/`**<br> `FL_SLATHER_COBERTURA_XML_ENABLED`=**`true`**<br><br>**build number**<br>`BUILD_NUMBER` and `FL_BUILD_NUMBER_BUILD_NUMBER` are initialized with the current build number regardless of CI environment. When run on desktop, it us always `1`<br><br>
20
- `en_profile_name` | Returns the provisioning profile name by path or uuid
19
+ `en_ci_utils_init` | Initializes enviornment variables for **gym**, **scan**, **slather**, **oclint**, **swiftlint** and **lizard**. <br> It forces all these actions to put all outputs to the **build** folder (e.g. derived data, logs, scan reports, slather reports, oclint report, lizard reports and swiftlint reports)
20
+ `en_setup_project` | Updates Xcode projects, Info.plist, Entitlements file and any other plist file using values from the provided yaml file [example `appstore.yml`](Demo/config/appstore.yml)
21
+ `en_create_sonar_reports` | Creates sonarqube reports (unit tests, code coverage, static code analysis with swiftlint, oclint and lizard) to be used with the open source sonarqube plugins for Swift and Objective-C
21
22
  `en_build_number` | Returns the value of current build number regardless of CI environment. If run on desktop, then is always `1`
22
- `en_setup_keychain` | Creates a keychain and imports the provided certificate
23
+ `en_setup_keychain` | Creates a keychain and if provided, it imports the give certificate file. It also updates **match** environment variables to use the new created keychain.
23
24
  `en_remove_keychain` | Removes the keychain created by ```en_setup_keychain``` and restores the default keychain
24
25
  `en_git_changelog` | Creates the changelog based on git commits by filtering commit messages by a keyword
25
26
  `en_close_simulator` | Quits the simulator
26
- `en_install_provisioning_profiles` | Copies all provisioning profiles from project folder to `~/Library/MobileDevice/Provisioning Profiles`
27
- `en_setup_project` | Updates Xcode projects, Info.plist, Entitlements file and any other plist file using values from the provided yaml file.
27
+ `en_install_provisioning_profiles` | Copies all provisioning profiles from project folder to `~/Library/MobileDevice/Provisioning Profiles`. <br> Useful when signing certificates and provisioning profiles are managed directly from the Fastfile.
28
+ `en_profile_name` | Returns the provisioning profile name by path or uuid
28
29
 
29
30
 
30
31
 
31
32
  ## Example
32
33
 
33
- Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plugin. Try it by cloning the repo, running `fastlane install_plugins` and `bundle exec fastlane test`.
34
+ Check out the [example `Fastfile`](fastlane/Fastfile) and [project `FastlaneDemo`](Demo) to see how to use this plugin. Try it by cloning the repo, running `fastlane install_plugins` and `bundle exec fastlane build`.
34
35
 
35
36
  ## Run tests for this plugin
36
37
 
@@ -2,27 +2,46 @@ module Fastlane
2
2
  module Actions
3
3
  class EnCiUtilsInitAction < Action
4
4
  def self.run(params)
5
- # gym evn variables
6
- ENV['GYM_OUTPUT_DIRECTORY'] = "build"
7
- ENV['GYM_BUILDLOG_PATH'] = "build/logs/gym"
5
+ output_path = "./build"
6
+ reports_path = "#{output_path}/reports"
7
+ logs_path = "#{output_path}/logs"
8
8
 
9
- # scan env variables
10
- ENV['SCAN_OUTPUT_DIRECTORY'] = "build/reports/unittests"
11
- ENV['SCAN_BUILDLOG_PATH'] = "build/logs/scan/"
12
- ENV['SCAN_DERIVED_DATA_PATH'] = "build/deriveddata"
9
+ ENV['ENCI_OUTPUT_PATH'] = output_path
10
+ ENV['ENCI_REPORTS_PATH'] = reports_path
11
+ ENV['ENCI_LOGS_PATH'] = logs_path
12
+
13
+ # gym: ipa
14
+ ENV['GYM_OUTPUT_DIRECTORY'] = output_path
15
+ ENV['GYM_BUILDLOG_PATH'] = "#{logs_path}/gym"
16
+ ENV['GYM_RESULT_BUNDLE'] = "true"
17
+ ENV['GYM_DERIVED_DATA_PATH'] = "#{output_path}/deriveddata_gym"
18
+
19
+ # scan: unit tests
20
+ ENV['SCAN_OUTPUT_DIRECTORY'] = "#{reports_path}/unittests"
21
+ ENV['SCAN_BUILDLOG_PATH'] = "#{logs_path}/scan/"
22
+ ENV['SCAN_DERIVED_DATA_PATH'] = "#{output_path}/deriveddata_scan"
13
23
  ENV['SCAN_OUTPUT_TYPES'] = "html,junit,json-compilation-database"
24
+ ENV['SCAN_CONFIGURATION'] = "Debug"
25
+ ENV['SCAN_XCARGS'] = "COMPILER_INDEX_STORE_ENABLE=NO"
14
26
 
15
- ENV['FL_SLATHER_BUILD_DIRECTORY'] = "build/deriveddata"
16
- ENV['FL_SLATHER_OUTPUT_DIRECTORY'] = "build/reports"
27
+ # slather: code coverage reports
28
+ ENV['FL_SLATHER_BUILD_DIRECTORY'] = "#{output_path}/deriveddata_scan"
29
+ ENV['FL_SLATHER_OUTPUT_DIRECTORY'] = "#{reports_path}"
17
30
  ENV['FL_SLATHER_COBERTURA_XML_ENABLED'] = "true"
18
31
  ENV['FL_SLATHER_USE_BUNDLE_EXEC'] = "true"
19
32
  ENV['FL_SLATHER_HTML_ENABLED'] = "false"
33
+ ENV['FL_SLATHER_INPUT_FORMAT'] = "profdata"
34
+ ENV['FL_SLATHER_CONFIGURATION'] = "Debug"
35
+
36
+ # swiftlint: static code analysis and linter
37
+ ENV['FL_SWIFTLINT_OUTPUT'] = "#{reports_path}/swiftlint.txt"
20
38
 
21
- # swiftlint
22
- ENV['FL_SWIFTLINT_OUTPUT'] = "./build/reports/swiftlint.txt"
39
+ # lizard: static code analysis and linter
40
+ ENV['FL_LIZARD_OUTPUT'] = "#{reports_path}/lizard-report.xml"
23
41
 
24
- # lizard
25
- ENV['FL_LIZARD_OUTPUT'] = "../build/reports/lizard-report.xml"
42
+ # oclint: static code analysis and linter
43
+ ENV['FL_OCLINT_REPORT_TYPE'] = "pmd"
44
+ ENV['FL_OCLINT_ENABLE_CLANG_STATIC_ANALYZER'] = "true"
26
45
 
27
46
  ENV['BUILD_NUMBER'] = Helper::CiutilsHelper.en_ci_build_number()
28
47
  ENV['FL_BUILD_NUMBER_BUILD_NUMBER'] = ENV['BUILD_NUMBER']
@@ -0,0 +1,171 @@
1
+ module Fastlane
2
+ module Actions
3
+ class EnCreateSonarReportsAction < Action
4
+ def self.run(params)
5
+ build_path = ENV['ENCI_OUTPUT_PATH']
6
+ reports_path = ENV['ENCI_REPORTS_PATH']
7
+ logs_path = ENV['ENCI_LOGS_PATH']
8
+ scan_logs_path = ENV['SCAN_BUILDLOG_PATH']
9
+ scan_reports_path = ENV['SCAN_OUTPUT_DIRECTORY']
10
+
11
+ lizard_output_path = ENV['FL_LIZARD_OUTPUT']
12
+ swiftlint_output_path = ENV['FL_SWIFTLINT_OUTPUT']
13
+
14
+ lizard_extra_args = params[:lizard_extra_args]
15
+ swiftlint_extra_args = params[:swiftlint_extra_args]
16
+
17
+ swiftlint_path_args = self.swiftlint_path_args(params)
18
+ lizard_path_args = self.lizard_path_args(params)
19
+
20
+ unless File.exist?(scan_reports_path)
21
+ UI.user_error!("Please run scan and slather first.")
22
+ return
23
+ end
24
+
25
+ FileUtils::mkdir_p(reports_path) unless File.exists?(reports_path)
26
+
27
+ # create the junit reports again in such way that can be used by sonar
28
+ sh("cat '#{scan_logs_path}'/*.log | bundle exec ocunit2junit > /dev/null 2>&1 || exit 0")
29
+
30
+ # ocunit2junit creates the reports in local test-reports, it needs to be moved
31
+ FileUtils::rm_rf("#{scan_reports_path}/test-reports")
32
+ FileUtils::mv("test-reports", "#{scan_reports_path}")
33
+
34
+ if Dir.glob("#{scan_reports_path}/test-reports/*.xml").empty?
35
+ # ocunit2junit failed?
36
+ UI.message("ocunit2junit failed, copying the original junit report to test-reports")
37
+ FileUtils::cp("#{scan_reports_path}/report.junit", "#{scan_reports_path}/test-reports/report.xml")
38
+ end
39
+
40
+ # run static code analysis
41
+ unless params[:skip_swiftlint_analysis]
42
+ sh("swiftlint lint #{swiftlint_path_args} --quiet > '#{swiftlint_output_path}' || exit 0")
43
+ end
44
+
45
+ unless params[:skip_lizard_analysis]
46
+ sh("lizard #{lizard_path_args} -l swift -l objectivec --xml #{lizard_extra_args} > '#{lizard_output_path}' || exit 0")
47
+ end
48
+
49
+ # workaround sonar plugin, it is not picking correctly the path to lizard report
50
+ # and it is looking at the default path
51
+ FileUtils::ln_sf(reports_path, "sonar-reports")
52
+
53
+ unless params[:skip_oclint_analysis]
54
+ scan_json_compilation_database = File.expand_path(scan_reports_path) + '/report.json-compilation-database'
55
+ json_compilation_database = File.expand_path(scan_reports_path) + '/compile_commands.json'
56
+ FileUtils::cp("#{scan_reports_path}/report.json-compilation-database", json_compilation_database)
57
+ other_action.oclint(compile_commands: scan_json_compilation_database)
58
+ FileUtils::mv("./fastlane/oclint_report.pmd", "#{reports_path}/oclint.xml")
59
+ end
60
+ end
61
+
62
+ def self.normalize_paths(paths)
63
+ paths.split(",").map { |path| File.expand_path(path.strip) }
64
+ end
65
+
66
+ def self.lizard_path_args(params)
67
+ include_files = ""
68
+
69
+ if params[:include_path]
70
+ self.normalize_paths(params[:include_path]).each do |path|
71
+ include_files += " '#{path}' "
72
+ end
73
+ end
74
+
75
+ exclude_files = ""
76
+ if params[:exclude_path]
77
+ self.normalize_paths(params[:exclude_path]).each do |path|
78
+ exclude_files += " -x '#{path}/*' "
79
+ end
80
+ end
81
+
82
+ include_files + exclude_files
83
+ end
84
+
85
+ def self.swiftlint_path_args(params)
86
+ include_files = ""
87
+
88
+ if params[:include_path]
89
+ self.normalize_paths(params[:include_path]).each do |path|
90
+ include_files += " --path '#{path}'"
91
+ end
92
+ end
93
+
94
+ # exclude_files = ""
95
+ # if params[:exclude_path]
96
+ # self.normalize_paths(params[:exclude_path]).each do |path|
97
+ # exclude_files += " --force-exclude '#{path}' "
98
+ # end
99
+ # end
100
+
101
+ # include_files + exclude_files
102
+ include_files
103
+ end
104
+
105
+ def self.available_options
106
+ [
107
+ FastlaneCore::ConfigItem.new(key: :include_path,
108
+ env_name: "FL_EN_ANALYSIS_INCLUDE_SRC",
109
+ description: 'One or multiple paths comma separated to include into scan report',
110
+ optional: false),
111
+
112
+ FastlaneCore::ConfigItem.new(key: :exclude_path,
113
+ env_name: "FL_EN_ANALYSIS_EXCLUDE_SRC",
114
+ description: 'One or multiple paths comma separated to include into scan report',
115
+ optional: true),
116
+
117
+ FastlaneCore::ConfigItem.new(key: :skip_oclint_analysis,
118
+ env_name: "FL_EN_SKIP_OCLINT_ANALYSIS",
119
+ description: "Skip running oclint code analysis",
120
+ is_string: false,
121
+ default_value: false,
122
+ optional: true),
123
+
124
+ FastlaneCore::ConfigItem.new(key: :skip_swiftlint_analysis,
125
+ env_name: "FL_EN_SKIP_SWIFTLINT_ANALYSIS",
126
+ description: "Skip running swiftlint code analysis",
127
+ is_string: false,
128
+ default_value: false,
129
+ optional: true),
130
+
131
+ FastlaneCore::ConfigItem.new(key: :swiftlint_extra_args,
132
+ env_name: "FL_EN_SWIFTLINT_EXTRA ARGS",
133
+ description: 'Extra command line args for swiftlint',
134
+ optional: true),
135
+
136
+ FastlaneCore::ConfigItem.new(key: :skip_lizard_analysis,
137
+ env_name: "FL_EN_SKIP_LIZARD_ANALYSIS",
138
+ description: "Skip running lizard code analysis",
139
+ is_string: false,
140
+ default_value: false,
141
+ optional: true),
142
+
143
+ FastlaneCore::ConfigItem.new(key: :lizard_extra_args,
144
+ env_name: "FL_EN_LIZARD_EXTRA ARGS",
145
+ description: 'Extra command line args for lizard',
146
+ optional: true)
147
+ ]
148
+ end
149
+
150
+ def self.description
151
+ "Creates swiftlint, lizard and oclint reports and adjusts junit reports for sonarqube (with the open source swift/objc plugin)"
152
+ end
153
+
154
+ def self.details
155
+ "Ensure before calling this action ensure en_ci_utils_init_action, scan and slather were executed.
156
+ This action re-uses values for used for scan and env variables set by en_ci_utils_init_action for reports paths.
157
+ The oclint command is executed throug the oclint action. You can change input for that action through oclint action env variables.
158
+
159
+ The exclude files option doesn't work for swiftlint and oclint. You can exclude files in sonar properties or for swiftlint with .swiftlint.yml"
160
+ end
161
+
162
+ def self.authors
163
+ ["Nicolae Ghimbovschi"]
164
+ end
165
+
166
+ def self.is_supported?(platform)
167
+ platform == :ios
168
+ end
169
+ end
170
+ end
171
+ end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module Ciutils
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-ciutils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolae Ghimbovschi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-04 00:00:00.000000000 Z
11
+ date: 2018-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: slather
@@ -162,6 +162,7 @@ files:
162
162
  - lib/fastlane/plugin/ciutils/actions/en_build_number.rb
163
163
  - lib/fastlane/plugin/ciutils/actions/en_ci_utils_init_action.rb
164
164
  - lib/fastlane/plugin/ciutils/actions/en_close_simulator.rb
165
+ - lib/fastlane/plugin/ciutils/actions/en_create_sonar_reports.rb
165
166
  - lib/fastlane/plugin/ciutils/actions/en_git_changelog.rb
166
167
  - lib/fastlane/plugin/ciutils/actions/en_install_provisioning_profiles.rb
167
168
  - lib/fastlane/plugin/ciutils/actions/en_profile_name.rb