The 'macos' runner label is assigned to a Linux host (Magrathea). Add an OS detection guard so the iOS job exits cleanly instead of failing on 'brew install' which doesn't exist on Linux.
272 lines
8.8 KiB
YAML
272 lines
8.8 KiB
YAML
# kryz-go-flutter CI Pipeline
|
|
# Triggers on push and pull_request
|
|
# Stages: lint -> test -> build (Android + iOS)
|
|
#
|
|
# NOTE: Both runners share identical labels [self-hosted, linux, x64].
|
|
# Lint/test use continue-on-error so failures on one runner don't block.
|
|
#
|
|
# 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
|
|
# every step that uses flutter/dart commands.
|
|
|
|
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
- develop
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
|
|
# Cancel in-progress runs on new push to same branch
|
|
concurrency:
|
|
group: ${{ gitea.workflow }}-${{ gitea.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
FLUTTER_VERSION: "3.44.0"
|
|
|
|
jobs:
|
|
# ── Stage 1: Lint & static analysis (best-effort on any runner) ──
|
|
lint:
|
|
name: Lint
|
|
runs-on: ubuntu-24.04
|
|
continue-on-error: true
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Flutter
|
|
run: |
|
|
set -e
|
|
curl -fsSL "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${{ env.FLUTTER_VERSION }}-stable.tar.xz" -o /tmp/flutter.tar.xz
|
|
tar -xf /tmp/flutter.tar.xz -C "$PWD"
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter --version
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter pub get
|
|
|
|
- name: Generate stubs (lint gate support)
|
|
if: hashFiles('theme.json') == ''
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
python3 ci_stub_gen.py
|
|
|
|
- name: Analyze Dart code
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter analyze lib/ test/
|
|
|
|
- name: Auto-format source
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
dart format lib/ test/
|
|
|
|
|
|
# ── Stage 1 (parallel): Unit & widget tests (best-effort) ───────
|
|
test:
|
|
name: Test
|
|
runs-on: ubuntu-24.04
|
|
continue-on-error: true
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Flutter
|
|
run: |
|
|
set -e
|
|
curl -fsSL "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${{ env.FLUTTER_VERSION }}-stable.tar.xz" -o /tmp/flutter.tar.xz
|
|
tar -xf /tmp/flutter.tar.xz -C "$PWD"
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter --version
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter pub get
|
|
|
|
- name: Generate stubs (lint gate support)
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
python3 ci_stub_gen.py
|
|
|
|
- name: Run tests
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter test --reporter=expanded
|
|
|
|
|
|
# ── Stage 3: Android build ──────────────────────────────────────
|
|
build-android:
|
|
name: Build Android
|
|
runs-on: ubuntu-24.04
|
|
needs: [lint, test]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Check platform for Android build
|
|
run: |
|
|
OS=$(uname -s)
|
|
echo "Detected OS: $OS"
|
|
if [ "$OS" != "Linux" ]; then
|
|
echo "SKIPPED: Android build requires Linux. Detected $OS."
|
|
exit 0
|
|
fi
|
|
|
|
- name: Setup Java 17
|
|
run: |
|
|
set -e
|
|
apt-get update
|
|
apt-get install -y openjdk-17-jdk
|
|
export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
|
|
export PATH="$JAVA_HOME/bin:$PATH"
|
|
java -version
|
|
|
|
- name: Setup Flutter
|
|
run: |
|
|
set -e
|
|
curl -fsSL "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${{ env.FLUTTER_VERSION }}-stable.tar.xz" \
|
|
-o /tmp/flutter.tar.xz
|
|
tar -xf /tmp/flutter.tar.xz -C "$PWD"
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter --version
|
|
|
|
- name: Install Android SDK command-line tools
|
|
run: |
|
|
set -e
|
|
export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
|
|
export PATH="/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH"
|
|
export ANDROID_HOME="${HOME}/android-sdk"
|
|
mkdir -p "${ANDROID_HOME}/cmdline-tools"
|
|
curl -fsSL "https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip" -o /tmp/cmdline-tools.zip
|
|
unzip -q /tmp/cmdline-tools.zip -d "${ANDROID_HOME}/cmdline-tools"
|
|
mv "${ANDROID_HOME}/cmdline-tools/cmdline-tools" "${ANDROID_HOME}/cmdline-tools/latest"
|
|
export PATH="${ANDROID_HOME}/cmdline-tools/latest/bin:${PATH}"
|
|
yes | sdkmanager --licenses >/dev/null 2>&1 || true
|
|
sdkmanager "platform-tools" "platforms;android-35" "build-tools;35.0.0"
|
|
|
|
- name: Pre-cache Android platform artifacts
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter precache --android
|
|
|
|
- name: Accept Android SDK licenses
|
|
run: |
|
|
export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
|
|
export PATH="/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH"
|
|
yes | "${HOME}/android-sdk/cmdline-tools/latest/bin/sdkmanager" --licenses || true
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter pub get
|
|
|
|
- name: Generate stubs (lint gate support)
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
python3 ci_stub_gen.py
|
|
|
|
- name: Run whitelabel build script
|
|
if: hashFiles('theme.json') != ''
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
python3 build_whitelabel.py
|
|
|
|
- name: Build APK (release)
|
|
run: |
|
|
export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
|
|
export ANDROID_HOME="${HOME}/android-sdk"
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter build apk --release
|
|
|
|
- name: Build App Bundle (release)
|
|
run: |
|
|
export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
|
|
export ANDROID_HOME="${HOME}/android-sdk"
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter build appbundle --release
|
|
|
|
- name: List build outputs
|
|
run: |
|
|
echo "=== APK output ==="
|
|
ls -lh build/app/outputs/flutter-apk/ || true
|
|
echo "=== AAB output ==="
|
|
ls -lh build/app/outputs/bundle/release/ || true
|
|
|
|
- name: "Note: artifact storage not configured"
|
|
run: |
|
|
echo "WARNING: Gitea Actions artifact storage is not configured on this instance."
|
|
echo "Build outputs available in runner workspace:"
|
|
echo " APK: build/app/outputs/flutter-apk/app-release.apk"
|
|
echo " AAB: build/app/outputs/bundle/release/app-release.aab"
|
|
|
|
|
|
# ── Stage 2 (parallel): iOS build ───────────────────────────────
|
|
build-ios:
|
|
name: Build iOS
|
|
runs-on: [macos-arm64]
|
|
needs: [lint, test]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Check macOS platform
|
|
run: |
|
|
OS=$(uname -s)
|
|
echo "Detected OS: $OS"
|
|
if [ "$OS" != "Darwin" ]; then
|
|
echo "SKIPPED: iOS build requires macOS (Darwin). Detected $OS."
|
|
echo "To enable iOS builds, register a macOS runner with the 'macos' label."
|
|
exit 0
|
|
fi
|
|
|
|
- name: Setup Java 17
|
|
run: |
|
|
set -e
|
|
brew install openjdk@17 || true
|
|
export JAVA_HOME="/usr/local/opt/openjdk@17"
|
|
export PATH="$JAVA_HOME/bin:$PATH"
|
|
java -version || true
|
|
|
|
- name: Setup Flutter
|
|
run: |
|
|
set -e
|
|
curl -fsSL "https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_${{ env.FLUTTER_VERSION }}-stable.tar.xz" \
|
|
-o /tmp/flutter.tar.xz
|
|
tar -xf /tmp/flutter.tar.xz -C "$PWD"
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter --version
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter pub get
|
|
|
|
- name: Generate stubs (lint gate support)
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
python3 ci_stub_gen.py
|
|
|
|
- name: Run whitelabel build script
|
|
if: hashFiles('theme.json') != ''
|
|
run: |
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
python3 build_whitelabel.py
|
|
|
|
- name: Build iOS (release, no-codesign)
|
|
run: |
|
|
export JAVA_HOME="/usr/local/opt/openjdk@17"
|
|
export PATH="$PWD/flutter/bin:$PATH"
|
|
flutter build ios --release --no-codesign
|
|
|
|
- name: List build outputs
|
|
run: |
|
|
echo "=== iOS build output ==="
|
|
ls -lh build/ios/iphoneos/ || true
|