Files
eatvio_app/.gitea/workflows/test.yml
2026-04-01 10:59:54 +03:00

246 lines
9.2 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Eatvio App Android Test
on: [pull_request]
env:
flutter_version: '3.41.2'
java_version: '21.x'
flutter_channel: 'stable'
my_local_cache_dir: '/opt/hostedtoolcache/'
ANDROID_SDK_ROOT: '/opt/hostedtoolcache/Android/Sdk'
jobs:
build:
runs-on: [ubuntu-latest]
steps:
- uses: https://github.com/actions/checkout@v3
# Пока что не нужно проксирование
# - name: Set proxy server
# env:
# PROXY_USER: ${{ secrets.PROXY_USER }}
# PROXY_PASSWORD: ${{ secrets.PROXY_PASSWORD }}
# run: |
# echo "Setting up proxy..."
# cat <<EOF >/etc/apt/apt.conf.d/proxy.conf
# Acquire::http::Proxy "socks5h://${PROXY_USER}:${PROXY_PASSWORD}@10.55.5.202:19843/";
# EOF
- name: Checkout env repository
uses: https://github.com/actions/checkout@v3
with:
repository: eatvio/eatvio_app_env
path: env_repo
# Здесь может быть токен любого юзера с доступом в gitea
token: ${{ vars.READ_USER_GITEA_TOKEN }}
ref: main
- name: Copy .env file
run: |
cp env_repo/.env .env
- name: Load environment variables from .env
run: |
set -a
source .env
set +a
# Export all variables to GITHUB_ENV
while IFS= read -r line; do
if [[ $line =~ ^[A-Za-z_][A-Za-z0-9_]*= ]]; then
echo "$line" >> $GITHUB_ENV
fi
done < .env
- name: Create key.properties file
run: |
cat > android/key.properties <<EOF
storePassword=${{ vars.SIGNING_STORE_PASSWORD }}
keyPassword=${{ vars.SIGNING_KEY_PASSWORD }}
keyAlias=${{ vars.SIGNING_KEY_ALIAS }}
storeFile=upload-keystore.jks
EOF
- name: Decode keystore from secret
run: |
echo "${{ vars.SIGNING_KEY_JKS }}"
printf "%s" "${{ vars.SIGNING_KEY_JKS }}" | base64 -d > android/app/upload-keystore.jks
- name: Cache Android SDK
id: cache-sdk
uses: 'https://github.com/actions/cache@v4'
with:
path: ${{ env.my_local_cache_dir }}
key: ${{ runner.os }}-cache-sdk
- name: Set up JDK
uses: https://github.com/actions/setup-java@v3
with:
distribution: 'zulu'
java-version: ${{ env.java_version }}
cache: gradle
- name: Install utils for Android SDK
run: |
apt-get update
apt-get install -y openjdk-17-jdk wget jq clang cmake ninja-build libgtk-3-dev
- name: Install Android SDK
if: steps.cache-sdk.outputs.cache-hit != 'true'
run: |
wget https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip -O commandlinetools.zip
unzip commandlinetools.zip
mkdir -p ${{ env.my_local_cache_dir }}Android/Sdk/cmdline-tools/latest
rm -rf ${{ env.my_local_cache_dir }}Android/Sdk/cmdline-tools/latest
mkdir -p ${{ env.my_local_cache_dir }}Android/Sdk/cmdline-tools/latest
mv cmdline-tools/* ${{ env.my_local_cache_dir }}Android/Sdk/cmdline-tools/latest/
export ANDROID_SDK_ROOT=${{ env.my_local_cache_dir }}Android/Sdk
export PATH=$PATH:${{ env.my_local_cache_dir }}Android/Sdk/cmdline-tools/latest/bin
yes | sdkmanager --licenses 2>/dev/null || true
sdkmanager --list | egrep "platform-tools|build-tools|ndk"
sdkmanager "platform-tools"
sdkmanager "platform-tools" "platforms;android-35" "platforms;android-34" "platforms;android-33" "platforms;android-31"
sdkmanager "build-tools;34.0.0"
sdkmanager "ndk;25.1.8937393"
sdkmanager --install "cmake;3.22.1"
- name: Set up Android environment variables
id: 'android-env-setup'
run: |
echo "ANDROID_SDK_ROOT=${{ env.my_local_cache_dir }}Android/Sdk" >> $GITHUB_ENV
echo "PATH=$PATH:${{ env.my_local_cache_dir }}Android/Sdk/cmdline-tools/latest/bin:${{ env.my_local_cache_dir }}Android/Sdk/platform-tools:${{ env.my_local_cache_dir }}Android/Sdk/build-tools/30.0.3:${{ env.my_local_cache_dir }}Android/Sdk/build-tools/34.0.0" >> $GITHUB_ENV
echo "ANDROID_HOME=${{ env.my_local_cache_dir }}Android/Sdk" >> $GITHUB_ENV
- name: Set up Flutter
run: |
FLUTTER_DIR="${{ env.my_local_cache_dir }}flutter"
if [ ! -f "$FLUTTER_DIR/bin/flutter" ]; then
echo "Downloading Flutter ${{ env.flutter_version }}..."
curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/${{ env.flutter_channel }}/linux/flutter_linux_${{ env.flutter_version }}-${{ env.flutter_channel }}.tar.xz"
echo "Extracting Flutter..."
mkdir -p "${{ env.my_local_cache_dir }}"
tar xf /tmp/flutter.tar.xz -C "${{ env.my_local_cache_dir }}"
rm /tmp/flutter.tar.xz
else
echo "Flutter already cached at $FLUTTER_DIR"
fi
echo "$FLUTTER_DIR/bin" >> $GITHUB_PATH
echo "$FLUTTER_DIR/bin/cache/dart-sdk/bin" >> $GITHUB_PATH
echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH
# - name: Print flutter-action outputs
# shell: bash
# run: |
# echo CACHE-PATH=${{ steps.flutter-action.outputs.CACHE-PATH }}
# echo CACHE-KEY=${{ steps.flutter-action.outputs.CACHE-KEY }}
# echo CHANNEL=${{ steps.flutter-action.outputs.CHANNEL }}
# echo VERSION=${{ steps.flutter-action.outputs.VERSION }}
# echo ARCHITECTURE=${{ steps.flutter-action.outputs.ARCHITECTURE }}
# echo PUB-CACHE-PATH=${{ steps.flutter-action.outputs.PUB-CACHE-PATH }}
# echo PUB-CACHE-KEY=${{ steps.flutter-action.outputs.PUB-CACHE-KEY }}
# echo "PATH is $PATH"
# echo "ANDROID_SDK_ROOT is $ANDROID_SDK_ROOT"
# echo "ANDROID_HOME is $ANDROID_HOME"
- name: Fix dir permissions
run: |
ARCH=$(uname -m)
if [ "$ARCH" = "x86_64" ]; then ARCH="x64"; fi
git config --global --add safe.directory "${{ env.my_local_cache_dir }}flutter"
flutter config --android-sdk="$ANDROID_HOME"
flutter doctor -v
- name: Get dependencies
run: |
flutter clean
flutter pub get
dart run build_runner build --delete-conflicting-outputs
- name: Native Analyze
run: flutter analyze
- name: Test
run: flutter test --coverage
- name: Test coverage
run: |
echo "📊 Analyzing test coverage..."
echo ""
awk -F: '
/^SF:/ {
file = $0
sub(/^SF:/, "", file)
sub(/^[[:space:]]+/, "", file)
is_generated = 0
if (file ~ /\.(g|freezed|gr|mocks)\.dart$/) {
is_generated = 1
generated_files++
} else if (file ~ /\/(build|\.dart_tool)\//) {
is_generated = 1
generated_files++
} else {
source_files++
}
}
/^LF:/ {
if (!is_generated) {
total += $2
} else {
generated_lines += $2
}
}
/^LH:/ {
if (!is_generated) {
covered += $2
} else {
generated_covered += $2
}
}
END {
print "📁 Files:"
printf " Source files: %d\n", source_files
printf " Generated files: %d (excluded)\n", generated_files
print ""
print "📝 Lines:"
printf " Total lines: %d\n", total
printf " Covered lines: %d\n", covered
printf " Uncovered lines: %d\n", total - covered
print ""
if (total == 0) {
print "⚠️ Coverage: 0%"
exit 1
} else {
percentage = (covered / total) * 100
printf "✅ Coverage: %.2f%%\n", percentage
print ""
if (percentage < 70) {
printf "❌ FAIL: Coverage is below 70%%\n"
exit 1
} else {
printf "💚 Excellent: Coverage is above 70%%\n"
}
}
}
' coverage/lcov.info
- name: Build apk
run: |
BUILD_DATE=$(TZ=Europe/Moscow date +'%Y-%m-%d %H:%M:%S')
flutter build apk --release \
--dart-define=HIDE_PLANS=false \
--dart-define=BUILD_DATE="$BUILD_DATE"
- name: Rename and move apk
run: |
TIMESTAMP=$(TZ=Europe/Moscow date +'%Y-%m-%d-%H-%M')
APK_NAME="eatvio_app_${TIMESTAMP}.apk"
mv build/app/outputs/flutter-apk/app-release.apk $APK_NAME
echo "APK build finished $APK_NAME"
echo "APK_NAME=$APK_NAME" >> $GITHUB_ENV
- name: Upload APK artifact
uses: https://github.com/actions/upload-artifact@v3
with:
name: ${{ env.APK_NAME }}
path: ${{ env.APK_NAME }}