1 Commits

Author SHA1 Message Date
codex-bot e0eff7755f chore: remove CI/CD and document local development 2026-11-10 15:17:47 +08:00
12 changed files with 41 additions and 190 deletions
-8
View File
@@ -1,8 +0,0 @@
.git
**/.git
target
**/target
**/AGENTS.md
**/work
**/ci-output
.env
-26
View File
@@ -1,26 +0,0 @@
# Tessera GUI automation
[workflows](workflows/README.md) contains repository workflows.
## CI source checkout
All workflows use `runs-on: ces-control`; no shared Runner configuration is changed.
`actions/checkout@v4` reads source over HTTPS using Gitea's automatically supplied
`GITEA_TOKEN`. No additional SSH key or known_hosts secrets are required, and
`persist-credentials: false` prevents credentials from being retained for later
build steps.
Consumer workflows read the exact Aster commit from the checked-out project's
`vendor/aster` gitlink, then use another standard checkout into that directory and
verify the resulting HEAD. They do not follow Aster main automatically. Aster is
currently a public repository, so reading it does not require private cross-repo
authorization. If that visibility changes, diagnose the job token's read access
instead of assuming an SSH key must be distributed.
The SSH URL in `.gitmodules` is retained for developer Git operations, which
continue to use the dedicated codex-bot identity. CI's built-in job token is
separate from local developer credentials.
Workflow definitions do not prove CI passed. CI/deployment state is not queried
automatically. Local runtime checks are not performed for Aster, Lyra or Hestia;
Tessera permits local native builds/window runs, with automated tests in CI.
-41
View File
@@ -1,41 +0,0 @@
# Tessera GUI workflows
[ci.yml](ci.yml) verifies this project on main pushes and manual dispatch from main. It runs on ces-control, with a 60-minute timeout. HTTPS checkout and job token details are in [the parent README](../README.md).
There is no production service deployment in this workflow.
The container includes the Endor examples used by the live guide and tests. It
validates the actual Aster-backed source-to-UI path, snapshot lifetime, layout and
execution budgets, failed-update preservation and stale-result invalidation, in
addition to the existing rendering checks and Clippy. Cargo uses official sources.
The primary example now executes top-level let statements and ui.page().render
through Aster's Interactive interface. Function-entry compatibility, original
source positions, page methods and page budgets are also checked. The workflow
checks the macOS packaging script's syntax without running it on Linux.
Docker is used only in this remote workflow; local compilation is native.
The test image installs DejaVu Sans/Mono and Noto CJK for font metrics and Chinese
fallback checks. Text regression tests inspect glyph selection, measured advances,
fractional scale, multiline bounds, Unicode truncation and antialiased opacity.
## Incremental verification
Gitea 1.26 concurrency groups cancel superseded runs on the same ref. Markdown-only
pushes to main skip verification; pull requests do not trigger this workflow; executable Endor examples and Rust
files (including embedded guide strings) still trigger checks. Manual dispatch
runs verification only when main is selected. Existing queued runs created from older workflow
revisions retain their old behavior.
The workflow invokes [verify-ci.sh](../../scripts/verify-ci.sh). Docker builds the
Rust 1.91.1/system/font toolchain from Dockerfile.ci over stdin, without sending a
source build context. The checkout is mounted read-only at /build. Named volumes
persist Cargo registry/git downloads and /cargo-target across container removal,
including failed tests and cancelled runs. Main push and manual runs use the main cache scope. Changing Rust/toolchain compatibility requires updating
the image and cache prefix in the script. Cargo lockfiles and fingerprints decide
which dependencies/artifacts are reusable; caches do not bypass checks.
A host flock serializes each scope's writable target cache. Signal handling
removes only the current run's named container; it never prunes shared Docker
resources or deletes cache volumes. The first run populates caches; later runs
still execute fmt, all tests and Clippy. Cargo compilation remains single-job to
limit memory pressure on the shared host. No CPU-time guarantee is implied.
-52
View File
@@ -1,52 +0,0 @@
name: Verify Tessera GUI
on:
push:
branches: [main]
paths-ignore: ["**/*.md"]
workflow_dispatch:
concurrency:
group: tessera-${{ gitea.workflow }}-${{ gitea.ref }}
cancel-in-progress: true
jobs:
verify:
if: gitea.ref == 'refs/heads/main'
runs-on: ces-control
timeout-minutes: 60
env:
DOCKER_BUILDKIT: "0"
steps:
- name: Checkout project
id: checkout_project
uses: actions/checkout@v4
with:
github-server-url: ${{ gitea.server_url }}
persist-credentials: false
- name: Read pinned Aster revision
id: aster_revision
run: |
set -eu
aster_sha=$(git ls-tree HEAD -- vendor/aster | awk '$1 == "160000" && $2 == "commit" && $4 == "vendor/aster" { print $3 }')
case "$aster_sha" in *[!0-9a-f]*|'') echo "Invalid Aster gitlink" >&2; exit 1;; esac
test "${#aster_sha}" -eq 40
printf 'sha=%s\n' "$aster_sha" >> "$GITHUB_OUTPUT"
- name: Checkout pinned Aster
id: checkout_aster
uses: actions/checkout@v4
with:
github-server-url: ${{ gitea.server_url }}
repository: Zayden-Jung/endorphin-aster-vm
ref: ${{ steps.aster_revision.outputs.sha }}
path: vendor/aster
persist-credentials: false
- name: Verify Aster revision
env:
EXPECTED_ASTER_SHA: ${{ steps.aster_revision.outputs.sha }}
run: test "$(git -C vendor/aster rev-parse HEAD)" = "$EXPECTED_ASTER_SHA"
- name: Verify portable GUI code with persistent Cargo caches
env:
CI_CACHE_SCOPE: ${{ gitea.event_name == 'pull_request' && format('pr-{0}', gitea.event.pull_request.number) || 'main' }}
run: sh scripts/verify-ci.sh
-8
View File
@@ -1,8 +0,0 @@
FROM rust:1.91.1-bookworm
WORKDIR /build
RUN apt-get update && apt-get install -y --no-install-recommends pkg-config libx11-dev libxkbcommon-dev libwayland-dev libudev-dev libegl1-mesa-dev libgbm-dev fonts-dejavu-core fonts-noto-cjk \
&& rm -rf /var/lib/apt/lists/* \
&& rustup component add rustfmt clippy
ENV CARGO_BUILD_JOBS=1 CARGO_PROFILE_DEV_DEBUG=0 CARGO_PROFILE_TEST_DEBUG=0
ENV CARGO_TARGET_DIR=/cargo-target
CMD ["sh", "-eu", "-c", "cargo fmt --check && cargo test --locked && cargo clippy --all-targets --locked -- -D warnings"]
+22 -14
View File
@@ -37,8 +37,9 @@ Cargo compiles the required Aster libraries together with Tessera. No separate
Aster build, service or deployment is required. Local builds download dependencies
from official crates.io by default. A temporary dependency mirror may be used
when the official source is unavailable, without changing global configuration.
Docker and automated tests
are not used locally. The command above produces a native executable. To create a
Builds and validation run locally using the native Rust toolchain; no CI/CD
workflow or Docker toolchain is configured. The command above produces a native
executable. To create a
Finder-launchable development app on macOS, run:
```bash
@@ -127,7 +128,7 @@ is 14 logical pixels with a 20-pixel line height; size 2 is 28/40. Row/Column la
uses measured text advances and multiline height. Device scale remains fractional,
and glyphs are rasterized at the actual display resolution rather than enlarged.
The application does not bundle proprietary OS fonts. Linux installations need
fonts such as DejaVu Sans/Mono and Noto CJK; the remote test image installs these.
fonts such as DejaVu Sans/Mono and Noto CJK installed locally.
## Candidate execution and publication
@@ -410,17 +411,24 @@ UTF-8 even when launched from Finder, and decoding errors are surfaced.
## Validation
Local native builds and window runs are allowed; do not run local automated tests
or Docker. [Remote CI](.gitea/README.md) on ces-control runs the existing renderer
checks and the new Aster script/module execution, page rendering, UI layout, source-range, lifetime, budget,
failed-update and deletion-invalidation regressions, plus Clippy.
The API regressions use actual HTTP requests, including DELETE while the worker
is occupied and a queued PUT is superseded.
Linux CI does not verify macOS window presentation. Aster has no standalone CI/CD; Lyra CI
explicitly validates the pinned engine itself. CI uses official Cargo sources
and standard HTTPS checkout without custom SSH secrets. Font checks cover
proportional/monospace advances, fractional scaling, multiline height, Chinese
fallback, grapheme-safe truncation, antialiasing and alpha blending.
Run checks from the repository root after initializing the pinned Aster submodule:
```bash
cargo fmt --check
cargo test --locked
cargo clippy --all-targets --locked -- -D warnings
sh -n scripts/build-macos-app.sh
```
The existing tests cover rendering, Aster execution, page layout, source ranges,
lifetime, budgets, failed-update preservation and deletion invalidation. API tests
use loopback HTTP, so allow local socket access. Font checks use installed system
fonts. Automated checks do not replace native window verification: launch Tessera
and check the start page, shared-object example, tab creation/closure and developer
tools. Build the macOS bundle separately with `sh scripts/build-macos-app.sh`.
There is no repository CI/CD workflow. Commits and pull requests do not trigger
builds or deployment; record the actual local check results with each delivery.
### Source function types
+1 -1
View File
@@ -16,7 +16,7 @@ Tessera/
├── docs/
│ ├── architecture/ 本套架构说明和 UML 源文件
│ └── media/ 已有建模视频与字幕
├── scripts/ 原生打包及已有远程检查入口
├── scripts/ 本地原生打包及 UML 文档渲染
└── vendor/aster/ 独立 Git 子模块:语言、编译器、VM
```
+9 -1
View File
@@ -26,7 +26,15 @@
4. [建模视频](../media/endor-campus-modeling.mp4) 与 [中文字幕](../media/endor-campus-modeling.zh.srt):已有实际窗口操作记录,静音、采样帧率有说明。
5. `GET /agent`:运行中的实时 API 指南,优先于长期静态样例推断接口。
## 本轮验证方式
## 当前本地开发方式(2026-11-10)
项目已移除 CI/CD 工作流、Docker 工具链定义及远程验证脚本。开发、构建、现有测试与原生窗口验收改在本机执行,命令见 [项目验证说明](../../README.md#validation)。以下保留 2026-10-25 整理时的验收记录,不代表本次检查结果。
本次使用 macOS / Rust 1.91.1:格式检查、150 项现有测试、all-target Clippy(拒绝 warnings)、打包脚本语法检查及 release app 构建均通过。应用已启动,`GET /agent` 与 `GET /code` 返回正常,窗口报告 1280 × 800 的逻辑 viewport;通过实际 REPL 创建/关闭临时标签页,页面数为 1 → 2 → 1。首次页面查询误用了不存在的 `ui.pages()`,返回 422;改为 `ui.window().pages().count` 后通过。原生 UI 检查工具启动失败,本次没有窗口外观、真实鼠标交互或跨屏验收证据。Aster 保持固定版本,未修改源码或 gitlink。
下一步优先补齐真实窗口的共享对象、标签拖放和退出清理验收,然后定义本地 `.endor` 文件的打开、保存及重启恢复方式。当前 Sources 的云文件 provider 默认断开,源码/设置尚不持久化。此外,在线 API 指南仍有旧的标签高度、overflow 箭头和增量布局状态说明,需要与现有实现及测试统一。
## 2026-10-25 整理验证方式
本轮是整理,不扩展业务功能。沿用工作约定:格式、`cargo clippy --all-targets --offline -- -D warnings`、原生 release 打包、真实窗口和少量人工 API 操作;不执行 cargo test、自动 smoke 脚本或 Docker。Clippy 会编译检查已有测试代码,但不代表测试已经执行。
+6 -9
View File
@@ -9,19 +9,16 @@ when official crates.io is unavailable. Defaults remain the official source.
The local bundle has identifier `com.entroia.tessera` and can be opened from Finder.
It is a development app, without a distribution signature or notarization.
The CI workflow only checks this script's shell syntax on Linux; native bundle
construction and window presentation are verified on macOS.
Check shell syntax with `sh -n scripts/build-macos-app.sh`; native bundle
construction and window presentation are verified locally on macOS.
Return to the [project guide](../README.md).
## Remote verification
## Local verification
[verify-ci.sh](verify-ci.sh) runs only on the Linux ces-control host. It builds the
source-independent [toolchain image](../Dockerfile.ci), mounts the checkout
read-only and retains Cargo downloads/build output in project-specific Docker
volumes. CI_CACHE_SCOPE selects main/manual or a PR cache namespace. It acquires
a host lock and removes its own container on interruption; cached volumes survive.
See [workflow details](../.gitea/workflows/README.md) for invalidation and triggers.
Build and validate with the native Rust toolchain. The project has no CI/CD
workflow or Docker build image. See the [validation commands](../README.md#validation)
for formatting, tests and Clippy; window behavior is checked in the running app.
## UML 文档渲染
-27
View File
@@ -1,27 +0,0 @@
#!/bin/sh
# Run only on the Linux CI host with Docker; never bake source into cache images.
set -eu
scope=${CI_CACHE_SCOPE:-manual}
case "$scope" in *[!a-zA-Z0-9_-]*|'') echo "Invalid cache scope" >&2; exit 1;; esac
root=$(pwd -P)
image=endorphin-tessera-gui-ci:rust-1.91.1
prefix=tessera-ci-rust-1-91-1-$scope
# Serialize access to each target directory, including manually started checks.
exec 9>"/tmp/$prefix.lock"
flock 9
sh -n scripts/build-macos-app.sh
# Empty context: only the toolchain and OS dependencies become image layers.
docker build -t "$image" - < Dockerfile.ci
name="$prefix-${GITHUB_RUN_ID:-$$}"
cleanup() { docker rm -f "$name" >/dev/null 2>&1 || true; }
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
docker run --name "$name" --rm --init \
--mount "type=bind,src=$root,dst=/build,readonly" \
--mount "type=volume,src=$prefix-target,dst=/cargo-target" \
--mount "type=volume,src=$prefix-registry,dst=/usr/local/cargo/registry" \
--mount "type=volume,src=$prefix-git,dst=/usr/local/cargo/git" \
"$image" &
run_pid=$!
wait "$run_pid"
+1 -1
View File
@@ -83,4 +83,4 @@
VM 和托管根只由执行 worker 操作。原生窗口收到已发布值,不收到 ObjectRef。完整 PUT 成功才接替活跃程序;Console 保留实际 VM;失败和清理语义见架构文档。
本机遵循既有检查约定:格式、离线 Clippy、原生 release 构建和人工运行检查;不执行 cargo test、自动 smoke 脚本或 Docker。已有远程检查脚本保留原位置,此次不运行或追逐 CI。
当前开发与验证在本机使用原生 Rust 工具链完成:格式、现有测试、Clippy、原生构建和人工运行检查。CI/CD 工作流与 Docker 检查入口已移除;具体命令见 [项目验证说明](../README.md#validation)。历史验收记录只代表当时实际执行的检查。
+2 -2
View File
@@ -43,7 +43,7 @@ not replace Tessera's lockfile.
In the designated build environment, building Tessera also builds the required
Aster libraries. A separate Aster executable or service is unnecessary. Runtime
validation follows the designated remote validation workflow; initializing the
validation runs locally using the commands in the [project guide](../README.md#validation); initializing the
submodule alone does not validate compilation or Endor execution.
## Updating Aster
@@ -56,7 +56,7 @@ git -C vendor/aster fetch origin
git -C vendor/aster checkout --detach <aster-commit>
```
Review the Aster changes and reconcile Tessera's dependencies and lockfile as needed; local native compilation is allowed, while automated tests run in CI. Commit `vendor/aster` in Tessera
Review the Aster changes and reconcile Tessera's dependencies and lockfile as needed; build and validate the integration locally. Commit `vendor/aster` in Tessera
along with any integration changes; that records the new Aster commit. Aster
updates do not automatically advance Tessera's recorded revision.