feat: add release asset upload and cleanup to SyncService
This commit is contained in:
1 parent
7b43e47a64
commit
143d813949
4 files changed
+50
-7
No files matched your search
@@ -9,7 +9,7 @@ namespace ForgejoReleaseSync.Services;
|
||||
|
||||
public class ForgejoService(HttpClient httpClient, AppConfig config, ILogger<ForgejoService> logger)
|
||||
{
|
||||
public async Task CreateReleaseAsync(string owner, string repo, string body, string name, string tagName, CancellationToken token = default)
|
||||
public async Task<List<ForgejoReleaseResponseDto>> CreateReleaseAsync(string owner, string repo, string body, string name, string tagName, CancellationToken token = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -26,6 +26,14 @@ public class ForgejoService(HttpClient httpClient, AppConfig config, ILogger<For
|
||||
|
||||
using var response = await httpClient.SendAsync(request, token);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
var responseStream = await response.Content.ReadAsStreamAsync(token);
|
||||
var releases = await JsonSerializer.DeserializeAsync(responseStream,
|
||||
AppJsonSerializerContext.Default.ListForgejoReleaseResponseDto, token);
|
||||
|
||||
return releases ?? [];
|
||||
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -35,7 +43,7 @@ public class ForgejoService(HttpClient httpClient, AppConfig config, ILogger<For
|
||||
|
||||
}
|
||||
|
||||
public async Task<List<ForgejoReleaseResponseDto>> FetchRepoReleasesAsync(string owner, string repo)
|
||||
public async Task<List<ForgejoReleaseResponseDto>> FetchRepoReleasesAsync(string owner, string repo, CancellationToken token = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -44,9 +52,9 @@ public class ForgejoService(HttpClient httpClient, AppConfig config, ILogger<For
|
||||
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
var responseStream = await response.Content.ReadAsStreamAsync();
|
||||
var responseStream = await response.Content.ReadAsStreamAsync(token);
|
||||
var releases = await JsonSerializer.DeserializeAsync(responseStream,
|
||||
AppJsonSerializerContext.Default.ListForgejoReleaseResponseDto);
|
||||
AppJsonSerializerContext.Default.ListForgejoReleaseResponseDto, token);
|
||||
|
||||
return releases ?? [];
|
||||
}
|
||||
@@ -56,4 +64,25 @@ public class ForgejoService(HttpClient httpClient, AppConfig config, ILogger<For
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task UploadReleaseAssetAsync(string owner, string repo, long releaseId, string filePath, CancellationToken token = default)
|
||||
{
|
||||
using var request = new HttpRequestMessage(HttpMethod.Post, new Uri($"{config.ForgejoInstacne}/api/v1/repos/{owner}/{repo}/releases/{releaseId}/assets"));
|
||||
|
||||
request.Headers.Authorization =
|
||||
new AuthenticationHeaderValue("token", config.ForgejoToken);
|
||||
|
||||
await using var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true);
|
||||
using var fileContent = new StreamContent(fileStream);
|
||||
fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
|
||||
|
||||
using var formData = new MultipartFormDataContent();
|
||||
formData.Add(fileContent, "attachment", Path.GetFileName(filePath));
|
||||
|
||||
request.Content = formData;
|
||||
|
||||
using var response = await httpClient.SendAsync(request,HttpCompletionOption.ResponseHeadersRead, token);
|
||||
|
||||
response.EnsureSuccessStatusCode();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user