in JfkWebApiSkills/JfkInitializer/Program.cs [251:328]
private static async Task<bool> DeployWebsite()
{
try
{
Console.WriteLine("Setting Website Keys...");
string searchQueryKey = ConfigurationManager.AppSettings["SearchServiceQueryKey"];
string envText = File.ReadAllText("../../../../frontend/.env");
envText = envText.Replace("[SearchServiceName]", ConfigurationManager.AppSettings["SearchServiceName"]);
envText = envText.Replace("[SearchServiceDomain]", ConfigurationManager.AppSettings["SearchServiceDnsSuffix"]);
envText = envText.Replace("[IndexName]", IndexName);
envText = envText.Replace("[SearchServiceApiKey]", searchQueryKey);
envText = envText.Replace("[SearchServiceApiVersion]", ConfigurationManager.AppSettings["SearchServiceApiVersion"]);
envText = envText.Replace("[AzureFunctionName]", ConfigurationManager.AppSettings["AzureFunctionSiteName"]);
envText = envText.Replace("[AzureFunctionDefaultHostKey]", ConfigurationManager.AppSettings["AzureFunctionHostKey"]);
File.WriteAllText("../../../../frontend/.env", envText);
Console.WriteLine("Website keys have been set. Please build the website and then return here and press any key to continue.");
Console.ReadKey();
Console.WriteLine("Deploying Website...");
if (File.Exists("website.zip"))
{
File.Delete("website.zip");
}
ZipFile.CreateFromDirectory("../../../../frontend/dist", "website.zip");
byte[] websiteZip = File.ReadAllBytes("website.zip");
HttpContent content = new ByteArrayContent(websiteZip);
string uri = String.Format("https://{0}.scm.azurewebsites.net/api/zipdeploy?isAsync=true", ConfigurationManager.AppSettings["AzureWebAppSiteName"]);
byte[] credentials = Encoding.ASCII.GetBytes(String.Format("{0}:{1}", ConfigurationManager.AppSettings["AzureWebAppUsername"], ConfigurationManager.AppSettings["AzureWebAppPassword"]));
_httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentials));
HttpResponseMessage response = await _httpClient.PostAsync(uri, content);
if (DebugMode)
{
string responseText = await response.Content.ReadAsStringAsync();
Console.WriteLine("Deploy website response: \n{0}", responseText);
}
if (!response.IsSuccessStatusCode)
{
return false;
}
Console.WriteLine("Website deployment accepted. Waiting for deployment to complete...");
IEnumerable<string> values;
if (response.Headers.TryGetValues("Location", out values))
{
string pollingUri = values.First();
bool complete = false;
while (!complete)
{
Thread.Sleep(3000);
HttpResponseMessage pollingResponse = await _httpClient.GetAsync(pollingUri);
string responseText = await pollingResponse.Content.ReadAsStringAsync();
JObject json = JObject.Parse(responseText);
complete = json.SelectToken("complete") == null ? false : json.SelectToken("complete").ToObject<bool>();
if (DebugMode)
{
Console.WriteLine("Current website deployment status: {0}", json.SelectToken("progress")?.ToString());
}
}
Console.WriteLine("Website deployment completed.");
}
else
{
Console.WriteLine("Could not find polling url from response.");
}
Console.WriteLine("Website url: https://{0}.azurewebsites.net/", ConfigurationManager.AppSettings["AzureWebAppSiteName"]);
}
catch (Exception ex)
{
if (DebugMode)
{
Console.WriteLine("Error deploying website: {0}", ex.Message);
}
return false;
}
return true;
}