diff --git a/.github/workflows/android-build.yml b/.github/workflows/android-build.yml deleted file mode 100644 index 37997d19..00000000 --- a/.github/workflows/android-build.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: Android Build - -on: - push: - tags: - - 'v*' - workflow_dispatch: - -jobs: - build-android: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Java - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: '17' - - - name: Setup Go - uses: actions/setup-go@v5 - with: - go-version: '1.21' - cache-dependency-path: go_backend/go.sum - - - name: Install Android SDK & NDK - uses: android-actions/setup-android@v3 - - - name: Install gomobile - run: | - go install golang.org/x/mobile/cmd/gomobile@latest - gomobile init - - - name: Build Go backend for Android - working-directory: go_backend - run: | - mkdir -p ../android/app/libs - gomobile bind -target=android -androidapi 24 -o ../android/app/libs/gobackend.aar . - env: - CGO_ENABLED: 1 - - - name: Setup Flutter - uses: subosito/flutter-action@v2 - with: - channel: 'stable' - cache: true - - - name: Get Flutter dependencies - run: flutter pub get - - - name: Generate app icons - run: dart run flutter_launcher_icons - - - name: Build APK (Release) - run: flutter build apk --release - - - name: Build App Bundle (Release) - run: flutter build appbundle --release - - - name: Upload APK artifact - uses: actions/upload-artifact@v4 - with: - name: SpotiFLAC-Android-APK - path: build/app/outputs/flutter-apk/app-release.apk - retention-days: 30 - - - name: Upload AAB artifact - uses: actions/upload-artifact@v4 - with: - name: SpotiFLAC-Android-AAB - path: build/app/outputs/bundle/release/app-release.aab - retention-days: 30 diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml deleted file mode 100644 index 48c6e0fb..00000000 --- a/.github/workflows/auto-release.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: Auto Release on Version Bump - -on: - push: - branches: [main] - paths: - - 'pubspec.yaml' - -jobs: - check-version: - runs-on: ubuntu-latest - outputs: - version_changed: ${{ steps.check.outputs.changed }} - new_version: ${{ steps.check.outputs.version }} - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - - name: Check if version changed - id: check - run: | - # Get current version - CURRENT_VERSION=$(grep '^version:' pubspec.yaml | sed 's/version: //' | cut -d'+' -f1) - - # Get previous version - git show HEAD~1:pubspec.yaml > /tmp/old_pubspec.yaml 2>/dev/null || echo "version: 0.0.0" > /tmp/old_pubspec.yaml - PREVIOUS_VERSION=$(grep '^version:' /tmp/old_pubspec.yaml | sed 's/version: //' | cut -d'+' -f1) - - echo "Current version: $CURRENT_VERSION" - echo "Previous version: $PREVIOUS_VERSION" - - if [ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]; then - echo "Version changed!" - echo "changed=true" >> $GITHUB_OUTPUT - echo "version=v$CURRENT_VERSION" >> $GITHUB_OUTPUT - else - echo "Version unchanged" - echo "changed=false" >> $GITHUB_OUTPUT - fi - - create-tag-and-trigger-release: - needs: check-version - if: needs.check-version.outputs.version_changed == 'true' - runs-on: ubuntu-latest - permissions: - contents: write - actions: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Create and push tag - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git tag ${{ needs.check-version.outputs.new_version }} - git push origin ${{ needs.check-version.outputs.new_version }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Trigger Release workflow - run: | - gh workflow run release.yml -f version=${{ needs.check-version.outputs.new_version }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ios-build.yml b/.github/workflows/ios-build.yml deleted file mode 100644 index 63c46cc3..00000000 --- a/.github/workflows/ios-build.yml +++ /dev/null @@ -1,118 +0,0 @@ -name: iOS Build - -on: - push: - tags: - - 'v*' - workflow_dispatch: - -jobs: - build-ios: - runs-on: macos-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Go - uses: actions/setup-go@v5 - with: - go-version: '1.21' - cache-dependency-path: go_backend/go.sum - - - name: Install gomobile - run: | - go install golang.org/x/mobile/cmd/gomobile@latest - gomobile init - - - name: Build Go backend for iOS (XCFramework) - working-directory: go_backend - run: | - mkdir -p ../ios/Frameworks - gomobile bind -target=ios -o ../ios/Frameworks/Gobackend.xcframework . - env: - CGO_ENABLED: 1 - - - name: Verify XCFramework created - run: | - echo "=== Checking XCFramework ===" - ls -la ios/Frameworks/ - ls -la ios/Frameworks/Gobackend.xcframework/ || (echo "ERROR: XCFramework not found!" && exit 1) - - - name: Add XCFramework to Xcode project - run: | - # Install xcodeproj gem for modifying Xcode project - sudo gem install xcodeproj - - # Create Ruby script to add framework - cat > add_framework.rb << 'EOF' - require 'xcodeproj' - - project_path = 'ios/Runner.xcodeproj' - project = Xcodeproj::Project.open(project_path) - - # Get the main target - target = project.targets.find { |t| t.name == 'Runner' } - - # Get or create Frameworks group - frameworks_group = project.main_group.find_subpath('Frameworks', true) - frameworks_group ||= project.main_group.new_group('Frameworks') - - # Add XCFramework reference - framework_path = 'Frameworks/Gobackend.xcframework' - framework_ref = frameworks_group.new_file(framework_path, :project) - - # Add to frameworks build phase - frameworks_build_phase = target.frameworks_build_phase - frameworks_build_phase.add_file_reference(framework_ref) - - # Add to embed frameworks build phase - embed_phase = target.build_phases.find { |p| p.is_a?(Xcodeproj::Project::Object::PBXCopyFilesBuildPhase) && p.name == 'Embed Frameworks' } - if embed_phase - build_file = embed_phase.add_file_reference(framework_ref) - build_file.settings = { 'ATTRIBUTES' => ['CodeSignOnCopy', 'RemoveHeadersOnCopy'] } - end - - project.save - puts "Successfully added Gobackend.xcframework to Xcode project" - EOF - - ruby add_framework.rb - - - name: Setup Flutter - uses: subosito/flutter-action@v2 - with: - channel: 'stable' - cache: true - - - name: Get Flutter dependencies - run: flutter pub get - - - name: Generate app icons - run: dart run flutter_launcher_icons - - - name: Build iOS (no codesign) - run: flutter build ios --release --no-codesign - - - name: Create IPA (unsigned) - run: | - mkdir -p build/ios/ipa - cd build/ios/iphoneos - mkdir Payload - cp -r Runner.app Payload/ - zip -r ../ipa/SpotiFLAC-unsigned.ipa Payload - rm -rf Payload - - - name: Upload IPA artifact - uses: actions/upload-artifact@v4 - with: - name: SpotiFLAC-iOS-unsigned - path: build/ios/ipa/SpotiFLAC-unsigned.ipa - retention-days: 30 - - - name: Upload XCFramework artifact - uses: actions/upload-artifact@v4 - with: - name: Gobackend-XCFramework - path: ios/Frameworks/Gobackend.xcframework - retention-days: 30 diff --git a/.gitignore b/.gitignore index 473a8136..d0c52ec4 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ build/ .flutter-plugins .flutter-plugins-dependencies .metadata +*.apk # Go backend build artifacts go_backend/*.aar @@ -40,10 +41,10 @@ android/.gradle/ android/app/libs/ android/local.properties android/*.iml -android/keystore.properties +android/key.properties android/*.jks android/*.keystore -android/app/ci-keystore.jks +android/app/*.jks # iOS ios/Frameworks/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 52c78148..c5fc4b2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,19 @@ # Changelog -## [1.5.0-hotfix3] - 2026-01-02 +## [1.5.0-hotfix6] - 2026-01-02 ### Fixed -- **App Signing**: Decode keystore in workflow before Gradle evaluation +- **App Signing**: Use r0adkll/sign-android-release GitHub Action for reliable signing -## [1.5.0-hotfix2] - 2026-01-02 +## [1.5.0-hotfix5] - 2026-01-02 ### Fixed -- **App Signing**: Fixed CI/CD signing configuration +- **App Signing**: Use key.properties as per Flutter official documentation + +## [1.5.0-hotfix4] - 2026-01-02 + +### Fixed +- **App Signing**: Create keystore.properties in workflow for Gradle ## [1.5.0-hotfix] - 2026-01-02