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
4 changes: 2 additions & 2 deletions .github/workflows/appstore-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ jobs:
env:
CONTENTFUL_GRAPHQL_TOKEN: ${{ secrets.CONTENTFUL_GRAPHQLTOKEN }}
run: |
python build/fetch_catalog.py \
python ci/scripts/fetch_catalog.py \
--channel "${{ steps.resolve_channel.outputs.channel }}" \
--output-dir dist/catalog-source

Expand Down Expand Up @@ -140,7 +140,7 @@ jobs:
elif [[ -n "${{ steps.release_base.outputs.from_ref }}" ]]; then
args+=(--from-ref "${{ steps.release_base.outputs.from_ref }}")
fi
python build/library_publish.py "${args[@]}"
python ci/scripts/library_publish.py "${args[@]}"

- name: Generate changelog
if: steps.resolve_channel.outputs.channel == 'release'
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Read in this order:
- App metadata: `metadata/maintenance.yaml`, `metadata/archive.yaml`
- Shared skills: `skills/`
- Template: `metadata/templates/`
- Scripts: `ci/scripts/`, `build/`
- Scripts: `ci/scripts/`
- Process docs: `docs/ai-sdlc/`
- CI: `.github/workflows/`

Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ Project-level changes only: architecture, delivery model, tooling, CI, and relea

### Changed
- Moved the opencode session cleanup script from `build/` to `ci/scripts/` and updated `make opencode-clear` to use it.
- Moved `fetch_catalog.py` and `library_publish.py` from `build/` to `ci/scripts/`; the `build/` directory is now removed.

### Removed
- Removed the legacy `template/` directory; scaffolds and generated docs now use `metadata/templates/`.
- Removed unused `build/update_readme.py`, `build/update_variables.py`, `build/test_apps.py`, and `build/get_apps_latest_version.py`.
- Removed obsolete workflows: `build_files`, `pull_quest_test`, `pre_merge`, `release`, `release-dev`, `sync_php_files`, and `get_apps_latest_version`.
- Removed `add_apps.json` and its template-scaffold workflow.
- Removed the unused `build/sync_contentful.py`; Contentful sync now uses `libs catalog-push`.

## 2026-09

Expand Down
Binary file removed build/__pycache__/fetch_catalog.cpython-312.pyc
Binary file not shown.
Binary file removed build/__pycache__/library_publish.cpython-312.pyc
Binary file not shown.
91 changes: 0 additions & 91 deletions build/sync_contentful.py

This file was deleted.

File renamed without changes.
2 changes: 1 addition & 1 deletion build/library_publish.py → ci/scripts/library_publish.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from zipfile import ZIP_DEFLATED, ZipFile


ROOT = Path(__file__).resolve().parent.parent
ROOT = Path(__file__).resolve().parents[2]
APPS_DIR = ROOT / "apps"
PACKAGE_ROOT_NAME = "library"
CHANNEL_PACKAGE_NAMES = {
Expand Down
2 changes: 1 addition & 1 deletion cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,4 +118,4 @@ Credentials:
- resolution order: command flag > explicit `--env-file` > environment variable > default provider file
- CI keeps passing secrets as environment variables from GitHub Actions secrets; it does not use `.secrets/`

Run from the repository root or a subdirectory inside it. The CLI now refuses to run outside the repository so it cannot read or write the wrong `apps/` or `metadata/` tree by accident. CLI does not depend on `build/`.
Run from the repository root or a subdirectory inside it. The CLI now refuses to run outside the repository so it cannot read or write the wrong `apps/` or `metadata/` tree by accident. CLI does not depend on the publishing scripts under `ci/scripts/`.
2 changes: 1 addition & 1 deletion docs/appstore-release-spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -563,7 +563,7 @@ artifact/appstore/<channel>/
2. 解析 channel
3. 检查 R2 apps/ 是否为空 → 空则标记首次发布(--all-apps)
4. 从 Contentful 拉取 catalog 源数据
5. 运行 library_publish.py 构建所有制品(v2 + legacy),并以仓库 variables.json 统一 product distribution 数据结构
5. 运行 `ci/scripts/library_publish.py` 构建所有制品(v2 + legacy),并以仓库 variables.json 统一 product distribution 数据结构
6. 上传 v2 制品到新 R2 路径(`channel` 只由目录表达,full 固定入口统一为 `latest.zip`)
7. 上传 legacy 制品到旧 R2 路径(兼容旧消费者)
8. 清除 Cloudflare 缓存
Expand Down
3 changes: 1 addition & 2 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ Core layout:
- `metadata/archive.yaml`: archived app metadata and external handoff flags
- `skills/`: canonical shared skills for multiple agents
- `metadata/templates/`: app scaffold, README, and catalog templates
- `ci/scripts/`: local and CI helper scripts
- `build/`: generation and publishing scripts
- `ci/scripts/`: local, CI, and publishing scripts
- `docs/`: product, process, and maintainer docs
- `.github/workflows/`: CI, release, and maintenance automation

Expand Down
2 changes: 1 addition & 1 deletion docs/devops-spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ Those concerns belong to platform workflows or human process.

Recommended order:

1. Normalize existing `build/*.py` inputs and outputs.
1. Normalize existing `ci/scripts/*.py` inputs and outputs.
2. Introduce a thin unified CLI.
3. Update workflows to call the CLI.
4. Add `make` only if maintainers need local shortcuts.
Expand Down
2 changes: 1 addition & 1 deletion docs/test.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This repository uses five test layers:

1. Unit tests: `cli/libs` pure logic.
2. CLI contract tests: command input, JSON output, and exit code.
3. Metadata and template consistency tests: `metadata/`, templates, `build/` pipeline smoke, and repository facts.
3. Metadata and template consistency tests: `metadata/`, templates, publish pipeline smoke, and repository facts.
4. App deploy validation: changed apps only, high cost, not the default local loop.
5. Owner E2E: final human verification.

Expand Down
2 changes: 1 addition & 1 deletion tests/build/test_fetch_catalog.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from _helpers import REPO_ROOT, load_build_module

fetch_catalog = load_build_module("fetch_catalog_test", REPO_ROOT / "build" / "fetch_catalog.py")
fetch_catalog = load_build_module("fetch_catalog_test", REPO_ROOT / "ci" / "scripts" / "fetch_catalog.py")


def test_fetch_catalog_entries_returns_collection_items(monkeypatch):
Expand Down
2 changes: 1 addition & 1 deletion tests/build/test_library_publish.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

from _helpers import REPO_ROOT, load_build_module

library_publish = load_build_module("library_publish_test", REPO_ROOT / "build" / "library_publish.py")
library_publish = load_build_module("library_publish_test", REPO_ROOT / "ci" / "scripts" / "library_publish.py")


def test_hash_content_is_deterministic_and_input_sensitive():
Expand Down
Loading