# kryz-go-flutter Release Pipeline # Triggers on version tags (v1.0.0, v1.0.1, etc.) # Produces signed artifacts and attaches them to a Gitea Release name: Release on: push: tags: - "v*" env: FLUTTER_VERSION: "3.44.0" jobs: # ── Lint (gate) ───────────────────────────────────────────── lint: name: Lint runs-on: [self-hosted, linux, x64] steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Flutter run: | set -e if command -v flutter &> /dev/null; then echo "Flutter already installed, skipping download." flutter --version exit 0 fi 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: Check formatting run: | export PATH="$PWD/flutter/bin:$PATH" dart format --set-exit-if-changed lib/ test/ # ── Test (gate) ────────────────────────────────────────────────── test: name: Test runs-on: [self-hosted, linux, x64] needs: [lint] steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Flutter run: | set -e if command -v flutter &> /dev/null; then echo "Flutter already installed, skipping download." flutter --version exit 0 fi 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 # ── Android release build (inline setup - no container dependency) ── # Removed container: kryz-ci:latest because the image may not exist on # the runner host, causing the job to stall indefinitely on docker pull. build-android: name: Build Android Release runs-on: [self-hosted, linux, x64] needs: [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 run: | set -e if command -v java &> /dev/null; then echo "Java already available: $(java -version 2>&1 | head -1)" export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java)))) echo "JAVA_HOME=$JAVA_HOME" exit 0 fi apt-get update && apt-get install -y openjdk-17-jre-headless export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 echo "JAVA_HOME=$JAVA_HOME" - name: Setup Flutter run: | set -e if command -v flutter &> /dev/null; then echo "Flutter already installed, skipping download." flutter --version exit 0 fi 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: Setup Android SDK run: | set -e if [ -d "$ANDROID_HOME/cmdline-tools" ]; then echo "Android SDK already present at $ANDROID_HOME" exit 0 fi export ANDROID_HOME=$PWD/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 rm /tmp/cmdline-tools.zip export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH" yes | sdkmanager --licenses sdkmanager "platform-tools" "platforms;android-35" "build-tools;35.0.0" echo "Android SDK setup complete" - name: Flutter precache Android run: | export PATH="$PWD/flutter/bin:$PATH" flutter precache --android - name: Install Python dependencies run: | python3 -m pip install --upgrade pip || true pip install -r requirements.txt || true - name: Install Flutter 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: Configure release signing if: env.ANDROID_KEYSTORE_BASE64 != '' env: ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }} ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} ANDROID_KEY_PASS: ${{ secrets.ANDROID_KEY_PASS }} run: | echo "$ANDROID_KEYSTORE_BASE64" | base64 -d > android/app/release.keystore cat > android/key.properties <