Skip to content

Commit 9f895a3

Browse files
committed
feat: add winget and AppImage distribution (Phase 2)
- Add winget manifest files with auto-update via wingetcreate - Add AppImage build for Linux (x64 and ARM64) - Update download page with winget install option - Add AppImage downloads to platform list - Bump version to 1.4.0
1 parent 86f39a8 commit 9f895a3

File tree

9 files changed

+198
-2
lines changed

9 files changed

+198
-2
lines changed

.github/workflows/release.yml

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,78 @@ jobs:
5050
name: ${{ matrix.artifact }}
5151
path: dist/${{ matrix.artifact }}
5252

53-
release:
53+
appimage:
5454
needs: build
5555
runs-on: ubuntu-latest
56+
strategy:
57+
matrix:
58+
include:
59+
- arch: x86_64
60+
binary: clarissa-linux-x64
61+
- arch: aarch64
62+
binary: clarissa-linux-arm64
63+
steps:
64+
- uses: actions/checkout@v4
65+
66+
- name: Download Linux binary
67+
uses: actions/download-artifact@v4
68+
with:
69+
name: ${{ matrix.binary }}
70+
path: dist
71+
72+
- name: Create AppDir
73+
run: |
74+
mkdir -p Clarissa.AppDir/usr/bin
75+
cp dist/${{ matrix.binary }} Clarissa.AppDir/usr/bin/clarissa
76+
chmod +x Clarissa.AppDir/usr/bin/clarissa
77+
78+
# Create AppRun
79+
cat > Clarissa.AppDir/AppRun << 'EOF'
80+
#!/bin/bash
81+
SELF=$(readlink -f "$0")
82+
HERE=${SELF%/*}
83+
exec "${HERE}/usr/bin/clarissa" "$@"
84+
EOF
85+
chmod +x Clarissa.AppDir/AppRun
86+
87+
# Create desktop file
88+
cat > Clarissa.AppDir/clarissa.desktop << EOF
89+
[Desktop Entry]
90+
Type=Application
91+
Name=Clarissa
92+
Exec=clarissa
93+
Icon=clarissa
94+
Categories=Utility;
95+
Terminal=true
96+
EOF
97+
98+
# Create minimal icon (required by AppImage)
99+
cat > Clarissa.AppDir/clarissa.svg << 'EOF'
100+
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256">
101+
<rect width="256" height="256" fill="#1a1a2e"/>
102+
<text x="128" y="160" font-size="120" text-anchor="middle" fill="#fff">C</text>
103+
</svg>
104+
EOF
105+
ln -s clarissa.svg Clarissa.AppDir/.DirIcon
106+
107+
- name: Download appimagetool
108+
run: |
109+
wget -q https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
110+
chmod +x appimagetool-x86_64.AppImage
111+
112+
- name: Build AppImage
113+
run: |
114+
ARCH=${{ matrix.arch }} ./appimagetool-x86_64.AppImage --appimage-extract-and-run Clarissa.AppDir clarissa-linux-${{ matrix.arch }}.AppImage
115+
116+
- name: Upload AppImage artifact
117+
uses: actions/upload-artifact@v4
118+
with:
119+
name: clarissa-linux-${{ matrix.arch }}.AppImage
120+
path: clarissa-linux-${{ matrix.arch }}.AppImage
121+
122+
release:
123+
needs: [build, appimage]
124+
runs-on: ubuntu-latest
56125
steps:
57126
- uses: actions/checkout@v4
58127

@@ -104,3 +173,24 @@ jobs:
104173
download-url: https://github.com/cameronrye/clarissa/releases/download/${{ github.ref_name }}/clarissa-macos-arm64
105174
env:
106175
COMMITTER_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
176+
177+
winget:
178+
needs: release
179+
runs-on: windows-latest
180+
steps:
181+
- name: Install .NET SDK
182+
uses: actions/setup-dotnet@v4
183+
with:
184+
dotnet-version: "6.x"
185+
186+
- name: Update winget manifest
187+
run: |
188+
$version = "${{ github.ref_name }}".TrimStart("v")
189+
$url = "https://github.com/cameronrye/clarissa/releases/download/${{ github.ref_name }}/clarissa-windows-x64.exe"
190+
191+
# Download wingetcreate
192+
Invoke-WebRequest -Uri "https://aka.ms/wingetcreate/latest" -OutFile wingetcreate.exe
193+
194+
# Update and submit manifest
195+
.\wingetcreate.exe update cameronrye.clarissa -u $url -v $version -t ${{ secrets.WINGET_PAT }} --submit
196+
shell: pwsh

docs/.astro/types.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
/// <reference types="astro/client" />
2+
/// <reference path="content.d.ts" />

docs/src/pages/download.astro

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,19 @@ const base = import.meta.env.BASE_URL;
5555
</button>
5656
</div>
5757
</div>
58+
<div class="install-option">
59+
<h3>winget (Windows)</h3>
60+
<p>Install via Windows Package Manager:</p>
61+
<div class="install-command">
62+
<code>winget install cameronrye.clarissa</code>
63+
<button class="copy-btn" data-copy="winget install cameronrye.clarissa" aria-label="Copy">
64+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
65+
<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
66+
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
67+
</svg>
68+
</button>
69+
</div>
70+
</div>
5871
<div class="install-option">
5972
<h3>From Source</h3>
6073
<p>Clone and build from the repository:</p>

docs/src/scripts/download.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ const PLATFORMS: Platform[] = [
2424
{ os: 'macos', arch: 'x64', label: 'macOS (Intel)', assetPattern: /macos-x64$/, icon: '' },
2525
{ os: 'linux', arch: 'x64', label: 'Linux (x64)', assetPattern: /linux-x64$/, icon: '' },
2626
{ os: 'linux', arch: 'arm64', label: 'Linux (ARM64)', assetPattern: /linux-arm64$/, icon: '' },
27+
{ os: 'linux', arch: 'x64', label: 'Linux AppImage (x64)', assetPattern: /linux-x86_64\.AppImage$/, icon: '' },
28+
{ os: 'linux', arch: 'arm64', label: 'Linux AppImage (ARM64)', assetPattern: /linux-aarch64\.AppImage$/, icon: '' },
2729
{ os: 'windows', arch: 'x64', label: 'Windows (x64)', assetPattern: /windows-x64\.exe$/, icon: '' },
2830
];
2931

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "clarissa",
3-
"version": "1.3.0",
3+
"version": "1.4.0",
44
"description": "An AI-powered terminal assistant with tool execution capabilities",
55
"author": "Cameron Rye <cameron@rye.dev> (https://rye.dev)",
66
"license": "MIT",

winget/README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Winget Package Manifest
2+
3+
This directory contains the Windows Package Manager (winget) manifest files for Clarissa.
4+
5+
## Initial Submission
6+
7+
To submit Clarissa to the winget-pkgs repository for the first time:
8+
9+
1. Fork the [microsoft/winget-pkgs](https://github.com/microsoft/winget-pkgs) repository
10+
2. Copy the contents of `manifests/` to your fork under the same path structure
11+
3. Validate the manifest locally:
12+
```powershell
13+
winget validate manifests/c/cameronrye/clarissa/1.3.0/
14+
```
15+
4. Create a Pull Request to microsoft/winget-pkgs
16+
17+
## Automated Updates
18+
19+
After the initial submission is accepted, the release workflow will automatically update the manifest for new releases using `wingetcreate`.
20+
21+
## Manual Update
22+
23+
To manually update for a new version:
24+
25+
```powershell
26+
wingetcreate update cameronrye.clarissa --urls "https://github.com/cameronrye/clarissa/releases/download/vX.Y.Z/clarissa-windows-x64.exe" --version X.Y.Z --submit
27+
```
28+
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Created using winget manifest generator
2+
# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.6.0.schema.json
3+
4+
PackageIdentifier: cameronrye.clarissa
5+
PackageVersion: 1.3.0
6+
InstallerType: portable
7+
Commands:
8+
- clarissa
9+
NestedInstallerType: portable
10+
Installers:
11+
- Architecture: x64
12+
InstallerUrl: https://github.com/cameronrye/clarissa/releases/download/v1.3.0/clarissa-windows-x64.exe
13+
InstallerSha256: F5BAA02606D4466B1C78803AD6FC45D799A11D4D4D554D9099761A0617FD2718
14+
NestedInstallerFiles:
15+
- RelativeFilePath: clarissa-windows-x64.exe
16+
PortableCommandAlias: clarissa
17+
ManifestType: installer
18+
ManifestVersion: 1.6.0
19+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Created using winget manifest generator
2+
# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.6.0.schema.json
3+
4+
PackageIdentifier: cameronrye.clarissa
5+
PackageVersion: 1.3.0
6+
PackageLocale: en-US
7+
Publisher: Cameron Rye
8+
PublisherUrl: https://rye.dev
9+
PublisherSupportUrl: https://github.com/cameronrye/clarissa/issues
10+
Author: Cameron Rye
11+
PackageName: Clarissa
12+
PackageUrl: https://clarissa.run
13+
License: MIT
14+
LicenseUrl: https://github.com/cameronrye/clarissa/blob/main/LICENSE
15+
ShortDescription: An AI-powered terminal assistant with tool execution capabilities
16+
Description: |-
17+
Clarissa is a powerful AI terminal assistant that brings intelligent automation to your command line.
18+
Features include multi-provider AI support (OpenRouter, Apple Intelligence, LM Studio, Ollama),
19+
MCP server integration, built-in tools for file operations, git, web search, and shell commands.
20+
Tags:
21+
- ai
22+
- agent
23+
- cli
24+
- terminal
25+
- assistant
26+
- llm
27+
- openrouter
28+
- mcp
29+
- claude
30+
- gpt
31+
ReleaseNotesUrl: https://github.com/cameronrye/clarissa/releases/tag/v1.3.0
32+
ManifestType: defaultLocale
33+
ManifestVersion: 1.6.0
34+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Created using winget manifest generator
2+
# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.6.0.schema.json
3+
4+
PackageIdentifier: cameronrye.clarissa
5+
PackageVersion: 1.3.0
6+
DefaultLocale: en-US
7+
ManifestType: version
8+
ManifestVersion: 1.6.0
9+

0 commit comments

Comments
 (0)