From e0eff7755fe4e4c29600e214c7b86e8624ebed1c Mon Sep 17 00:00:00 2001 From: Codex Bot Date: Tue, 10 Nov 2026 15:17:47 +0800 Subject: [PATCH] chore: remove CI/CD and document local development --- .dockerignore | 8 ----- .gitea/README.md | 26 ---------------- .gitea/workflows/README.md | 41 ------------------------- .gitea/workflows/ci.yml | 52 -------------------------------- Dockerfile.ci | 8 ----- README.md | 36 +++++++++++++--------- docs/architecture/01-modules.md | 2 +- docs/architecture/06-progress.md | 10 +++++- scripts/README.md | 15 ++++----- scripts/verify-ci.sh | 27 ----------------- src/README.md | 2 +- vendor/README.md | 4 +-- 12 files changed, 41 insertions(+), 190 deletions(-) delete mode 100644 .dockerignore delete mode 100644 .gitea/README.md delete mode 100644 .gitea/workflows/README.md delete mode 100644 .gitea/workflows/ci.yml delete mode 100644 Dockerfile.ci delete mode 100644 scripts/verify-ci.sh diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 893df3b..0000000 --- a/.dockerignore +++ /dev/null @@ -1,8 +0,0 @@ -.git -**/.git -target -**/target -**/AGENTS.md -**/work -**/ci-output -.env diff --git a/.gitea/README.md b/.gitea/README.md deleted file mode 100644 index ffa0881..0000000 --- a/.gitea/README.md +++ /dev/null @@ -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. diff --git a/.gitea/workflows/README.md b/.gitea/workflows/README.md deleted file mode 100644 index f7b43d8..0000000 --- a/.gitea/workflows/README.md +++ /dev/null @@ -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. diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml deleted file mode 100644 index a7a3be0..0000000 --- a/.gitea/workflows/ci.yml +++ /dev/null @@ -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 diff --git a/Dockerfile.ci b/Dockerfile.ci deleted file mode 100644 index 322483b..0000000 --- a/Dockerfile.ci +++ /dev/null @@ -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"] diff --git a/README.md b/README.md index 9f06329..d5fb093 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/docs/architecture/01-modules.md b/docs/architecture/01-modules.md index 297b9df..d1ca178 100644 --- a/docs/architecture/01-modules.md +++ b/docs/architecture/01-modules.md @@ -16,7 +16,7 @@ Tessera/ ├── docs/ │ ├── architecture/ 本套架构说明和 UML 源文件 │ └── media/ 已有建模视频与字幕 -├── scripts/ 原生打包及已有远程检查入口 +├── scripts/ 本地原生打包及 UML 文档渲染 └── vendor/aster/ 独立 Git 子模块:语言、编译器、VM ``` diff --git a/docs/architecture/06-progress.md b/docs/architecture/06-progress.md index c963474..84767df 100644 --- a/docs/architecture/06-progress.md +++ b/docs/architecture/06-progress.md @@ -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 会编译检查已有测试代码,但不代表测试已经执行。 diff --git a/scripts/README.md b/scripts/README.md index b2224aa..c9b9d0b 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -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 文档渲染 diff --git a/scripts/verify-ci.sh b/scripts/verify-ci.sh deleted file mode 100644 index 91b8d87..0000000 --- a/scripts/verify-ci.sh +++ /dev/null @@ -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" diff --git a/src/README.md b/src/README.md index f81fc9a..e78b684 100644 --- a/src/README.md +++ b/src/README.md @@ -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)。历史验收记录只代表当时实际执行的检查。 diff --git a/vendor/README.md b/vendor/README.md index 828e80b..4cfc954 100644 --- a/vendor/README.md +++ b/vendor/README.md @@ -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 ``` -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.