Skip to content

feat: 升级至 Flutter 3.16 #839

feat: 升级至 Flutter 3.16

feat: 升级至 Flutter 3.16 #839

Workflow file for this run

name: CI
on:
push:
branches:
- "master"
pull_request:
release:
types: [published]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
flutter_version: "3.16.2"
flutter_channel: "stable"
jobs:
test:
name: Test
runs-on: ubuntu-latest
outputs:
environment: ${{ steps.setVersion.outputs.environment }}
version: ${{ steps.setVersion.outputs.version }}
release: ${{ steps.setVersion.outputs.release }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set build version
id: setVersion
run: |
VERSION_STRING=$(cat pubspec.yaml | grep -oP "^version: .+" | cut -d" " -f2)
VERSION=$(echo $VERSION_STRING | cut -d"+" -f1)
BUILD_NUMBER=$(echo $VERSION_STRING | cut -d"+" -f2)
COMMIT_ID=$(git rev-parse --short HEAD)
if [[ "${{github.event_name}}" == "release" && "${{github.event.action}}" == "published" ]]; then
echo "environment=prod" >> $GITHUB_OUTPUT
echo "version=$VERSION+$BUILD_NUMBER" >> $GITHUB_OUTPUT
echo "release=xyz.hehome.smarthome@$VERSION+$BUILD_NUMBER" >> $GITHUB_OUTPUT
else
echo "environment=dev" >> $GITHUB_OUTPUT
echo "version=$VERSION-git.$COMMIT_ID+$BUILD_NUMBER" >> $GITHUB_OUTPUT
echo "release=xyz.hehome.smarthome.dev@$VERSION-git.$COMMIT_ID+$BUILD_NUMBER" >> $GITHUB_OUTPUT
fi
- name: Get lcov_cobertura
run: curl -sSL https://raw.github.com/eriwen/lcov-to-cobertura-xml/master/lcov_cobertura/lcov_cobertura.py -o lcov_cobertura.py
- name: Setup Flutter
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa
with:
flutter-version: ${{ env.flutter_version }}
channel: ${{ env.flutter_channel }}
cache: true
- name: Flutter test
run: |
flutter pub get
flutter test --coverage
python lcov_cobertura.py coverage/lcov.info
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
android:
name: Android
runs-on: ubuntu-latest
needs: test
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set version name
run: |
sed -ri "s#^version: .+#version: $VERSION#g" pubspec.yaml
sed -ri "s#..dsn = ''#..dsn = '$SENTRY_DSN'#g" ./lib/bootstrap.dart
sed -ri "s#..release = 'release'#..release = '$RELEASE'#g" ./lib/bootstrap.dart
env:
VERSION: ${{ needs.test.outputs.version }}
ENVIRONMENT: ${{ needs.test.outputs.environment }}
RELEASE: ${{ needs.test.outputs.release }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
- name: Decrypt large secret
run: ./.github/scripts/decrypt_secret.sh
env:
LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
- name: Setup Flutter
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa
with:
flutter-version: ${{ env.flutter_version }}
channel: ${{ env.flutter_channel }}
cache: true
- name: Build split-per-abi apks
run: flutter build apk --split-per-abi -t ./lib/main_$ENVIRONMENT.dart --flavor $ENVIRONMENT
env:
ENVIRONMENT: ${{ needs.test.outputs.environment }}
- name: Upload split-per-abi apks
uses: actions/upload-artifact@v3
if: github.event_name != 'pull_request'
with:
name: android
path: ${{ github.workspace }}/build/app/outputs/apk/${{ needs.test.outputs.environment }}/release/*.apk
web:
name: Web
runs-on: ubuntu-latest
needs: test
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set version name
run: |
sed -ri "s#^version: .+#version: $VERSION#g" pubspec.yaml
sed -ri "s#..dsn = ''#..dsn = '$SENTRY_DSN'#g" ./lib/bootstrap.dart
sed -ri "s#..release = 'release'#..release = '$RELEASE'#g" ./lib/bootstrap.dart
env:
VERSION: ${{ needs.test.outputs.version }}
ENVIRONMENT: ${{ needs.test.outputs.environment }}
RELEASE: ${{ needs.test.outputs.release }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
- name: Setup Flutter
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa
with:
flutter-version: ${{ env.flutter_version }}
channel: ${{ env.flutter_channel }}
cache: true
- name: Build web version
run: |
flutter build web --web-renderer=html -t ./lib/main_$ENVIRONMENT.dart
env:
ENVIRONMENT: ${{ needs.test.outputs.environment }}
- name: Upload web version
uses: actions/upload-artifact@v3
if: github.event_name != 'pull_request'
with:
name: web
path: ${{ github.workspace }}/build/web
windows:
name: Windows
runs-on: windows-latest
needs: test
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set version name
run: |
sed -ri "s#^version: .+#version: $VERSION#g" pubspec.yaml
sed -ri "s#..dsn = ''#..dsn = '$SENTRY_DSN'#g" .\lib\bootstrap.dart
sed -ri "s#..release = 'release'#..release = '$RELEASE'#g" .\lib\bootstrap.dart
env:
VERSION: ${{ needs.test.outputs.version }}
ENVIRONMENT: ${{ needs.test.outputs.environment }}
RELEASE: ${{ needs.test.outputs.release }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
- name: Setup Flutter
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa
with:
flutter-version: ${{ env.flutter_version }}
channel: ${{ env.flutter_channel }}
cache: true
- name: Build windows version
run: |
flutter build windows -t ./lib/main_${env:ENVIRONMENT}.dart
env:
ENVIRONMENT: ${{ needs.test.outputs.environment }}
- name: Upload windows version
uses: actions/upload-artifact@v3
if: github.event_name != 'pull_request'
with:
name: windows
path: ${{ github.workspace }}/build/windows/runner/Release
deploy_web_dev:
name: Deploy Web Dev
runs-on: ubuntu-latest
needs: web
environment:
name: dev
url: https://smart.dev.hehome.xyz
if: github.event_name != 'pull_request'
steps:
- name: Download web files
uses: actions/download-artifact@v3
with:
name: web
- name: Copy file to server
uses: Burnett01/rsync-deployments@45d84ad5f6c174f3e0ffc50e9060a9666d09c16e
with:
switches: -vzr --delete --exclude ".well-known"
path: "."
remote_path: ${{ secrets.WEBSITES_ROOT }}/smart-home/web
remote_host: ${{ secrets.SSH_HOST }}
remote_user: ${{ secrets.SSH_USERNAME }}
remote_key: ${{ secrets.SSH_KEY }}
deploy_web_prod:
name: Deploy Web Prod
runs-on: ubuntu-latest
needs: web
environment:
name: prod
url: https://smart.hehome.xyz
if: ${{ github.event_name == 'release' && github.event.action == 'published' }}
steps:
- name: Download web files
uses: actions/download-artifact@v3
with:
name: web
- name: Copy file to server
uses: Burnett01/rsync-deployments@45d84ad5f6c174f3e0ffc50e9060a9666d09c16e
with:
switches: -vzr --delete --exclude ".well-known"
path: "."
remote_path: ${{ secrets.WEBSITES_ROOT }}/smart-home/web
remote_host: ${{ secrets.SSH_HOST }}
remote_user: ${{ secrets.SSH_USERNAME }}
remote_key: ${{ secrets.SSH_KEY }}
deploy_github:
name: Deploy Github
runs-on: ubuntu-latest
needs: [android, web, windows]
if: ${{ github.event_name == 'release' && github.event.action == 'published' }}
steps:
- name: Download artifacts
uses: actions/download-artifact@v3
- name: Compress files
run: |
tar -czvf web.tar.gz web
tar -czvf windows.tar.gz windows
- name: Upload Release Assets
uses: alexellis/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
asset_paths: '["android/*.apk", "web.tar.gz", "windows.tar.gz"]'
sentry_release:
name: Sentry Release
runs-on: ubuntu-latest
needs: [test, android, web, windows]
if: github.event_name != 'pull_request'
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Create Sentry release
uses: getsentry/action-release@v1
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
with:
environment: ${{ needs.test.outputs.environment }}
version: ${{ needs.test.outputs.version }}