feat: add manifest-driven batch rebuild, numpy cross-compilation, and CI pipeline updates
Some checks failed
EcoArk Wheel Pipeline CI / build (push) Failing after 1m41s

- Add pipeline/manifest.py for packages.txt parsing
- Implement real numpy cross-compilation (rebuild.py) with OHOS NDK + vendored meson
- Extend CLI with --manifest, --build-from-source, --stage-integration modes
- Add recipes/, experiments/, and scripts/ for integration staging and artifact upload
- Update CI workflow with manifest validation, artifact upload, and release publishing
- Update Makefile and README with new targets and documentation
This commit is contained in:
root
2026-05-13 14:16:24 +08:00
parent cdc816467d
commit 553b83953c
15 changed files with 1310 additions and 99 deletions

View File

@ -3,16 +3,19 @@ name: EcoArk Wheel Pipeline CI
on:
push:
branches: [main]
# Uncomment the line below to trigger releases on tags:
# tags: ['v*']
pull_request:
branches: [main]
workflow_dispatch:
jobs:
# ──────────────────────────────────────────────
# Job 1: validate — pure wheel repack + native stub
# ──────────────────────────────────────────────
validate:
# ──────────────────────────────────────────────────────
# Job: build — validate core logic + manifest-driven
# rebuild (stub) + zip bundle
# ──────────────────────────────────────────────────────
build:
runs-on: ubuntu-latest
steps:
@ -25,49 +28,77 @@ jobs:
- name: Show environment info
run: |
echo "══════════════════════════════════════════"
echo "╔══════════════════════════════════════════╗"
echo "║ EcoArk Wheel Pipeline CI ║"
echo "╚══════════════════════════════════════════╝"
echo " Runner : $(uname -a)"
echo " Hostname: $(hostname)"
echo " Date : $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo "══════════════════════════════════════════"
echo " Date : $(date -u +%Y%m%dT%H%M%SZ)"
python3 --version
pip3 --version 2>/dev/null || echo "pip3 not available"
which make gcc g++ rustc 2>/dev/null || true
which make git 2>/dev/null || true
- name: Install Python build deps
run: |
pip3 install --quiet --upgrade pip setuptools wheel 2>/dev/null || true
# ── Validate single-wheel mode (backward-compat) ──
- name: Generate test wheels
run: |
python3 examples/gen_test_wheels.py
- name: Show generated test wheels
run: |
ls -lh examples/*.whl
run: python3 examples/gen_test_wheels.py
- name: Validate pure wheel repack
run: |
WHEEL=$(ls examples/*-none-any.whl | head -1)
echo "Pure wheel: $WHEEL"
python3 wheel_pipeline.py "$WHEEL" --output-dir output
echo ""
echo "Output files:"
ls -lh output/*.whl
- name: Validate native wheel stub
run: |
WHEEL=$(ls examples/*-manylinux*.whl | head -1)
echo "Native wheel: $WHEEL"
python3 wheel_pipeline.py "$WHEEL" --output-dir output --target-os harmonyos --arch arm64
echo ""
echo "Output files:"
ls -lh output/*.whl
- name: Show all pipeline outputs
# ── Validate manifest-driven mode ─────────────────
- name: Run manifest pipeline (default packages.txt)
run: |
echo "=== Final output directory ==="
find output/ -type f -name '*.whl' -exec ls -lh {} \;
echo ""
echo "=== All output artifacts ==="
python3 wheel_pipeline.py --manifest packages.txt \
--output-dir output --target-os harmonyos --arch arm64
- name: Run manifest pipeline (test manifest with fake entry)
run: |
echo "# test manifest" > output/test_packages.txt
echo "ecoark_hello:https://github.com/ecoark/hello.git" >> output/test_packages.txt
python3 wheel_pipeline.py --manifest output/test_packages.txt \
--output-dir output --target-os harmonyos --arch arm64
- name: List all pipeline outputs
run: |
echo "=== Output tree ==="
find output/ -type f | sort
echo ""
echo "=== Zip bundle ==="
ls -lh output/ecoark-rebuild-output.zip 2>/dev/null || echo "(no zip)"
# ── Upload total bundle as CI artifact (Gitea-native) ──
- name: Upload bundle as artifact
run: python3 scripts/upload_artifacts.py ecoark-harmonyos-wheels "output/ecoark-rebuild-output.zip"
# ── Upload each .whl individually as artifact ─────────
- name: Upload individual wheel artifacts
run: python3 scripts/upload_artifacts.py ecoark-wheels-individual "output/*.whl" "output/wheels/*.whl"
# ──────────────────────────────────────────────────────
# Publish to Gitea Release (optional — requires secrets)
# ──────────────────────────────────────────────────────
- name: Upload assets to Gitea Release
if: secrets.GITEA_TOKEN != '' && secrets.ENABLE_RELEASE_UPLOAD == 'true'
run: python3 scripts/upload_release_assets.py output/
env:
ENABLE_RELEASE_UPLOAD: 'true'
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
- name: Summary
run: |
echo "All pipeline steps passed successfully."
echo "Artifacts:"
echo " - ecoark-harmonyos-wheels (total zip bundle)"
echo " - ecoark-wheels-individual (each .whl file individually)"
echo "Release upload: configured via GITEA_TOKEN + ENABLE_RELEASE_UPLOAD secrets"