diff --git a/src/PodmanClient/PodmanClientContainer.cs b/src/PodmanClient/PodmanClientContainer.cs index a02b8cd..03f03ec 100644 --- a/src/PodmanClient/PodmanClientContainer.cs +++ b/src/PodmanClient/PodmanClientContainer.cs @@ -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 CreateContainerAsync( + public async Task CreateContainerAsync( string name, string image, List command = null, @@ -252,7 +253,9 @@ namespace MaksIT.PodmanClientDotNet { if (response.IsSuccessStatusCode) { var jsonResponse = await response.Content.ReadAsStringAsync(); - return jsonResponse.ToObject(); + return !string.IsNullOrWhiteSpace(jsonResponse) + ? jsonResponse.ToObject() + : 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 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(); - - 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() + : 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 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(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() + : null; } else { var errorContent = await response.Content.ReadAsStringAsync(); - var errorDetails = JsonSerializer.Deserialize(errorContent); + var errorDetails = errorContent.ToObject(); 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(); diff --git a/src/PodmanClient/PodmanClientDotNet.csproj b/src/PodmanClient/PodmanClientDotNet.csproj index d2aef2f..1209ede 100644 --- a/src/PodmanClient/PodmanClientDotNet.csproj +++ b/src/PodmanClient/PodmanClientDotNet.csproj @@ -8,7 +8,7 @@ PodmanClient.DotNet - 1.0.3 + 1.0.4 Maksym Sadovnychyy MAKS-IT PodmanClient.DotNet diff --git a/src/PodmanClient/PodmanClientExec.cs b/src/PodmanClient/PodmanClientExec.cs index 103d563..b039265 100644 --- a/src/PodmanClient/PodmanClientExec.cs +++ b/src/PodmanClient/PodmanClientExec.cs @@ -10,7 +10,7 @@ using MaksIT.PodmanClientDotNet.Extensions; namespace MaksIT.PodmanClientDotNet { public partial class PodmanClient { - public async Task CreateExecAsync( + public async Task 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(); + return !string.IsNullOrWhiteSpace(jsonResponse) + ? jsonResponse.ToObject() + : 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(); + return !string.IsNullOrWhiteSpace(jsonResponse) + ? jsonResponse.ToObject() + : null; } else { var jsonResponse = await response.Content.ReadAsStringAsync(); diff --git a/src/Release-NuGetPackage.sh b/src/Release-NuGetPackage.sh new file mode 100644 index 0000000..abb8af4 --- /dev/null +++ b/src/Release-NuGetPackage.sh @@ -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