name: Composite Flutter Setup description: checkouts the tree, setups the environment inputs: ANDROID_TOOLS_VERSION: description: 'android tools version' default: '13114758' ANDROID_PLATFORM: description: 'android platform version' default: 'android-36' ANDROID_BUILDTOOLS: description: 'android buildtools version' default: '36.1.0' runs: using: 'composite' steps: # Real checkout on github actions for pull requests - name: Checkout code (non-act pull_request) uses: actions/checkout@v4 if: github.event_name == 'pull_request' && !env.ACT with: fetch-depth: 0 fetch-tags: true # Checkout the PR; not the merge commit - we need to describe tags ref: ${{ github.event.pull_request.head.sha }} # Real checkout on github actions for post submit - name: Checkout code (non-act push) uses: actions/checkout@v4 if: github.event_name == 'push' && !env.ACT with: fetch-depth: 0 fetch-tags: true # Checkout the PR; not the merge commit - we need to describe tags ref: ${{ github.event.pull_request.head.sha }} # Fake checkout if running locally - name: Checkout code (act local) uses: actions/checkout@v4 if: env.ACT # If this is a branch / pr NOT on fluter/flutter, set the remote upstream # so the flutter tool can figure out the version - name: Set upstream (if not flutter/flutter) shell: bash if: github.repository != 'flutter/flutter' && !env.ACT run: | git remote add upstream https://github.com/flutter/flutter.git git fetch --all --tags # If running locally; install the JDK - Github runners have everything on them - name: Set up our JDK environment if: env.ACT uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 with: java-version: '21' distribution: 'temurin' # If running locally; install Android SDK tools - Github runners have everything on them - name: Set Android SDK environment variable shell: bash if: env.ACT run: | echo "ANDROID_SDK_ROOT=/opt/android/sdk" >> $GITHUB_ENV echo "ANDROID_HOME=/opt/android/sdk" >> $GITHUB_ENV - name: Get Android SDK version shell: bash id: android-sdk-version if: env.ACT run: | echo "revision=${{inputs.ANDROID_TOOLS_VERSION}};${{inputs.ANDROID_PLATFORM}};build-tools;${{inputs.ANDROID_BUILDTOOLS}}" >> "$GITHUB_OUTPUT" - name: Android SDK Cache uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 id: android-sdk-setup if: env.ACT with: path: /opt/android/sdk key: ${{ runner.os }}-${{ steps.android-sdk-version.outputs.revision }} - name: Setup Android SDK (cold cache) if: env.ACT && steps.android-sdk-setup.outputs.cache-hit != 'true' uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 with: packages: 'tools platform-tools platforms;${{inputs.ANDROID_PLATFORM}} build-tools;${{inputs.ANDROID_BUILDTOOLS}}' log-accepted-android-sdk-licenses: false cmdline-tools-version: ${{ inputs.ANDROID_TOOLS_VERSION }} - name: Setup Android SDK (warm cache) shell: bash if: env.ACT && steps.android-sdk-setup.outputs.cache-hit == 'true' run: | echo "/opt/android/sdk/cmdline-tools/${{ inputs.ANDROID_TOOLS_VERSION }}/bin" >> "$GITHUB_PATH" echo "/opt/android/sdk/platform-tools" >> "$GITHUB_PATH" - name: Add `flutter` to the PATH shell: bash run: | echo "$GITHUB_WORKSPACE/bin" >> "$GITHUB_PATH" - name: Setup PUB_CACHE environment variable shell: bash run: | echo "PUB_CACHE=/opt/pub-cache" >> $GITHUB_ENV # Get the Flutter revision. This is the key for the cache for artifacts # under bin/cache - name: Get Flutter version shell: bash id: flutter-revision run: | echo "revision=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT" - name: Flutter artifacts cache uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 id: flutter-artifacts with: path: ${{ github.workspace }}/bin/cache key: ${{ runner.os }}-flutter-${{ steps.flutter-revision.outputs.revision }} - name: pub deps hash shell: bash id: pub-deps-hash run: | # Generate stable hash of pubspec.yaml files find dev examples packages -name "pubspec.yaml" -print0 | sort -z | xargs -0 cat | sha256sum >> "$RUNNER_TEMP/pub_deps_sha" echo "revision=$(cat "$RUNNER_TEMP/pub_deps_sha")" >> "$GITHUB_OUTPUT" - name: pub package cache uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 id: pub-cache with: path: | /opt/pub-cache ${{ github.workspace }}/**/.dart_tool ${{ github.workspace }}/**/pubspec.lock key: ${{ runner.os }}-pub-${{ steps.pub-deps-hash.outputs.revision }} - name: Flutter Doctor shell: bash run: | flutter doctor - name: flutter pub get (online) shell: bash if: steps.pub-cache.outputs.cache-hit != 'true' run: | flutter pub get