Build and Release #14
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Release | |
| on: | |
| # Trigger on version tags | |
| push: | |
| tags: | |
| - 'v*.*.*' | |
| # Allow manual trigger | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version number (e.g., 1.0.5)' | |
| required: true | |
| default: '1.0.5' | |
| jobs: | |
| build-android: | |
| name: Build Android APK | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'zulu' | |
| java-version: '17' | |
| - name: Setup Flutter | |
| uses: subosito/flutter-action@v2 | |
| with: | |
| channel: 'stable' | |
| cache: true | |
| - name: Get dependencies | |
| run: flutter pub get | |
| - name: Generate localizations | |
| run: flutter gen-l10n | |
| - name: Build APK | |
| run: flutter build apk --release --split-per-abi | |
| - name: Upload APK artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: android-apk | |
| path: | | |
| build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk | |
| build/app/outputs/flutter-apk/app-arm64-v8a-release.apk | |
| build/app/outputs/flutter-apk/app-x86_64-release.apk | |
| build-windows: | |
| name: Build Windows | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Flutter | |
| uses: subosito/flutter-action@v2 | |
| with: | |
| channel: 'stable' | |
| cache: true | |
| - name: Get dependencies | |
| run: flutter pub get | |
| - name: Generate localizations | |
| run: flutter gen-l10n | |
| - name: Build Windows | |
| run: flutter build windows --release | |
| - name: Get version | |
| id: version | |
| shell: bash | |
| run: | | |
| if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then | |
| echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT | |
| else | |
| echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Install NSIS | |
| run: choco install nsis --yes | |
| - name: Build Windows Installer | |
| run: | | |
| & "C:\Program Files (x86)\NSIS\makensis.exe" /DMUSLY_VERSION=${{ steps.version.outputs.VERSION }} installer.nsi | |
| Get-Item musly-*-setup.exe | Rename-Item -NewName "musly-windows-setup.exe" | |
| - name: Upload Windows artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: windows-build | |
| path: musly-windows-setup.exe | |
| build-linux: | |
| name: Build Linux | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| clang cmake ninja-build pkg-config \ | |
| libgtk-3-dev liblzma-dev libglib2.0-dev \ | |
| libmpv-dev mpv | |
| - name: Setup Flutter | |
| uses: subosito/flutter-action@v2 | |
| with: | |
| channel: 'stable' | |
| cache: true | |
| - name: Get dependencies | |
| run: flutter pub get | |
| - name: Generate localizations | |
| run: flutter gen-l10n | |
| - name: Build Linux | |
| run: flutter build linux --release | |
| - name: Package Linux Build | |
| run: | | |
| cd build/linux/x64/release/bundle | |
| tar -czf ../../../../../musly-linux-x64.tar.gz * | |
| - name: Upload Linux artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: linux-build | |
| path: musly-linux-x64.tar.gz | |
| build-ios: | |
| name: Build iOS IPA | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Flutter | |
| uses: subosito/flutter-action@v2 | |
| with: | |
| channel: 'stable' | |
| cache: true | |
| - name: Get dependencies | |
| run: flutter pub get | |
| - name: Generate localizations | |
| run: flutter gen-l10n | |
| - name: Install CocoaPods dependencies | |
| run: | | |
| cd ios | |
| pod install --repo-update | |
| - name: Build iOS (no code sign) | |
| run: flutter build ios --release --no-codesign | |
| - name: Package IPA | |
| run: | | |
| mkdir -p Payload | |
| cp -r build/ios/iphoneos/Runner.app Payload/Runner.app | |
| zip -r musly-ios.ipa Payload | |
| rm -rf Payload | |
| - name: Upload iOS artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ios-build | |
| path: musly-ios.ipa | |
| build-macos: | |
| name: Build macOS | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Flutter | |
| uses: subosito/flutter-action@v2 | |
| with: | |
| channel: 'stable' | |
| cache: true | |
| - name: Get dependencies | |
| run: flutter pub get | |
| - name: Generate localizations | |
| run: flutter gen-l10n | |
| - name: Install CocoaPods dependencies | |
| run: | | |
| cd macos | |
| pod install --repo-update | |
| - name: Build macOS | |
| run: flutter build macos --release | |
| - name: Get version | |
| id: version | |
| run: | | |
| if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then | |
| echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT | |
| else | |
| echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Package DMG | |
| run: | | |
| brew install create-dmg | |
| create-dmg \ | |
| --volname "Musly ${{ steps.version.outputs.VERSION }}" \ | |
| --window-pos 200 120 \ | |
| --window-size 800 400 \ | |
| --icon-size 100 \ | |
| --icon "Musly.app" 200 190 \ | |
| --hide-extension "Musly.app" \ | |
| --app-drop-link 600 185 \ | |
| "musly-macos.dmg" \ | |
| "build/macos/Build/Products/Release/" | |
| - name: Upload macOS artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: macos-build | |
| path: musly-macos.dmg | |
| create-release: | |
| name: Create GitHub Release | |
| needs: [build-android, build-windows, build-linux, build-ios, build-macos] | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Get version | |
| id: version | |
| run: | | |
| if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then | |
| echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT | |
| else | |
| echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: v${{ steps.version.outputs.VERSION }} | |
| name: Release v${{ steps.version.outputs.VERSION }} | |
| body: | | |
| ## 🎉 Musly v${{ steps.version.outputs.VERSION }} | |
| ### 📦 Downloads | |
| **Android:** | |
| - ARM64: `app-arm64-v8a-release.apk` (recommended for most devices) | |
| - ARMv7: `app-armeabi-v7a-release.apk` (for older devices) | |
| - x86_64: `app-x86_64-release.apk` (for emulators) | |
| **iOS:** | |
| - `musly-ios.ipa` (sideload with AltStore, Sideloadly, or similar — not signed) | |
| **Windows:** | |
| - `musly-windows-setup.exe` (setup installer, run to install Musly) | |
| **macOS:** | |
| - `musly-macos.dmg` (drag Musly.app to Applications — not notarized) | |
| **Linux:** | |
| - `musly-linux-x64.tar.gz` (extract and run musly) | |
| ### 📝 Changelog | |
| See [CHANGELOG.md](https://github.com/dddevid/Musly/blob/master/CHANGELOG.md) | |
| ### 🌍 Translations | |
| Contribute translations at [Crowdin](https://crowdin.com/project/musly) | |
| draft: false | |
| prerelease: false | |
| files: | | |
| artifacts/android-apk/*.apk | |
| artifacts/ios-build/*.ipa | |
| artifacts/windows-build/*.exe | |
| artifacts/macos-build/*.dmg | |
| artifacts/linux-build/*.tar.gz | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |