(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;
|
||||||
using MaksIT.PodmanClientDotNet.Models.Container;
|
using MaksIT.PodmanClientDotNet.Models.Container;
|
||||||
using MaksIT.PodmanClientDotNet.Extensions;
|
using MaksIT.PodmanClientDotNet.Extensions;
|
||||||
|
using MaksIT.PodmanClientDotNet.Models.Exec;
|
||||||
|
|
||||||
|
|
||||||
namespace MaksIT.PodmanClientDotNet {
|
namespace MaksIT.PodmanClientDotNet {
|
||||||
public partial class PodmanClient {
|
public partial class PodmanClient {
|
||||||
public async Task<CreateContainerResponse> CreateContainerAsync(
|
public async Task<CreateContainerResponse?> CreateContainerAsync(
|
||||||
string name,
|
string name,
|
||||||
string image,
|
string image,
|
||||||
List<string> command = null,
|
List<string> command = null,
|
||||||
@ -252,7 +253,9 @@ namespace MaksIT.PodmanClientDotNet {
|
|||||||
|
|
||||||
if (response.IsSuccessStatusCode) {
|
if (response.IsSuccessStatusCode) {
|
||||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||||
return jsonResponse.ToObject<CreateContainerResponse>();
|
return !string.IsNullOrWhiteSpace(jsonResponse)
|
||||||
|
? jsonResponse.ToObject<CreateContainerResponse>()
|
||||||
|
: null;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var errorContent = await response.Content.ReadAsStringAsync();
|
var errorContent = await response.Content.ReadAsStringAsync();
|
||||||
@ -277,7 +280,6 @@ namespace MaksIT.PodmanClientDotNet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
response.EnsureSuccessStatusCode();
|
response.EnsureSuccessStatusCode();
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -288,6 +290,14 @@ namespace MaksIT.PodmanClientDotNet {
|
|||||||
var response = await _httpClient.PostAsync(
|
var response = await _httpClient.PostAsync(
|
||||||
$"/{_apiVersion}/libpod/containers/{containerId}/start?detachKeys={Uri.EscapeDataString(detachKeys)}", null);
|
$"/{_apiVersion}/libpod/containers/{containerId}/start?detachKeys={Uri.EscapeDataString(detachKeys)}", null);
|
||||||
|
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode) {
|
||||||
|
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
switch (response.StatusCode) {
|
switch (response.StatusCode) {
|
||||||
case System.Net.HttpStatusCode.NoContent:
|
case System.Net.HttpStatusCode.NoContent:
|
||||||
_logger.LogInformation("Container started successfully.");
|
_logger.LogInformation("Container started successfully.");
|
||||||
@ -326,6 +336,8 @@ namespace MaksIT.PodmanClientDotNet {
|
|||||||
var response = await _httpClient.PostAsync($"/{_apiVersion}/libpod/containers/{containerId}/stop{queryParams}", null);
|
var response = await _httpClient.PostAsync($"/{_apiVersion}/libpod/containers/{containerId}/stop{queryParams}", null);
|
||||||
|
|
||||||
if (response.IsSuccessStatusCode) {
|
if (response.IsSuccessStatusCode) {
|
||||||
|
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
if (response.StatusCode == System.Net.HttpStatusCode.NoContent) {
|
if (response.StatusCode == System.Net.HttpStatusCode.NoContent) {
|
||||||
_logger.LogInformation("Container stopped successfully.");
|
_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 queryParams = $"?force=true&v={deleteVolumes.ToString().ToLower()}&timeout={timeout}";
|
||||||
var response = await _httpClient.DeleteAsync($"/{_apiVersion}/libpod/containers/{containerId}{queryParams}");
|
var response = await _httpClient.DeleteAsync($"/{_apiVersion}/libpod/containers/{containerId}{queryParams}");
|
||||||
|
|
||||||
if (response.IsSuccessStatusCode) {
|
if (response.IsSuccessStatusCode) {
|
||||||
if (response.StatusCode == System.Net.HttpStatusCode.NoContent) {
|
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||||
_logger.LogInformation("Container force deleted successfully.");
|
return !string.IsNullOrWhiteSpace(jsonResponse)
|
||||||
}
|
? jsonResponse.ToObject<DeleteContainerResponse[]>()
|
||||||
else if (response.StatusCode == System.Net.HttpStatusCode.OK) {
|
: null;
|
||||||
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}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var errorContent = await response.Content.ReadAsStringAsync();
|
var errorContent = await response.Content.ReadAsStringAsync();
|
||||||
@ -404,34 +404,23 @@ namespace MaksIT.PodmanClientDotNet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
response.EnsureSuccessStatusCode();
|
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 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.IsSuccessStatusCode) {
|
||||||
if (response.StatusCode == System.Net.HttpStatusCode.NoContent) {
|
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||||
_logger.LogInformation("Container deleted successfully.");
|
return !string.IsNullOrWhiteSpace(jsonResponse)
|
||||||
}
|
? jsonResponse.ToObject<DeleteContainerResponse []>()
|
||||||
else if (response.StatusCode == System.Net.HttpStatusCode.OK) {
|
: null;
|
||||||
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}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var errorContent = await response.Content.ReadAsStringAsync();
|
var errorContent = await response.Content.ReadAsStringAsync();
|
||||||
var errorDetails = JsonSerializer.Deserialize<ErrorResponse>(errorContent);
|
var errorDetails = errorContent.ToObject<ErrorResponse>();
|
||||||
|
|
||||||
switch (response.StatusCode) {
|
switch (response.StatusCode) {
|
||||||
case System.Net.HttpStatusCode.BadRequest:
|
case System.Net.HttpStatusCode.BadRequest:
|
||||||
@ -455,7 +444,8 @@ namespace MaksIT.PodmanClientDotNet {
|
|||||||
break;
|
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);
|
var response = await _httpClient.PutAsync($"/{_apiVersion}/libpod/containers/{containerId}/archive{queryParams}", content);
|
||||||
|
|
||||||
if (response.IsSuccessStatusCode) {
|
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 {
|
else {
|
||||||
var errorContent = await response.Content.ReadAsStringAsync();
|
var errorContent = await response.Content.ReadAsStringAsync();
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<!-- NuGet package metadata -->
|
<!-- NuGet package metadata -->
|
||||||
<PackageId>PodmanClient.DotNet</PackageId>
|
<PackageId>PodmanClient.DotNet</PackageId>
|
||||||
<Version>1.0.3</Version>
|
<Version>1.0.4</Version>
|
||||||
<Authors>Maksym Sadovnychyy</Authors>
|
<Authors>Maksym Sadovnychyy</Authors>
|
||||||
<Company>MAKS-IT</Company>
|
<Company>MAKS-IT</Company>
|
||||||
<Product>PodmanClient.DotNet</Product>
|
<Product>PodmanClient.DotNet</Product>
|
||||||
|
|||||||
@ -10,7 +10,7 @@ using MaksIT.PodmanClientDotNet.Extensions;
|
|||||||
namespace MaksIT.PodmanClientDotNet {
|
namespace MaksIT.PodmanClientDotNet {
|
||||||
public partial class PodmanClient {
|
public partial class PodmanClient {
|
||||||
|
|
||||||
public async Task<CreateExecResponse> CreateExecAsync(
|
public async Task<CreateExecResponse?> CreateExecAsync(
|
||||||
string containerName,
|
string containerName,
|
||||||
string[] cmd,
|
string[] cmd,
|
||||||
bool attachStderr = true,
|
bool attachStderr = true,
|
||||||
@ -49,7 +49,9 @@ namespace MaksIT.PodmanClientDotNet {
|
|||||||
|
|
||||||
if (response.IsSuccessStatusCode) {
|
if (response.IsSuccessStatusCode) {
|
||||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||||
return jsonResponse.ToObject<CreateExecResponse>();
|
return !string.IsNullOrWhiteSpace(jsonResponse)
|
||||||
|
? jsonResponse.ToObject<CreateExecResponse>()
|
||||||
|
: null;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||||
@ -103,8 +105,7 @@ namespace MaksIT.PodmanClientDotNet {
|
|||||||
|
|
||||||
if (response.IsSuccessStatusCode) {
|
if (response.IsSuccessStatusCode) {
|
||||||
var stringResponse = await response.Content.ReadAsStringAsync();
|
var stringResponse = await response.Content.ReadAsStringAsync();
|
||||||
_logger.LogInformation(stringResponse);
|
_logger.LogInformation($"Command executed successfully.\n\n{stringResponse}".Trim());
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||||
@ -137,7 +138,9 @@ namespace MaksIT.PodmanClientDotNet {
|
|||||||
|
|
||||||
if (response.IsSuccessStatusCode) {
|
if (response.IsSuccessStatusCode) {
|
||||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||||
return jsonResponse.ToObject<InspectExecResponse>();
|
return !string.IsNullOrWhiteSpace(jsonResponse)
|
||||||
|
? jsonResponse.ToObject<InspectExecResponse>()
|
||||||
|
: null;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
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