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"
|
||||
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:
|
||||
runs-on: linux-arm64
|
||||
container:
|
||||
|
||||
@ -13,13 +13,17 @@
|
||||
|
||||
| Agent | Platform | Host | Purpose |
|
||||
|-------|----------|------|---------|
|
||||
| `woodpecker_agent` (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 |
|
||||
| `woodpecker_agent_arm64` (Docker) | `linux/arm64` | 172.0.0.29 | QEMU fallback — kept as backup |
|
||||
| `gitea_act_runner_amd64` (Docker) | `linux-amd64` | 172.0.0.29 | Native x86_64 — test builds + amd64/windows release |
|
||||
| `act_runner` (systemd) | `linux-arm64` | 172.0.0.29 | Native aarch64 — arm64 release builds |
|
||||
| `act_runner` (launchd) | `macos-arm64` | sarman's local Mac | Native Apple Silicon — macOS `.dmg` release builds |
|
||||
|
||||
Agent labels configured via `WOODPECKER_LABELS`:
|
||||
- Docker agents: `WOODPECKER_LABELS=platform=linux/amd64` (or arm64)
|
||||
- Local systemd agent: `~/.config/woodpecker-agent/config.env` → `WOODPECKER_LABELS=platform=linux/arm64`
|
||||
Agent labels configured in `~/.config/act_runner/config.yaml`:
|
||||
```yaml
|
||||
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*`
|
||||
|
||||
```
|
||||
Pipeline steps:
|
||||
1. clone (amd64 workspace) → alpine/git with explicit tag fetch + checkout
|
||||
2. build-linux-amd64 → cargo tauri build (x86_64-unknown-linux-gnu)
|
||||
→ artifacts/linux-amd64/{.deb, .rpm, .AppImage}
|
||||
3. build-windows-amd64 → cargo tauri build (x86_64-pc-windows-gnu)
|
||||
→ artifacts/windows-amd64/{.exe, .msi}
|
||||
4. build-linux-arm64 → cargo tauri build (aarch64-unknown-linux-gnu)
|
||||
→ artifacts/linux-arm64/{.deb, .rpm, .AppImage}
|
||||
→ uploads arm64 artifacts inline to Gitea release
|
||||
5. upload-release → Create Gitea release + upload amd64 + windows artifacts
|
||||
Jobs (run in parallel):
|
||||
build-linux-amd64 → cargo tauri build (x86_64-unknown-linux-gnu)
|
||||
→ {.deb, .rpm, .AppImage} uploaded to Gitea release
|
||||
build-windows-amd64 → cargo tauri build (x86_64-pc-windows-gnu) via mingw-w64
|
||||
→ {.exe, .msi} uploaded to Gitea release
|
||||
build-linux-arm64 → cargo tauri build (aarch64-unknown-linux-gnu)
|
||||
→ {.deb, .rpm, .AppImage} uploaded to Gitea release
|
||||
build-macos-arm64 → cargo tauri build (aarch64-apple-darwin) — runs on local Mac
|
||||
→ {.dmg} uploaded to Gitea release
|
||||
→ unsigned; after install run: xattr -cr /Applications/TFTSR.app
|
||||
```
|
||||
|
||||
**Per-step agent routing (Woodpecker 2.x labels):**
|
||||
|
||||
@ -266,7 +266,12 @@ export const applyRedactionsCmd = (logFileId: string, approvedSpanIds: string[])
|
||||
// ─── Issue CRUD ───────────────────────────────────────────────────────────────
|
||||
|
||||
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) =>
|
||||
invoke<IssueDetail>("get_issue", { issueId });
|
||||
|
||||
@ -51,9 +51,9 @@ export default function NewIssue() {
|
||||
setIsSubmitting(true);
|
||||
setError(null);
|
||||
try {
|
||||
const detail = await createIssueCmd({ title: title.trim(), domain: selectedDomain, severity });
|
||||
startSession(detail.issue);
|
||||
navigate(`/issue/${detail.issue.id}/triage`);
|
||||
const issue = await createIssueCmd({ title: title.trim(), domain: selectedDomain, severity });
|
||||
startSession(issue);
|
||||
navigate(`/issue/${issue.id}/triage`);
|
||||
} catch (err) {
|
||||
setError(String(err));
|
||||
setIsSubmitting(false);
|
||||
|
||||
@ -82,7 +82,7 @@ export default function Security() {
|
||||
aria-checked={enabledPatterns[pattern.id]}
|
||||
onClick={() => togglePattern(pattern.id)}
|
||||
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
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
body { @apply bg-background text-foreground; }
|
||||
|
||||
/* Prevent WebKit/GTK from overriding form control colors with system theme */
|
||||
input, textarea, select, button {
|
||||
input, textarea, select {
|
||||
color: hsl(var(--foreground));
|
||||
background-color: hsl(var(--background));
|
||||
-webkit-text-fill-color: hsl(var(--foreground));
|
||||
|
||||
Loading…
Reference in New Issue
Block a user