예제 #1
0
        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);
        }
예제 #2
0
        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);
        }