             try apiDocsUpdate()
         case "tplu", "third-party-library-upgrade":
             print("[!] This Action need one parameter\n")
-            help()
+            tpluHelp()
         case "h", "help":
             help()
         default:

            currentVersion: try VersionUpdater.currentVersion())
    }
    
    static func thirdPartyLibraryUpgrade(with directory: String) throws {
        let url = URL(fileURLWithPath: ThirdPartyLibraryUpgrader.protobufObjcDirectoryPath, isDirectory: true)
        print(url.path)
        let enumerator = FileManager.default.enumerator(
            at: url,
            includingPropertiesForKeys: nil,
            options: [.skipsHiddenFiles, .skipsPackageDescendants, .skipsSubdirectoryDescendants])
        while let path = enumerator?.nextObject() as? URL {
            if path.lastPathComponent.hasPrefix("GPB") {
                print(path.lastPathComponent)
            }
        }
    }
    

        }
    }
    
    static func replacingFiles(srcDirectory: String, dstDirectory: String, originNamespace: String, lcNamespace: String) throws {
        let srcDirectoryURL = URL(fileURLWithPath: srcDirectory, isDirectory: true)
        let dstDirectoryURL = URL(fileURLWithPath: dstDirectory, isDirectory: true)
        let enumerator = FileManager.default.enumerator(
            at: srcDirectoryURL,
            includingPropertiesForKeys: nil,
            options: [.skipsHiddenFiles, .skipsPackageDescendants, .skipsSubdirectoryDescendants])
        while let srcUrl = enumerator?.nextObject() as? URL {
            if srcUrl.lastPathComponent.hasPrefix(originNamespace) {
                let dstFileName = srcUrl.lastPathComponent.replacingOccurrences(of: originNamespace, with: lcNamespace, options: [.anchored])
                let dstFileURL = dstDirectoryURL.appendingPathComponent(dstFileName)
                if FileManager.default.fileExists(atPath: dstFileURL.path) {
                    try FileManager.default.removeItem(at: dstFileURL)
                } else {
                    print("[!] New File: `\(dstFileURL.path)`\n")
                }
                try FileManager.default.copyItem(at: srcUrl, to: dstFileURL)
                try (try String(contentsOfFile: dstFileURL.path))
                    .replacingOccurrences(of: originNamespace, with: lcNamespace)
                    .write(toFile: dstFileURL.path, atomically: true, encoding: .utf8)
            }
        }
    }
    
    static func updateProtobuf() throws {
        try checkDirectoryExists(path: protobufObjcDirectoryPath)
        try checkDirectoryExists(path: lcProtobufObjcDirectoryPath)
        try replacingFiles(
            srcDirectory: protobufObjcDirectoryPath,
            dstDirectory: lcProtobufObjcDirectoryPath,
            originNamespace: "GPB",
            lcNamespace: "LCGPB")
    }
}

