Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@ updates:
directory: /
schedule:
interval: weekly
ignore:
# Types must match the Electron-bundled Node runtime (Electron 44 = Node 24)
- dependency-name: "@types/node"
update-types: ["version-update:semver-major"]
# electron-vite 5 supports vite <=7; revisit when electron-vite 6 is stable
- dependency-name: "vite"
update-types: ["version-update:semver-major"]
- dependency-name: "@vitejs/plugin-react"
update-types: ["version-update:semver-major"]
- package-ecosystem: github-actions
directory: /
schedule:
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

All notable changes to GitGood. Versions follow [semver](https://semver.org); release notes for each version are also on the [Releases page](https://github.com/erwin-wee/gitgood/releases).

## 0.4.2 — 2026-10-19

- Fixed tailnet access refusing every request when the background server starts at boot before `tailscaled` is up: the allowed Tailscale login is now looked up on demand (retried at most every 30 seconds until it succeeds) instead of once at startup.
- Dev dependencies: vitest 5.0.2.

## 0.4.1 — 2026-10-02

- Fixed macOS release packaging when signing secrets are not configured: an empty `CSC_LINK` is now removed before running electron-builder.
Expand Down
79 changes: 32 additions & 47 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "gitgood",
"version": "0.4.1",
"version": "0.4.2",
"description": "A GitHub Desktop-style Git client for Windows, macOS and Linux that drives the git and gh CLIs",
"main": "./out/main/index.js",
"author": "Erwin Wee",
Expand Down Expand Up @@ -54,6 +54,6 @@
"eslint-plugin-react-hooks": "^7.1.1",
"typescript": "^5.9.0",
"vite": "^7.3.0",
"vitest": "^5.0.1"
"vitest": "^5.0.2"
}
}
19 changes: 18 additions & 1 deletion src/server/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,36 @@ function tailnetOwner(): string | null {
}
}

// Resolved lazily: at boot tailscaled may not be up yet, and a startup-time null would refuse every tailnet request until restart.
// Only a successful lookup is cached; failures are retried at most every 30s (the lookup is a synchronous exec).
function lazyTailnetOwner(): () => string | null {
let owner: string | null = null;
let lastTry = 0;
return () => {
if (owner === null && Date.now() - lastTry > 30_000) {
lastTry = Date.now();
owner = tailnetOwner();
}
return owner;
};
}

export function loadServerConfig(): ServerConfig {
const userData = process.env.GITGOOD_USER_DATA || join(homedir(), '.config', 'gitgood-server');
const tokenFile = join(userData, 'server-token');
const existedBefore = existsSync(tokenFile);
const token = loadOrCreateToken(tokenFile, userData);
const owner = lazyTailnetOwner();
return {
host: '127.0.0.1',
port: Number(process.env.GITGOOD_SERVER_PORT) || 4600,
userData,
rendererDir: process.env.GITGOOD_RENDERER_DIR || defaultRendererDir(),
token,
tokenCreated: !existedBefore,
allowedLogin: process.env.GITGOOD_ALLOWED_LOGIN || tailnetOwner(),
get allowedLogin() {
return process.env.GITGOOD_ALLOWED_LOGIN || owner();
},
// Home is browsable so the folder picker can add repos/watched folders that aren't registered yet.
extraRoots: [homedir(), ...(process.env.GITGOOD_ALLOWED_ROOTS || '').split(delimiter).filter(Boolean)],
version: process.env.GITGOOD_VERSION || (typeof __GITGOOD_VERSION__ === 'string' ? __GITGOOD_VERSION__ : '0.0.0'),
Expand Down
Loading