blob: 61c1a81ac4321f7e6c7062e0da6664e06fa4c9b2 [file]
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@27d5ce7f107fe9357f9df03efb73ab90386fccae
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"
# ktlint is needed by tree analyze
- name: ktlint cache
id: ktlint-cache
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae
with:
# Cache the ktlint binary in runner.temp to avoid interfering with Flutter's bin folder
path: ${{ runner.temp }}/ktlint-bin/ktlint
# Hardcode the version in the key since it's hardcoded in the URL
key: ${{ runner.os }}-ktlint-1.5.0
- name: Download and Install ktlint 1.5.0
if: steps.ktlint-cache.outputs.cache-hit != 'true'
shell: bash
run: |
mkdir -p ${{ runner.temp }}/ktlint-bin
# 1. Download directly into the temp directory
curl -fsSL -o ${{ runner.temp }}/ktlint-bin/ktlint https://github.com/ktlint/ktlint/releases/download/1.5.0/ktlint
# 2. Verify the checksum to ensure the binary hasn't been tampered with
EXPECTED_SHA="a16be01dcc480aab2f55f444b620142152f66e31564b3b9376506d624c28a2ad"
echo "$EXPECTED_SHA ${{ runner.temp }}/ktlint-bin/ktlint" | sha256sum --check -
# 3. Make the binary executable
chmod a+x ${{ runner.temp }}/ktlint-bin/ktlint
- name: Add ktlint to PATH
shell: bash
run: |
echo "${{ runner.temp }}/ktlint-bin" >> "$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@27d5ce7f107fe9357f9df03efb73ab90386fccae
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@27d5ce7f107fe9357f9df03efb73ab90386fccae
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