| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- * Copyright 2022 Google LLC
- *
- * 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 ArgumentParser
- import FirebaseManifest
- import Foundation
- import Utils
- enum ParsingMode: String, EnumerableFlag {
- case forNoticesGeneration
- case forGHAMatrixGeneration
- }
- struct ManifestParser: ParsableCommand {
- @Option(help: "The path of the SDK repo.",
- transform: { str in
- if NSString(string: str).isAbsolutePath { return URL(fileURLWithPath: str) }
- let documentDir = URL(fileURLWithPath: FileManager.default.currentDirectoryPath)
- return documentDir.appendingPathComponent(str)
- })
- var SDKRepoURL: URL?
- /// Path of a text file for Firebase Pods' names.
- @Option(help: "An output file with Podspecs",
- transform: { str in
- if NSString(string: str).isAbsolutePath { return URL(fileURLWithPath: str) }
- let documentDir = URL(fileURLWithPath: FileManager.default.currentDirectoryPath)
- return documentDir.appendingPathComponent(str)
- })
- var outputFilePath: URL
- @Option(parsing: .upToNextOption, help: "Podspec files that will not be included.")
- var excludedSpecs: [String]
- @Flag(help: "Parsing mode for manifest")
- var mode: ParsingMode
- func parsePodNames(_ manifest: Manifest) throws {
- var output: [String] = []
- for pod in manifest.pods {
- output.append(pod.name)
- }
- do {
- try output.joined(separator: ",")
- .write(to: outputFilePath, atomically: true,
- encoding: String.Encoding.utf8)
- print("\(output) is written in \n \(outputFilePath).")
- } catch {
- throw error
- }
- }
- func run() throws {
- switch mode {
- case .forNoticesGeneration:
- try parsePodNames(FirebaseManifest.shared)
- case .forGHAMatrixGeneration:
- guard let sdkRepoURL = SDKRepoURL else {
- throw fatalError(
- "--sdk-repo-url should be specified when --for-gha-matrix-generation is on."
- )
- }
- let specCollector = GHAMatrixSpecCollector(
- SDKRepoURL: sdkRepoURL,
- outputSpecFileURL: outputFilePath
- )
- try specCollector.generateMatrixJson(to: outputFilePath)
- }
- }
- }
- // Start the parsing and run the tool.
- ManifestParser.main()
|