Skip to content

Commit 4a3b140

Browse files
authored
Update cross-platform-build-verification.yml
1 parent 47206c6 commit 4a3b140

1 file changed

Lines changed: 230 additions & 17 deletions

File tree

.github/workflows/cross-platform-build-verification.yml

Lines changed: 230 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,119 @@
1-
linux-distros-podman-critical:
1+
name: Cross-Platform Build Verification
2+
3+
on:
4+
release:
5+
types: [published]
6+
workflow_dispatch:
7+
inputs:
8+
target_ref:
9+
description: 'Git Ref to verify (e.g. v2.0.6). Leave empty to use current ref.'
10+
required: false
11+
type: string
12+
default: ''
13+
14+
jobs:
15+
# ═══════════════════════════════════════════════════════════════════
16+
# 1. BUILD MATRIX
17+
# ═══════════════════════════════════════════════════════════════════
18+
build-matrix:
19+
name: ${{ matrix.label }}
20+
runs-on: ${{ matrix.runner }}
21+
strategy:
22+
fail-fast: false
23+
matrix:
24+
include:
25+
- runner: [self-hosted, linux, x64]
26+
label: "Linux x86_64 (self-hosted)"
27+
- runner: [self-hosted, macos, x64]
28+
label: "macOS x86_64 Intel (self-hosted)"
29+
- runner: ubuntu-latest
30+
label: "Ubuntu x86_64"
31+
- runner: windows-latest
32+
label: "Windows x86_64"
33+
- runner: macos-14
34+
label: "macOS ARM64 (Apple Silicon)"
35+
36+
steps:
37+
- name: Checkout
38+
uses: actions/checkout@v4
39+
with:
40+
ref: ${{ inputs.target_ref || github.ref }}
41+
42+
- name: Set up Python 3.11
43+
if: ${{ !contains(matrix.runner, 'self-hosted') }}
44+
uses: actions/setup-python@v5
45+
with:
46+
python-version: '3.11'
47+
48+
- name: Verify Architecture
49+
id: arch
50+
shell: bash
51+
run: |
52+
ARCH=$(uname -m)
53+
OS=$(uname -s)
54+
echo "Detected: $OS $ARCH"
55+
56+
- name: Build and Test (Self-Hosted Linux)
57+
if: contains(matrix.runner, 'self-hosted') && contains(matrix.runner, 'linux')
58+
shell: bash
59+
env:
60+
PYTHONUNBUFFERED: "1"
61+
run: |
62+
set -x
63+
64+
# 1. Find a Python to bootstrap (Conda or System)
65+
if [ -f "$HOME/miniconda3/envs/evocoder_env/bin/python3.11" ]; then
66+
BASE_PY="$HOME/miniconda3/envs/evocoder_env/bin/python3.11"
67+
echo "🔧 Bootstrapping from: $BASE_PY"
68+
elif command -v python3.11 >/dev/null 2>&1; then
69+
BASE_PY=python3.11
70+
else
71+
BASE_PY=python3
72+
fi
73+
74+
# 2. Create ISOLATED venv (Protects your lollama/tensorflow env)
75+
echo "🛡️ Creating fresh .venv..."
76+
rm -rf .venv
77+
$BASE_PY -m venv .venv
78+
79+
# 3. Activate venv
80+
source .venv/bin/activate
81+
82+
# 4. Install & Build INSIDE venv
83+
echo "🔥 Installing build tools..."
84+
python -m pip install --upgrade pip build
85+
86+
echo "📦 Building package..."
87+
python -m build
88+
89+
echo "💿 Installing package (Isolated)..."
90+
python -m pip install dist/*.whl
91+
92+
# 5. Test
93+
echo "🧪 Testing..."
94+
omnipkg --version
95+
omnipkg list
96+
97+
- name: Build and Test (Other Platforms)
98+
if: ${{ !(contains(matrix.runner, 'self-hosted') && contains(matrix.runner, 'linux')) }}
99+
shell: bash
100+
run: |
101+
if command -v python3 &>/dev/null; then PY=python3; else PY=python; fi
102+
if ! $PY -m venv .venv; then
103+
$PY -m venv .venv --without-pip
104+
curl -sS https://bootstrap.pypa.io/get-pip.py | .venv/bin/python
105+
fi
106+
if [ -f ".venv/bin/activate" ]; then source .venv/bin/activate; else source .venv/Scripts/activate; fi
107+
108+
python -m pip install --upgrade pip build
109+
python -m build
110+
pip install dist/*.whl
111+
omnipkg --version
112+
omnipkg list
113+
# ═══════════════════════════════════════════════════════════════════
114+
# 2. CRITICAL TESTS (Podman)
115+
# ═══════════════════════════════════════════════════════════════════
116+
linux-distros-podman-critical:
2117
name: Podman - ${{ matrix.distro }} (${{ matrix.platform }})
3118
runs-on: [self-hosted, linux, x64]
4119
timeout-minutes: 25
@@ -14,7 +129,7 @@ linux-distros-podman-critical:
14129
- distro: fedora:39
15130
platform: linux/amd64
16131

17-
# ARM64 QEMU (Debian & Rocky ONLY)
132+
# ARM64 QEMU (Debian & Rocky ONLY - Removed Ubuntu & Alpine)
18133
- distro: debian:12
19134
platform: linux/arm64
20135
- distro: rockylinux:9
@@ -28,21 +143,8 @@ linux-distros-podman-critical:
28143

29144
- name: Test
30145
run: |
31-
# Use the workspace directly - no temp dir needed
32-
# GitHub Actions already provides an isolated workspace per job
33-
WORKSPACE_DIR="$(pwd)"
34-
35-
echo "Testing in workspace: $WORKSPACE_DIR"
36-
37-
if [[ "${{ matrix.distro }}" == *"alpine"* ]]; then SHELL_CMD="/bin/sh"; else SHELL_CMD="/bin/bash"; fi
38-
39-
# Mount the current workspace directly
40-
# This avoids temp directory issues entirely
41-
podman run --rm \
42-
--security-opt label=disable \
43-
-v "$WORKSPACE_DIR:/workspace:rw" \
44-
--platform ${{ matrix.platform }} \
45-
${{ matrix.distro }} $SHELL_CMD -c "
146+
if [[ "${{ matrix.distro }}" == *"alpine"* ]]; then SHELL="/bin/sh"; else SHELL="/bin/bash"; fi
147+
podman run --rm -v $(pwd):/workspace:Z --platform ${{ matrix.platform }} ${{ matrix.distro }} $SHELL -c "
46148
cd /workspace
47149
48150
# Install build dependencies based on distro
@@ -60,3 +162,114 @@ linux-distros-podman-critical:
60162
omnipkg --version
61163
omnipkg list
62164
"
165+
# ═══════════════════════════════════════════════════════════════════
166+
# 3. DOCKER JOBS
167+
# ═══════════════════════════════════════════════════════════════════
168+
linux-distros-docker-debian:
169+
name: Docker - Debian/Ubuntu
170+
runs-on: ubuntu-latest
171+
strategy:
172+
fail-fast: false
173+
matrix:
174+
distro: [debian:12, debian:11, ubuntu:24.04, ubuntu:22.04, ubuntu:20.04]
175+
steps:
176+
- name: Checkout
177+
uses: actions/checkout@v4
178+
with:
179+
ref: ${{ inputs.target_ref || github.ref }}
180+
- name: Test
181+
run: |
182+
docker run --rm -v $(pwd):/workspace ${{ matrix.distro }} /bin/bash -c "
183+
cd /workspace
184+
apt-get update && apt-get install -y python3 python3-pip python3-venv build-essential python3-dev gcc
185+
python3 -m pip install --upgrade pip build || python3 -m pip install --break-system-packages pip build
186+
python3 -m build
187+
python3 -m pip install --break-system-packages dist/*.whl
188+
omnipkg --version
189+
omnipkg list
190+
"
191+
linux-distros-docker-rhel:
192+
name: Docker - RHEL/Fedora
193+
runs-on: ubuntu-latest
194+
strategy:
195+
fail-fast: false
196+
matrix:
197+
distro: [fedora:39, fedora:38, rockylinux:9, rockylinux:8, almalinux:9]
198+
steps:
199+
- name: Checkout
200+
uses: actions/checkout@v4
201+
with:
202+
ref: ${{ inputs.target_ref || github.ref }}
203+
- name: Test
204+
run: |
205+
docker run --rm -v $(pwd):/workspace ${{ matrix.distro }} /bin/bash -c "
206+
cd /workspace
207+
if grep -q 'release 8' /etc/redhat-release; then
208+
dnf install -y python39 python39-pip gcc python3-devel && ln -sf /usr/bin/python3.9 /usr/bin/python3 && ln -sf /usr/bin/pip3.9 /usr/bin/pip3
209+
else
210+
dnf install -y python3 python3-pip gcc python3-devel
211+
fi
212+
python3 -m pip install --upgrade pip build
213+
python3 -m build
214+
python3 -m pip install dist/*.whl
215+
omnipkg --version
216+
omnipkg list
217+
"
218+
linux-distros-docker-other:
219+
name: Docker - Arch/Alpine
220+
runs-on: ubuntu-latest
221+
strategy:
222+
fail-fast: false
223+
matrix:
224+
distro: [archlinux:latest, alpine:latest]
225+
steps:
226+
- name: Checkout
227+
uses: actions/checkout@v4
228+
with:
229+
ref: ${{ inputs.target_ref || github.ref }}
230+
- name: Test
231+
run: |
232+
docker run --rm -v $(pwd):/workspace ${{ matrix.distro }} /bin/sh -c "
233+
cd /workspace
234+
if command -v pacman &> /dev/null; then
235+
pacman -Sy --noconfirm python python-pip base-devel gcc
236+
elif command -v apk &> /dev/null; then
237+
apk add --no-cache python3 py3-pip py3-build gcc python3-dev musl-dev linux-headers
238+
fi
239+
python3 -m pip install --break-system-packages --upgrade pip build
240+
python3 -m build
241+
python3 -m pip install --break-system-packages dist/*.whl
242+
omnipkg --version
243+
omnipkg list
244+
"
245+
# ═══════════════════════════════════════════════════════════════════
246+
# 4. README STATS
247+
# ═══════════════════════════════════════════════════════════════════
248+
update-readme-stats:
249+
name: "📝 Update README Platform Stats"
250+
needs: [build-matrix, linux-distros-podman-critical, linux-distros-docker-debian, linux-distros-docker-rhel, linux-distros-docker-other]
251+
runs-on: ubuntu-latest
252+
if: success()
253+
continue-on-error: true
254+
steps:
255+
- name: Checkout
256+
uses: actions/checkout@v4
257+
with:
258+
fetch-depth: 0
259+
ref: ${{ inputs.target_ref || github.ref }}
260+
- name: Update Stats
261+
run: |
262+
sed -i "s/platforms-[0-9]*%20verified/platforms-22%20verified/" README.md
263+
if ! grep -q "macOS ARM64" README.md; then
264+
sed -i '/macOS Intel.*x86_64.*Intel/a | macOS ARM64 | ARM64 (Apple Silicon) | ✅ | Native installation |' README.md
265+
fi
266+
- name: Commit and Push
267+
run: |
268+
git config user.name "github-actions[bot]"
269+
git config user.email "github-actions[bot]@users.noreply.github.com"
270+
if ! git diff --quiet README.md; then
271+
git add README.md
272+
git commit -m "🤖 Auto-update: Platform verification stats [skip ci]"
273+
git pull --rebase origin main || echo "⚠️ Rebase conflict, overwriting..."
274+
git push || echo "⚠️ Push failed, ignoring."
275+
fi

0 commit comments

Comments
 (0)