Merge pull request 'feat: macOS arm64 runner, UI fixes, and create_issue IPC fix' (#1) from feat/macos-runner into master
Some checks failed
Test / frontend-typecheck (push) Waiting to run
Test / frontend-tests (push) Waiting to run
Test / rust-fmt-check (push) Successful in 1m10s
Test / rust-clippy (push) Successful in 7m12s
Test / rust-tests (push) Has been cancelled
Release / build-macos-arm64 (push) Successful in 2m53s
Release / build-linux-amd64 (push) Successful in 15m47s
Release / build-linux-arm64 (push) Has been cancelled
Release / build-windows-amd64 (push) Has been cancelled
Some checks failed
Test / frontend-typecheck (push) Waiting to run
Test / frontend-tests (push) Waiting to run
Test / rust-fmt-check (push) Successful in 1m10s
Test / rust-clippy (push) Successful in 7m12s
Test / rust-tests (push) Has been cancelled
Release / build-macos-arm64 (push) Successful in 2m53s
Release / build-linux-amd64 (push) Successful in 15m47s
Release / build-linux-arm64 (push) Has been cancelled
Release / build-windows-amd64 (push) Has been cancelled
Reviewed-on: #1
This commit is contained in:
commit
66c56aa61d
@ -100,6 +100,44 @@ jobs:
|
|||||||
-F "attachment=@$f;filename=$(basename $f)" && echo "Uploaded $(basename $f)" || echo "Upload failed: $f"
|
-F "attachment=@$f;filename=$(basename $f)" && echo "Uploaded $(basename $f)" || echo "Upload failed: $f"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
build-macos-arm64:
|
||||||
|
runs-on: macos-arm64
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
run: |
|
||||||
|
git init
|
||||||
|
git remote add origin http://172.0.0.29:3000/sarman/tftsr-devops_investigation.git
|
||||||
|
git fetch --depth=1 origin $GITHUB_SHA
|
||||||
|
git checkout FETCH_HEAD
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
MACOSX_DEPLOYMENT_TARGET: "11.0"
|
||||||
|
run: |
|
||||||
|
npm ci --legacy-peer-deps
|
||||||
|
rustup target add aarch64-apple-darwin
|
||||||
|
cargo install tauri-cli --version "^2" --locked
|
||||||
|
CI=true cargo tauri build --target aarch64-apple-darwin
|
||||||
|
codesign --deep --force --sign - \
|
||||||
|
src-tauri/target/aarch64-apple-darwin/release/bundle/macos/TFTSR.app
|
||||||
|
- name: Upload artifacts
|
||||||
|
env:
|
||||||
|
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
||||||
|
run: |
|
||||||
|
API="http://172.0.0.29:3000/api/v1/repos/$GITHUB_REPOSITORY"
|
||||||
|
TAG="$GITHUB_REF_NAME"
|
||||||
|
curl -sf -X POST "$API/releases" \
|
||||||
|
-H "Authorization: token $RELEASE_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"tag_name\":\"$TAG\",\"name\":\"TFTSR $TAG\",\"body\":\"Release $TAG\",\"draft\":false}" || true
|
||||||
|
RELEASE_ID=$(curl -sf "$API/releases/tags/$TAG" \
|
||||||
|
-H "Authorization: token $RELEASE_TOKEN" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
|
||||||
|
echo "Release ID: $RELEASE_ID"
|
||||||
|
find src-tauri/target/aarch64-apple-darwin/release/bundle -name "*.dmg" | while read f; do
|
||||||
|
curl -sf -X POST "$API/releases/$RELEASE_ID/assets" \
|
||||||
|
-H "Authorization: token $RELEASE_TOKEN" \
|
||||||
|
-F "attachment=@$f;filename=$(basename $f)" && echo "Uploaded $(basename $f)" || echo "Upload failed: $f"
|
||||||
|
done
|
||||||
|
|
||||||
build-linux-arm64:
|
build-linux-arm64:
|
||||||
runs-on: linux-arm64
|
runs-on: linux-arm64
|
||||||
container:
|
container:
|
||||||
|
|||||||
@ -13,13 +13,17 @@
|
|||||||
|
|
||||||
| Agent | Platform | Host | Purpose |
|
| Agent | Platform | Host | Purpose |
|
||||||
|-------|----------|------|---------|
|
|-------|----------|------|---------|
|
||||||
| `woodpecker_agent` (Docker) | `linux/amd64` | 172.0.0.29 | Native x86_64 — test builds + amd64/windows release |
|
| `gitea_act_runner_amd64` (Docker) | `linux-amd64` | 172.0.0.29 | Native x86_64 — test builds + amd64/windows release |
|
||||||
| `woodpecker-agent` (systemd) | `linux/arm64` | sarman's local machine | Native aarch64 — arm64 release builds |
|
| `act_runner` (systemd) | `linux-arm64` | 172.0.0.29 | Native aarch64 — arm64 release builds |
|
||||||
| `woodpecker_agent_arm64` (Docker) | `linux/arm64` | 172.0.0.29 | QEMU fallback — kept as backup |
|
| `act_runner` (launchd) | `macos-arm64` | sarman's local Mac | Native Apple Silicon — macOS `.dmg` release builds |
|
||||||
|
|
||||||
Agent labels configured via `WOODPECKER_LABELS`:
|
Agent labels configured in `~/.config/act_runner/config.yaml`:
|
||||||
- Docker agents: `WOODPECKER_LABELS=platform=linux/amd64` (or arm64)
|
```yaml
|
||||||
- Local systemd agent: `~/.config/woodpecker-agent/config.env` → `WOODPECKER_LABELS=platform=linux/arm64`
|
runner:
|
||||||
|
labels:
|
||||||
|
- "macos-arm64:host"
|
||||||
|
```
|
||||||
|
macOS runner runs jobs **directly on the host** (no Docker container) — macOS SDK cannot run in Docker.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -61,21 +65,21 @@ steps:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Release Pipeline (`.woodpecker/release.yml`)
|
## Release Pipeline (`.gitea/workflows/release.yml`)
|
||||||
|
|
||||||
**Triggers:** Git tags matching `v*`
|
**Triggers:** Git tags matching `v*`
|
||||||
|
|
||||||
```
|
```
|
||||||
Pipeline steps:
|
Jobs (run in parallel):
|
||||||
1. clone (amd64 workspace) → alpine/git with explicit tag fetch + checkout
|
build-linux-amd64 → cargo tauri build (x86_64-unknown-linux-gnu)
|
||||||
2. build-linux-amd64 → cargo tauri build (x86_64-unknown-linux-gnu)
|
→ {.deb, .rpm, .AppImage} uploaded to Gitea release
|
||||||
→ artifacts/linux-amd64/{.deb, .rpm, .AppImage}
|
build-windows-amd64 → cargo tauri build (x86_64-pc-windows-gnu) via mingw-w64
|
||||||
3. build-windows-amd64 → cargo tauri build (x86_64-pc-windows-gnu)
|
→ {.exe, .msi} uploaded to Gitea release
|
||||||
→ artifacts/windows-amd64/{.exe, .msi}
|
build-linux-arm64 → cargo tauri build (aarch64-unknown-linux-gnu)
|
||||||
4. build-linux-arm64 → cargo tauri build (aarch64-unknown-linux-gnu)
|
→ {.deb, .rpm, .AppImage} uploaded to Gitea release
|
||||||
→ artifacts/linux-arm64/{.deb, .rpm, .AppImage}
|
build-macos-arm64 → cargo tauri build (aarch64-apple-darwin) — runs on local Mac
|
||||||
→ uploads arm64 artifacts inline to Gitea release
|
→ {.dmg} uploaded to Gitea release
|
||||||
5. upload-release → Create Gitea release + upload amd64 + windows artifacts
|
→ unsigned; after install run: xattr -cr /Applications/TFTSR.app
|
||||||
```
|
```
|
||||||
|
|
||||||
**Per-step agent routing (Woodpecker 2.x labels):**
|
**Per-step agent routing (Woodpecker 2.x labels):**
|
||||||
|
|||||||
@ -266,7 +266,12 @@ export const applyRedactionsCmd = (logFileId: string, approvedSpanIds: string[])
|
|||||||
// ─── Issue CRUD ───────────────────────────────────────────────────────────────
|
// ─── Issue CRUD ───────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
export const createIssueCmd = (newIssue: NewIssue) =>
|
export const createIssueCmd = (newIssue: NewIssue) =>
|
||||||
invoke<IssueDetail>("create_issue", { newIssue });
|
invoke<Issue>("create_issue", {
|
||||||
|
title: newIssue.title,
|
||||||
|
description: newIssue.description ?? "",
|
||||||
|
severity: newIssue.severity ?? "P3",
|
||||||
|
category: newIssue.domain,
|
||||||
|
});
|
||||||
|
|
||||||
export const getIssueCmd = (issueId: string) =>
|
export const getIssueCmd = (issueId: string) =>
|
||||||
invoke<IssueDetail>("get_issue", { issueId });
|
invoke<IssueDetail>("get_issue", { issueId });
|
||||||
|
|||||||
@ -51,9 +51,9 @@ export default function NewIssue() {
|
|||||||
setIsSubmitting(true);
|
setIsSubmitting(true);
|
||||||
setError(null);
|
setError(null);
|
||||||
try {
|
try {
|
||||||
const detail = await createIssueCmd({ title: title.trim(), domain: selectedDomain, severity });
|
const issue = await createIssueCmd({ title: title.trim(), domain: selectedDomain, severity });
|
||||||
startSession(detail.issue);
|
startSession(issue);
|
||||||
navigate(`/issue/${detail.issue.id}/triage`);
|
navigate(`/issue/${issue.id}/triage`);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setError(String(err));
|
setError(String(err));
|
||||||
setIsSubmitting(false);
|
setIsSubmitting(false);
|
||||||
|
|||||||
@ -82,7 +82,7 @@ export default function Security() {
|
|||||||
aria-checked={enabledPatterns[pattern.id]}
|
aria-checked={enabledPatterns[pattern.id]}
|
||||||
onClick={() => togglePattern(pattern.id)}
|
onClick={() => togglePattern(pattern.id)}
|
||||||
className={`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${
|
className={`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${
|
||||||
enabledPatterns[pattern.id] ? "bg-primary" : "bg-muted"
|
enabledPatterns[pattern.id] ? "bg-blue-500" : "bg-muted"
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
|
|||||||
@ -53,7 +53,7 @@
|
|||||||
body { @apply bg-background text-foreground; }
|
body { @apply bg-background text-foreground; }
|
||||||
|
|
||||||
/* Prevent WebKit/GTK from overriding form control colors with system theme */
|
/* Prevent WebKit/GTK from overriding form control colors with system theme */
|
||||||
input, textarea, select, button {
|
input, textarea, select {
|
||||||
color: hsl(var(--foreground));
|
color: hsl(var(--foreground));
|
||||||
background-color: hsl(var(--background));
|
background-color: hsl(var(--background));
|
||||||
-webkit-text-fill-color: hsl(var(--foreground));
|
-webkit-text-fill-color: hsl(var(--foreground));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user