public bool InitializeAdminBuildpack(StagingStartRequestAdminBuildpack adminBuildpack, string adminBuildpackDir, bool checkWindowsCompatibility) { var dir = Path.Combine(adminBuildpackDir, adminBuildpack.Key); var buildpackMutex = new Mutex(false, AdminBuildpackMutexName(adminBuildpack.Key)); try { buildpackMutex.WaitOne(); DownloadAdminBuildpack(adminBuildpack, adminBuildpackDir); if (checkWindowsCompatibility) { var winBuildpack = BuildpackHasWindowsCompatibleBinaries(dir); if (!winBuildpack) { Logger.Info("Ignoring buildpack {1}. Staging task {0}. Unable to detect compatible windows executables in buildpack bin.", this.Properties.TaskId, dir); return(false); } } DEAUtilities.DirectoryCopy(dir, Path.Combine(this.Workspace.TempDir, "buildpack"), true); } finally { buildpackMutex.ReleaseMutex(); buildpackMutex.Dispose(); } return(true); }
public void DownloadAdminBuildpack(StagingStartRequestAdminBuildpack adminBuildpack, string adminBuildpackDir) { string archiveFile = Path.Combine(adminBuildpackDir, adminBuildpack.Key + ".zip"); string destDir = Path.Combine(adminBuildpackDir, adminBuildpack.Key); if (Directory.Exists(destDir)) { Logger.Info("Skipping download for admin buildpack {0} because it was previously downloaded in {1}", adminBuildpack.Key, destDir); return; } Directory.CreateDirectory(destDir); WebClient client = new WebClient(); try { Logger.Info("Downloading admin buildpack {0} in {1} from {2}", adminBuildpack.Key, destDir, adminBuildpack.Url); var downloadUri = new Uri(adminBuildpack.Url); client.Headers[HttpRequestHeader.Authorization] = "Basic " + System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(downloadUri.UserInfo)); client.DownloadFile(downloadUri, archiveFile); ZipFile.ExtractToDirectory(archiveFile, destDir); } catch { Directory.Delete(destDir, true); File.Delete(archiveFile); throw; } finally { client.Dispose(); } File.Delete(archiveFile); }