Applied Gradle Plugins Declaratively for path_provider (#7822)

Updated applying gradle plugins from usage of imperative apply to usage
of declarative blocks {} apply. Intending on updating all android
example apps under packages. Did one more as a proof of concept before
doing more.

More information on Flutter Gradle Plugin Apply
[here](https://docs.flutter.dev/release/breaking-changes/flutter-gradle-plugin-apply)

Partially addresses
[#152656](https://github.com/flutter/flutter/issues/152656)
## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] page, which explains my
responsibilities.
- [x] I read and followed the [relevant style guides] and ran the
auto-formatter. (Unlike the flutter/flutter repo, the flutter/packages
repo does use `dart format`.)
- [x] I signed the [CLA].
- [x] The title of the PR starts with the name of the package surrounded
by square brackets, e.g. `[shared_preferences]`
- [x] I [linked to at least one issue that this PR fixes] in the
description above.
- [x] I updated `pubspec.yaml` with an appropriate new version according
to the [pub versioning philosophy], or this PR is [exempt from version
changes].
- [x] I updated `CHANGELOG.md` to add a description of the change,
[following repository CHANGELOG style], or this PR is [exempt from
CHANGELOG changes].
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/packages/blob/main/CONTRIBUTING.md
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md
[relevant style guides]:
https://github.com/flutter/packages/blob/main/CONTRIBUTING.md#style
[CLA]: https://cla.developers.google.com/
[Discord]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md
[linked to at least one issue that this PR fixes]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#overview
[pub versioning philosophy]: https://dart.dev/tools/pub/versioning
[exempt from version changes]:
https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#version
[following repository CHANGELOG style]:
https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changelog-style
[exempt from CHANGELOG changes]:
https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changelog
[test-exempt]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#tests

---------

Co-authored-by: Reid Baker <reidbaker@google.com>
This commit is contained in:
jesswrd
2024-10-30 12:38:55 -07:00
committed by GitHub
parent bce9735f1c
commit 4feddffcfa
7 changed files with 225 additions and 61 deletions

View File

@ -202,7 +202,6 @@ class GradleCheckCommand extends PackageLoopingCommand {
/// configuration that enables artifact hub env variable.
@visibleForTesting
static String exampleRootSettingsArtifactHubString = '''
// See $artifactHubDocumentationString for more info.
buildscript {
repositories {
maven {
@ -216,6 +215,18 @@ buildscript {
apply plugin: "com.google.cloud.artifactregistry.gradle-plugin"
''';
/// String printed as a valid example of settings.gradle repository
/// configuration that enables artifact hub env variable.
/// GP stands for the gradle plugin method of flutter tooling inclusion.
@visibleForTesting
static String exampleSettingsArtifactHubStringGP = '''
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
// ...other plugins
id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.1"
}
''';
/// Validates that [gradleLines] reads and uses a artifiact hub repository
/// when ARTIFACT_HUB_REPOSITORY is set.
///
@ -228,6 +239,10 @@ apply plugin: "com.google.cloud.artifactregistry.gradle-plugin"
r'classpath.*gradle\.plugin\.com\.google\.cloud\.artifactregistry:artifactregistry-gradle-plugin');
final RegExp artifactRegistryPluginApplyRegex = RegExp(
r'apply.*plugin.*com\.google\.cloud\.artifactregistry\.gradle-plugin');
final RegExp artifactRegistryPluginApplyRegexGP = RegExp(
r'id.*com\.google\.cloud\.artifactregistry\.gradle-plugin.*version.*\b\d+\.\d+\.\d+\b');
final RegExp artifactRegistryPluginApplyDeclarativeRegex =
RegExp(r'\bpluginManagement\b');
final bool documentationPresent = gradleLines
.any((String line) => documentationPresentRegex.hasMatch(line));
@ -235,17 +250,36 @@ apply plugin: "com.google.cloud.artifactregistry.gradle-plugin"
.any((String line) => artifactRegistryDefinitionRegex.hasMatch(line));
final bool artifactRegistryPluginApplied = gradleLines
.any((String line) => artifactRegistryPluginApplyRegex.hasMatch(line));
final bool declarativeArtifactRegistryApplied = gradleLines.any(
(String line) => artifactRegistryPluginApplyRegexGP.hasMatch(line));
final bool declarativePluginBlockApplied = gradleLines.any((String line) =>
artifactRegistryPluginApplyDeclarativeRegex.hasMatch(line));
if (!(documentationPresent &&
artifactRegistryDefined &&
artifactRegistryPluginApplied)) {
printError('Failed Artifact Hub validation. Include the following in '
'example root settings.gradle:\n$exampleRootSettingsArtifactHubString');
final bool imperativeArtifactRegistryApplied =
artifactRegistryDefined && artifactRegistryPluginApplied;
final bool validArtifactConfiguration = documentationPresent &&
(imperativeArtifactRegistryApplied ||
declarativeArtifactRegistryApplied);
if (!validArtifactConfiguration) {
printError('Failed Artifact Hub validation.');
if (!documentationPresent) {
printError(
'The link to the Artifact Hub documentation is missing. Include the following in '
'example root settings.gradle:\n// See $artifactHubDocumentationString for more info.');
}
if (artifactRegistryDefined ||
artifactRegistryPluginApplied ||
!declarativePluginBlockApplied) {
printError('Include the following in '
'example root settings.gradle:\n$exampleRootSettingsArtifactHubString');
} else if (!declarativeArtifactRegistryApplied) {
printError('Include the following in '
'example root settings.gradle:\n$exampleSettingsArtifactHubStringGP');
}
}
return documentationPresent &&
artifactRegistryDefined &&
artifactRegistryPluginApplied;
return validArtifactConfiguration;
}
/// Validates the top-level build.gradle for an example app (e.g.,