CI/CD #67
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: CI/CD | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
types: | |
- opened | |
- synchronize | |
merge_group: | |
schedule: | |
- cron: "0 14 * * 1" # every monday at 9 in the morning CST | |
workflow_dispatch: | |
env: | |
CI: true | |
permissions: | |
contents: read | |
jobs: | |
setup: | |
name: Setup | |
needs: [] | |
timeout-minutes: 5 | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
steps: | |
- name: π Git checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
submodules: recursive | |
clean: true | |
persist-credentials: false | |
set-safe-directory: true | |
- name: π¦ Set up Flutter | |
id: flutter | |
uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 # v2.16.0 | |
with: | |
flutter-version-file: pubspec.yaml | |
cache: true | |
- name: π Disable analytics | |
run: flutter --disable-analytics | |
- name: π¦ Install dependencies | |
run: flutter pub get | |
- name: βοΈ Cache generated files | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: | | |
.dart_tool/ | |
lib/gen/*.gen.dart | |
lib/src/features/**/*.g.dart | |
lib/src/features/**/*.freezed.dart | |
lib/src/utils/*.g.dart | |
lib/src/utils/*.freezed.dart | |
lib/src/app/*.gr.dart | |
lib/src/app/*.gm.dart | |
lib/src/l10n/app_localizations.dart | |
lib/src/l10n/app_localizations_*.dart | |
key: ${{ runner.os }}-${{ steps.flutter.outputs.CHANNEL }}-dart-${{ hashFiles('**/build.yaml') }} | |
- name: π Generate files | |
run: | | |
flutter gen-l10n | |
dart run build_runner build -d | |
build: | |
name: Build | |
needs: ["setup"] | |
timeout-minutes: ${{ (matrix.target == 'web') && 5 || 10 }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
target: | |
- web | |
- appbundle | |
# - ios | |
# - macos | |
# - windows | |
include: | |
- target: web | |
os: ubuntu-latest | |
flutter-flags: --release | |
- target: appbundle | |
os: ubuntu-latest | |
flutter-flags: --debug --no-tree-shake-icons --no-shrink | |
# - target: ios | |
# os: macos-latest | |
# flutter-flags: --debug --no-tree-shake-icons | |
# - target: macos | |
# os: macos-latest | |
# flutter-flags: --debug --no-tree-shake-icons | |
# - target: windows | |
# os: windows-latest | |
# flutter-flags: --debug --no-tree-shake-icons | |
steps: | |
- name: π Git checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
submodules: recursive | |
clean: true | |
persist-credentials: false | |
set-safe-directory: true | |
- name: π¦ Set up Flutter | |
id: flutter | |
uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 # v2.16.0 | |
with: | |
flutter-version-file: pubspec.yaml | |
cache: true | |
- name: π Disable analytics | |
run: flutter --disable-analytics | |
- name: π¦ Install dependencies | |
run: flutter pub get | |
- name: βοΈ Cache generated files | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: | | |
.dart_tool/ | |
lib/gen/*.gen.dart | |
lib/src/features/**/*.g.dart | |
lib/src/features/**/*.freezed.dart | |
lib/src/utils/*.g.dart | |
lib/src/utils/*.freezed.dart | |
lib/src/app/*.gr.dart | |
lib/src/app/*.gm.dart | |
lib/src/l10n/app_localizations.dart | |
lib/src/l10n/app_localizations_*.dart | |
key: ${{ runner.os }}-${{ steps.flutter.outputs.CHANNEL }}-dart-${{ hashFiles('**/build.yaml') }} | |
- name: π Generate files | |
run: | | |
flutter gen-l10n | |
dart run build_runner build -d | |
- name: π§ Build | |
run: | | |
flutter build ${{ matrix.target }} ${{ matrix.flutter-flags }} | |
# - name: βοΈ Upload build | |
# if: matrix.target == 'web' | |
# uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0 | |
# with: | |
# name: build-directory-${{ matrix.target }}-${{ steps.flutter.outputs.CHANNEL }} | |
# path: ./build | |
# if-no-files-found: error | |
lint: | |
name: Linting | |
needs: ["setup"] | |
timeout-minutes: 5 | |
runs-on: ubuntu-latest | |
steps: | |
- name: π Git checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
submodules: recursive | |
clean: true | |
persist-credentials: false | |
set-safe-directory: true | |
- name: π¦ Set up Flutter | |
id: flutter | |
uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 # v2.16.0 | |
with: | |
flutter-version-file: pubspec.yaml | |
cache: true | |
- name: π Disable analytics | |
run: flutter --disable-analytics | |
- name: π¦ Install dependencies | |
run: flutter pub get | |
- name: βοΈ Cache generated files | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: | | |
.dart_tool/ | |
lib/src/gen/*.gen.dart | |
lib/src/features/**/*.g.dart | |
lib/src/features/**/*.freezed.dart | |
lib/src/utils/*.g.dart | |
lib/src/utils/*.freezed.dart | |
lib/src/app/*.gr.dart | |
lib/src/app/*.gm.dart | |
lib/src/l10n/app_localizations.dart | |
lib/src/l10n/app_localizations_*.dart | |
key: ${{ runner.os }}-${{ steps.flutter.outputs.CHANNEL }}-dart-${{ hashFiles('**/build.yaml') }} | |
- name: π Generate files | |
run: | | |
flutter gen-l10n | |
dart run build_runner build -d | |
- name: π΅οΈ Analyze project source | |
run: flutter analyze --fatal-infos | |
- name: π΅οΈ Run Custom Lint Rules | |
run: dart run custom_lint --fatal-infos | |
test: | |
name: Testing | |
needs: ["setup"] | |
timeout-minutes: 7 | |
runs-on: ubuntu-latest | |
steps: | |
- name: π Git checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
submodules: recursive | |
clean: true | |
persist-credentials: false | |
set-safe-directory: true | |
- name: π¦ Set up Flutter | |
id: flutter | |
uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 # v2.16.0 | |
with: | |
flutter-version-file: pubspec.yaml | |
cache: true | |
- name: π Disable analytics | |
run: flutter --disable-analytics | |
- name: π¦ Install dependencies | |
run: flutter pub get | |
- name: βοΈ Cache generated files | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: | | |
.dart_tool/ | |
lib/src/gen/*.gen.dart | |
lib/src/features/**/*.g.dart | |
lib/src/features/**/*.freezed.dart | |
lib/src/utils/*.g.dart | |
lib/src/utils/*.freezed.dart | |
lib/src/app/*.gr.dart | |
lib/src/app/*.gm.dart | |
lib/src/l10n/app_localizations.dart | |
lib/src/l10n/app_localizations_*.dart | |
key: ${{ runner.os }}-${{ steps.flutter.outputs.CHANNEL }}-dart-${{ hashFiles('**/build.yaml') }} | |
- name: π Generate files | |
run: | | |
flutter gen-l10n | |
dart run build_runner build -d | |
- name: π§ͺ Run tests | |
run: dart run very_good_cli:very_good test --coverage --test-randomize-ordering-seed random | |
- name: π Check code coverage | |
uses: VeryGoodOpenSource/very_good_coverage@c953fca3e24a915e111cc6f55f03f756dcb3964c # v3.0.0 | |
with: | |
path: coverage/lcov.info | |
min_coverage: 90 # 100 | |
format: | |
name: Formatting | |
needs: ["setup"] | |
timeout-minutes: 3 | |
runs-on: ubuntu-latest | |
steps: | |
- name: π Git checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
submodules: recursive | |
clean: true | |
persist-credentials: false | |
set-safe-directory: true | |
- name: π¦ Set up Flutter | |
id: flutter | |
uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 # v2.16.0 | |
with: | |
flutter-version-file: pubspec.yaml | |
cache: true | |
- name: π Disable analytics | |
run: flutter --disable-analytics | |
- name: β¨ Verify formatting | |
run: dart format --output=none --set-exit-if-changed . | |
spell-check: | |
name: Check Spelling | |
needs: [] | |
runs-on: ubuntu-latest | |
steps: | |
- name: π Git Checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
submodules: recursive | |
clean: true | |
persist-credentials: false | |
set-safe-directory: true | |
- name: πͺ Spell Check | |
uses: streetsidesoftware/cspell-action@2db9e5fb6d08776bed383767ef4e5dd84650546c # v6.7.1 | |
with: | |
files: | | |
**/*.md | |
**/*.dart | |
**/*.yaml | |
**/*.toml | |
**/*.json | |
incremental_files_only: false | |
link-check: | |
name: Check Links | |
needs: [] | |
timeout-minutes: 2 | |
runs-on: ubuntu-latest | |
steps: | |
- name: πͺ Link check | |
uses: gaurav-nelson/github-action-markdown-link-check@d53a906aa6b22b8979d33bc86170567e619495ec # 1.0.15 | |
with: | |
use-quiet-mode: "yes" | |
use-verbose-mode: "yes" | |
base-branch: "main" | |
markdownlint: | |
name: Lint Markdown | |
needs: [] | |
timeout-minutes: 4 | |
runs-on: ubuntu-latest | |
steps: | |
- name: π Git Checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
submodules: recursive | |
clean: true | |
persist-credentials: false | |
set-safe-directory: true | |
- name: π΅οΈ Markdown linting | |
uses: DavidAnson/markdownlint-cli2-action@b4c9feab76d8025d1e83c653fa3990936df0e6c8 # v16.0.0 | |
id: markdownlint | |
with: | |
fix: true | |
# Surprisingly, the default is to only lint the project root. | |
globs: | | |
**/*.md |