CI/CD Pipeline Integration: iOS + Android stages with Gitea-native syntax #11

Merged
kfj001 merged 64 commits from ci/pipeline-integration into main 2026-08-03 20:16:03 -07:00
Showing only changes of commit 474e2578b6 - Show all commits
+7 -17
View File
@@ -1,14 +1,6 @@
# kryz-go-flutter CI Pipeline # kryz-go-flutter CI Pipeline
# Triggers on push and pull_request # Triggers on push and pull_request
# Stages: lint -> test -> build (Android + iOS) -> artifacts # Stages: lint -> test -> build (Android + iOS)
#
# IMPORTANT: Our self-hosted runners have different architectures:
# - "runner" = x86_64 Linux (works for all jobs)
# - "Magrathea" = ARM64 Mac running x86_64 Linux containers via Docker emulation
# Both register as `ubuntu-latest` so jobs land randomly.
# The x86_64 Flutter binary crashes on Magrathea under Rosetta emulation.
# We use `continue-on-error: true` on lint/test so Magrathea failures don't block.
# Android build detects non-Linux and succeeds as no-op.
# #
# IMPORTANT: $GITHUB_PATH does NOT persist between steps in Gitea Actions/act. # IMPORTANT: $GITHUB_PATH does NOT persist between steps in Gitea Actions/act.
# Each step is a separate shell. We export PATH="$PWD/flutter/bin:$PATH" in # Each step is a separate shell. We export PATH="$PWD/flutter/bin:$PATH" in
@@ -34,11 +26,10 @@ env:
FLUTTER_VERSION: "3.44.0" FLUTTER_VERSION: "3.44.0"
jobs: jobs:
# ── Stage 1: Lint & static analysis (best-effort on any runner) ── # ── Stage 1: Lint & static analysis ──
Review

see, I ❤️ how this is hard coding a specific version of a framework - THIS helps make the development process of this app a monolith!

see, I ❤️ how this is hard coding a specific version of a framework - THIS helps make the development process of this app a monolith!
lint: lint:
name: Lint name: Lint
runs-on: ubuntu-latest runs-on: [self-hosted, linux, x64]
continue-on-error: true
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -73,11 +64,10 @@ jobs:
dart format lib/ test/ dart format lib/ test/
# ── Stage 1 (parallel): Unit & widget tests (best-effort) ─────── # ── Stage 1 (parallel): Unit & widget tests ──
test: test:
name: Test name: Test
runs-on: ubuntu-latest runs-on: [self-hosted, linux, x64]
continue-on-error: true
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -109,7 +99,7 @@ jobs:
# ── Stage 3: Android build ────────────────────────────────────── # ── Stage 3: Android build ──────────────────────────────────────
build-android: build-android:
name: Build Android name: Build Android
runs-on: ubuntu-latest runs-on: [self-hosted, linux, x64]
needs: [lint, test] needs: [lint, test]
steps: steps:
- name: Checkout - name: Checkout
@@ -217,7 +207,7 @@ jobs:
# ── Stage 3 (parallel): iOS build ─────────────────────────────── # ── Stage 3 (parallel): iOS build ───────────────────────────────
build-ios: build-ios:
name: Build iOS name: Build iOS
runs-on: ubuntu-latest runs-on: [self-hosted, linux, x64]
needs: [lint, test] needs: [lint, test]
steps: steps:
- name: Checkout - name: Checkout