mirror of
https://github.com/firebase/firebase-ios-sdk
synced 2026-11-10 22:45:59 +05:45
* Update the coverage collection to point to the prod database * Fix formatting * Misc fixes * Update message
77 lines
2.7 KiB
Swift
77 lines
2.7 KiB
Swift
/*
|
|
* Copyright 2019 Google
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import Foundation
|
|
|
|
/// A set of SDK targets for which to collect code coverage.
|
|
let TARGETS_TO_COLLECT: Set = [
|
|
"Auth_Example_iOS.app",
|
|
"Core_Example_iOS.app",
|
|
"Database_Example_iOS.app",
|
|
"DynamicLinks_Example_iOS.app",
|
|
"InstanceID_Example_iOS.app",
|
|
"Messaging_Example_iOS.app",
|
|
"Storage_Example_iOS.app",
|
|
// TODO(Corrob): Add support for Firestore, Functions, and InAppMessaging.
|
|
]
|
|
|
|
/// Represents a set of metric table updates to upload to the database.
|
|
public struct UploadMetrics: Encodable {
|
|
public var tables: [TableUpdate]
|
|
|
|
public init(tables: [TableUpdate]) {
|
|
self.tables = tables
|
|
}
|
|
|
|
/// Converts the metric table updates to a JSON format this is compatible with the Java uploader.
|
|
public func json() throws -> String {
|
|
let json = try JSONEncoder().encode(self)
|
|
return String(data: json, encoding: .utf8)!
|
|
}
|
|
}
|
|
|
|
/// An update to a metrics table with the new data to uplaod to the database.
|
|
public struct TableUpdate: Encodable {
|
|
public var table_name: String
|
|
public var column_names: [String]
|
|
public var replace_measurements: [[String]]
|
|
|
|
public init(table_name: String, column_names: [String], replace_measurements: [[String]]) {
|
|
self.table_name = table_name
|
|
self.column_names = column_names
|
|
self.replace_measurements = replace_measurements
|
|
}
|
|
|
|
/// Creates a table update for code coverage by parsing a coverage report from XCov.
|
|
public static func createFrom(coverage: CoverageReport, pullRequest: Int, currentTime: String) -> TableUpdate {
|
|
var metrics = [[String]]()
|
|
for target in coverage.targets {
|
|
if TARGETS_TO_COLLECT.contains(target.name) {
|
|
var row = [String]()
|
|
row.append(target.name.components(separatedBy: "_")[0])
|
|
row.append(String(pullRequest))
|
|
row.append(String(target.coverage))
|
|
row.append(currentTime)
|
|
metrics.append(row)
|
|
} else {
|
|
print("WARNING - target \(target.name) is being filtered out from coverage collection. Skipping...")
|
|
}
|
|
}
|
|
let columnNames = ["product_name", "pull_request_id", "coverage_total", "collection_time"]
|
|
return TableUpdate(table_name: "IosCodeCoverage", column_names: columnNames, replace_measurements: metrics)
|
|
}
|
|
}
|