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
82 changes: 82 additions & 0 deletions .github/BETA_RELEASES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# Beta & Alpha Release Channels

OpenConduit supports three release channels for distributing updates: **stable**, **beta**, and **alpha**.

## Overview

- **Stable** (`stable`): Official releases, e.g. `v1.2.1` — for production users
- **Beta** (`beta`): Pre-release testing versions, e.g. `v1.3.0-beta.1` — for early adopters
- **Alpha** (`alpha`): Early testing versions, e.g. `v1.3.0-alpha.1` — for developers

## How It Works

### Cloudflare Worker

The update check endpoint at `https://workers.openconduit.ai/latest` accepts a `channel` query parameter:

```
GET /latest?channel=stable|beta|alpha
```

**Behavior:**
- **`?channel=stable`** (default): Returns the latest GitHub release (non-prerelease)
- **`?channel=beta`**: Scans recent releases for a prerelease tagged with "beta" (e.g., `v1.3.0-beta`)
- **`?channel=alpha`**: Scans recent releases for a prerelease tagged with "alpha" or "beta"

### Tagging Releases

When you create a GitHub release:

1. **Stable release**: Tag as `v1.2.1` (no prerelease suffix)
- Check the "Set as a pre-release" checkbox: **OFF**
- Stable users will receive this update

2. **Beta release**: Tag as `v1.3.0-beta` or `v1.3.0-beta.1`
- Check the "Set as a pre-release" checkbox: **ON**
- Beta users will receive this update
- Stable users will NOT receive it

3. **Alpha release**: Tag as `v1.3.0-alpha` or `v1.3.0-alpha.1`
- Check the "Set as a pre-release" checkbox: **ON**
- Alpha users will receive this update
- Beta and stable users will NOT receive it (unless no beta is available, then they fall back to stable)

## Client Configuration

In `packages/desktop/src/main/ipc.ts` (or wherever your updater is):

```typescript
// Determine which channel to check
const channel = 'stable'; // or 'beta', 'alpha' depending on build variant

// Check for updates
const response = await fetch(
`https://workers.openconduit.ai/latest?channel=${channel}`
);
const { version, notes, url } = await response.json();
```

## Development Workflow

### Testing a Beta Release

1. Create a GitHub release tagged `v1.3.0-beta.1`
2. Mark it as pre-release
3. Beta users (with `channel=beta` in their client) will see the update available
4. Test thoroughly

### Promoting Beta to Stable

1. Create a new release tagged `v1.3.0` (remove the `-beta` suffix)
2. Uncheck "Set as pre-release"
3. All users (stable, beta, alpha) will receive the update

### Fallback Behavior

If no matching pre-release is found, the worker falls back to the latest stable release. This ensures users always get an update, even if their channel doesn't have recent releases.

## Implementation Notes

- The Cloudflare Worker scans the **20 most recent releases** when looking for beta/alpha builds
- Release notes and download URL are included in the response
- If a user is on a channel with no available releases, they fall back to stable
2 changes: 1 addition & 1 deletion packages/desktop/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "openconduit",
"productName": "OpenConduit",
"version": "1.2.1",
"version": "1.2.2",
"description": "Cross-platform desktop AI chat client — OpenAI, Anthropic, LM Studio, and MCP tool servers",
"main": ".vite/build/main.js",
"private": true,
Expand Down
2 changes: 1 addition & 1 deletion packages/desktop/src/main/mcp/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export async function connectMcpServer(config: McpServerConfig): Promise<void> {
transport = new StdioClientTransport({
command: config.command,
args: config.args ?? [],
env: config.env,
env: { ...process.env, ...config.env },
});
}

Expand Down
Loading