| name: Draft Github Release |
| on: |
| # Enable manual run |
| workflow_dispatch: |
| inputs: |
| version: |
| description: "Tag to create (e.g. v2.10.0). Must include 'v' and must match pubspec" |
| required: true |
| default: "v2.10.0" |
| type: string |
| |
| # Declare default permissions as read only. |
| permissions: read-all |
| |
| jobs: |
| draft-release: |
| name: Draft Github release |
| runs-on: ubuntu-latest |
| outputs: |
| upload_url: ${{ steps.create_release.outputs.upload_url }} |
| steps: |
| - name: Draft release with release notes |
| id: create_release |
| uses: softprops/action-gh-release@1e07f4398721186383de40550babbdf2b84acfc5 |
| env: |
| GITHUB_TOKEN: ${{ secrets.FLUTTERGALLERYRELEASEBOT_TOKEN }} |
| with: |
| tag_name: ${{ github.event.inputs.version }} |
| draft: true |
| prerelease: false |
| generate_release_notes: true |
| |
| create-build: |
| name: Create ${{ matrix.target }} build |
| runs-on: ${{ matrix.os }} |
| strategy: |
| matrix: |
| target: [macOS, Windows, Linux, Android] |
| include: |
| - os: macos-latest |
| target: macOS |
| build_target: macos |
| build_path: build/macos/Build/Products/Release |
| asset_extension: .zip |
| asset_content_type: application/zip |
| - os: windows-latest |
| target: Windows |
| build_target: windows |
| build_path: build\windows\runner\Release |
| asset_extension: .zip |
| asset_content_type: application/zip |
| - os: ubuntu-latest |
| target: Linux |
| build_target: linux |
| build_path: build/linux/x64/release/bundle |
| asset_extension: .tar.gz |
| asset_content_type: application/gzip |
| - os: ubuntu-latest |
| target: Android |
| build_target: apk |
| build_path: build/app/outputs/flutter-apk |
| asset_extension: .apk |
| asset_content_type: application/vnd.android.package-archive |
| # Disable fail-fast as we want results from all even if one fails. |
| fail-fast: false |
| needs: draft-release |
| steps: |
| # Set up Flutter. |
| - name: Clone Flutter repository with master channel |
| uses: subosito/flutter-action@1e6ee87cb840500837bcd50a667fb28815d8e310 |
| with: |
| channel: master |
| |
| - name: Install Linux dependencies |
| if: matrix.target == 'Linux' |
| run: | |
| sudo apt-get update |
| sudo apt-get install -y libgtk-3-dev libx11-dev pkg-config cmake ninja-build libblkid-dev |
| - name: Install Android dependencies |
| if: matrix.target == 'Android' |
| uses: actions/setup-java@a18c333f3f14249953dab3e186e5e21bf3390f1d |
| with: |
| java-version: "12.x" |
| distribution: temurin |
| - name: Enable desktop support |
| if: matrix.target != 'Android' |
| run: | |
| flutter config --enable-linux-desktop |
| flutter config --enable-macos-desktop |
| flutter config --enable-windows-desktop |
| - run: flutter doctor -v |
| # Checkout gallery code, recreate missing files, and get packages. |
| - name: Checkout gallery code |
| uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b |
| - run: flutter create . |
| - run: flutter pub get |
| |
| - name: Configure Keystore for Android |
| if: matrix.target == 'Android' |
| run: | |
| echo "$PLAY_STORE_UPLOAD_KEY" | base64 --decode > app/upload-keystore.jks |
| echo "storeFile=upload-keystore.jks" >> key.properties |
| echo "keyAlias=$KEYSTORE_KEY_ALIAS" >> key.properties |
| echo "storePassword=$KEYSTORE_STORE_PASSWORD" >> key.properties |
| echo "keyPassword=$KEYSTORE_KEY_PASSWORD" >> key.properties |
| env: |
| PLAY_STORE_UPLOAD_KEY: ${{ secrets.PLAY_STORE_UPLOAD_KEY }} |
| KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }} |
| KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }} |
| KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }} |
| working-directory: android |
| |
| # Build the application. |
| - run: flutter build -v ${{ matrix.build_target }} --release |
| |
| # Package the build. |
| - name: Copy VC redistributables to release directory for Windows |
| if: matrix.target == 'Windows' |
| run: | |
| Copy-Item (vswhere -latest -find 'VC\Redist\MSVC\*\x64\*\msvcp140.dll') . |
| Copy-Item (vswhere -latest -find 'VC\Redist\MSVC\*\x64\*\vcruntime140.dll') . |
| Copy-Item (vswhere -latest -find 'VC\Redist\MSVC\*\x64\*\vcruntime140_1.dll') . |
| working-directory: ${{ matrix.build_path }} |
| - name: Rename build for Android |
| if: matrix.target == 'Android' |
| run: mv app-release.apk $GITHUB_WORKSPACE/flutter_gallery_${{ matrix.target }}.apk |
| working-directory: ${{ matrix.build_path }} |
| - name: Compress build for Linux |
| if: matrix.target == 'Linux' |
| run: tar czf $GITHUB_WORKSPACE/flutter_gallery_${{ matrix.target }}.tar.gz * |
| working-directory: ${{ matrix.build_path }} |
| - name: Compress build for macOS |
| if: matrix.target == 'macOS' |
| run: ditto -c -k --sequesterRsrc --keepParent Flutter\ Gallery.app $GITHUB_WORKSPACE/flutter_gallery_${{ matrix.target }}.zip |
| working-directory: ${{ matrix.build_path }} |
| - name: Compress build for Windows |
| if: matrix.target == 'Windows' |
| run: compress-archive -Path * -DestinationPath ${env:GITHUB_WORKSPACE}\flutter_gallery_${{ matrix.target }}.zip |
| working-directory: ${{ matrix.build_path }} |
| |
| # Upload the build. |
| - name: Add packaged build to release draft |
| id: upload_release_asset |
| uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 |
| env: |
| GITHUB_TOKEN: ${{ secrets.FLUTTERGALLERYRELEASEBOT_TOKEN }} |
| with: |
| upload_url: ${{ needs.draft-release.outputs.upload_url }} |
| asset_path: ./flutter_gallery_${{ matrix.target }}${{ matrix.asset_extension }} |
| asset_name: flutter_gallery_${{ matrix.target }}${{ matrix.asset_extension }} |
| asset_content_type: ${{ matrix.asset_content_type }} |
| overwrite: true |