Soenneker.GitHub.FileStore
11.0.815
Prefix Reserved
dotnet add package Soenneker.GitHub.FileStore --version 11.0.815
NuGet\Install-Package Soenneker.GitHub.FileStore -Version 11.0.815
<PackageReference Include="Soenneker.GitHub.FileStore" Version="11.0.815" />
<PackageVersion Include="Soenneker.GitHub.FileStore" Version="11.0.815" />
<PackageReference Include="Soenneker.GitHub.FileStore" />
paket add Soenneker.GitHub.FileStore --version 11.0.815
#r "nuget: Soenneker.GitHub.FileStore, 11.0.815"
#:package Soenneker.GitHub.FileStore@11.0.815
#addin nuget:?package=Soenneker.GitHub.FileStore&version=11.0.815
#tool nuget:?package=Soenneker.GitHub.FileStore&version=11.0.815
Soenneker.GitHub.FileStore
Reads, writes, copies, moves, lists, and deletes repository files through GitHub's Contents API.
Installation
dotnet add package Soenneker.GitHub.FileStore
Configure and register
{
"GH": {
"Token": "your-github-token"
}
}
using Soenneker.GitHub.FileStore.Registrars;
builder.Services.AddGitHubFileStoreAsSingleton();
Use a token with Contents read permission for Get, Read, List, and Exists. Writes and deletes require Contents write permission. Keep the token in secret storage.
Read and write files
string content = await store.Read(
"example-org", "example-repository", "README.md", cancellationToken);
FileCommit? commit = await store.Write(
owner: "example-org",
repo: "example-repository",
path: "docs/example.txt",
content: "Hello from the Contents API",
message: "Add example document",
branch: "main",
cancellationToken: cancellationToken);
Write and WriteBytes create a file when it does not exist and use its current SHA when updating it. The lookup is performed on the requested branch, so non-default branch updates do not reuse a SHA from main. Supplying both authorName and authorEmail sets the commit author; supplying only one leaves the author unset.
Copy, move, and directory operations
await store.Copy(
"example-org", "example-repository",
"docs/source.txt", "archive/source.txt",
branch: "release",
cancellationToken: cancellationToken);
IReadOnlyList<FileCommit> deleted = await store.DeleteDirectory(
"example-org", "example-repository", "old-docs",
branch: "release",
cancellationToken: cancellationToken);
Copy and move read from the same branch they write to. A move is two commits—copy, then delete—so a failed delete can leave both paths and throws for the caller to handle. WriteDirectory and recursive deletion process files as separate commits and continue past individual file failures; their returned lists contain only successful commits.
Delete, DeleteDirectory, and DeleteRepositoryContents are destructive. They retrieve branch-specific SHAs immediately before deletion, but concurrent changes can still cause GitHub to reject a stale SHA.
Exists() returns false only for a not-found response. Authentication, permission, rate-limit, and transport failures propagate instead of being reported as a missing file.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net11.0 is compatible. |
-
net11.0
- Soenneker.Extensions.Arrays.Bytes (>= 11.0.81)
- Soenneker.GitHub.ClientUtil (>= 11.0.786)
- Soenneker.Utils.File (>= 11.0.2342)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 11.0.815 | 0 | 11/15/2026 |
| 11.0.814 | 52 | 11/14/2026 |
| 11.0.813 | 88 | 11/13/2026 |
| 11.0.812 | 110 | 11/12/2026 |
| 11.0.811 | 83 | 11/11/2026 |
| 11.0.810 | 84 | 11/11/2026 |
| 11.0.809 | 85 | 11/11/2026 |
| 11.0.808 | 85 | 11/11/2026 |
| 11.0.807 | 84 | 11/11/2026 |
| 11.0.806 | 82 | 11/11/2026 |
| 11.0.805 | 78 | 11/11/2026 |
| 11.0.804 | 80 | 11/11/2026 |
| 11.0.803 | 80 | 11/11/2026 |
| 11.0.802 | 76 | 11/11/2026 |
| 11.0.800 | 83 | 11/11/2026 |
| 11.0.798 | 89 | 11/11/2026 |
| 11.0.797 | 84 | 11/10/2026 |
| 11.0.796 | 109 | 11/9/2026 |
| 11.0.795 | 105 | 11/8/2026 |
| 11.0.794 | 88 | 11/7/2026 |
Update dependency Soenneker.GitHub.ClientUtil to 11.0.786 (#1310)