(bugfix): empty string json parse issue, code review
This commit is contained in:
parent
6bcb99c40f
commit
03b71068bb
@ -6,11 +6,12 @@ using Microsoft.Extensions.Logging;
|
||||
using MaksIT.PodmanClientDotNet.Models;
|
||||
using MaksIT.PodmanClientDotNet.Models.Container;
|
||||
using MaksIT.PodmanClientDotNet.Extensions;
|
||||
using MaksIT.PodmanClientDotNet.Models.Exec;
|
||||
|
||||
|
||||
namespace MaksIT.PodmanClientDotNet {
|
||||
public partial class PodmanClient {
|
||||
public async Task<CreateContainerResponse> CreateContainerAsync(
|
||||
public async Task<CreateContainerResponse?> CreateContainerAsync(
|
||||
string name,
|
||||
string image,
|
||||
List<string> command = null,
|
||||
@ -252,7 +253,9 @@ namespace MaksIT.PodmanClientDotNet {
|
||||
|
||||
if (response.IsSuccessStatusCode) {
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||
return jsonResponse.ToObject<CreateContainerResponse>();
|
||||
return !string.IsNullOrWhiteSpace(jsonResponse)
|
||||
? jsonResponse.ToObject<CreateContainerResponse>()
|
||||
: null;
|
||||
}
|
||||
else {
|
||||
var errorContent = await response.Content.ReadAsStringAsync();
|
||||
@ -277,7 +280,6 @@ namespace MaksIT.PodmanClientDotNet {
|
||||
}
|
||||
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -288,6 +290,14 @@ namespace MaksIT.PodmanClientDotNet {
|
||||
var response = await _httpClient.PostAsync(
|
||||
$"/{_apiVersion}/libpod/containers/{containerId}/start?detachKeys={Uri.EscapeDataString(detachKeys)}", null);
|
||||
|
||||
|
||||
if (response.IsSuccessStatusCode) {
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||
}
|
||||
else {
|
||||
|
||||
}
|
||||
|
||||
switch (response.StatusCode) {
|
||||
case System.Net.HttpStatusCode.NoContent:
|
||||
_logger.LogInformation("Container started successfully.");
|
||||
@ -326,6 +336,8 @@ namespace MaksIT.PodmanClientDotNet {
|
||||
var response = await _httpClient.PostAsync($"/{_apiVersion}/libpod/containers/{containerId}/stop{queryParams}", null);
|
||||
|
||||
if (response.IsSuccessStatusCode) {
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||
|
||||
if (response.StatusCode == System.Net.HttpStatusCode.NoContent) {
|
||||
_logger.LogInformation("Container stopped successfully.");
|
||||
}
|
||||
@ -355,27 +367,15 @@ namespace MaksIT.PodmanClientDotNet {
|
||||
}
|
||||
}
|
||||
|
||||
public async Task ForceDeleteContainerAsync(string containerId, bool deleteVolumes = false, int timeout = 10) {
|
||||
public async Task<DeleteContainerResponse[]?> ForceDeleteContainerAsync(string containerId, bool deleteVolumes = false, int timeout = 10) {
|
||||
var queryParams = $"?force=true&v={deleteVolumes.ToString().ToLower()}&timeout={timeout}";
|
||||
var response = await _httpClient.DeleteAsync($"/{_apiVersion}/libpod/containers/{containerId}{queryParams}");
|
||||
|
||||
if (response.IsSuccessStatusCode) {
|
||||
if (response.StatusCode == System.Net.HttpStatusCode.NoContent) {
|
||||
_logger.LogInformation("Container force deleted successfully.");
|
||||
}
|
||||
else if (response.StatusCode == System.Net.HttpStatusCode.OK) {
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
var deleteResponses = responseContent.ToObject<DeleteContainerResponse[]>();
|
||||
|
||||
foreach (var deleteResponse in deleteResponses) {
|
||||
if (string.IsNullOrEmpty(deleteResponse.Err)) {
|
||||
_logger.LogInformation($"Container {deleteResponse.Id} deleted successfully.");
|
||||
}
|
||||
else {
|
||||
_logger.LogError($"Error deleting container {deleteResponse.Id}: {deleteResponse.Err}");
|
||||
}
|
||||
}
|
||||
}
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||
return !string.IsNullOrWhiteSpace(jsonResponse)
|
||||
? jsonResponse.ToObject<DeleteContainerResponse[]>()
|
||||
: null;
|
||||
}
|
||||
else {
|
||||
var errorContent = await response.Content.ReadAsStringAsync();
|
||||
@ -404,34 +404,23 @@ namespace MaksIT.PodmanClientDotNet {
|
||||
}
|
||||
|
||||
response.EnsureSuccessStatusCode();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task DeleteContainerAsync(string containerId, bool depend = false, bool ignore = false, int timeout = 10) {
|
||||
public async Task<DeleteContainerResponse[]?> DeleteContainerAsync(string containerId, bool depend = false, bool ignore = false, int timeout = 10) {
|
||||
var queryParams = $"?depend={depend.ToString().ToLower()}&ignore={ignore.ToString().ToLower()}&timeout={timeout}";
|
||||
var response = await _httpClient.DeleteAsync($"/libpod/containers/{containerId}{queryParams}");
|
||||
var response = await _httpClient.DeleteAsync($"/{_apiVersion}/containers/{containerId}{queryParams}");
|
||||
|
||||
if (response.IsSuccessStatusCode) {
|
||||
if (response.StatusCode == System.Net.HttpStatusCode.NoContent) {
|
||||
_logger.LogInformation("Container deleted successfully.");
|
||||
}
|
||||
else if (response.StatusCode == System.Net.HttpStatusCode.OK) {
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
var deleteResponses = JsonSerializer.Deserialize<DeleteContainerResponse[]>(responseContent);
|
||||
|
||||
foreach (var deleteResponse in deleteResponses) {
|
||||
if (string.IsNullOrEmpty(deleteResponse.Err)) {
|
||||
_logger.LogInformation($"Container {deleteResponse.Id} deleted successfully.");
|
||||
}
|
||||
else {
|
||||
_logger.LogInformation($"Error deleting container {deleteResponse.Id}: {deleteResponse.Err}");
|
||||
}
|
||||
}
|
||||
}
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||
return !string.IsNullOrWhiteSpace(jsonResponse)
|
||||
? jsonResponse.ToObject<DeleteContainerResponse []>()
|
||||
: null;
|
||||
}
|
||||
else {
|
||||
var errorContent = await response.Content.ReadAsStringAsync();
|
||||
var errorDetails = JsonSerializer.Deserialize<ErrorResponse>(errorContent);
|
||||
var errorDetails = errorContent.ToObject<ErrorResponse>();
|
||||
|
||||
switch (response.StatusCode) {
|
||||
case System.Net.HttpStatusCode.BadRequest:
|
||||
@ -455,7 +444,8 @@ namespace MaksIT.PodmanClientDotNet {
|
||||
break;
|
||||
}
|
||||
|
||||
response.EnsureSuccessStatusCode(); // Throws an exception if the response indicates an error
|
||||
response.EnsureSuccessStatusCode();
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@ -469,7 +459,8 @@ namespace MaksIT.PodmanClientDotNet {
|
||||
var response = await _httpClient.PutAsync($"/{_apiVersion}/libpod/containers/{containerId}/archive{queryParams}", content);
|
||||
|
||||
if (response.IsSuccessStatusCode) {
|
||||
_logger.LogInformation("Files copied successfully to the container.");
|
||||
var stringResponse = await response.Content.ReadAsStringAsync();
|
||||
_logger.LogInformation($"Files copied successfully to the container.\n\n{stringResponse}".Trim());
|
||||
}
|
||||
else {
|
||||
var errorContent = await response.Content.ReadAsStringAsync();
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
<!-- NuGet package metadata -->
|
||||
<PackageId>PodmanClient.DotNet</PackageId>
|
||||
<Version>1.0.3</Version>
|
||||
<Version>1.0.4</Version>
|
||||
<Authors>Maksym Sadovnychyy</Authors>
|
||||
<Company>MAKS-IT</Company>
|
||||
<Product>PodmanClient.DotNet</Product>
|
||||
|
||||
@ -10,7 +10,7 @@ using MaksIT.PodmanClientDotNet.Extensions;
|
||||
namespace MaksIT.PodmanClientDotNet {
|
||||
public partial class PodmanClient {
|
||||
|
||||
public async Task<CreateExecResponse> CreateExecAsync(
|
||||
public async Task<CreateExecResponse?> CreateExecAsync(
|
||||
string containerName,
|
||||
string[] cmd,
|
||||
bool attachStderr = true,
|
||||
@ -49,7 +49,9 @@ namespace MaksIT.PodmanClientDotNet {
|
||||
|
||||
if (response.IsSuccessStatusCode) {
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||
return jsonResponse.ToObject<CreateExecResponse>();
|
||||
return !string.IsNullOrWhiteSpace(jsonResponse)
|
||||
? jsonResponse.ToObject<CreateExecResponse>()
|
||||
: null;
|
||||
}
|
||||
else {
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||
@ -103,8 +105,7 @@ namespace MaksIT.PodmanClientDotNet {
|
||||
|
||||
if (response.IsSuccessStatusCode) {
|
||||
var stringResponse = await response.Content.ReadAsStringAsync();
|
||||
_logger.LogInformation(stringResponse);
|
||||
|
||||
_logger.LogInformation($"Command executed successfully.\n\n{stringResponse}".Trim());
|
||||
}
|
||||
else {
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||
@ -137,7 +138,9 @@ namespace MaksIT.PodmanClientDotNet {
|
||||
|
||||
if (response.IsSuccessStatusCode) {
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||
return jsonResponse.ToObject<InspectExecResponse>();
|
||||
return !string.IsNullOrWhiteSpace(jsonResponse)
|
||||
? jsonResponse.ToObject<InspectExecResponse>()
|
||||
: null;
|
||||
}
|
||||
else {
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||
|
||||
49
src/Release-NuGetPackage.sh
Normal file
49
src/Release-NuGetPackage.sh
Normal file
@ -0,0 +1,49 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Retrieve the API key from the environment variable
|
||||
apiKey=$NUGET_MAKS_IT
|
||||
if [ -z "$apiKey" ]; then
|
||||
echo "Error: API key not found in environment variable NUGET_MAKS_IT."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# NuGet source
|
||||
nugetSource="https://api.nuget.org/v3/index.json"
|
||||
|
||||
# Define paths
|
||||
scriptDir=$(dirname "$0")
|
||||
solutionDir=$(realpath "$scriptDir")
|
||||
projectDir="$solutionDir/PodmanClient"
|
||||
outputDir="$projectDir/bin/Release"
|
||||
|
||||
# Clean previous builds
|
||||
echo "Cleaning previous builds..."
|
||||
dotnet clean "$projectDir" -c Release
|
||||
|
||||
# Build the project
|
||||
echo "Building the project..."
|
||||
dotnet build "$projectDir" -c Release
|
||||
|
||||
# Pack the NuGet package
|
||||
echo "Packing the project..."
|
||||
dotnet pack "$projectDir" -c Release --no-build
|
||||
|
||||
# Look for the .nupkg file
|
||||
packageFile=$(find "$outputDir" -name "*.nupkg" -print0 | xargs -0 ls -t | head -n 1)
|
||||
|
||||
if [ -n "$packageFile" ]; then
|
||||
echo "Package created successfully: $packageFile"
|
||||
|
||||
# Push the package to NuGet
|
||||
echo "Pushing the package to NuGet..."
|
||||
dotnet nuget push "$packageFile" -k "$apiKey" -s "$nugetSource" --skip-duplicate
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Package pushed successfully."
|
||||
else
|
||||
echo "Failed to push the package."
|
||||
fi
|
||||
else
|
||||
echo "Package creation failed. No .nupkg file found."
|
||||
exit 1
|
||||
fi
|
||||
Loading…
Reference in New Issue
Block a user