summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Kiley <jmkiley@users.noreply.github.com>2019-03-13 12:58:24 -0700
committerGitHub <noreply@github.com>2019-03-13 12:58:24 -0700
commitfb0b0d5a2bb89a6a7d5137e0c610e2c5105c26d3 (patch)
treec21d8cc0cbd9aadf63f9c245b7cc79e8533af4ed
parent979433eddb5a8f2180aba134befb08b222718bc8 (diff)
downloadqtlocation-mapboxgl-fb0b0d5a2bb89a6a7d5137e0c610e2c5105c26d3.tar.gz
[ios] Generate iOS code coverage for metrics (#14015)
-rw-r--r--ci.template1
-rw-r--r--circle.yml4
-rw-r--r--platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme11
-rwxr-xr-xplatform/ios/scripts/ios-code-coverage.sh31
-rwxr-xr-xscripts/code-coverage.sh35
5 files changed, 82 insertions, 0 deletions
diff --git a/ci.template b/ci.template
index 5a94771a71..77a204dbad 100644
--- a/ci.template
+++ b/ci.template
@@ -160,6 +160,7 @@
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::mapbox-loading-dock/raw/mobile.binarysize/*",
+ "arn:aws:s3:::mapbox-loading-dock/raw/mobile.codecoverage/*"
"arn:aws:s3:::mapbox-loading-dock/raw/mobile_staging.docs_coverage/*"
]
}
diff --git a/circle.yml b/circle.yml
index e48f6adbd7..6bd4c9d724 100644
--- a/circle.yml
+++ b/circle.yml
@@ -929,6 +929,10 @@ jobs:
- run:
name: Build and run SDK unit tests with thread and undefined behavior sanitizers
command: make ios-sanitize
+ - run:
+ name: Get iOS code coverage
+ command: |
+ platform/ios/scripts/ios-code-coverage.sh CI
- save-dependencies
- collect-xcode-build-logs
- upload-xcode-build-logs
diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme
index 6b018e1337..7d59c4edee 100644
--- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme
+++ b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme
@@ -54,7 +54,18 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ codeCoverageEnabled = "YES"
+ onlyGenerateCoverageForSpecifiedTargets = "YES"
shouldUseLaunchSchemeArgsEnv = "NO">
+ <CodeCoverageTargets>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "DA8847D11CBAF91600AB86E3"
+ BuildableName = "Mapbox.framework"
+ BlueprintName = "dynamic"
+ ReferencedContainer = "container:ios.xcodeproj">
+ </BuildableReference>
+ </CodeCoverageTargets>
<Testables>
<TestableReference
skipped = "NO">
diff --git a/platform/ios/scripts/ios-code-coverage.sh b/platform/ios/scripts/ios-code-coverage.sh
new file mode 100755
index 0000000000..8b8adb423a
--- /dev/null
+++ b/platform/ios/scripts/ios-code-coverage.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+
+set -e
+set -o pipefail
+
+#
+# Get code coverage report, then convert it to JSON.
+# The coverage reports end up in different locations based on whether coverage
+# is generated via CI or locally.
+#
+cov_result="";
+if [ -f build/ios/Logs/Test/*.xcresult/*_Test/*.xccovreport ]; then
+ cov_result=build/ios/Logs/Test/*.xcresult/*_Test/*.xccovreport
+elif [ -f build/ios/ios/Logs/Test/*.xcresult/*_Test/*.xccovreport ]; then
+ cov_result=build/ios/ios/Logs/Test/*.xcresult/*_Test/*.xccovreport
+else
+ echo "Coverage file does not exist. Please run tests before executing"
+ exit 1
+fi
+
+xcrun xccov view $cov_result --json > output.json
+
+#
+# Convert the line coverage for the dynamic target to a percentage. Currently,
+# only CI tests are included when calculated code coverage.
+#
+percentage=`node -e "console.log(require('./output.json').lineCoverage)"`
+cov=$(printf "%.2f" $(echo "$percentage*100" | bc -l))
+
+# Generate a formatted JSON file and upload it to S3.
+./././scripts/code-coverage.sh $cov "iOS" "$1"
diff --git a/scripts/code-coverage.sh b/scripts/code-coverage.sh
new file mode 100755
index 0000000000..d6866f61b8
--- /dev/null
+++ b/scripts/code-coverage.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+
+set -e
+set -o pipefail
+
+#
+# This script takes three values: $1 should be a decimal value reflecting the
+# percentage of lines covered, with a maximum value of 100.0, $2 is
+# the platform the percentage pertains to (iOS or Android), and $3 is the
+# test scheme being run (on iOS, this is currently CI).
+#
+
+# Check that platform input values are valid.
+
+if [[ ! $2 = "iOS" && ! $2 = "Android" ]]; then
+ echo "$2 does not match either 'iOS' or 'Android'. Platform must be specified for coverage report."
+ exit 1
+fi
+
+# Create a formatted JSON file that contains the current coverage.
+
+current_date=$(TZ=UTC date +"%Y-%m-%d")
+file_name=$2_coverage.json
+cat <<EOF > $file_name
+ {"code_coverage":$1,"platform":"$2","sdk":"Maps","scheme":"$3","created_at":"$current_date"}
+EOF
+gzip -f $file_name
+
+if [ -z `which aws` ]; then
+ brew install awscli
+fi
+
+aws s3 cp $file_name.gz s3://mapbox-loading-dock/raw/mobile.codecoverage/$current_date/
+echo $
+