public static async Task RunAsync( IInstallationTokenProvider installationTokenProvider, CompressImagesMessage compressImagesMessage, ICollector <OpenPrMessage> openPrMessages, IRepoChecks repoChecks, ILogger logger, ExecutionContext context) { logger.LogInformation("CompressImagesFunction: starting run for {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); var installationTokenParameters = new InstallationTokenParameters { AccessTokensUrl = string.Format(KnownGitHubs.AccessTokensUrlFormat, compressImagesMessage.InstallationId), AppId = KnownGitHubs.AppId, }; var installationToken = await installationTokenProvider.GenerateAsync( installationTokenParameters, File.OpenText(Path.Combine(context.FunctionDirectory, $"../{KnownGitHubs.AppPrivateKey}"))); // check if repo is archived before starting work var isArchived = await repoChecks.IsArchived(new GitHubClientParameters { Password = installationToken.Token, RepoName = compressImagesMessage.RepoName, RepoOwner = compressImagesMessage.Owner }); if (isArchived) { logger.LogInformation("CompressImagesFunction: skipping archived repo {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); return; } var compressImagesParameters = new CompressimagesParameters { CloneUrl = compressImagesMessage.CloneUrl, LocalPath = LocalPath.CloneDir(Environment.GetEnvironmentVariable("TMP") ?? "/private/tmp/", compressImagesMessage.RepoName), Password = installationToken.Token, RepoName = compressImagesMessage.RepoName, RepoOwner = compressImagesMessage.Owner, PgpPrivateKeyStream = File.OpenRead(Path.Combine(context.FunctionDirectory, $"../{KnownGitHubs.PGPPrivateKeyFilename}")), PgPPassword = File.ReadAllText(Path.Combine(context.FunctionDirectory, $"../{KnownGitHubs.PGPPasswordFilename}")) }; var didCompress = CompressImages.Run(compressImagesParameters, logger); if (didCompress) { logger.LogInformation("CompressImagesFunction: Successfully compressed images for {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); openPrMessages.Add(new OpenPrMessage { InstallationId = compressImagesMessage.InstallationId, RepoName = compressImagesMessage.RepoName, CloneUrl = compressImagesMessage.CloneUrl, }); } logger.LogInformation("CompressImagesFunction: finished run for {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); }
public static async Task Run( [QueueTrigger("compressimagesmessage")] CompressImagesMessage compressImagesMessage, [Queue("openprmessage")] ICollector <OpenPrMessage> openPrMessages, ILogger logger, ExecutionContext context) { logger.LogInformation("CompressImagesFunction: starting run for {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); var installationTokenParameters = new InstallationTokenParameters { AccessTokensUrl = string.Format(KnownGitHubs.AccessTokensUrlFormat, compressImagesMessage.InstallationId), AppId = KnownGitHubs.AppId, }; var installationToken = await InstallationToken.GenerateAsync( installationTokenParameters, File.OpenText(Path.Combine(context.FunctionDirectory, $"../{KnownGitHubs.AppPrivateKey}"))); var compressImagesParameters = new CompressimagesParameters { CloneUrl = compressImagesMessage.CloneUrl, LocalPath = LocalPath.CloneDir(Environment.GetEnvironmentVariable("TMP") ?? "/private/tmp/", compressImagesMessage.RepoName), Password = installationToken.Token, RepoName = compressImagesMessage.RepoName, RepoOwner = compressImagesMessage.Owner, PgpPrivateKeyStream = File.OpenRead(Path.Combine(context.FunctionDirectory, $"../{KnownGitHubs.PGPPrivateKeyFilename}")), PgPPassword = File.ReadAllText(Path.Combine(context.FunctionDirectory, $"../{KnownGitHubs.PGPPasswordFilename}")) }; var didCompress = CompressImages.Run(compressImagesParameters, logger); if (didCompress) { logger.LogInformation("CompressImagesFunction: Successfully compressed images for {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); openPrMessages.Add(new OpenPrMessage { InstallationId = compressImagesMessage.InstallationId, RepoName = compressImagesMessage.RepoName, CloneUrl = compressImagesMessage.CloneUrl, }); } logger.LogInformation("CompressImagesFunction: finished run for {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); }
public static async Task Run( [QueueTrigger("compressimagesmessage")] CompressImagesMessage compressImagesMessage, [Queue("openprmessage")] ICollector <OpenPrMessage> openPrMessages, TraceWriter log, ExecutionContext context) { var installationTokenParameters = new InstallationTokenParameters { AccessTokensUrl = compressImagesMessage.AccessTokensUrl, AppId = KnownGitHubs.AppId, }; var installationToken = await InstallationToken.GenerateAsync( installationTokenParameters, File.OpenText(Path.Combine(context.FunctionDirectory, $"../{KnownGitHubs.AppPrivateKey}"))); var compressImagesParameters = new CompressimagesParameters { CloneUrl = compressImagesMessage.CloneUrl, LocalPath = LocalPath.CloneDir(Environment.GetEnvironmentVariable("TMP") ?? "/private/tmp/", compressImagesMessage.RepoName), Password = installationToken.Token, RepoName = compressImagesMessage.RepoName, RepoOwner = compressImagesMessage.Owner, PgpPrivateKeyStream = File.OpenRead(Path.Combine(context.FunctionDirectory, $"../{KnownGitHubs.PGPPrivateKeyFilename}")), PgPPassword = File.ReadAllText(Path.Combine(context.FunctionDirectory, $"../{KnownGitHubs.PGPPasswordFilename}")) }; var didCompress = CompressImages.Run(compressImagesParameters); if (didCompress) { log.Info("Compressed images; Route to OpenPR"); openPrMessages.Add(new OpenPrMessage { InstallationId = compressImagesMessage.InstallationId, RepoName = compressImagesMessage.RepoName, CloneUrl = compressImagesMessage.CloneUrl, }); } log.Info("Completed run"); }
public static async Task RunAsync( IInstallationTokenProvider installationTokenProvider, CompressImagesMessage compressImagesMessage, ICollector <OpenPrMessage> openPrMessages, IRepoChecks repoChecks, ILogger logger, ExecutionContext context) { logger.LogInformation("CompressImagesFunction: starting run for {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); var installationTokenParameters = new InstallationTokenParameters { AccessTokensUrl = string.Format(KnownGitHubs.AccessTokensUrlFormat, compressImagesMessage.InstallationId), AppId = KnownGitHubs.AppId, }; var installationToken = await installationTokenProvider.GenerateAsync( installationTokenParameters, KnownEnvironmentVariables.APP_PRIVATE_KEY); // check if repo is archived before starting work var isArchived = await repoChecks.IsArchived(new GitHubClientParameters { Password = installationToken.Token, RepoName = compressImagesMessage.RepoName, RepoOwner = compressImagesMessage.Owner }); if (isArchived) { logger.LogInformation("CompressImagesFunction: skipping archived repo {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); return; } // check if imgbot branch already exists before starting work var branchExists = await repoChecks.BranchExists(new GitHubClientParameters { Password = installationToken.Token, RepoName = compressImagesMessage.RepoName, RepoOwner = compressImagesMessage.Owner, }); if (branchExists) { logger.LogInformation("CompressImagesFunction: skipping repo {Owner}/{RepoName} as branch exists", compressImagesMessage.Owner, compressImagesMessage.RepoName); return; } var compressImagesParameters = new CompressimagesParameters { CloneUrl = compressImagesMessage.CloneUrl, LocalPath = LocalPath.CloneDir(KnownEnvironmentVariables.TMP ?? "/private/tmp/", compressImagesMessage.RepoName), Password = installationToken.Token, RepoName = compressImagesMessage.RepoName, RepoOwner = compressImagesMessage.Owner, PgpPrivateKey = KnownEnvironmentVariables.PGP_PRIVATE_KEY, PgPPassword = KnownEnvironmentVariables.PGP_PASSWORD, CompressImagesMessage = compressImagesMessage, }; var didCompress = CompressImages.Run(compressImagesParameters, logger); if (didCompress) { logger.LogInformation("CompressImagesFunction: Successfully compressed images for {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); openPrMessages.Add(new OpenPrMessage { InstallationId = compressImagesMessage.InstallationId, RepoName = compressImagesMessage.RepoName, CloneUrl = compressImagesMessage.CloneUrl, }); } logger.LogInformation("CompressImagesFunction: finished run for {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); }
public static async Task RunAsync( IInstallationTokenProvider installationTokenProvider, CompressImagesMessage compressImagesMessage, ICollector<OpenPrMessage> openPrMessages, ICollector<CompressImagesMessage> compressImagesMessages, CloudTable settingsTable, IRepoChecks repoChecks, ILogger logger, ExecutionContext context) { logger.LogInformation("CompressImagesFunction: starting run for {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); var installationTokenParameters = new InstallationTokenParameters { AccessTokensUrl = string.Format(KnownGitHubs.AccessTokensUrlFormat, compressImagesMessage.InstallationId), AppId = KnownGitHubs.AppId, }; var installationToken = await installationTokenProvider.GenerateAsync( installationTokenParameters, KnownEnvironmentVariables.APP_PRIVATE_KEY); // check if repo is archived before starting work var isArchived = await repoChecks.IsArchived(new GitHubClientParameters { Password = installationToken.Token, RepoName = compressImagesMessage.RepoName, RepoOwner = compressImagesMessage.Owner }); if (isArchived) { logger.LogInformation("CompressImagesFunction: skipping archived repo {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); return; } // check if imgbot branch already exists before starting work var branchExists = await repoChecks.BranchExists(new GitHubClientParameters { Password = installationToken.Token, RepoName = compressImagesMessage.RepoName, RepoOwner = compressImagesMessage.Owner, }); if (branchExists && !compressImagesMessage.IsRebase) { logger.LogInformation("CompressImagesFunction: skipping repo {Owner}/{RepoName} as branch exists", compressImagesMessage.Owner, compressImagesMessage.RepoName); return; } var compressImagesParameters = new CompressimagesParameters { CloneUrl = compressImagesMessage.CloneUrl, LocalPath = LocalPath.CloneDir(KnownEnvironmentVariables.TMP ?? "/private/tmp/", compressImagesMessage.RepoName), Password = installationToken.Token, RepoName = compressImagesMessage.RepoName, RepoOwner = compressImagesMessage.Owner, IsRebase = compressImagesMessage.IsRebase, PgpPrivateKey = KnownEnvironmentVariables.PGP_PRIVATE_KEY, PgPPassword = KnownEnvironmentVariables.PGP_PASSWORD, CompressImagesMessage = compressImagesMessage, Settings = await Common.TableModels.SettingsHelper.GetSettings(settingsTable, compressImagesMessage.InstallationId, compressImagesMessage.RepoName), }; var didCompress = CompressImages.Run(compressImagesParameters, compressImagesMessages, logger); if (didCompress && compressImagesParameters.CloneUrl.Contains(".wiki.git")) { logger.LogInformation("CompressImagesFunction: Successfully compressed images for {Owner}/{RepoName}/wiki", compressImagesMessage.Owner, compressImagesMessage.RepoName); } else if (didCompress) { var update = compressImagesMessage.IsRebase; logger.LogInformation("CompressImagesFunction: Successfully compressed images for {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); openPrMessages.Add(new OpenPrMessage { InstallationId = compressImagesMessage.InstallationId, RepoName = compressImagesMessage.RepoName, CloneUrl = compressImagesMessage.CloneUrl, Update = compressImagesMessage.IsRebase, }); } try { Directory.Delete(compressImagesParameters.LocalPath, recursive: true); } catch (Exception exception) { logger.LogError(exception, "Error cleaning up local directory"); } logger.LogInformation("CompressImagesFunction: finished run for {Owner}/{RepoName}", compressImagesMessage.Owner, compressImagesMessage.RepoName); }