diff --git a/generate.py b/generate.py index 69f4f5e..7f9eede 100644 --- a/generate.py +++ b/generate.py @@ -19,6 +19,38 @@ HEADER = """# GENERATED by oleks/ci-scripts — do not hand-edit. """ +def is_no_build(repo: dict) -> bool: + """s390x = no-build: s390x hardware is currently unavailable, so those + wheels are not built/published (the repo code is kept as a cross-compile + reference only). Any manifest entry may opt in/out with an explicit + `no_build:` flag; otherwise entries under `s390x/` default to no-build. + See the ci-scripts wiki Spec/* pages and memory feedback-no-s390x-builds.""" + return repo.get("no_build", str(repo.get("dir", "")).startswith("s390x/")) + + +def render_no_build(repo: dict) -> str: + """Render a neutralized pipeline that does NOT build. Uses `event: manual` + so tag pushes never auto-trigger a build; a manual run just prints why.""" + arch = repo.get("arch", "amd64") + return f"""{HEADER}# s390x = NO-BUILD: s390x hardware is currently unavailable, so this wheel is +# not built or published — the repo is kept as a cross-compile reference only. +# Re-enable by setting `no_build: false` on this repo in manifest.yaml. +labels: + arch: {arch} + +when: + - event: manual + +steps: + - name: build-disabled + image: alpine:3 + commands: + - echo "s390x build disabled — hardware currently unavailable." + - echo "Repo kept as a cross-compile reference only; not built/published." + - echo "See oleks/ci-scripts wiki Spec/* and memory feedback-no-s390x-builds." +""" + + def render(repo: dict) -> str: arch = repo["arch"] mem_req = repo["memory_request"] @@ -246,7 +278,7 @@ def main(): ] for repo, render_fn in jobs: target = BUILDING / repo["dir"] / ".woodpecker.yaml" - rendered = render_fn(repo) + rendered = render_no_build(repo) if is_no_build(repo) else render_fn(repo) if check_only: current = target.read_text() if target.exists() else "" if current != rendered: diff --git a/manifest.yaml b/manifest.yaml index e518db6..63f56e5 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -22,9 +22,18 @@ # cores - Nix `cores` setting written into /etc/nix/nix.conf # max_jobs - whether to also cap `max-jobs = 1` (small/serial builds) # attic - whether to run the inline `attic watch-store` accelerator +# no_build - if true, render a NEUTRALIZED pipeline (event: manual, no +# build/publish). s390x = no-build: s390x hardware is +# currently UNAVAILABLE, so those wheels are not built — +# the repo code is kept as a cross-compile reference only. +# Entries under s390x/ default to no_build even without the +# flag (generate.py is_no_build). Re-enable by setting +# no_build: false. arm64 builds are unaffected (arm64 hw is +# available). See wiki Spec/* + memory feedback-no-s390x-builds. repos: - dir: s390x/lxml-s390x + no_build: true arch: amd64 memory_request: 2Gi memory_limit: 6Gi @@ -32,6 +41,7 @@ repos: max_jobs: true attic: true - dir: s390x/pillow-s390x + no_build: true arch: amd64 memory_request: 6Gi memory_limit: 6Gi @@ -39,6 +49,7 @@ repos: max_jobs: true attic: true - dir: s390x/psycopg-s390x + no_build: true arch: amd64 memory_request: 6Gi memory_limit: 6Gi @@ -46,6 +57,7 @@ repos: max_jobs: true attic: true - dir: s390x/psycopg2-binary-s390x + no_build: true arch: amd64 memory_request: 6Gi memory_limit: 6Gi @@ -53,6 +65,7 @@ repos: max_jobs: true attic: true - dir: s390x/tiktoken-s390x + no_build: true arch: amd64 memory_request: 6Gi memory_limit: 6Gi @@ -61,6 +74,7 @@ repos: attic: true redis_cache: true - dir: s390x/duckdb-s390x + no_build: true arch: amd64 memory_request: 8Gi memory_limit: 32Gi @@ -68,6 +82,7 @@ repos: max_jobs: true attic: true - dir: s390x/faiss-cpu-s390x + no_build: true arch: amd64 memory_request: 8Gi memory_limit: 32Gi @@ -75,6 +90,7 @@ repos: max_jobs: true attic: true - dir: s390x/numpy-s390x + no_build: true arch: amd64 memory_request: 8Gi memory_limit: 32Gi @@ -82,6 +98,7 @@ repos: max_jobs: true attic: true - dir: s390x/pymupdf-s390x + no_build: true arch: amd64 memory_request: 8Gi memory_limit: 50Gi @@ -89,6 +106,7 @@ repos: max_jobs: false attic: true - dir: s390x/markupsafe-s390x + no_build: true arch: amd64 memory_request: 2Gi memory_limit: 6Gi @@ -126,6 +144,7 @@ repos: # bespoke hand-maintained file; flagged alongside fastuuid. thin_repos: - dir: s390x/asyncpg-s390x + no_build: true arch: amd64 memory_request: 8Gi memory_limit: 32Gi @@ -136,6 +155,7 @@ thin_repos: dead_secrets: [] gitea_clone_token: false - dir: s390x/cryptography-s390x + no_build: true arch: amd64 memory_request: 8Gi memory_limit: 32Gi @@ -147,6 +167,7 @@ thin_repos: tags_full: false dead_secrets: [attic_token, redis_password] - dir: s390x/lightningcss-s390x + no_build: true arch: amd64 memory_request: 8Gi memory_limit: 32Gi @@ -156,6 +177,7 @@ thin_repos: tags_full: true dead_secrets: [attic_token, redis_password] - dir: s390x/nextjs-swc-s390x + no_build: true arch: amd64 memory_request: 8Gi memory_limit: 50Gi @@ -165,6 +187,7 @@ thin_repos: tags_full: true dead_secrets: [attic_token, redis_password] - dir: s390x/rollup-s390x + no_build: true arch: amd64 memory_request: 8Gi memory_limit: 32Gi