Skip to content

Commit

Permalink
feat: read gradle versions from local runtime first (#5646)
Browse files Browse the repository at this point in the history
  • Loading branch information
rigor789 committed Mar 9, 2022
1 parent bceae0a commit 1b9cde3
Showing 1 changed file with 68 additions and 0 deletions.
68 changes: 68 additions & 0 deletions lib/services/android-plugin-build-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import { IFilesHashService } from "../definitions/files-hash-service";
import { IInjector } from "../common/definitions/yok";
import { injector } from "../common/yok";
import * as _ from "lodash";
import { resolvePackageJSONPath } from "@rigor789/resolve-package-path";

export class AndroidPluginBuildService implements IAndroidPluginBuildService {
private get $platformsDataService(): IPlatformsDataService {
Expand Down Expand Up @@ -486,13 +487,80 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
return runtimeVersion;
}

private getLocalGradleVersions(): IRuntimeGradleVersions {
// partial interface of the runtime package.json
// including new 8.2+ format and legacy
interface IRuntimePackageJSON {
// 8.2+
version_info?: {
gradle: string;
gradleAndroid: string;
};
// legacy
gradle?: {
version: string;
android: string;
};
}

// try reading from installed runtime first before reading from the npm registry...
const installedRuntimePackageJSONPath = resolvePackageJSONPath(
SCOPED_ANDROID_RUNTIME_NAME,
{
paths: [this.$projectData.projectDir],
}
);

if (!installedRuntimePackageJSONPath) {
return null;
}

const installedRuntimePackageJSON: IRuntimePackageJSON = this.$fs.readJson(
installedRuntimePackageJSONPath
);

if (!installedRuntimePackageJSON) {
return null;
}

if (installedRuntimePackageJSON.version_info) {
const {
gradle,
gradleAndroid,
} = installedRuntimePackageJSON.version_info;

return {
gradleVersion: gradle,
gradleAndroidPluginVersion: gradleAndroid,
};
}

if (installedRuntimePackageJSON.gradle) {
const { version, android } = installedRuntimePackageJSON.gradle;

return {
gradleVersion: version,
gradleAndroidPluginVersion: android,
};
}

return null;
}

private async getGradleVersions(
runtimeVersion: string
): Promise<IRuntimeGradleVersions> {
let runtimeGradleVersions: {
versions: { gradle: string; gradleAndroid: string };
} = null;

const localVersionInfo = this.getLocalGradleVersions();

if (localVersionInfo) {
return localVersionInfo;
}

// fallback to reading from npm...
try {
let output = await this.$packageManager.view(
`${SCOPED_ANDROID_RUNTIME_NAME}@${runtimeVersion}`,
Expand Down

0 comments on commit 1b9cde3

Please sign in to comment.