From a65edab7d148bcc44fd30e8c5b8d4eb2e0214c77 Mon Sep 17 00:00:00 2001 From: My-Responsitories <107370289+My-Responsitories@users.noreply.github.com> Date: Fri, 10 Oct 2025 15:52:26 +0800 Subject: [PATCH] opt: env (#1510) * opt: env * fix * fix: regex * fix: android * fix * fix Signed-off-by: bggRGjQaUbCoE * fastforge define * fix Signed-off-by: bggRGjQaUbCoE --------- Co-authored-by: bggRGjQaUbCoE --- .github/workflows/android.yml | 8 +++--- .github/workflows/ios.yml | 8 +++--- .github/workflows/linux.yml | 9 +++---- .github/workflows/mac.yml | 10 +++---- .github/workflows/win.yml | 10 ++++--- .gitignore | 8 +++--- .vscode/launch.json | 37 +++++-------------------- .vscode/tasks.json | 25 ----------------- lib/build_config.dart | 16 +++++++++++ lib/scripts/build.dart | 51 ----------------------------------- lib/scripts/build.ps1 | 47 ++++++++++++++++++++++++++++++++ 11 files changed, 99 insertions(+), 130 deletions(-) delete mode 100644 .vscode/tasks.json create mode 100644 lib/build_config.dart delete mode 100644 lib/scripts/build.dart create mode 100644 lib/scripts/build.ps1 diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index aa757f54..53198a07 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -57,10 +57,12 @@ jobs: echo keyPassword='${{ secrets.KEY_PASSWORD }}' >> android/key.properties fi + - name: Set and Extract version + shell: pwsh + run: lib/scripts/build.ps1 android + - name: flutter build apk - run: | - dart lib/scripts/build.dart "android" - flutter build apk --release --split-per-abi --pub + run: flutter build apk --release --split-per-abi --dart-define-from-file=pili_release.json --pub - name: 上传 uses: actions/upload-artifact@v4 diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 46cbfa42..e61e9f34 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -32,11 +32,13 @@ jobs: channel: stable flutter-version-file: pubspec.yaml + - name: Set and Extract version + shell: pwsh + run: lib/scripts/build.ps1 + - name: Build iOS run: | - chmod +x lib/scripts/build.dart - dart lib/scripts/build.dart - flutter build ios --release --no-codesign + flutter build ios --release --no-codesign --dart-define-from-file=pili_release.json ln -sf ./build/ios/iphoneos Payload zip -r9 ios-release-no-sign.ipa Payload/runner.app diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 5001bf50..f3aee227 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -54,15 +54,12 @@ jobs: cache: true - name: Set and Extract version - run: | - dart lib/scripts/build.dart - VERSION=$(cat pubspec.yaml | grep 'version:' | sed 's/version: //g' | tr -d '[:space:]') - echo "version=$VERSION" >> $GITHUB_ENV - shell: bash + shell: pwsh + run: lib/scripts/build.ps1 #TODO: deb and rpm packages need to be build - name: Build Linux - run: flutter build linux --release -v --pub + run: flutter build linux --release -v --pub --dart-define-from-file=pili_release.json - name: Package .tar.gz run: tar -zcvf PiliPlus_linux_${{ env.version }}_amd64.tar.gz -C build/linux/x64/release/bundle . diff --git a/.github/workflows/mac.yml b/.github/workflows/mac.yml index b74c168c..5741ca42 100644 --- a/.github/workflows/mac.yml +++ b/.github/workflows/mac.yml @@ -32,12 +32,12 @@ jobs: channel: stable flutter-version-file: pubspec.yaml + - name: Set and Extract version + shell: pwsh + run: lib/scripts/build.ps1 + - name: Build Mac - run: | - dart lib/scripts/build.dart - VERSION=$(cat pubspec.yaml | grep 'version:' | sed 's/version: //g' | tr -d '[:space:]') - echo "version=$VERSION" >> $GITHUB_ENV - flutter build macos --release + run: flutter build macos --release --dart-define-from-file=pili_release.json - name: Prepare Upload run: | diff --git a/.github/workflows/win.yml b/.github/workflows/win.yml index f250dcb4..7784965b 100644 --- a/.github/workflows/win.yml +++ b/.github/workflows/win.yml @@ -40,13 +40,15 @@ jobs: - name: Add Chinese language file for Inno Setup run: | Copy-Item "windows/packaging/exe/ChineseSimplified.isl" "C:\Program Files (x86)\Inno Setup 6\Languages\ChineseSimplified.isl" - shell: powershell + shell: pwsh + + - name: Set and Extract version + shell: pwsh + run: lib/scripts/build.ps1 - name: Build Windows run: | - dart lib/scripts/build.dart - flutter build windows --release - fastforge package --platform windows --targets exe + fastforge package --platform windows --targets exe --flutter-build-args="dart-define-from-file=pili_release.json" - name: Prepare Upload run: | diff --git a/.gitignore b/.gitignore index d6e6ecb6..58f61f66 100644 --- a/.gitignore +++ b/.gitignore @@ -137,9 +137,11 @@ app.*.symbols !.vscode/launch.json !.vscode/tasks.json -/lib/build_config.dart - devtools_options.yaml # FVM Version Cache -.fvm/ \ No newline at end of file +.fvm/ + +pili_release.json + +dist \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 5a57310d..1d8c8229 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,48 +1,25 @@ { - // 使用 IntelliSense 了解相关属性。 + // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { - "name": "Debug", + "name": "PiliPlus", "request": "launch", - "type": "dart", - "preLaunchTask": "Update build_config" + "type": "dart" }, { - "name": "Profile", + "name": "PiliPlus (profile mode)", "request": "launch", "type": "dart", - "flutterMode": "profile", - "preLaunchTask": "Update build_config" + "flutterMode": "profile" }, { - "name": "Release", + "name": "PiliPlus (release mode)", "request": "launch", "type": "dart", - "flutterMode": "release", - "preLaunchTask": "Update build_config" - }, - { - "name": "Debug (FVM)", - "request": "launch", - "type": "dart", - "preLaunchTask": "Update build_config (FVM)" - }, - { - "name": "Profile (FVM)", - "request": "launch", - "type": "dart", - "flutterMode": "profile", - "preLaunchTask": "Update build_config (FVM)" - }, - { - "name": "Release (FVM)", - "request": "launch", - "type": "dart", - "flutterMode": "release", - "preLaunchTask": "Update build_config (FVM)" + "flutterMode": "release" } ] } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index 9d61501d..00000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "Update build_config", - "command": "dart lib/scripts/build.dart dev", - "type": "shell", - "problemMatcher": [], - "presentation": { - "reveal": "always" - }, - "group": "build" - }, - { - "label": "Update build_config (FVM)", - "command": "fvm dart lib/scripts/build.dart dev", - "type": "shell", - "problemMatcher": [], - "presentation": { - "reveal": "always" - }, - "group": "build" - } - ] -} \ No newline at end of file diff --git a/lib/build_config.dart b/lib/build_config.dart new file mode 100644 index 00000000..f77eff98 --- /dev/null +++ b/lib/build_config.dart @@ -0,0 +1,16 @@ +class BuildConfig { + static const int versionCode = int.fromEnvironment( + 'pili.code', + defaultValue: 1, + ); + static const String versionName = String.fromEnvironment( + 'pili.name', + defaultValue: 'SNAPSHOT', + ); + + static const int buildTime = int.fromEnvironment('pili.time'); + static const String commitHash = String.fromEnvironment( + 'pili.hash', + defaultValue: 'N/A', + ); +} diff --git a/lib/scripts/build.dart b/lib/scripts/build.dart deleted file mode 100644 index d1d1f49f..00000000 --- a/lib/scripts/build.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'dart:io'; - -void main(Iterable args) async { - final arg = args.firstOrNull; - final pubspecFile = File('pubspec.yaml'); - final lines = await pubspecFile.readAsLines(); - - final versionLineIndex = lines.indexWhere( - (line) => line.trim().startsWith('version:'), - ); - - String versionName = lines[versionLineIndex] - .split('+')[0] - .replaceAll('version:', '') - .trim(); - - final commitHash = (await Process.run('git', [ - 'rev-parse', - 'HEAD', - ])).stdout.toString().trim(); - - if (arg == 'android') { - versionName += '-${commitHash.substring(0, 9)}'; - } - - final versionCode = (await Process.run('git', [ - 'rev-list', - '--count', - 'HEAD', - ])).stdout.toString().trim(); - - lines[versionLineIndex] = 'version: $versionName+$versionCode'; - - final buildTime = DateTime.now().millisecondsSinceEpoch ~/ 1000; - - final content = - ''' -class BuildConfig { - static const int versionCode = $versionCode; - static const String versionName = '$versionName'; - - static const int buildTime = $buildTime; - static const String commitHash = '$commitHash'; -} -'''; - - if (arg != 'dev') { - pubspecFile.writeAsString(lines.join('\n')); - } - File('lib/build_config.dart').writeAsString(content); -} diff --git a/lib/scripts/build.ps1 b/lib/scripts/build.ps1 new file mode 100644 index 00000000..c37c9101 --- /dev/null +++ b/lib/scripts/build.ps1 @@ -0,0 +1,47 @@ +param( + [string]$Arg = '' +) + +try { + $versionName = $null + + $versionCode = [int](git rev-list --count HEAD).Trim() + + $commitHash = (git rev-parse HEAD).Trim() + + $updatedContent = foreach ($line in (Get-Content -Path 'pubspec.yaml' -Encoding UTF8)) { + if ($line -match '^\s*version:\s*([\d\.]+)') { + $versionName = $matches[1] + if ($Arg -eq 'android') { + $versionName += '-' + $commitHash.Substring(0, 9) + } + "version: $versionName+$versionCode" + } + else { + $line + } + } + + if ($null -eq $versionName) { + throw 'version not found' + } + + $updatedContent | Set-Content -Path 'pubspec.yaml' -Encoding UTF8 + + $buildTime = [int]([DateTimeOffset]::Now.ToUnixTimeSeconds()) + + $data = @{ + 'pili.name' = $versionName + 'pili.code' = $versionCode + 'pili.hash' = $commitHash + 'pili.time' = $buildTime + } + + $data | ConvertTo-Json -Compress | Out-File 'pili_release.json' -Encoding UTF8 + + Add-Content -Path $env:GITHUB_ENV -Value "version=$versionName+$versionCode" +} +catch { + Write-Error "Prebuild Error: $($_.Exception.Message)" + exit 1 +} \ No newline at end of file