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
50 changes: 38 additions & 12 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
name: CI

defaults:
run:
shell: bash

on:
pull_request:
paths:
Expand Down Expand Up @@ -47,6 +51,14 @@ jobs:
kind: rust
task: test
timeout-minutes: 15
- platform: windows-latest
kind: js
task: test:unit
timeout-minutes: 15
- platform: windows-latest
kind: rust
task: test
timeout-minutes: 30

name: ${{ matrix.kind }} / ${{ matrix.task }} / ${{ matrix.platform }}
runs-on: ${{ matrix.platform }}
Expand Down Expand Up @@ -125,7 +137,7 @@ jobs:
if: matrix.task == 'test:integration' || matrix.kind == 'rust'
uses: actions/cache/restore@v4
with:
path: .ci-bin/jj
path: .ci-bin
key: jj-${{ runner.os }}-${{ runner.arch }}-${{ steps.jj.outputs.tag }}

- name: Install jj CLI
Expand All @@ -142,21 +154,35 @@ jobs:
Linux-X64) target=x86_64-unknown-linux-musl ;;
macOS-ARM64) target=aarch64-apple-darwin ;;
macOS-X64) target=x86_64-apple-darwin ;;
Windows-X64) target=x86_64-pc-windows-msvc ;;
*)
echo "unsupported runner: ${{ runner.os }}-${{ runner.arch }}"
exit 1
;;
esac
asset="jj-${JJ_TAG}-${target}.tar.gz"
tmp=$(mktemp -d)
curl -fsSL \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-L "https://github.com/jj-vcs/jj/releases/download/${JJ_TAG}/${asset}" \
| tar -xz -C "$tmp"
# tarball may nest the binary; find it
jj_bin=$(find "$tmp" -type f -name jj | head -n 1)
test -n "$jj_bin"
install -m 755 "$jj_bin" .ci-bin/jj
if [ "${{ runner.os }}" = "Windows" ]; then
asset="jj-${JJ_TAG}-${target}.zip"
tmp=$(mktemp -d)
curl -fsSL \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-L "https://github.com/jj-vcs/jj/releases/download/${JJ_TAG}/${asset}" \
-o "$tmp/jj.zip"
unzip -q "$tmp/jj.zip" -d "$tmp"
jj_bin=$(find "$tmp" -type f -name jj.exe | head -n 1)
test -n "$jj_bin"
install -m 755 "$jj_bin" .ci-bin/jj.exe
else
asset="jj-${JJ_TAG}-${target}.tar.gz"
tmp=$(mktemp -d)
curl -fsSL \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-L "https://github.com/jj-vcs/jj/releases/download/${JJ_TAG}/${asset}" \
| tar -xz -C "$tmp"
# tarball may nest the binary; find it
jj_bin=$(find "$tmp" -type f -name jj | head -n 1)
test -n "$jj_bin"
install -m 755 "$jj_bin" .ci-bin/jj
fi

- name: Save jj CLI cache
if: >
Expand All @@ -165,7 +191,7 @@ jobs:
continue-on-error: true
uses: actions/cache/save@v4
with:
path: .ci-bin/jj
path: .ci-bin
key: ${{ steps.jj-cache.outputs.cache-primary-key }}

- name: Add jj to PATH
Expand Down
25 changes: 20 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
name: Release

defaults:
run:
shell: bash

on:
workflow_dispatch:

Expand Down Expand Up @@ -59,15 +63,20 @@ jobs:
matrix:
include:
- platform: "macos-latest" # for Arm based macs (M1 and above).
target: "aarch64-apple-darwin"
args: "--target aarch64-apple-darwin"
- platform: "macos-latest" # for Intel based macs.
target: "x86_64-apple-darwin"
args: "--target x86_64-apple-darwin"
# - platform: "macos-latest"
# target: "universal-apple-darwin"
# args: "--target universal-apple-darwin"
# - platform: 'ubuntu-22.04'
# args: ''
# - platform: 'windows-latest'
# args: ''
- platform: "ubuntu-22.04"
target: "x86_64-unknown-linux-gnu"
args: "--target x86_64-unknown-linux-gnu"
- platform: "windows-latest"
target: "x86_64-pc-windows-msvc"
args: "--target x86_64-pc-windows-msvc"
runs-on: ${{ matrix.platform }}
environment: prod
steps:
Expand All @@ -82,7 +91,13 @@ jobs:
- name: install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
targets: ${{ matrix.target }}

- name: install dependencies (ubuntu only)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf

- uses: Swatinem/rust-cache@v2
with:
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"test:run": "npm run test:unit && npm run test:integration",
"test:ui": "vitest --ui",
"build:napi": "cargo build --manifest-path src-tauri/Cargo.toml --lib --features tauri-test",
"test:unit": "DEBUG_PRINT_LIMIT=10 vitest run --config vitest.unit.config.ts --silent=passed-only",
"test:unit": "vitest run --config vitest.unit.config.ts --silent=passed-only",
"test:integration:run": "DEBUG_PRINT_LIMIT=10 vitest run --config vitest.integration.config.ts --maxWorkers=1 --fileParallelism=false --silent=passed-only",
"test:integration": "npm run build:napi --silent && npm run test:integration:run",
"test": "npm run test:unit && npm run test:integration",
Expand Down
3 changes: 3 additions & 0 deletions vitest.unit.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,8 @@ export default defineConfig({
globals: true,
fileParallelism: true,
testTimeout: 15000,
env: {
DEBUG_PRINT_LIMIT: "10",
},
},
});
11 changes: 9 additions & 2 deletions web/docs/getting-started/installation.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,14 @@ sidebar_position: 1

_How to install and set up Treq on your machine._

Download the latest version for macOS from the GitHub Releases page.
Download the latest version for your platform from the GitHub Releases page.

| Platform | Release target |
|---|---|
| macOS on Apple silicon | `aarch64-apple-darwin` |
| macOS on Intel | `x86_64-apple-darwin` |
| Windows | `x86_64-pc-windows-msvc` |
| Linux | `x86_64-unknown-linux-gnu` |

[View Releases](https://github.com/Ziinc/treq/releases)

Expand All @@ -26,7 +33,7 @@ Click **Select Repository** or the folder icon, and navigate to a Git repository

A [workspace](/docs/concepts/workspaces) is where each piece of parallel work lives.

1. Click **New Workspace** (or press `Cmd+N`) to open the creation dialog.
1. Click **New Workspace**. You can also press `Cmd+N` on macOS or `Ctrl+N` on Windows and Linux.
2. Fill in a plan title describing what you're working on.
3. Adjust the branch name if needed.
4. Click **Create Workspace** to save.
Expand Down
2 changes: 1 addition & 1 deletion web/docs/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ slug: /

# Treq

_Technical overview of Treq's workspace model, runtime behavior, and macOS-specific assumptions._
_Technical overview of Treq's workspace model and runtime behavior on macOS, Windows, and Linux._

Treq is a local review and workspace manager for Git repositories. You open a repo, create workspaces for parallel work, and push through your normal Git remotes. You never need to know [Jujutsu](https://jj-vcs.github.io/jj/latest/) to use it.

Expand Down
2 changes: 1 addition & 1 deletion web/docs/reference/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ Do not fold unrelated tidying into feature work. Treq has several layers with di

Docs follow the style guide in `web/STYLE_GUIDE.md`. Write plain technical prose, skip the marketing language, and use tables for dense reference data.

Public docs describe macOS behavior unless another platform is spelled out. Leave out implementation details a reader cannot act on.
Public docs describe macOS, Windows, and Linux behavior. Call out platform-specific behavior when it differs. Leave out implementation details a reader cannot act on.

## Learn More

Expand Down
15 changes: 15 additions & 0 deletions web/e2e/navigation.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,13 @@ test.describe('Homepage Features layout', () => {
});

test.describe('Navbar navigation', () => {
test('shows desktop platform availability', async ({ page }) => {
await page.goto('/');
await expect(page.getByLabel('macOS')).toBeVisible();
await expect(page.getByLabel('Windows')).toBeVisible();
await expect(page.getByLabel('Linux')).toBeVisible();
});

test('Learn link navigates to learn section', async ({ page }) => {
await page.goto('/');
await clickNavDropdownItem(page, 'Discover', 'Learn');
Expand All @@ -71,6 +78,14 @@ test.describe('Navbar navigation', () => {
await expect(page.getByRole('heading', { name: 'Installation and Quickstart', level: 1 })).toBeVisible();
});

test('installation lists each release target', async ({ page }) => {
await page.goto('/');
await nav(page).getByRole('link', { name: 'Get Started' }).click();
await expect(page.getByRole('heading', { name: 'Installation and Quickstart', level: 1 })).toBeVisible();
await expect(page.getByRole('cell', { name: 'x86_64-pc-windows-msvc' })).toBeVisible();
await expect(page.getByRole('cell', { name: 'x86_64-unknown-linux-gnu' })).toBeVisible();
});

test('logo navigates home from a docs page', async ({ page }) => {
await page.goto('/');
await clickNavDropdownItem(page, 'Discover', 'Learn');
Expand Down
8 changes: 7 additions & 1 deletion web/src/pages/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,12 @@ function HomepageHeader() {
<path d="M11.182.008C11.148-.03 9.923.023 8.857 1.18c-1.066 1.156-.902 2.482-.878 2.516s1.52.087 2.475-1.258.762-2.391.728-2.43m3.314 11.733c-.048-.096-2.325-1.234-2.113-3.422s1.675-2.789 1.698-2.854-.597-.79-1.254-1.157a3.7 3.7 0 0 0-1.563-.434c-.108-.003-.483-.095-1.254.116-.508.139-1.653.589-1.968.607-.316.018-1.256-.522-2.267-.665-.647-.125-1.333.131-1.824.328-.49.196-1.422.754-2.074 2.237-.652 1.482-.311 3.83-.067 4.56s.625 1.924 1.273 2.796c.576.984 1.34 1.667 1.659 1.899s1.219.386 1.843.067c.502-.308 1.408-.485 1.766-.472.357.013 1.061.154 1.782.539.571.197 1.111.115 1.652-.105.541-.221 1.324-1.059 2.238-2.758q.52-1.185.473-1.282"/>
<path d="M11.182.008C11.148-.03 9.923.023 8.857 1.18c-1.066 1.156-.902 2.482-.878 2.516s1.52.087 2.475-1.258.762-2.391.728-2.43"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" className={styles.platformIcon} viewBox="0 0 16 16" aria-label="Windows">
<path d="M.5 2.2 6.8 1.3v6.1H.5V2.2Zm7.2-1L15.5.1v7.3H7.7V1.2ZM.5 8.3h6.3v6.2l-6.3-.9V8.3Zm7.2 0h7.8v7.4l-7.8-1.1V8.3Z"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" className={styles.platformIcon} viewBox="0 0 16 16" aria-label="Linux">
<path d="M8.2.2c-1.8 0-2.8 1.6-2.8 3.7 0 .8.1 1.4-.2 2.1-.3.6-1 1.1-1.5 1.8-.6.8-1 1.8-1.2 2.8-.2 1.1.2 1.8.8 1.9.5.1 1-.3 1.4-.8.7 1 1.8 1.6 3.3 1.6 1.4 0 2.6-.6 3.3-1.6.4.5.9.9 1.4.8.6-.1 1-1 .7-2.1-.2-1-.6-1.9-1.2-2.7-.5-.7-1.2-1.2-1.5-1.8-.3-.7-.1-1.3-.1-2C10.7 1.7 9.8.2 8.2.2ZM6.9 3.4c.3 0 .5.3.5.7s-.2.7-.5.7-.5-.3-.5-.7.2-.7.5-.7Zm2.3 0c.3 0 .5.3.5.7s-.2.7-.5.7-.5-.3-.5-.7.2-.7.5-.7ZM8 4.7c.5 0 .9.2.9.5s-.4.5-.9.5-.9-.2-.9-.5.4-.5.9-.5Zm-2.9 5.8c.6.4 1.6.7 2.9.7 1.2 0 2.2-.3 2.9-.7-.4 1.1-1.4 1.8-2.9 1.8s-2.5-.7-2.9-1.8Z"/>
</svg>
</div>
<div className={styles.heroVisual}>
<img
Expand Down Expand Up @@ -698,7 +704,7 @@ const SOFTWARE_APP_SCHEMA = {
'Stacking Agent Development Environment that isolates each agent and rebases stacked PRs when the base moves.',
url: 'https://treq.dev',
applicationCategory: 'DeveloperApplication',
operatingSystem: 'macOS',
operatingSystem: ['macOS', 'Windows', 'Linux'],
offers: {
'@type': 'Offer',
price: '0',
Expand Down
4 changes: 2 additions & 2 deletions web/static/llms.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# Treq

> Treq is an open-source macOS app for managing parallel AI development: create isolated Git workspaces per branch, run coding agents inside them, then review, commit, and merge changes without leaving the app.
> Treq is an open-source desktop app for macOS, Windows, and Linux. Create isolated Git workspaces per branch, run coding agents inside them, then review, commit, and merge changes without leaving the app.

## Getting Started

- [Installation and Quickstart](https://treq.dev/docs/getting-started/installation.md): Download Treq for macOS, open a repository, create a workspace, launch an agent, and commit and push changes.
- [Installation and Quickstart](https://treq.dev/docs/getting-started/installation.md): Download Treq for macOS, Windows, or Linux, open a repository, create a workspace, launch an agent, and commit and push changes.

## Concepts

Expand Down
Loading