Skip to content
This repository has been archived by the owner on Aug 6, 2024. It is now read-only.

Commit

Permalink
Merge pull request #22 from blendthink/feature/auto-diff-lint-rule
Browse files Browse the repository at this point in the history
Add update-dependency-lints workflow
  • Loading branch information
blendthink authored Jun 26, 2022
2 parents 628f2d0 + 93a807b commit 0a2f0f2
Show file tree
Hide file tree
Showing 8 changed files with 234 additions and 1 deletion.
9 changes: 9 additions & 0 deletions .github/dependabot.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# https://github.blog/changelog/2022-04-05-pub-beta-support-for-dependabot-version-updates/
# https://github.com/dependabot/dependabot-core/issues/2166
version: 2
enable-beta-ecosystems: true
updates:
- package-ecosystem: "pub"
directory: "/"
schedule:
interval: "weekly"
59 changes: 59 additions & 0 deletions .github/workflows/update-dependency-lints.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: update dependency lints

on:
pull_request:
paths:
- pubspec.yaml

jobs:
check:
runs-on: ubuntu-latest

timeout-minutes: 10

# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
permissions:
checks: write
contents: write
issues: write
pull-requests: write

steps:
# https://github.com/actions/checkout
- uses: actions/checkout@v3

- run: git fetch origin ${{ github.base_ref }} --depth=1

# https://github.com/dart-lang/setup-dart
- uses: dart-lang/setup-dart@v1

# https://github.com/actions/cache
- uses: actions/cache@v3
with:
path: |
${{ env.PUB_CACHE }}
${{ github.workspace }}/.packages
${{ github.workspace }}/.dart_tool/package_config.json
key: ${{ runner.os }}-pubspec-${{ hashFiles(format('{0}{1}', github.workspace, '/pubspec.lock')) }}

- name: update-dependency-lints
run: |
dart pub get
dart tool/grind.dart update-dependency-lints \
--pub-cache=${{ env.PUB_CACHE }} \
--base=origin/${{ github.base_ref }} \
--head=HEAD
# https://github.com/peter-evans/create-pull-request
- name: create pull request
uses: peter-evans/create-pull-request@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: auto-update-dependency-lints
title: Auto Update Dependency Lints
body: |
This was automatically generated by the [${{ github.workflow }}](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}).
Update `lib/recommended.yaml` if necessary.
base: ${{ github.head_ref }}
branch: auto-update-dependency-lints
branch-suffix: short-commit-hash
5 changes: 4 additions & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,7 @@ environment:
sdk: ">=2.17.5 <3.0.0"

dependencies:
flutter_lints: ^2.0.1
flutter_lints:

dev_dependencies:
grinder: ^0.9.2
7 changes: 7 additions & 0 deletions tool/extension/task_args_ext.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import 'package:grinder/grinder.dart';

extension TaskArgsExt on TaskArgs {
String requireOption(String name) =>
getOption(name) ??
fail("$name is required for command-line arguments. '--$name=xxx'.");
}
46 changes: 46 additions & 0 deletions tool/grind.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import 'dart:io';

import 'package:grinder/grinder.dart';

import 'extension/task_args_ext.dart';

main(args) => grind(args);

@Task('Update dependency lints.')
updateDependencyLints() {
final args = context.invocation.arguments;
final pubCachePath = args.requireOption('pub-cache');
final baseBranch = args.requireOption('base');
final headBranch = args.requireOption('head');

final diff = run(
'git',
arguments: [
'diff',
baseBranch,
headBranch,
'--',
'pubspec.yaml',
],
);

final hasLintsUpdate = diff.contains(RegExp(r'\+\s+flutter_lints:'));
if (!hasLintsUpdate) {
print('`flutter_lints` has not been updated.');
return;
}

final packagesDir = Directory('$pubCachePath/hosted/pub.dartlang.org');
packagesDir.listSync().forEach((e) {
final dirPath = e.path;
if (dirPath.contains(RegExp(r'.+/flutter_lints-.+'))) {
File('$dirPath/lib/flutter.yaml')
.copySync('tool/lints/flutter_lints/flutter.yaml');
}
if (dirPath.contains(RegExp(r'.+/lints-.+'))) {
File('$dirPath/lib/core.yaml').copySync('tool/lints/lints/core.yaml');
File('$dirPath/lib/recommended.yaml')
.copySync('tool/lints/lints/recommended.yaml');
}
});
}
19 changes: 19 additions & 0 deletions tool/lints/flutter_lints/flutter.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Recommended lints for Flutter apps, packages, and plugins.

include: package:lints/recommended.yaml

linter:
rules:
- avoid_print
- avoid_unnecessary_containers
- avoid_web_libraries_in_flutter
- no_logic_in_create_state
- prefer_const_constructors
- prefer_const_constructors_in_immutables
- prefer_const_declarations
- prefer_const_literals_to_create_immutables
- sized_box_for_whitespace
- sort_child_properties_last
- use_build_context_synchronously
- use_full_hex_values_for_flutter_colors
- use_key_in_widget_constructors
30 changes: 30 additions & 0 deletions tool/lints/lints/core.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
linter:
rules:
- avoid_empty_else
- avoid_relative_lib_imports
- avoid_shadowing_type_parameters
- avoid_types_as_parameter_names
- await_only_futures
- camel_case_extensions
- camel_case_types
- curly_braces_in_flow_control_structures
- depend_on_referenced_packages
- empty_catches
- file_names
- hash_and_equals
- iterable_contains_unrelated_type
- list_remove_unrelated_type
- no_duplicate_case_values
- non_constant_identifier_names
- null_check_on_nullable_type_parameter
- package_prefixed_library_names
- prefer_generic_function_type_aliases
- prefer_is_empty
- prefer_is_not_empty
- prefer_iterable_whereType
- prefer_typing_uninitialized_variables
- provide_deprecation_message
- unnecessary_overrides
- unrelated_type_equality_checks
- valid_regexps
- void_checks
60 changes: 60 additions & 0 deletions tool/lints/lints/recommended.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
include: package:lints/core.yaml

linter:
rules:
- always_require_non_null_named_parameters
- annotate_overrides
- avoid_function_literals_in_foreach_calls
- avoid_init_to_null
- avoid_null_checks_in_equality_operators
- avoid_renaming_method_parameters
- avoid_return_types_on_setters
- avoid_returning_null_for_void
- avoid_single_cascade_in_expression_statements
- constant_identifier_names
- control_flow_in_finally
- empty_constructor_bodies
- empty_statements
- exhaustive_cases
- implementation_imports
- library_names
- library_prefixes
- library_private_types_in_public_api
- no_leading_underscores_for_library_prefixes
- no_leading_underscores_for_local_identifiers
- null_closures
- overridden_fields
- package_names
- prefer_adjacent_string_concatenation
- prefer_collection_literals
- prefer_conditional_assignment
- prefer_contains
- prefer_equal_for_default_values
- prefer_final_fields
- prefer_for_elements_to_map_fromIterable
- prefer_function_declarations_over_variables
- prefer_if_null_operators
- prefer_initializing_formals
- prefer_inlined_adds
- prefer_interpolation_to_compose_strings
- prefer_is_not_operator
- prefer_null_aware_operators
- prefer_spread_collections
- prefer_void_to_null
- recursive_getters
- slash_for_doc_comments
- type_init_formals
- unnecessary_brace_in_string_interps
- unnecessary_const
- unnecessary_constructor_name
- unnecessary_getters_setters
- unnecessary_late
- unnecessary_new
- unnecessary_null_aware_assignments
- unnecessary_null_in_if_null_operators
- unnecessary_nullable_for_final_variable_declarations
- unnecessary_string_escapes
- unnecessary_string_interpolations
- unnecessary_this
- use_function_type_syntax_for_parameters
- use_rethrow_when_possible

0 comments on commit 0a2f0f2

Please sign in to comment.