name: Mobile Release on: push: tags: - 'mobile-v*' permissions: contents: write jobs: build: name: Build Mobile Apps uses: ./.github/workflows/flutter-build.yml secrets: inherit release: name: Create Mobile GitHub Release needs: [build] runs-on: ubuntu-latest timeout-minutes: 10 permissions: contents: write steps: - name: Extract version from tag id: version run: | # Strip 'mobile-' prefix to get the version part (e.g., 'mobile-v1.0.0' -> 'v1.0.0') VERSION="${GITHUB_REF_NAME#mobile-}" echo "version=$VERSION" >> $GITHUB_OUTPUT echo "Extracted version: $VERSION" - name: Download Android APK artifact uses: actions/download-artifact@v4.3.0 with: name: app-release-apk path: ${{ runner.temp }}/mobile-artifacts - name: Download iOS build artifact uses: actions/download-artifact@v4.3.0 with: name: ios-build-unsigned path: ${{ runner.temp }}/ios-build - name: Prepare release assets run: | set -euo pipefail mkdir -p ${{ runner.temp }}/release-assets echo "=== Downloaded artifacts ===" echo "Mobile artifacts:" ls -laR "${{ runner.temp }}/mobile-artifacts" || echo "No mobile-artifacts directory" echo "iOS build:" ls -laR "${{ runner.temp }}/ios-build" || echo "No ios-build directory" echo "===========================" # Copy debug APK if it exists if [ -f "${{ runner.temp }}/mobile-artifacts/app-debug.apk" ]; then cp "${{ runner.temp }}/mobile-artifacts/app-debug.apk" \ "${{ runner.temp }}/release-assets/sure-${{ steps.version.outputs.version }}-debug.apk" echo "✓ Debug APK prepared" fi # Copy release APK if it exists if [ -f "${{ runner.temp }}/mobile-artifacts/app-release.apk" ]; then cp "${{ runner.temp }}/mobile-artifacts/app-release.apk" \ "${{ runner.temp }}/release-assets/sure-${{ steps.version.outputs.version }}.apk" echo "✓ Release APK prepared" fi # Create iOS app archive (zip the .app bundle) if [ -d "${{ runner.temp }}/ios-build/ios/iphoneos/Runner.app" ]; then cd "${{ runner.temp }}/ios-build/ios/iphoneos" zip -r "${{ runner.temp }}/release-assets/sure-${{ steps.version.outputs.version }}-ios-unsigned.zip" Runner.app echo "✓ iOS build archive prepared" fi # Copy iOS build info if [ -f "${{ runner.temp }}/ios-build/ios-build-info.txt" ]; then cp "${{ runner.temp }}/ios-build/ios-build-info.txt" "${{ runner.temp }}/release-assets/" fi echo "Release assets:" ls -la "${{ runner.temp }}/release-assets/" # Fail early if no assets were produced if [ -z "$(ls -A "${{ runner.temp }}/release-assets/")" ]; then echo "::error::No release assets were produced" exit 1 fi - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: tag_name: ${{ github.ref_name }} name: "${{ steps.version.outputs.version }} (Mobile)" draft: false prerelease: ${{ contains(github.ref_name, 'alpha') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'rc') }} generate_release_notes: false files: | ${{ runner.temp }}/release-assets/* body: | ## Mobile-Only Release: ${{ steps.version.outputs.version }} This is a mobile-only release. It does not include server-side changes. ### Downloads - **Android APK**: Debug build for testing on Android devices - **iOS Build**: Unsigned iOS build (requires code signing for installation) > **Note**: These are builds intended for testing purposes. For production use, please build from source with proper signing credentials.