Skip to content

Repository files navigation

Utoo Logo

utoopack-ecosystem-ci

Continuously validates published releases and source-built @utoo/pack candidates against Umi, Ant Design Pro, Ant Design, Father, Dumi, and EVJS. Each suite injects the candidate into a fresh consumer checkout, runs its real utoopack build or E2E workflow in isolation, and verifies the expected output.

Suites

Suite Consumer E2E coverage
umi umijs/umi@master Runs Umi's native utoopack browser E2E plus its qiankun slave and utoopack master E2Es
ant-design-pro ant-design/ant-design-pro@master Runs the production Umi Max + utoopack build and starts its utoopack dev server
ant-design ant-design/ant-design@7793cab Runs the production Dumi site build and the exact utoopack dev startup from utooland/utoo#3332
father umijs/father@master Builds Father, then builds its utoopack UMD example
dumi umijs/dumi@master Builds Dumi from source, then builds and starts a minimal site based on Dumi's official template with utoopack
evjs afx-team/evjs@main Builds EVJS packages, starts its basic app with ev dev, and runs its bundler-utoopack Playwright project
evjs-shared-runtime afx-team/evjs@main Enables sharedRuntime in the disposable two-page MPA example, runs its Chromium E2E, and verifies both pages load the same runtime asset last

Every suite verifies that its expected output directory exists and is non-empty. Node.js 22 is used in CI, satisfying utoopack's Node.js 20+ requirement.

For EVJS, the runner also verifies the candidate from packages/bundler-utoopack's module-resolution context. Its upstream lockfile currently contains a workspace-local @utoo/pack entry, so the disposable checkout removes that stale generated copy after installation before running E2E; this prevents the root override from producing a false-positive result.

Run locally

Requirements: Node.js 22, Git, and Utoo 1.1.8 or newer. The project self-pins to Utoo 1.1.8.

ut install
ut test
ut lint
ut check:workflow

# Show suites
ut ecosystem -- --list

# Test a published version or dist-tag
ut ecosystem -- --suite father --pack latest
ut ecosystem -- --suite ant-design-pro --pack 1.5.3
ut ecosystem -- --suite ant-design --pack latest
ut ecosystem -- --suite evjs --pack latest

# Run the shared runtime regression alone against a candidate containing the feature
ut ecosystem -- --suite evjs-shared-runtime --pack /path/to/utoo-pack.tgz --pack-shared /path/to/utoo-pack-shared.tgz

# Inspect the exact plan without cloning or installing
ut ecosystem -- --suite dumi --pack latest --dry-run

To test locally built tarballs:

node scripts/prepare-candidate.mjs \
  --source /path/to/utoo \
  --out candidate-artifacts

ut ecosystem -- \
  --suite umi \
  --pack candidate-artifacts/utoo-pack.tgz \
  --pack-shared candidate-artifacts/utoo-pack-shared.tgz

Consumer checkouts are disposable and live under workspace/. Use --keep to reuse an existing checkout, --ref <branch|tag|commit> to test a consumer ref, or --repo <owner/repo> to test a fork.

GitHub Actions

The Utoopack ecosystem CI workflow supports four entry points:

  • Daily schedule: the seven suites in all against the npm latest tag.
  • Manual run: choose npm/source mode, an individual suite or all, and optionally a harness branch to validate.
  • repository_dispatch: event type utoopack-ecosystem-ci with the same values in client_payload.
  • Reusable workflow: call it directly from the utoo repository so the result appears on the originating PR or commit.

In npm mode, pack_spec is an npm version or dist-tag. In source mode, the workflow checks out utoo_repository@utoo_ref, initializes the next.js submodule, builds the Linux x64 native package once, packs @utoo/pack and @utoo/pack-shared, and shares those tarballs with the selected consumer jobs.

The workflow's all selector runs all seven suites, including evjs-shared-runtime, on the daily schedule and for Utoopack releases. It is a workflow input, not a name accepted by the local ut ecosystem -- --suite CLI. To run only the shared runtime check, select evjs-shared-runtime (or use source mode with a Utoo ref containing the feature before its npm release). The npm latest package must contain sharedRuntime for the scheduled all run to pass.

Call from the utoo repository

Add a small workflow to the utoo repository:

name: Ecosystem CI

on:
  pull_request:
    types: [opened, synchronize, reopened]
  workflow_dispatch:

permissions:
  contents: read

jobs:
  ecosystem:
    uses: utooland/utoo-ecosystem-ci/.github/workflows/ecosystem-ci.yml@main
    with:
      candidate_mode: source
      utoo_repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
      utoo_ref: ${{ github.event.pull_request.head.sha || github.sha }}
      suite: all
      harness_repository: utooland/utoo-ecosystem-ci
      harness_ref: main

For a published Utoopack release, set candidate_mode: npm, pack_spec to the newly published version, and suite: all in the reusable workflow call. The harness ref must contain the evjs-shared-runtime suite.

No secrets are required for public repositories. GitHub-hosted runners need enough time and disk for the one-time Rust/NAPI source build; the source preparation job has a three-hour timeout and frees unused runner images first.

Dispatch payload example

gh api --method POST repos/utooland/utoo-ecosystem-ci/dispatches \
  -f event_type=utoopack-ecosystem-ci \
  -f 'client_payload[candidate_mode]=npm' \
  -f 'client_payload[pack_spec]=latest' \
  -f 'client_payload[suite]=all'

Maintenance

This repository itself uses Utoo (ut install, ut test, and ut lint) and keeps an npm-compatible package-lock.json, which Utoo reads and updates. JavaScript is linted with @utoo/lint; its files, ignores, and rules live in utlint.config.ts. ut check:workflow separately enforces the GitHub Actions SHA policy. Consumer checkouts generally use the package manager declared by each upstream repository; the large Ant Design and Ant Design Pro dependency graphs use Utoo for faster installation while retaining their upstream npm scripts and npm-compatible dependency overrides.

Suite commands live in src/suites.mjs. Keep them aligned with the consumer repositories' own CI and examples. External GitHub Actions are pinned to full commit SHAs; ut check:workflow enforces that policy.

About

Ecosystem CI for Utoo

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages