public static async Task <RISCVIntegrationContext> Run(RISCVIntegrationContext context) { using (var client = new HttpClient()) { var request = new InvokeRequest() { ExtensionClasses = context.ExtensionClasses, Source = context.SourceSnapshot, Operations = context.Operations, ResultRules = context.ResultFileRules }; var requestPayload = JsonHelper.Serialize(request); var test = JsonHelper.Deserialize <InvokeRequest>(requestPayload); var requestContent = new StringContent(requestPayload, Encoding.UTF8, "application/json"); var url = $"{context.Endpoint.RISCV}/Invoke"; var response = await client.PostAsync(url, requestContent); if (response.StatusCode != System.Net.HttpStatusCode.OK) { var exceptionPayload = await response.Content.ReadAsStringAsync(); throw new Exception($"Failed to post data to '{url}': {exceptionPayload}"); } var responsePayload = await response.Content.ReadAsStringAsync(); var invokeResponse = JsonHelper.Deserialize <InvokeResponse>(responsePayload); return(context.WithResultSnapshot(invokeResponse.Result)); } }
public static async Task Make(RISCVIntegrationContext context) { var zipFile = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); try { using (var client = new HttpClient()) { var url = $"{context.Endpoint.RISCV}/make/{context.MakeTarget}"; var zfe = new ZipEntryFactory { IsUnicodeText = true }; context.RootFolder.CompressFolder(zipFile); var content = File.ReadAllBytes(zipFile); var response = await client.PostAsync(url, new StreamContent(new MemoryStream(content))); if (response.StatusCode != HttpStatusCode.OK) { var exception = await response.Content.ReadAsStringAsync(); throw new Exception(exception); } content = await response.Content.ReadAsByteArrayAsync(); File.WriteAllBytes(zipFile, content); zipFile.ExtractZip(context.RootFolder); } } finally { zipFile.DeleteFileIfExists(); } }
public static RISCVIntegrationContext DefaultContext(string rootPath) { var context = new RISCVIntegrationContext() .WithEndpoint(new RISCVIntegrationEndpoint()) .WithExtensionClasses( new ExtensionClasses() .Text("") .Text("lds") .Text("s") .Text("c") .Text("cpp") .Text("h") .Binary("bin") .Binary("elf") .Text("map") ) .WithRootFolder(rootPath) .WithAllRegisteredFiles() .WithOperations(new BashInvocation("make firmware.bin")) .TakeModifiedFiles(); return(context); }