public async Task ExecuteAsync(IPluginJobContext context) { if (!CliUtils.ParseArgs(_options, context.Args)) { return; } if (_isHelp) { PrintUsage(); return; } var(status, failureMessage) = _apiService.GetStatus(); if (status == null) { await WriteUtils.PrintErrorAsync(failureMessage); return; } var pluginId = string.Empty; if (context.Extras != null && context.Extras.Length > 0) { pluginId = context.Extras[0]; } var pluginPath = string.IsNullOrEmpty(pluginId) ? _settingsManager.ContentRootPath : PathUtils.Combine(_pathManager.GetPluginPath(pluginId)); var(plugin, errorMessage) = await PluginUtils.ValidateManifestAsync(pluginPath); if (plugin == null) { await WriteUtils.PrintErrorAsync(errorMessage); return; } if (!string.IsNullOrEmpty(_version)) { SemVersion.TryParse(plugin.Version, out var pluginVersion); string versionChanged; if (_version == "major") { versionChanged = pluginVersion.Change(pluginVersion.Major + 1).ToString(); } else if (_version == "minor") { versionChanged = pluginVersion.Change(pluginVersion.Major, pluginVersion.Minor + 1).ToString(); } else if (_version == "patch") { versionChanged = pluginVersion.Change(pluginVersion.Major, pluginVersion.Minor, pluginVersion.Patch + 1).ToString(); } else if (PluginUtils.IsSemVersion(_version)) { versionChanged = _version; } else { await WriteUtils.PrintErrorAsync($"Invalid plugin version '{_version}'"); return; } if (versionChanged != plugin.Version) { await PluginUtils.UpdateVersionAsync(pluginPath, versionChanged); (plugin, errorMessage) = await PluginUtils.ValidateManifestAsync(pluginPath); if (plugin == null) { await WriteUtils.PrintErrorAsync(errorMessage); return; } } } var packageId = PluginUtils.GetPackageId(plugin.Publisher, plugin.Name, plugin.Version); var zipPath = PluginPackageJob.Package(_pathManager, plugin); var fileSize = FileUtils.GetFileSizeByFilePath(zipPath); await Console.Out.WriteLineAsync($"Packaged: {zipPath}"); await Console.Out.WriteLineAsync($"Publishing {packageId} ({fileSize})..."); bool success; (success, failureMessage) = _apiService.PluginPublish(plugin.Publisher, zipPath); if (success) { await WriteUtils.PrintSuccessAsync($"Published {packageId}, your plugin will live at {CloudUtils.Www.GetPluginUrl(plugin.PluginId)} (might take a few minutes for it to show up)."); } else { await WriteUtils.PrintErrorAsync(failureMessage); } }
public static string Package(IPathManager pathManager, Plugin plugin) { var outputPath = PathUtils.Combine(plugin.ContentRootPath, plugin.Output); var packageId = PluginUtils.GetPackageId(plugin.Publisher, plugin.Name, plugin.Version); var publishPath = CliUtils.GetOsUserPluginsDirectoryPath(packageId); DirectoryUtils.DeleteDirectoryIfExists(publishPath); var zipPath = CliUtils.GetOsUserPluginsDirectoryPath($"{packageId}.zip"); FileUtils.DeleteFileIfExists(zipPath); foreach (var directoryName in DirectoryUtils.GetDirectoryNames(outputPath)) { if (//StringUtils.EqualsIgnoreCase(directoryName, "bin") || StringUtils.EqualsIgnoreCase(directoryName, "obj") || StringUtils.EqualsIgnoreCase(directoryName, "node_modules") || StringUtils.EqualsIgnoreCase(directoryName, ".git") || StringUtils.EqualsIgnoreCase(directoryName, ".vs") || StringUtils.EqualsIgnoreCase(directoryName, ".vscode") ) { continue; } DirectoryUtils.Copy(PathUtils.Combine(outputPath, directoryName), PathUtils.Combine(publishPath, directoryName)); } foreach (var fileName in DirectoryUtils.GetFileNames(outputPath)) { if (StringUtils.EqualsIgnoreCase(fileName, Constants.PluginConfigFileName) || StringUtils.EndsWithIgnoreCase(fileName, ".csproj") || StringUtils.EndsWithIgnoreCase(fileName, ".csproj.user") || StringUtils.EndsWithIgnoreCase(fileName, ".sln") || StringUtils.EndsWithIgnoreCase(fileName, ".DotSettings.user") || StringUtils.EndsWithIgnoreCase(fileName, ".csproj.user") || StringUtils.EndsWithIgnoreCase(fileName, ".csproj.user") || StringUtils.EndsWithIgnoreCase(fileName, ".cs") || StringUtils.EndsWithIgnoreCase(fileName, ".zip") ) { continue; } FileUtils.CopyFile(PathUtils.Combine(outputPath, fileName), PathUtils.Combine(publishPath, fileName)); } if (!PathUtils.IsEquals(outputPath, plugin.ContentRootPath)) { FileUtils.CopyFile(PathUtils.Combine(plugin.ContentRootPath, Constants.PackageFileName), PathUtils.Combine(publishPath, Constants.PackageFileName)); if (!FileUtils.IsFileExists(PathUtils.Combine(plugin.ContentRootPath, Constants.ReadmeFileName))) { FileUtils.CopyFile(PathUtils.Combine(plugin.ContentRootPath, Constants.ReadmeFileName), PathUtils.Combine(publishPath, Constants.ReadmeFileName)); } if (!FileUtils.IsFileExists(PathUtils.Combine(plugin.ContentRootPath, Constants.ChangeLogFileName))) { FileUtils.CopyFile(PathUtils.Combine(plugin.ContentRootPath, Constants.ChangeLogFileName), PathUtils.Combine(publishPath, Constants.ChangeLogFileName)); } } pathManager.CreateZip(zipPath, publishPath); DirectoryUtils.DeleteDirectoryIfExists(publishPath); return(zipPath); }