Novolis.IO.GitHub
2026.1.1.54
dotnet add package Novolis.IO.GitHub --version 2026.1.1.54
NuGet\Install-Package Novolis.IO.GitHub -Version 2026.1.1.54
<PackageReference Include="Novolis.IO.GitHub" Version="2026.1.1.54" />
<PackageVersion Include="Novolis.IO.GitHub" Version="2026.1.1.54" />
<PackageReference Include="Novolis.IO.GitHub" />
paket add Novolis.IO.GitHub --version 2026.1.1.54
#r "nuget: Novolis.IO.GitHub, 2026.1.1.54"
#:package Novolis.IO.GitHub@2026.1.1.54
#addin nuget:?package=Novolis.IO.GitHub&version=2026.1.1.54
#tool nuget:?package=Novolis.IO.GitHub&version=2026.1.1.54
Novolis.IO.GitHub
GitHub OAuth device flow and a sparse content/ repository mirror (Pull + Save/Commit/Push) via Octokit Git Data API. Aimed at Books Mobile / Studio hosts that should not require a full local git clone on every device.
Install
dotnet add package Novolis.IO.GitHub
Depends on Octokit. Needs a GitHub OAuth App client id with device flow enabled and appropriate scopes (typically repo for private content).
Quick start — device auth
using Novolis.IO.GitHub;
var auth = new GitHubDeviceAuth();
var device = await auth.RequestDeviceCodeAsync(clientId, scope: "repo");
// Show device.UserCode; prefer opening device.VerificationUriComplete
var token = await auth.WaitForAccessTokenAsync(clientId, device);
Manual poll loop: PollForTokenAsync returns DeviceTokenResult (Success, IsPending, errors).
Quick start — content mirror
using Novolis.IO.GitHub;
using Octokit;
var client = SparseRepoMirror.CreateClient(accessToken);
var mirror = new SparseRepoMirror(client, new SparseRepoMirrorOptions
{
Owner = "frankhaugen",
Name = "books",
WorkspaceRoot = workspaceDir,
ContentPrefix = "content/", // default
});
var pull = await mirror.PullAsync();
mirror.NoteDirty("content/series/.../chapters/001.md");
var push = await mirror.SaveCommitPushAsync(); // message: BooksMobile yyyy-MM-dd HH:mm
Mirror state is kept under {WorkspaceRoot}/.novolis/mobile-mirror.json.
API
| Type | Role |
|---|---|
GitHubDeviceAuth |
Device code + token wait/poll |
DeviceCodeResponse |
User code, verification URIs, interval, expiry |
DeviceTokenResult |
Access token or pending/error |
GitHubRepository |
Stable raw-content and latest-release URLs |
SparseRepoMirror |
Sparse pull / dirty tracking / commit+push |
SparseRepoMirrorOptions |
Owner, name, workspace root, content prefix |
MirrorPullResult / MirrorPushResult |
Ok, message, commit SHA, file count |
Dogfooding / apps
Used by Books Mobile deploy and Studio flows. Local IO smoke does not cover GitHub (needs client id + network).
Related
| Package | Role |
|---|---|
Novolis.IO.Git |
Local git process helper for desktop Studio |
Novolis.IO.Mobile.Android |
Install / debug Android builds that use this mirror |
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Octokit (>= 14.0.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Novolis.IO.GitHub:
| Package | Downloads |
|---|---|
|
Novolis.Manuscript.IO
Manuscript tree surgery, working-copy helpers, and git/GitHub façades. |
|
|
Novolis.Registry.GitHub
GitHub-hosted registry source for Novolis package and application catalogs. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2026.1.1.54 | 28 | 10/4/2026 |
| 2026.1.1.53 | 38 | 10/4/2026 |
| 2026.1.1.52 | 37 | 10/4/2026 |
| 2026.1.1.51 | 39 | 10/3/2026 |
| 2026.1.1.50 | 40 | 10/3/2026 |
| 2026.1.1.49 | 42 | 10/2/2026 |
| 2026.1.1.48 | 43 | 10/2/2026 |
| 2026.1.1.47 | 44 | 10/2/2026 |
| 2026.1.1.46 | 38 | 10/2/2026 |
| 2026.1.1.45 | 42 | 10/2/2026 |
| 2026.1.1.36 | 43 | 10/2/2026 |
| 2026.1.1.35 | 41 | 10/1/2026 |
| 2026.1.1.34 | 51 | 9/30/2026 |