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
66 changes: 65 additions & 1 deletion .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,13 @@ name: Linux
on:
push:
branches: [main]
tags:
- "v*.*.*"
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
linux-tools:
Expand All @@ -27,10 +33,68 @@ jobs:
run: MAJDATA_ROOT=$PWD MAJDATA_PYTHON=$HOME/.venvs/majdataviewalpha/bin/python /tmp/majdata-cli/majdata doctor

- name: Build Linux release archive
env:
MAJDATA_VERSION: ${{ github.ref_type == 'tag' && github.ref_name || '' }}
run: bash scripts/linux-release.sh

- name: Upload Linux release artifact
uses: actions/upload-artifact@v4
with:
name: MajdataViewAlpha-Linux
path: dist/linux/*.tar.gz
path: |
dist/linux/*.tar.gz
dist/linux/SHA256SUMS

publish-release:
if: github.ref_type == 'tag'
needs: linux-tools
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Download Linux release artifact
uses: actions/download-artifact@v4
with:
name: MajdataViewAlpha-Linux
path: dist/linux

- name: Publish GitHub Release
uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3
with:
name: MajdataViewAlpha ${{ github.ref_name }} Linux
draft: false
prerelease: ${{ contains(github.ref_name, '-') }}
make_latest: ${{ !contains(github.ref_name, '-') }}
generate_release_notes: true
fail_on_unmatched_files: true
files: |
dist/linux/*.tar.gz
dist/linux/SHA256SUMS
body: |
Linux 发布包:Avalonia 轻量编辑器、majdata CLI、Maicaiyin 自动踩音与 simai_parser。

## 包含

- `bin/majdata` — 命令行工具
- `bin/majdata-edit` — Avalonia 编辑器启动脚本
- `bin/maicaiyin-infer` — 自动踩音
- `bin/setup-python-env` — 目标机器 Python 环境
- `App/MajdataEdit` — 框架依赖发布的编辑器
- `tools/Maicaiyin` — 推理引擎与模型

## 不含

- Unity Linux 播放器(需本机用 Unity 6000.4.2f1 构建 Standalone Linux64)
- Windows WPF 编辑器与桌宠启动器

## 使用

```bash
tar -xzf MajdataViewAlpha-Linux-${{ github.ref_name }}.tar.gz
cd MajdataViewAlpha-Linux-${{ github.ref_name }}
./bin/setup-python-env
./bin/majdata doctor
./bin/majdata-edit
```

目标机器需要 .NET 8 runtime 与 ffmpeg。详见包内 `README.md`。
16 changes: 7 additions & 9 deletions MajdataEdit.Cli/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ static int RunDoctor()
var ok = true;
ok &= Check("python3", "python3 --version");
ok &= Check("ffmpeg", "ffmpeg -version");
var tools = ResolveMaicaiyinDir();
ok &= File.Exists(Path.Combine(tools, "infer.py"));
ok &= File.Exists(Path.Combine(tools, "joint-placement-numpy.npz"));
var tools = AutoOnsetRunner.ResolveToolDirectory();
ok &= Exists("maicaiyin infer.py", Path.Combine(tools, "infer.py"));
ok &= Exists("maicaiyin model", Path.Combine(tools, "joint-placement-numpy.npz"));
Console.WriteLine(ok ? "doctor-ok" : "doctor-failed");
return ok ? 0 : 1;
}
Expand Down Expand Up @@ -167,13 +167,11 @@ static int RunParse(string[] args)
return 0;
}

static string ResolveMaicaiyinDir()
static bool Exists(string name, string path)
{
var env = Environment.GetEnvironmentVariable("MAJDATA_MAICAIYIN");
if (!string.IsNullOrWhiteSpace(env))
return env;
var root = Environment.GetEnvironmentVariable("MAJDATA_ROOT") ?? FindRepoRoot();
return Path.Combine(root, "MajdataEdit", "tools", "Maicaiyin");
var success = File.Exists(path);
Console.WriteLine(success ? $"[ok] {name}" : $"[missing] {name} ({path})");
return success;
}

static string ResolveParserScript()
Expand Down
2 changes: 2 additions & 0 deletions README-LINUX.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ MajdataViewAlpha 在 Linux 上提供 **Avalonia 轻量编辑器**、**原生 CLI
./scripts/linux-release.sh # 打包 dist/linux/MajdataViewAlpha-Linux-*.tar.gz
```

推送 `v*.*.*` 标签(例如 `v0.4.2`)后,GitHub Actions 会构建 Linux 包并发布到 [Releases](https://github.com/pashippercode/MajdataViewAlpha/releases)。带 `-` 的标签(例如 `v0.4.3-rc1`)会标为 prerelease,不会替换 latest。

### Avalonia 编辑器(推荐 GUI)

无需 Wine 或 WindowsDesktop SDK,框架依赖发布体积极小:
Expand Down
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ Alpha 命令写在谱面时间线中:

## 下载与运行

从 [Releases](https://github.com/Jian04/MajdataViewAlpha/releases) 下载完整发布包,解压后运行:
从 [Releases](https://github.com/Jian04/MajdataViewAlpha/releases) 下载完整 **Windows** 发布包,解压后运行:

```text
MajdataLauncher.exe
Expand All @@ -187,6 +187,16 @@ MajdataViewAlpha/

请保持目录结构完整。也可以直接运行 `App/MajdataEdit/MajdataEdit.exe`。

Linux 包从本仓库 [Releases](https://github.com/pashippercode/MajdataViewAlpha/releases) 下载 `MajdataViewAlpha-Linux-*.tar.gz`,解压后运行:

```bash
./bin/setup-python-env
./bin/majdata doctor
./bin/majdata-edit
```

详见 [README-LINUX.md](README-LINUX.md)。

## 从源码构建

### Linux 工具链与发布包
Expand Down
11 changes: 7 additions & 4 deletions scripts/linux-release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ fi

bash "$ROOT/scripts/smoke-linux.sh"

rm -rf "$OUT"
rm -rf "$ROOT/dist/linux"
mkdir -p "$OUT/bin" "$OUT/tools" "$OUT/App/MajdataEdit" "$OUT/App/MajdataView"

echo "== Build native majdata CLI =="
Expand All @@ -26,9 +26,6 @@ echo "== Build Avalonia MajdataEdit =="
dotnet publish "$ROOT/MajdataEdit.Avalonia/MajdataEdit.Avalonia.csproj" -c Release -r linux-x64 --self-contained false -o "$OUT/App/MajdataEdit" -nologo
chmod +x "$OUT/App/MajdataEdit/MajdataEdit" 2>/dev/null || true

# Quick CLI smoke
MAJDATA_ROOT="$ROOT" MAJDATA_PYTHON="$VENV/bin/python" "$OUT/bin/majdata" doctor

echo "$VERSION" > "$OUT/VERSION"
cp "$ROOT/README-LINUX.md" "$OUT/README.md"
cp "$ROOT/simai_parser.py" "$OUT/"
Expand Down Expand Up @@ -98,9 +95,15 @@ echo "Python env ready: \$VENV"
WRAP
chmod +x "$OUT/bin/setup-python-env"

echo "== Verify assembled package =="
MAJDATA_ROOT="$OUT" MAJDATA_PYTHON="$VENV/bin/python" "$OUT/bin/majdata" doctor

mkdir -p "$(dirname "$ARCHIVE")"
tar -C "$(dirname "$OUT")" -czf "$ARCHIVE" "$(basename "$OUT")"
(cd "$(dirname "$ARCHIVE")" && sha256sum "$(basename "$ARCHIVE")" > SHA256SUMS)

echo "Release directory: $OUT"
echo "Archive: $ARCHIVE"
echo "Checksums: $(dirname "$ARCHIVE")/SHA256SUMS"
du -sh "$OUT" "$ARCHIVE"
cat "$(dirname "$ARCHIVE")/SHA256SUMS"
Loading