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
184 changes: 6 additions & 178 deletions .github/workflows/_build.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
name: Build
run-name: Build ${{ inputs.tag || github.sha }}

# Reusable workflow that produces the CLI binaries and Tauri desktop bundles.
# Reusable workflow that produces the CLI binaries.
# Called by:
# - ci.yml (post-merge verification on dev/main; uploads workflow artifacts only)
# - publish.yml (release publish; uploads artifacts AND attaches them to the published GitHub release)
#
# When inputs.release and inputs.tag are empty strings, tauri-action skips
# release attachment and only produces workflow artifacts. See:
# https://github.com/tauri-apps/tauri-action#workflow-inputs
# - publish.yml (release publish; uploads CLI archives to the published GitHub release)

on:
workflow_call:
Expand All @@ -26,10 +22,10 @@ on:
type: string
default: "@thesolaceproject/emberharmony"

# Permissions are inherited from the caller: ci.yml grants read (artifacts only),
# publish.yml grants write so a release build can upload assets — CLI archives via
# `gh release upload` and desktop bundles via tauri-action. A reusable workflow
# cannot exceed its caller's grant, so jobs do not declare permissions here.
# Permissions are inherited from the caller: ci.yml grants read, and
# publish.yml grants write so the CLI build can upload release assets via
# `gh release upload`. A reusable workflow cannot exceed its caller's grant,
# so jobs do not declare permissions here.

jobs:
build-cli:
Expand Down Expand Up @@ -59,171 +55,3 @@ jobs:
with:
name: emberharmony-cli
path: packages/emberharmony/dist

build-tauri:
needs: build-cli
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
settings:
- host: macos-latest
target: x86_64-apple-darwin
- host: macos-latest
target: aarch64-apple-darwin
- host: windows-latest
target: x86_64-pc-windows-msvc
- host: ubuntu-24.04
target: x86_64-unknown-linux-gnu
- host: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
runs-on: ${{ matrix.settings.host }}
env:
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_API_KEY_PATH: ${{ secrets.APPLE_API_KEY_PATH }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-tags: true

- name: Import code-signing certificate
if: ${{ runner.os == 'macOS' && env.APPLE_CERTIFICATE != '' && env.APPLE_CERTIFICATE_PASSWORD != '' }}
uses: apple-actions/import-codesign-certs@v7
with:
keychain: build
p12-file-base64: ${{ secrets.APPLE_CERTIFICATE }}
p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}

- name: Verify Certificate
if: ${{ runner.os == 'macOS' && env.APPLE_CERTIFICATE != '' && env.APPLE_CERTIFICATE_PASSWORD != '' }}
run: |
set -euo pipefail

if [ -n "${APPLE_SIGNING_IDENTITY:-}" ]; then
echo "CERT_ID=$APPLE_SIGNING_IDENTITY" >> "$GITHUB_ENV"

TEAM_ID=$(echo "$APPLE_SIGNING_IDENTITY" | sed -n 's/.*(\([A-Z0-9]\{10\}\)).*/\1/p')
if [ -n "${TEAM_ID:-}" ]; then
echo "APPLE_TEAM_ID=$TEAM_ID" >> "$GITHUB_ENV"
echo "Using APPLE_TEAM_ID from signing identity: $TEAM_ID"
fi

echo "Using APPLE_SIGNING_IDENTITY override."
security find-identity -v -p codesigning build.keychain | cat
exit 0
fi

CERT_INFO=$(security find-identity -v -p codesigning build.keychain | grep "Developer ID Application" | head -n 1 || true)
if [ -z "$CERT_INFO" ]; then
echo "No 'Developer ID Application' identity found in build.keychain" >&2
security find-identity -v -p codesigning build.keychain | cat
exit 1
fi

CERT_ID=$(echo "$CERT_INFO" | awk -F'"' '{print $2}')
echo "CERT_ID=$CERT_ID" >> "$GITHUB_ENV"
echo "Certificate imported: $CERT_ID"

TEAM_ID=$(echo "$CERT_ID" | sed -n 's/.*(\([A-Z0-9]\{10\}\)).*/\1/p')
if [ -n "${TEAM_ID:-}" ]; then
echo "APPLE_TEAM_ID=$TEAM_ID" >> "$GITHUB_ENV"
echo "Detected APPLE_TEAM_ID from certificate: $TEAM_ID"
fi

- name: Setup Apple API Key
if: ${{ runner.os == 'macOS' && env.APPLE_API_KEY_PATH != '' }}
run: |
printf '%s' "${{ secrets.APPLE_API_KEY_PATH }}" > "$RUNNER_TEMP/apple-api-key.p8"

- name: Setup Bun
uses: ./.github/actions/setup-bun

- name: Cache apt packages
if: contains(matrix.settings.host, 'ubuntu')
uses: actions/cache@v5
with:
path: /var/cache/apt/archives/*.deb
key: ${{ runner.os }}-${{ matrix.settings.target }}-apt-${{ hashFiles('.github/workflows/_build.yml') }}
restore-keys: |
${{ runner.os }}-${{ matrix.settings.target }}-apt-

- name: Install Linux build dependencies
if: contains(matrix.settings.host, 'ubuntu')
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@v1
with:
toolchain: stable
targets: ${{ matrix.settings.target }}

- name: Restore Cargo cache
uses: Swatinem/rust-cache@v2
with:
workspaces: packages/desktop/src-tauri
shared-key: ${{ matrix.settings.target }}

- name: Prepare
run: |
cd packages/desktop
bun ./scripts/prepare.ts
env:
GITHUB_TOKEN: ${{ github.token }}
RUST_TARGET: ${{ matrix.settings.target }}
GH_TOKEN: ${{ github.token }}
GITHUB_RUN_ID: ${{ github.run_id }}

# Fixes AppImage build issues, can be removed when https://github.com/tauri-apps/tauri/pull/12491 is released
- name: Install tauri-cli from portable appimage branch
if: contains(matrix.settings.host, 'ubuntu')
run: |
cargo install tauri-cli --git https://github.com/tauri-apps/tauri --branch feat/truly-portable-appimage --force
echo "Installed tauri-cli version:"
cargo tauri --version

- name: Export Apple ID notarization credentials
if: ${{ runner.os == 'macOS' }}
run: |
APPLE_ID="${{ secrets.APPLE_ID }}"
APPLE_PASSWORD="${{ secrets.APPLE_PASSWORD }}"

if [ -z "${APPLE_ID:-}" ] || [ -z "${APPLE_PASSWORD:-}" ]; then
echo "Apple ID notarization not configured; using App Store Connect API key."
exit 0
fi

echo "APPLE_ID=$APPLE_ID" >> "$GITHUB_ENV"
echo "APPLE_PASSWORD=$APPLE_PASSWORD" >> "$GITHUB_ENV"

- name: Build and upload artifacts
uses: tauri-apps/tauri-action@v0.6
timeout-minutes: 60
if: ${{ runner.os != 'macOS' || (env.APPLE_CERTIFICATE != '' && env.APPLE_CERTIFICATE_PASSWORD != '') }}
with:
projectPath: packages/desktop
uploadWorkflowArtifacts: true
tauriScript: ${{ (contains(matrix.settings.host, 'ubuntu') && 'cargo tauri') || '' }}
args: --target ${{ matrix.settings.target }} --config ./src-tauri/tauri.prod.conf.json --verbose
updaterJsonPreferNsis: true
# Release attachment: when both releaseId and tagName are empty (CI mode),
# tauri-action skips the release upload and only emits workflow artifacts.
releaseId: ${{ inputs.release }}
tagName: ${{ inputs.tag }}
releaseAssetNamePattern: emberharmony-desktop-[platform]-[arch][ext]
env:
GITHUB_TOKEN: ${{ github.token }}
TAURI_BUNDLER_NEW_APPIMAGE_FORMAT: true
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ env.CERT_ID }}
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
APPLE_API_KEY_PATH: ${{ runner.temp }}/apple-api-key.p8
APPLE_TEAM_ID: ${{ env.APPLE_TEAM_ID }}
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
name: CI
run-name: CI ${{ github.ref_name }} @ ${{ github.sha }}

# Verification builds. Runs the full 5-target CLI + Tauri matrix on every push
# to an integration branch (i.e. after a PR merges). Does NOT run on pull_request
# — that keeps the expensive matrix off PR review and away from fork secrets.
# Verification builds. Runs the CLI build on every push to an integration branch
# (i.e. after a PR merges). Does NOT run on pull_request — that keeps the
# expensive release build off PR review.

on:
push:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
# javascript-typescript covers the whole TS/JS codebase (CLI, web, console, ui, etc).
# actions scans .github/workflows/** for secret-handling and injection bugs —
# relevant given this repo's prior fork-PR-secret incident (see commit 5569e76).
# rust covers the Tauri desktop surface (packages/desktop/src-tauri).
# rust covers the desktop source surface (packages/desktop/src-tauri).
# build-mode none = buildless extraction; no cargo build or system libs required.
include:
- language: javascript-typescript
Expand Down
8 changes: 3 additions & 5 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,7 @@ on:
concurrency: ${{ github.workflow }}-${{ github.ref }}

permissions:
id-token: write
contents: write
packages: write
actions: read

jobs:
Expand All @@ -26,9 +24,9 @@ jobs:
publish-name: "@thesolaceproject/emberharmony"
secrets: inherit

# npm publish runs for STABLE releases only. A pre-release (the portal's
# "Set as a pre-release" checkbox) still builds and attaches desktop assets to the
# GitHub release via the build job above, but never touches npm.
# npm publish runs for STABLE releases only. A pre-release still builds and
# uploads CLI assets to the GitHub release via the build job above, but never
# touches npm.
publish:
if: ${{ github.repository == 'SolaceHarmony/emberharmony' && !github.event.release.prerelease }}
needs:
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ Replace `<platform>` with your platform (e.g., `darwin-arm64`, `linux-x64`).

- Core pieces:
- `packages/emberharmony`: EmberHarmony core business logic & server.
- `packages/emberharmony/src/cli/cmd/tui/`: The TUI code, written in SolidJS with [opentui](https://github.com/sst/opentui)
- `packages/emberharmony/src/cli/cmd/tui/`: The TUI code, written in SolidJS with opentui
- `packages/app`: The shared web UI components, written in SolidJS
- `packages/desktop`: The native desktop app, built with Tauri (wraps `packages/app`)
- `packages/plugin`: Source for `@thesolaceproject/emberharmony-plugin`
Expand Down
2 changes: 1 addition & 1 deletion README.ar.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ emberharmony

### شكر وتقدير

EmberHarmony هو نسخة معدّلة (fork) من [opencode](https://github.com/anomalyco/opencode) بواسطة فريق [SST](https://sst.dev). نحن ممتنون للغاية لعملهم التأسيسي في بناء وكيل برمجة بالذكاء الاصطناعي مفتوح المصدر استثنائي. يبني هذا المشروع على رؤيتهم وهندستهم.
EmberHarmony هو نسخة معدّلة (fork) من [opencode](https://github.com/anomalyco/opencode) بواسطة فريق opencode upstream. نحن ممتنون للغاية لعملهم التأسيسي في بناء وكيل برمجة بالذكاء الاصطناعي مفتوح المصدر استثنائي. يبني هذا المشروع على رؤيتهم وهندستهم.

### المشرف

Expand Down
2 changes: 1 addition & 1 deletion README.br.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ Se você estiver trabalhando em um projeto relacionado ao EmberHarmony que use "

### Agradecimentos

O EmberHarmony é um fork do [opencode](https://github.com/anomalyco/opencode) criado pela equipe [SST](https://sst.dev). Somos profundamente gratos pelo trabalho fundamental deles na construção de um agente de programação com IA de código aberto excepcional. Este projeto se baseia na visão e na engenharia deles.
O EmberHarmony é um fork do [opencode](https://github.com/anomalyco/opencode) criado pela equipe opencode upstream. Somos profundamente gratos pelo trabalho fundamental deles na construção de um agente de programação com IA de código aberto excepcional. Este projeto se baseia na visão e na engenharia deles.

### Mantenedora

Expand Down
2 changes: 1 addition & 1 deletion README.da.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ Hvis du arbejder på et projekt relateret til EmberHarmony, der bruger "emberhar

### Anerkendelser

EmberHarmony er en fork af [opencode](https://github.com/anomalyco/opencode) af [SST](https://sst.dev)-teamet. Vi er dybt taknemmelige for deres grundlæggende arbejde med at bygge en enestående open source AI-kodningsagent. Dette projekt bygger videre på deres vision og ingeniørarbejde.
EmberHarmony er en fork af [opencode](https://github.com/anomalyco/opencode) af opencode upstream-teamet. Vi er dybt taknemmelige for deres grundlæggende arbejde med at bygge en enestående open source AI-kodningsagent. Dette projekt bygger videre på deres vision og ingeniørarbejde.

### Vedligeholder

Expand Down
2 changes: 1 addition & 1 deletion README.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ Wenn du an einem Projekt im Zusammenhang mit EmberHarmony arbeitest, das „embe

### Danksagungen

EmberHarmony ist ein Fork von [opencode](https://github.com/anomalyco/opencode) des [SST](https://sst.dev)-Teams. Wir sind zutiefst dankbar für ihre grundlegende Arbeit beim Aufbau eines herausragenden quelloffenen KI-Coding-Agenten. Dieses Projekt baut auf ihrer Vision und ihrer Ingenieursarbeit auf.
EmberHarmony ist ein Fork von [opencode](https://github.com/anomalyco/opencode) des opencode upstream-Teams. Wir sind zutiefst dankbar für ihre grundlegende Arbeit beim Aufbau eines herausragenden quelloffenen KI-Coding-Agenten. Dieses Projekt baut auf ihrer Vision und ihrer Ingenieursarbeit auf.

### Maintainer

Expand Down
2 changes: 1 addition & 1 deletion README.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ Si estás trabajando en un proyecto relacionado con EmberHarmony que usa "emberh

### Agradecimientos

EmberHarmony es un fork de [opencode](https://github.com/anomalyco/opencode) del equipo de [SST](https://sst.dev). Estamos profundamente agradecidos por su trabajo fundacional al construir un agente de codificación con IA de código abierto excepcional. Este proyecto se basa en su visión y su ingeniería.
EmberHarmony es un fork de [opencode](https://github.com/anomalyco/opencode) del equipo de opencode upstream. Estamos profundamente agradecidos por su trabajo fundacional al construir un agente de codificación con IA de código abierto excepcional. Este proyecto se basa en su visión y su ingeniería.

### Responsable del mantenimiento

Expand Down
2 changes: 1 addition & 1 deletion README.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ Si vous travaillez sur un projet lié à EmberHarmony qui utilise « emberharmon

### Remerciements

EmberHarmony est un fork d'[opencode](https://github.com/anomalyco/opencode) par l'équipe [SST](https://sst.dev). Nous sommes profondément reconnaissants pour leur travail fondateur dans la construction d'un agent de codage IA open source exceptionnel. Ce projet s'appuie sur leur vision et leur ingénierie.
EmberHarmony est un fork d'[opencode](https://github.com/anomalyco/opencode) par l'équipe opencode upstream. Nous sommes profondément reconnaissants pour leur travail fondateur dans la construction d'un agent de codage IA open source exceptionnel. Ce projet s'appuie sur leur vision et leur ingénierie.

### Mainteneuse

Expand Down
2 changes: 1 addition & 1 deletion README.it.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ Se stai lavorando a un progetto legato a EmberHarmony che usa "emberharmony" nel

### Ringraziamenti

EmberHarmony è un fork di [opencode](https://github.com/anomalyco/opencode) realizzato dal team [SST](https://sst.dev). Siamo profondamente grati per il loro lavoro fondamentale nella creazione di un eccezionale agente di coding AI open source. Questo progetto si basa sulla loro visione e sulla loro ingegneria.
EmberHarmony è un fork di [opencode](https://github.com/anomalyco/opencode) realizzato dal team opencode upstream. Siamo profondamente grati per il loro lavoro fondamentale nella creazione di un eccezionale agente di coding AI open source. Questo progetto si basa sulla loro visione e sulla loro ingegneria.

### Manutentore

Expand Down
2 changes: 1 addition & 1 deletion README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ EmberHarmony に関連するプロジェクトで、その名前に「emberharmo

### 謝辞

EmberHarmony は、[SST](https://sst.dev) チームによる [opencode](https://github.com/anomalyco/opencode) のフォークです。優れたオープンソース AI コーディングエージェントを構築するという彼らの基礎的な仕事に、私たちは深く感謝しています。本プロジェクトは、彼らのビジョンとエンジニアリングの上に築かれています。
EmberHarmony は、opencode upstream チームによる [opencode](https://github.com/anomalyco/opencode) のフォークです。優れたオープンソース AI コーディングエージェントを構築するという彼らの基礎的な仕事に、私たちは深く感謝しています。本プロジェクトは、彼らのビジョンとエンジニアリングの上に築かれています。

### メンテナー

Expand Down
2 changes: 1 addition & 1 deletion README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ EmberHarmony에 기여하는 데 관심이 있다면, 풀 리퀘스트를 제출

### 감사의 말

EmberHarmony는 [SST](https://sst.dev) 팀의 [opencode](https://github.com/anomalyco/opencode)에서 포크한 프로젝트입니다. 뛰어난 오픈 소스 AI 코딩 에이전트를 구축한 그들의 기초 작업에 깊이 감사드립니다. 이 프로젝트는 그들의 비전과 엔지니어링 위에 세워졌습니다.
EmberHarmony는 opencode upstream 팀의 [opencode](https://github.com/anomalyco/opencode)에서 포크한 프로젝트입니다. 뛰어난 오픈 소스 AI 코딩 에이전트를 구축한 그들의 기초 작업에 깊이 감사드립니다. 이 프로젝트는 그들의 비전과 엔지니어링 위에 세워졌습니다.

### 메인테이너

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ If you are working on a project related to EmberHarmony that uses "emberharmony"

### Acknowledgments

EmberHarmony is a fork of [opencode](https://github.com/anomalyco/opencode) by the [SST](https://sst.dev) team. We are deeply grateful for their foundational work in building an exceptional open source AI coding agent. This project builds on their vision and engineering.
EmberHarmony is a fork of [opencode](https://github.com/anomalyco/opencode) by the opencode upstream team. We are deeply grateful for their foundational work in building an exceptional open source AI coding agent. This project builds on their vision and engineering.

### Maintainer

Expand Down
2 changes: 1 addition & 1 deletion README.no.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ Hvis du jobber med et prosjekt relatert til EmberHarmony som bruker "emberharmon

### Anerkjennelser

EmberHarmony er en fork av [opencode](https://github.com/anomalyco/opencode) av [SST](https://sst.dev)-teamet. Vi er dypt takknemlige for deres grunnleggende arbeid med å bygge en eksepsjonell åpen kildekode-basert AI-kodeagent. Dette prosjektet bygger videre på deres visjon og ingeniørarbeid.
EmberHarmony er en fork av [opencode](https://github.com/anomalyco/opencode) av opencode upstream-teamet. Vi er dypt takknemlige for deres grunnleggende arbeid med å bygge en eksepsjonell åpen kildekode-basert AI-kodeagent. Dette prosjektet bygger videre på deres visjon og ingeniørarbeid.

### Vedlikeholder

Expand Down
Loading
Loading