This is my setup.yml
for one reusable workflow
on:
workflow_call:
secrets:
ssh_private_key:
required: true
known_hosts:
required: true
jobs:
setup:
name: 'Setup dependencies'
runs-on: ubuntu-latest
steps:
# Set up SSH key
- name: Configure ssh key server
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_PRIVATE_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
# Set up Java
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# Set up Android SDK
- name: Setup Android SDK
uses: android-actions/setup-android@v3
# Set up Flutter.
- name: Clone Flutter repository with stable channel
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true
- run: flutter doctor -v
# Checkout debi app code and get packages.
- name: Clone Debi app repo and get packages
uses: actions/checkout@v3
- run: flutter pub get
and this is my another test.yml
use to run test
name: 'test flutter'
on:
workflow_call:
jobs:
test:
name: 'run test'
runs-on: ubuntu-latest
steps:
# Test
- name: Run tests
run: |
flutter pub get
flutter test
flutter analyze
so my parent workflow look like this
name: Release to Firebase App Distribution
on:
workflow_dispatch:
inputs:
tester_group:
description: "Select the group of testers to distribute the app to"
required: true
default: "cicd-test"
type: choice
options:
- "cicd-test"
- "debi-internal"
release_notes:
description: 'Release notes'
type: string
required: true
default: 'No release notes provided'
build_number:
description: 'Build number'
type: number
required: true
default: 34
jobs:
setup:
uses: ./.github/workflows/setup.yml
secrets: inherit
test:
uses: ./.github/workflows/test.yml
secrets: inherit
needs: [setup]
release:
name: 'release to firebase app distribution'
runs-on: ubuntu-latest
needs: [test]
steps:
# Configure key store
- name: Create key.properties files and keystore file
run: |
echo "storePassword=${{ secrets.ANDROID_STORE_PASSWORD }}" > android/key.properties
echo "keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }}" >> android/key.properties
echo "keyAlias=${{ secrets.ANDROID_KEY_ALIAS }}" >> android/key.properties
echo "storeFile=../debi.jks" >> android/key.properties
echo "${{ secrets.ANDROID_KEYSTORE_CONTENT_BASE64 }}" | base64 --decode > android/debi.jks
# Build the app
- name: Build the app
run: flutter build apk --flavor staging -t lib/main_staging.dart --build-number=${{ inputs.build_number }}
however my workflow failed after running the test workflow where the error was
flutter: command not found
im using the composite action as below
name: 'common setup'
inputs:
known_hosts:
description: Known hosts
required: true
ssh_private_key:
description: SSH private
required: true
runs:
using: composite
steps:
# Set up SSH key
- name: Configure ssh key server
shell: bash
uses: shimataro/ssh-key-action@v2
with:
key: ${{ inputs.ssh_private_key }}
name: id_rsa
known_hosts: ${{ inputs.known_hosts }}
# Set up Java
- name: Set up JDK 17
shell: bash
uses: actions/setup-java@v3
with:
java-version: 17
distribution: temurin
# Set up Android SDK
- name: Setup Android SDK
shell: bash
uses: android-actions/setup-android@v3
# Set up Flutter.
- name: Clone Flutter repository with stable channel
shell: bash
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true
run: flutter doctor -v
# Checkout debi app code and get packages.
- name: Clone Debi app repo and get packages
shell: bash
uses: actions/checkout@v3
run: flutter pub get
and i use it in main workflow like this
release:
name: 'release to firebase app distribution'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: reuse steps
uses: ./.github/actions/
with:
known_hosts: ${{ secrets.KNOWN_HOSTS }}
ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}
but it turns out i get the error
how can i solve this
The use of a composite action is the right approach. To make the action work, remove the lines with a shell:
key as it is invalid in a step that uses:
an action. shell:
can only be used with in a run:
step.
shell: bash