# devops **Repository Path**: tools_40/devops ## Basic Information - **Project Name**: devops - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-13 - **Last Updated**: 2026-08-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # YOIO Local Build Console A local Flutter Web + Rust packaging dashboard for the YOIO Flutter project. It stores a web-configurable local Git checkout path, lists that checkout's branches, creates an isolated detached worktree for each build, invokes the selected branch's existing packaging script, and keeps logs and downloadable artifacts on this Mac. Woodpecker CI provides the local verification and packaging workflows. The dashboard also exposes a persistent pipeline task catalog. Six Woodpecker presets are created automatically, including serial and parallel Android emulator-test/package pipelines. Local custom presets can be added from the UI with a bound Git branch. The frontend reads and runs every task through the Rust API; task runs reuse the same immutable-branch queue, logs, retention, and artifacts as manual builds. ## Pipeline engine - `.woodpecker/verify.yaml` runs Rust formatting/tests and Flutter Web analysis/tests/builds. - `.woodpecker/package.yaml` runs the selected branch's Android or iOS packaging script from its detached worktree. - `.woodpecker/android-emulator-serial.yaml` runs `integration_test/app_e2e_test.dart` on `emulator-5554`, then packages a release APK after the test succeeds. - `.woodpecker/android-emulator-parallel.yaml` runs the same emulator suite from an isolated Git archive while release packaging runs concurrently. - Workflows use Woodpecker's `local` backend, which executes directly on this trusted Mac. Docker and another container runtime are not required. - The official Woodpecker Web UI runs at , backed by a native local server and agent. The existing dashboard remains available at when its Rust service is running. - A local single-user forge addon exposes `yoio-new/yoio-flutter`, reads branches and workflow files locally, and retains the Alibaba Codeup SSH origin for cloning. It does not call Codeup OAuth, webhook, commit-status, or PR APIs. - The official UI exposes only the serial and parallel Android emulator workflows. Both are manual workflows; the Rust dashboard can continue using all four local workflow files through `woodpecker-cli exec`. ## Task catalog API - `GET /api/config` returns the active local project path. - `PUT /api/config/project-root` validates and saves the active local Git checkout path. - `GET /api/tasks` lists Woodpecker and custom task presets. - `POST /api/tasks` creates a reusable custom package preset bound to a branch. - `POST /api/tasks/{id}/runs` runs the preset against its stored branch. Task definitions are stored in `data/build-console.sqlite3`. Standard and custom presets use `.woodpecker/package.yaml`; the two emulator presets use their dedicated serial/parallel workflows. The task's bound branch packaging script remains the source of truth for versioning and packaging behavior. ## Supported script mapping | Platform | Option | Script required in selected branch | |---|---|---| | Android | Debug | `scripts/build_debug_apk.sh` | | Android | Release | `scripts/build_release_apk.sh` | | iOS | Development, normal | `scripts/archive_testflight_ios_ipa.sh` | | iOS | Development, developer panel | `scripts/archive_testflight_ios_capture_development.sh` | | iOS | TestFlight, normal | `scripts/archive_testflight_ios_ipa.sh` with `EXPORT_METHOD=app-store` | | iOS | TestFlight, developer panel | `scripts/archive_testflight_ios_capture.sh` with `EXPORT_METHOD=app-store` | The configured `/Users/jon/Desktop/work/code/yoio-flutter` checkout currently contains both Android and iOS packaging scripts. When a selected branch lacks a suitable local iOS script, the console uses `scripts/build_ios_ipa.sh`: a local fallback that sources the branch's existing `scripts/yoio_build_version.sh` and then runs `flutter build ipa`. Android never falls back to a different command. TestFlight mode creates an upload-ready IPA but does not upload it. Development mode creates a development-signed IPA for provisioned devices. Direct iOS OTA installation additionally requires serving this application through trusted HTTPS and setting `PUBLIC_BASE_URL` to that HTTPS origin. ## Run locally Requirements: macOS Apple Silicon, Go 1.26, Node/pnpm, Flutter 3.41.5, Rust, Android tooling for APKs, and Xcode for iOS packaging. Build and start the pinned native Woodpecker installation with: ```bash ./scripts/woodpecker/install.sh ./scripts/woodpecker/start.sh ./scripts/woodpecker/status.sh ``` Open and choose **Login**. The local forge signs in as the `local` administrator without external OAuth. The `yoio-new/yoio-flutter` repository is already activated in the current local data store. To stop the server and agent: ```bash ./scripts/woodpecker/stop.sh ``` The install script builds Woodpecker server, agent, and CLI 3.16.0 from the official source tag, builds plugin-git 2.9.2, and compiles the repository-local forge addon. Runtime binaries and state stay under `data/woodpecker/`. ## Run the YOIO build console ```bash ./scripts/build_web.sh ./scripts/run_pipeline.sh ./scripts/run_local.sh ``` Open . The Rust service serves both the API and the compiled Flutter Web application. Configuration: ```bash YOIO_REPO=/Users/jon/Desktop/work/code/yoio-flutter BUILD_DATA_DIR=/Users/jon/Desktop/work/code/devtools/devops/data BIND_ADDR=127.0.0.1:4100 PUBLIC_BASE_URL=http://127.0.0.1:4100 MAX_BUILDS=30 WOODPECKER_CLI=woodpecker-cli YOIO_EMULATOR_DEVICE=emulator-5554 YOIO_AUTOMATION_TARGET=integration_test/app_e2e_test.dart ``` The local backend provides no isolation and should only execute trusted private code. The console still creates a detached worktree pinned to an immutable commit before invoking Woodpecker. Use the Refresh control to run `git fetch --prune origin`. Builds resolve the selected ref to an immutable commit before entering the queue. ## Local data ```text data/ build-console.sqlite3 artifacts// logs/.log worktrees// woodpecker/ bin/ logs/ workspaces/ agent-secret woodpecker.sqlite ``` Only one build runs at a time. After a completed job, its temporary worktree is removed. The newest 30 records are retained; older artifacts and logs are pruned.