Files
ParaWiki/cimery/.github/workflows/release.yml
minsung 824c18610b
All checks were successful
Publish ParaWiki / build-and-deploy (push) Successful in 34s
Sprint 23/24 — Tauri v2 앱 래핑 + salsa 0.16 증분 쿼리 백엔드
Sprint 23: cimery-app을 Tauri v2 앱으로 전환.
- tauri.conf.json, capabilities/default.json, frontend/index.html 추가
- src/commands.rs: 7개 IPC 커맨드 (launch_viewer, 프로젝트 관리, USD/CSV 익스포트)
- 뷰어 사이드카: std::process::Command 방식 (PATH + exe-dir 탐색)
- release.yml: 3단계 멀티플랫폼 릴리스 워크플로로 교체

Sprint 24: cimery-incremental에 salsa 0.16 백엔드 추가.
- salsa_db.rs: BridgeQueryGroup + SalsaIncrementalDb<K>
- --features salsa-backend 로 활성화 (기본값: 수동 tracking, WASM 안전)
- IR 전 구조체 + Mesh + KernelError에 PartialEq/Eq 추가
- 테스트 20개 전부 통과 (수동 12 + salsa 8)
- cargo check --workspace 0 errors/warnings

기타: viewer/dsl 컴파일 경고 제거, wiki 실행 가이드 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 09:09:47 +09:00

217 lines
7.2 KiB
YAML

# cimery — Release build workflow (Sprint 23: Tauri v2 bundle)
# Triggered by pushing a version tag: git tag v0.1.0 && git push --tags
#
# Produces:
# - Windows x64: .msi (WiX) + .exe (NSIS) + cimery-viewer.exe
# - macOS arm64: .dmg + .app + cimery-viewer
# - Linux x64: .deb + .AppImage + cimery-viewer
#
# Sidecar: cimery-viewer is built first, then bundled alongside cimery-app.
# Code signing: placeholder (Azure Trusted Signing — ADR-003 A3).
name: Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
# ── 1. Build sidecar viewer for each platform ──────────────────────────────
build-viewer:
name: viewer (${{ matrix.target }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
viewer-bin: cimery-viewer.exe
- os: macos-latest
target: aarch64-apple-darwin
viewer-bin: cimery-viewer
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
viewer-bin: cimery-viewer
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
with:
key: viewer-${{ matrix.target }}
- name: Install Linux system deps
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update -qq
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
libgtk-3-dev \
libayatana-appindicator3-dev \
librsvg2-dev \
patchelf
- name: Build cimery-viewer (release)
run: cargo build --release -p cimery-viewer --target ${{ matrix.target }}
- name: Upload viewer binary
uses: actions/upload-artifact@v4
with:
name: viewer-${{ matrix.target }}
path: target/${{ matrix.target }}/release/${{ matrix.viewer-bin }}
retention-days: 1
# ── 2. Build Tauri app bundle (includes viewer sidecar) ───────────────────
build-tauri:
name: tauri-bundle (${{ matrix.target }})
needs: build-viewer
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
viewer-bin: cimery-viewer.exe
tauri-target: x86_64-pc-windows-msvc
- os: macos-latest
target: aarch64-apple-darwin
viewer-bin: cimery-viewer
tauri-target: aarch64-apple-darwin
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
viewer-bin: cimery-viewer
tauri-target: x86_64-unknown-linux-gnu
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
with:
key: tauri-${{ matrix.target }}
- name: Install Linux system deps
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update -qq
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
libgtk-3-dev \
libayatana-appindicator3-dev \
librsvg2-dev \
patchelf
# Download viewer sidecar built in previous job
- name: Download viewer sidecar
uses: actions/download-artifact@v4
with:
name: viewer-${{ matrix.target }}
path: crates/app/binaries/
- name: Make viewer executable (Unix)
if: matrix.os != 'windows-latest'
run: chmod +x crates/app/binaries/${{ matrix.viewer-bin }}
# Install cargo-tauri CLI
- name: Install tauri-cli
run: cargo install tauri-cli --version "^2" --locked
# Build Tauri app bundle
- name: Build Tauri bundle
working-directory: crates/app
run: cargo tauri build --target ${{ matrix.tauri-target }}
env:
# Code signing (placeholder — fill in secrets for production)
# APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
# APPLE_CERTIFICATE_PWD: ${{ secrets.APPLE_CERTIFICATE_PWD }}
# APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
# TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SKIP_DEVSERVER_CHECK: "true"
# Collect bundle artifacts
- name: Collect Windows installers
if: matrix.os == 'windows-latest'
shell: pwsh
run: |
$bundleDir = "target\${{ matrix.target }}\release\bundle"
New-Item -ItemType Directory -Force -Path dist
# MSI (WiX)
Get-ChildItem -Recurse $bundleDir -Filter "*.msi" |
Copy-Item -Destination dist\
# NSIS exe
Get-ChildItem -Recurse $bundleDir -Filter "*-setup.exe" |
Copy-Item -Destination dist\
- name: Collect macOS bundles
if: matrix.os == 'macos-latest'
run: |
bundleDir="target/${{ matrix.target }}/release/bundle"
mkdir -p dist
find "$bundleDir" -name "*.dmg" -exec cp {} dist/ \;
find "$bundleDir" -name "*.app" -type d | while read app; do
tar czf "dist/$(basename ${app%.app})-macos-arm64.tar.gz" -C "$(dirname $app)" "$(basename $app)"
done
- name: Collect Linux bundles
if: matrix.os == 'ubuntu-latest'
run: |
bundleDir="target/${{ matrix.target }}/release/bundle"
mkdir -p dist
find "$bundleDir" -name "*.deb" -exec cp {} dist/ \;
find "$bundleDir" -name "*.AppImage" -exec cp {} dist/ \;
- name: Upload Tauri bundle artifacts
uses: actions/upload-artifact@v4
with:
name: bundle-${{ matrix.target }}
path: dist/
retention-days: 7
# ── 3. Create GitHub Release ───────────────────────────────────────────────
create-release:
name: Create GitHub Release
needs: build-tauri
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download all bundles
uses: actions/download-artifact@v4
with:
pattern: bundle-*
merge-multiple: true
path: dist/
- name: Generate changelog
run: |
PREV=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
if [ -n "$PREV" ]; then
git log "${PREV}..HEAD" --oneline > RELEASE_NOTES.md
else
git log --oneline > RELEASE_NOTES.md
fi
echo "" >> RELEASE_NOTES.md
echo "---" >> RELEASE_NOTES.md
echo "Built with Tauri v2 · Rust · egui+wgpu" >> RELEASE_NOTES.md
- name: Publish GitHub Release
uses: softprops/action-gh-release@v2
with:
body_path: RELEASE_NOTES.md
files: dist/**
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}