Pfe master #1238
Workflow file for this run
This file contains 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: Development workflow | |
on: | |
workflow_dispatch: | |
pull_request: | |
paths-ignore: | |
- '.gitignore' | |
- '.metadata' | |
- '*.md' | |
- 'android/fastlane/**' | |
- 'ios/fastlane/**' | |
- '.github/**' | |
- '.githooks/**' | |
- '!.github/workflows/dev-workflow.yaml' | |
concurrency: | |
group: ${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
MAPS_API_KEY: ${{ secrets.MAPS_API_KEY }} | |
APP_NAME: 'notre_dame' | |
jobs: | |
############################################################## | |
# Testing | |
############################################################## | |
testing: | |
name: Tests and checks | |
runs-on: ubuntu-latest | |
outputs: | |
coverage: ${{ steps.coverage.outputs.percentage }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.head_ref }} | |
token: ${{ secrets.PTA }} | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: '17' | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: '3.19.x' | |
channel: 'stable' | |
cache: true | |
- run: flutter doctor | |
- name: Decrypt SignETS certificate and Google Services files | |
run: | | |
chmod +x ./scripts/decrypt.sh | |
./scripts/decrypt.sh | |
env: | |
ENCRYPTED_SIGNETS_API_CERT_PASSWORD: ${{ secrets.ENCRYPTED_SIGNETS_API_CERT_PASSWORD }} | |
ENCRYPTED_GOOGLE_SERVICE_PASSWORD: ${{ secrets.ENCRYPTED_GOOGLE_SERVICE_PASSWORD }} | |
# Get flutter dependencies. | |
- run: | | |
flutter pub get | |
dart run build_runner build --delete-conflicting-outputs | |
# Check the format of the code and commit the formatted files. | |
- name: Format files in lib and test directories | |
run: dart format lib test | |
- name: Commit formatted files | |
id: commit_formatted | |
uses: stefanzweifel/git-auto-commit-action@v5 | |
with: | |
file_pattern: "*.dart" | |
commit_user_name: github-actions[bot] | |
commit_user_email: 41898282+github-actions[bot]@users.noreply.github.com | |
commit_message: "[BOT] Applying format." | |
add_options: '-u' | |
# Fail workflow, because new commit will execute workflow | |
- if: ${{ steps.commit_formatted.outputs.changes_detected == 'true' }} | |
name: Fail workflow if linting commit | |
run: | | |
echo 'Linting applied, running bot commit workflow' | |
exit 1 | |
# Check if the code has any errors/warnings | |
- name: Analyze code | |
run: flutter analyze | |
# Run the tests with --update-goldens. | |
- name: Run tests | |
run: flutter test --coverage --update-goldens | |
# Commit and push the goldens files updated. | |
- name: Commit golden files | |
id: commit_golden | |
uses: stefanzweifel/git-auto-commit-action@v5 | |
with: | |
file_pattern: test/* | |
commit_user_name: github-actions[bot] | |
commit_user_email: 41898282+github-actions[bot]@users.noreply.github.com | |
commit_message: '[BOT] Update golden files' | |
# Fail workflow, because new commit will execute workflow | |
- if: ${{ steps.commit_golden.outputs.changes_detected == 'true' }} | |
name: Fail workflow if golden commit | |
run: | | |
echo 'Golden files changes commit, running bot commit workflow' | |
exit 1 | |
- name: Upload coverage file | |
uses: actions/upload-artifact@v4 | |
with: | |
name: lcov.info | |
path: ${{ github.workspace }}/coverage/lcov.info | |
- name: Get code coverage | |
id: coverage | |
run: | | |
chmod +x ./scripts/determine_code_coverage.sh | |
export COV="$(./scripts/determine_code_coverage.sh coverage/lcov.info)" | |
echo "Coverage detected is: $COV" | |
echo "percentage=$COV" >> $GITHUB_OUTPUT | |
coverage: | |
name: Update coverage | |
needs: | |
- testing | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download coverage file | |
uses: actions/download-artifact@v4 | |
with: | |
name: lcov.info | |
# Comment coverage report | |
- name: Comment the coverage of the PR | |
uses: romeovs/[email protected] | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
lcov-file: ./lcov.info | |
############################################################## | |
# Build | |
############################################################## | |
build: | |
name: Create ${{ matrix.target }} build | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
target: [ iOS, Android ] | |
include: | |
- os: macos-latest | |
target: iOS | |
build_target: ios | |
build_args: --no-codesign | |
build_path: build/ios/iphoneos | |
asset_extension: zip | |
asset_content_type: application/zip | |
- os: ubuntu-latest | |
target: Android | |
build_target: apk | |
build_args: '' | |
build_path: build/app/outputs/apk/release | |
asset_extension: apk | |
asset_content_type: application/zip | |
# Disable fail-fast as we want results from all even if one fails. | |
fail-fast: false | |
needs: | |
- testing | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: '3.19.x' | |
channel: 'stable' | |
cache: true | |
- name: Install Android dependencies | |
if: matrix.target == 'Android' | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
- run: flutter doctor -v | |
- name: Install iOS dependencies | |
if: matrix.target == 'iOS' | |
run: | | |
flutter pub get | |
dart run build_runner build --delete-conflicting-outputs | |
cd ios | |
pod update | |
flutter clean | |
- name: Commit pod updates | |
if: matrix.target == 'iOS' | |
id: commit_pod_versions | |
uses: stefanzweifel/git-auto-commit-action@v5 | |
with: | |
file_pattern: "ios/*" | |
commit_user_name: github-actions[bot] | |
commit_user_email: 41898282+github-actions[bot]@users.noreply.github.com | |
commit_message: "[BOT] Applying pod update." | |
add_options: '-u' | |
# Fail workflow, because new commit will execute workflow | |
- if: ${{ matrix.target == 'iOS' && steps.commit_pod_versions.outputs.changes_detected == 'true' }} | |
name: Fail workflow if pod version change | |
run: | | |
echo 'Pod update applied, running bot commit workflow' | |
exit 1 | |
# Get dependencies and decrypt needed files. | |
- run: | | |
flutter pub get | |
dart run build_runner build --delete-conflicting-outputs | |
- name: Decrypt SignETS certificate and Google Services files | |
run: | | |
chmod +x ./scripts/decrypt.sh | |
./scripts/decrypt.sh | |
env: | |
ENCRYPTED_SIGNETS_API_CERT_PASSWORD: ${{ secrets.ENCRYPTED_SIGNETS_API_CERT_PASSWORD }} | |
ENCRYPTED_GOOGLE_SERVICE_PASSWORD: ${{ secrets.ENCRYPTED_GOOGLE_SERVICE_PASSWORD }} | |
ENCRYPTED_ETSMOBILE_KEYSTORE_PASSWORD: ${{ secrets.ENCRYPTED_ETSMOBILE_KEYSTORE_PASSWORD }} | |
ENCRYPTED_KEYSTORE_PROPERTIES_PASSWORD: ${{ secrets.ENCRYPTED_KEYSTORE_PROPERTIES_PASSWORD }} | |
# Build the application. | |
- name: Build the application | |
run: flutter build -v ${{ matrix.build_target }} ${{ matrix.build_args }} --release --dart-define=GH_API_TOKEN=${{ secrets.GH_API_TOKEN }} | |
- name: Rename Android build | |
if: matrix.target == 'Android' | |
run: mv app-release.${{ matrix.asset_extension }} ${{ github.workspace }}/${{ env.APP_NAME }}_${{ matrix.target }}.${{ matrix.asset_extension }} | |
working-directory: ${{ matrix.build_path }} | |
- name: Compress iOS build | |
if: matrix.target == 'iOS' | |
run: | | |
mv Runner.app ${{ env.APP_NAME }}.app | |
ditto -c -k --sequesterRsrc --keepParent ${{ env.APP_NAME }}.app ${{ github.workspace }}/${{ env.APP_NAME }}_${{ matrix.target }}.${{ matrix.asset_extension }} | |
working-directory: ${{ matrix.build_path }} | |
- name: Upload build artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.target }} | |
path: ${{ github.workspace }}/${{ env.APP_NAME }}_${{ matrix.target }}.${{ matrix.asset_extension }} |