From d1e1ac6ced5e443a6521dcacde6df3efacb4c95f Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Wed, 20 Aug 2025 02:44:15 +0200 Subject: [PATCH 01/18] Added Gradle Wrapper support --- gradle/lib/dependabot/gradle/distributions.rb | 22 + gradle/lib/dependabot/gradle/file_fetcher.rb | 27 +- gradle/lib/dependabot/gradle/file_parser.rb | 20 + .../file_parser/distributions_finder.rb | 87 + gradle/lib/dependabot/gradle/file_updater.rb | 6 + .../lib/dependabot/gradle/metadata_finder.rb | 3 + .../update_checker/distributions_finder.rb | 60 + .../update_checker/requirements_updater.rb | 28 + .../gradle/update_checker/version_finder.rb | 6 + .../dependabot/gradle/file_fetcher_spec.rb | 16 + .../file_parser/distributions_finder_spec.rb | 62 + .../dependabot/gradle/file_parser_spec.rb | 61 + .../dependabot/gradle/file_updater_spec.rb | 78 + .../distributions_finder_spec.rb | 186 + .../requirements_updater_spec.rb | 82 + .../update_checker/version_finder_spec.rb | 36 + .../github/content_gradle_wrapper.json | 34 + .../github/gradle-wrapper.properties.json | 18 + .../versions_all.json | 8056 +++++++++++++++++ ...dle-wrapper-8.14.2-all-checksum.properties | 8 + .../gradle-wrapper-8.14.2-all.properties | 7 + ...dle-wrapper-8.14.2-bin-checksum.properties | 8 + .../gradle-wrapper-8.14.2-bin.properties | 7 + ...adle-wrapper-9.0.0-all-checksum.properties | 8 + .../gradle-wrapper-9.0.0-all.properties | 7 + ...adle-wrapper-9.0.0-bin-checksum.properties | 8 + .../gradle-wrapper-9.0.0-bin.properties | 7 + 27 files changed, 8946 insertions(+), 2 deletions(-) create mode 100644 gradle/lib/dependabot/gradle/distributions.rb create mode 100644 gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb create mode 100644 gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb create mode 100644 gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb create mode 100644 gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb create mode 100644 gradle/spec/fixtures/github/content_gradle_wrapper.json create mode 100644 gradle/spec/fixtures/github/gradle-wrapper.properties.json create mode 100644 gradle/spec/fixtures/gradle_distributions_metadata/versions_all.json create mode 100644 gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-all-checksum.properties create mode 100644 gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-all.properties create mode 100644 gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-bin-checksum.properties create mode 100644 gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-bin.properties create mode 100644 gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-all-checksum.properties create mode 100644 gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-all.properties create mode 100644 gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-bin-checksum.properties create mode 100644 gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-bin.properties diff --git a/gradle/lib/dependabot/gradle/distributions.rb b/gradle/lib/dependabot/gradle/distributions.rb new file mode 100644 index 00000000000..ea224a5fd36 --- /dev/null +++ b/gradle/lib/dependabot/gradle/distributions.rb @@ -0,0 +1,22 @@ +# typed: strict +# frozen_string_literal: true + +require "dependabot/registry_client" + +module Dependabot + module Gradle + module Distributions + extend T::Sig + + DISTRIBUTIONS_URL = "https://services.gradle.org" + DISTRIBUTION_DEPENDENCY_TYPE = "gradle-distribution" + + sig { params(requirements: T::Array[T::Hash[Symbol, T.untyped]]).returns(T::Boolean) } + def self.distribution_requirements?(requirements) + requirements.any? do |req| + req.dig(:source, :type) == DISTRIBUTION_DEPENDENCY_TYPE + end + end + end + end +end diff --git a/gradle/lib/dependabot/gradle/file_fetcher.rb b/gradle/lib/dependabot/gradle/file_fetcher.rb index fdc050a0fb8..9810a17c5ad 100644 --- a/gradle/lib/dependabot/gradle/file_fetcher.rb +++ b/gradle/lib/dependabot/gradle/file_fetcher.rb @@ -24,6 +24,9 @@ class FileFetcher < Dependabot::FileFetchers::Base SUPPORTED_SETTINGS_FILE_NAMES = T.let(%w(settings.gradle settings.gradle.kts).freeze, T::Array[String]) + SUPPORTED_WRAPPER_PROPERTIES_FILE_PATH = + %w(/gradle/wrapper/gradle-wrapper.properties).freeze + # For now Gradle only supports library .toml files in the main gradle folder SUPPORTED_VERSION_CATALOG_FILE_PATH = T.let(%w(/gradle/libs.versions.toml).freeze, T::Array[String]) @@ -74,8 +77,13 @@ def fetch_files sig { params(root_dir: String).returns(T::Array[DependencyFile]) } def all_buildfiles_in_build(root_dir) - files = [buildfile(root_dir), settings_file(root_dir), version_catalog_file(root_dir), lockfile(root_dir)] - .compact + files = [ + buildfile(root_dir), + settings_file(root_dir), + wrapper_properties_file(root_dir), + version_catalog_file(root_dir), + lockfile(root_dir) + ].compact files += subproject_buildfiles(root_dir) files += subproject_lockfiles(root_dir) files += dependency_script_plugins(root_dir) @@ -172,6 +180,16 @@ def subproject_buildfiles(root_dir) end end + sig { params(root_dir: String).returns(T.nilable(DependencyFile)) } + def wrapper_properties_file(root_dir) + return nil unless root_dir == "." + + gradle_wrapper_properties_file(root_dir) + rescue Dependabot::DependencyFileNotFound + # Wrapper file is optional for Gradle + nil + end + sig { params(root_dir: String).returns(T.nilable(DependencyFile)) } def version_catalog_file(root_dir) return nil unless root_dir == "." @@ -231,6 +249,11 @@ def buildfile(dir) file end + sig { params(dir: String).returns(T.nilable(DependencyFile)) } + def gradle_wrapper_properties_file(dir) + find_first(dir, SUPPORTED_WRAPPER_PROPERTIES_FILE_PATH) + end + sig { params(dir: String).returns(T.nilable(DependencyFile)) } def gradle_toml_file(dir) find_first(dir, SUPPORTED_VERSION_CATALOG_FILE_PATH) diff --git a/gradle/lib/dependabot/gradle/file_parser.rb b/gradle/lib/dependabot/gradle/file_parser.rb index a9109513440..f2b9ba2dc0e 100644 --- a/gradle/lib/dependabot/gradle/file_parser.rb +++ b/gradle/lib/dependabot/gradle/file_parser.rb @@ -25,6 +25,7 @@ class FileParser < Dependabot::FileParsers::Base # rubocop:disable Metrics/Class extend T::Sig require "dependabot/file_parsers/base/dependency_set" + require_relative "file_parser/distributions_finder.rb" require_relative "file_parser/property_value_finder" SUPPORTED_BUILD_FILE_NAMES = T.let( @@ -59,6 +60,9 @@ def parse script_plugin_files.each do |plugin_file| dependency_set += buildfile_dependencies(plugin_file) end + wrapper_properties_file.each do |properties_file| + dependency_set += wrapper_properties_dependencies(properties_file) + end version_catalog_file.each do |toml_file| dependency_set += version_catalog_dependencies(toml_file) end @@ -119,6 +123,14 @@ def language ) end + sig { params(properties_file: Dependabot::DependencyFile).returns(DependencySet) } + def wrapper_properties_dependencies(properties_file) + dependency_set = DependencySet.new + dependency = DistributionsFinder.resolve_dependency(properties_file) + dependency_set << dependency if dependency + dependency_set + end + sig { params(toml_file: Dependabot::DependencyFile).returns(DependencySet) } def version_catalog_dependencies(toml_file) dependency_set = DependencySet.new @@ -544,6 +556,14 @@ def buildfiles ) end + sig { returns(T::Array[Dependabot::DependencyFile]) } + def wrapper_properties_file + @wrapper_properties_file ||= T.let( + dependency_files.select { |f| f.name.end_with?("gradle-wrapper.properties") }, + T.nilable(T::Array[Dependabot::DependencyFile]) + ) + end + sig { returns(T::Array[Dependabot::DependencyFile]) } def version_catalog_file @version_catalog_file ||= T.let( diff --git a/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb b/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb new file mode 100644 index 00000000000..78f4786c3eb --- /dev/null +++ b/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb @@ -0,0 +1,87 @@ +# typed: strong +# frozen_string_literal: true + +require "dependabot/gradle/file_parser" +require "dependabot/gradle/distributions" +require "sorbet-runtime" + +module Dependabot + module Gradle + class FileParser + class DistributionsFinder + extend T::Sig + include Dependabot::Gradle::Distributions + + DISTRIBUTION_URL_REGEX = %r{^#{Regexp.escape(DISTRIBUTIONS_URL)}/distributions/gradle-(?[\d.]+)-(?bin|all)\.zip$} # rubocop:disable Layout/LineLength + + sig { params(properties_file: DependencyFile).returns(T.nilable(Dependency)) } + def self.resolve_dependency(properties_file) + content = properties_file.content + return nil unless content + + distribution_url, checksum = load_properties(content) + match = distribution_url&.match(DISTRIBUTION_URL_REGEX)&.named_captures + return nil unless match + + version = match.fetch("version") + + requirements = T.let([{ + requirement: version, + file: properties_file.name, + source: { + type: DISTRIBUTION_DEPENDENCY_TYPE, + url: distribution_url, + property: "distributionUrl" + }, + groups: [] + }], T::Array[T::Hash[Symbol, T.untyped]]) + + if checksum + requirements << { + requirement: checksum, + file: properties_file.name, + source: { + type: DISTRIBUTION_DEPENDENCY_TYPE, + url: "#{distribution_url}.sha256", + property: "distributionSha256Sum" + }, + groups: [] + } + end + + Dependency.new( + name: "gradle-wrapper", + version: version, + requirements: requirements, + package_manager: "gradle" + ) + end + + sig { params(properties_content: String).returns(T::Array[T.nilable(String)]) } + def self.load_properties(properties_content) + distribution_url = T.let(nil, T.nilable(String)) + checksum = T.let(nil, T.nilable(String)) + + properties_content.lines.each do |line| + (key, value) = line.split("=", 2).map(&:strip) + next unless key && value + + case key + when "distributionUrl" + distribution_url = value.gsub("\\:", ":") + when "distributionSha256Sum" + checksum = value + else + next + end + break if distribution_url && checksum + end + + [distribution_url, checksum] + end + + private_class_method :load_properties + end + end + end +end diff --git a/gradle/lib/dependabot/gradle/file_updater.rb b/gradle/lib/dependabot/gradle/file_updater.rb index 2b47dbac56a..71b84e188f7 100644 --- a/gradle/lib/dependabot/gradle/file_updater.rb +++ b/gradle/lib/dependabot/gradle/file_updater.rb @@ -191,6 +191,7 @@ def update_version_in_buildfile( end # rubocop:disable Metrics/AbcSize + # rubocop:disable Metrics/PerceivedComplexity sig do params( dependency: Dependabot::Dependency, @@ -209,6 +210,10 @@ def original_buildfile_declarations(dependency, requirement) if dependency.name.include?(":") dep_parts = dependency.name.split(":") next false unless line.include?(T.must(dep_parts.first)) || line.include?(T.must(dep_parts.last)) + elsif T.let(requirement.fetch(:file), String).end_with?(".properties") + property = T.let(requirement, T::Hash[Symbol, T.nilable(T::Hash[Symbol, T.nilable(String)])]) + .dig(:source, :property) + next false unless !property.nil? && line.start_with?(property) elsif T.let(requirement.fetch(:file), String).end_with?(".toml") next false unless line.include?(dependency.name) else @@ -221,6 +226,7 @@ def original_buildfile_declarations(dependency, requirement) end end # rubocop:enable Metrics/AbcSize + # rubocop:enable Metrics/PerceivedComplexity sig { params(string: String, buildfile: Dependabot::DependencyFile).returns(String) } def evaluate_properties(string, buildfile) diff --git a/gradle/lib/dependabot/gradle/metadata_finder.rb b/gradle/lib/dependabot/gradle/metadata_finder.rb index 2c143345eb4..2a897f05bc3 100644 --- a/gradle/lib/dependabot/gradle/metadata_finder.rb +++ b/gradle/lib/dependabot/gradle/metadata_finder.rb @@ -5,6 +5,7 @@ require "sorbet-runtime" require "dependabot/file_fetchers/base" +require "dependabot/gradle/distributions" require "dependabot/gradle/file_fetcher" require "dependabot/gradle/file_parser/repositories_finder" require "dependabot/maven/utils/auth_headers_finder" @@ -25,6 +26,8 @@ class MetadataFinder < Dependabot::MetadataFinders::Base sig { override.returns(T.nilable(Dependabot::Source)) } def look_up_source + return nil if Distributions.distribution_requirements?(dependency.requirements) + tmp_source = look_up_source_in_pom(dependency_pom_file) return tmp_source if tmp_source diff --git a/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb b/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb new file mode 100644 index 00000000000..3e24a5a9be0 --- /dev/null +++ b/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb @@ -0,0 +1,60 @@ +# typed: strong +# frozen_string_literal: true + +require "dependabot/gradle/distributions" +require "dependabot/gradle/version" +require "sorbet-runtime" + +module Dependabot + module Gradle + class UpdateChecker + class DistributionsFinder + extend T::Sig + include Dependabot::Gradle::Distributions + + @available_versions = T.let([], T::Array[T::Hash[String, T.untyped]]) + @distributions_checksums = T.let({}, T::Hash[String, T::Array[String]]) + + sig { returns(T.any(T::Array[T::Hash[String, T.untyped]], T::Array[T::Hash[Symbol, T.untyped]])) } + def self.available_versions + return @available_versions if @available_versions.any? + + response = Dependabot::RegistryClient.get(url: "#{DISTRIBUTIONS_URL}/versions/all") + versions = T.let(JSON.parse(T.let(response.body, String), + object_class: OpenStruct), T::Array[OpenStruct]) + @available_versions += versions + .select { |v| release_version?(version: v) } + .map { |v| T.let(v["version"], String) } + .uniq + .select { |v| Gradle::Version.correct?(v) } + .map { |v| Gradle::Version.new(v) } + .sort + .map { |version| { version: version, source_url: DISTRIBUTIONS_URL } } + end + + sig { params(version: OpenStruct).returns(T::Boolean) } + def self.release_version?(version:) + T.let(version[:broken], T::Boolean) == false && + T.let(version[:snapshot], T::Boolean) == false && + T.let(version[:rcFor], String) == "" && + T.let(version[:milestoneFor], String) == "" && + /.*-(rc|milestone)-.*/.match?(T.let(version[:version], String)) == false + end + + sig { params(distribution_url: String).returns(T.nilable(T::Array[String])) } + def self.resolve_checksum(distribution_url) + cached = @distributions_checksums[distribution_url] + return cached if cached + + checksum_url = "#{distribution_url}.sha256" + checksum = T.let(Dependabot::RegistryClient.get(url: checksum_url).body, String).strip + return nil unless checksum.match?(/\A[a-f0-9]{64}\z/) + + @distributions_checksums[distribution_url] = [checksum_url, checksum] + end + + private_class_method :release_version? + end + end + end +end diff --git a/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb b/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb index ddf0ed2d2b7..988e936d60d 100644 --- a/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb +++ b/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb @@ -9,6 +9,7 @@ require "sorbet-runtime" require "dependabot/requirements_updater/base" +require "dependabot/gradle/distributions" require "dependabot/gradle/update_checker" require "dependabot/gradle/version" require "dependabot/gradle/requirement" @@ -46,11 +47,13 @@ def initialize( return unless latest_version @latest_version = T.let(version_class.new(latest_version), Version) + @is_distribution = T.let(Distributions.distribution_requirements?(requirements), T::Boolean) end sig { override.returns(T::Array[T::Hash[Symbol, T.untyped]]) } def updated_requirements return requirements unless latest_version + return updated_distribution_requirements if @is_distribution # NOTE: Order is important here. The FileUpdater needs the updated # requirement at index `i` to correspond to the previous requirement @@ -114,6 +117,31 @@ def update_dynamic_requirement(req_string) end end + sig { returns(T::Array[T::Hash[Symbol, T.untyped]]) } + def updated_distribution_requirements + req_version = T.must(requirements[0]) + + requirement = req_version[:requirement] + updated_requirement = update_exact_requirement(requirement) + + distribution_url = req_version[:source][:url] + updated_distribution_url = distribution_url.gsub(requirement, updated_requirement) + + req_version = req_version.merge( + requirement: updated_requirement, + source: req_version[:source].merge(url: updated_distribution_url) + ) + return [req_version] unless requirements.size > 1 + + req_checksum = T.must(requirements[1]) + checksum_url, checksum = DistributionsFinder.resolve_checksum(updated_distribution_url) + req_checksum = req_checksum.merge( + requirement: checksum, + source: req_checksum[:source].merge(url: checksum_url) + ) + [req_version, req_checksum] + end + sig { override.returns(T::Class[Version]) } def version_class Gradle::Version diff --git a/gradle/lib/dependabot/gradle/update_checker/version_finder.rb b/gradle/lib/dependabot/gradle/update_checker/version_finder.rb index b3db344e180..6e6ae4930c5 100644 --- a/gradle/lib/dependabot/gradle/update_checker/version_finder.rb +++ b/gradle/lib/dependabot/gradle/update_checker/version_finder.rb @@ -4,8 +4,10 @@ require "nokogiri" require "dependabot/shared_helpers" require "dependabot/update_checkers/version_filters" +require "dependabot/gradle/distributions" require "dependabot/gradle/file_parser/repositories_finder" require "dependabot/gradle/update_checker" +require "dependabot/gradle/update_checker/distributions_finder" require "dependabot/gradle/version" require "dependabot/gradle/requirement" require "dependabot/maven/utils/auth_headers_finder" @@ -118,6 +120,10 @@ def lowest_security_fix_version_details sig { returns(T.any(T::Array[T::Hash[String, T.untyped]], T::Array[T::Hash[Symbol, T.untyped]])) } def versions + if Distributions.distribution_requirements?(dependency.requirements) + return DistributionsFinder.available_versions + end + Package::PackageDetailsFetcher.new( dependency: dependency, dependency_files: dependency_files, diff --git a/gradle/spec/dependabot/gradle/file_fetcher_spec.rb b/gradle/spec/dependabot/gradle/file_fetcher_spec.rb index 874dc30f327..3f8f91ebb0e 100644 --- a/gradle/spec/dependabot/gradle/file_fetcher_spec.rb +++ b/gradle/spec/dependabot/gradle/file_fetcher_spec.rb @@ -51,6 +51,7 @@ def stub_no_content_request(path) context "with a basic buildfile" do before do stub_no_content_request("gradle?ref=sha") + stub_no_content_request("gradle/wrapper?ref=sha") stub_content_request("?ref=sha", "contents_java.json") stub_content_request("build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("gradle.lockfile?ref=sha") @@ -62,6 +63,19 @@ def stub_no_content_request(path) .to match_array(%w(build.gradle)) end + context "with gradle wrapper properties" do + before do + stub_content_request("gradle/wrapper?ref=sha", "content_gradle_wrapper.json") + stub_content_request("gradle/wrapper/gradle-wrapper.properties?ref=sha", "gradle-wrapper.properties.json") + end + + it "fetches the toml file" do + expect(file_fetcher_instance.files.count).to eq(2) + expect(file_fetcher_instance.files.map(&:name)) + .to match_array(%w(build.gradle gradle/wrapper/gradle-wrapper.properties)) + end + end + context "with version catalog" do before do stub_content_request("gradle?ref=sha", "content_gradle_toml.json") @@ -380,6 +394,7 @@ def stub_no_content_request(path) context "with a script plugin" do before do stub_no_content_request("gradle?ref=sha") + stub_no_content_request("gradle/wrapper?ref=sha") stub_content_request("?ref=sha", "contents_java.json") stub_content_request("build.gradle?ref=sha", "contents_java_buildfile_with_script_plugins.json") stub_content_request("gradle/dependencies.gradle?ref=sha", "contents_java_simple_settings.json") @@ -425,6 +440,7 @@ def stub_no_content_request(path) context "with no required manifest files" do before do stub_no_content_request("gradle?ref=sha") + stub_no_content_request("gradle/wrapper?ref=sha") stub_request(:get, url + "?ref=sha") .with(headers: { "Authorization" => "token token" }) .to_return( diff --git a/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb b/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb new file mode 100644 index 00000000000..760a1978b41 --- /dev/null +++ b/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb @@ -0,0 +1,62 @@ +# typed: false +# frozen_string_literal: true + +require "spec_helper" +require "dependabot/gradle/file_parser/distributions_finder" + +RSpec.describe Dependabot::Gradle::FileParser::DistributionsFinder do + describe ".resolve_dependency" do + shared_examples "distribution dependency" do |version, type, checksum| + subject { described_class.resolve_dependency(properties_file) } + + let(:properties_file) do + Dependabot::DependencyFile.new( + name: "gradle/wrapper/gradle-wrapper.properties", + content: fixture("wrapper_properties_file", + "gradle-wrapper-#{version}-#{type}#{checksum ? '-checksum' : ''}.properties") + ) + end + + let(:dependency) do + requirements = [{ + requirement: version, + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-#{version}-#{type}.zip", + property: "distributionUrl" + }, + groups: [] + }] + + if checksum + requirements << { + requirement: checksum, + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-#{version}-#{type}.zip.sha256", + property: "distributionSha256Sum" + }, + groups: [] + } + end + + Dependabot::Dependency.new( + name: "gradle-wrapper", + version: version, + requirements: requirements, + package_manager: "gradle" + ) + end + + it "resolved dependency is expected" do + expect(subject).to eq(dependency) + end + end + + it_behaves_like "distribution dependency", "8.14.2", "all", nil + it_behaves_like "distribution dependency", "9.0.0", "bin", + "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b" + end +end diff --git a/gradle/spec/dependabot/gradle/file_parser_spec.rb b/gradle/spec/dependabot/gradle/file_parser_spec.rb index 46eed23c1ef..0b1d9b0134c 100644 --- a/gradle/spec/dependabot/gradle/file_parser_spec.rb +++ b/gradle/spec/dependabot/gradle/file_parser_spec.rb @@ -817,6 +817,67 @@ end end + describe "wrapper properties file" do + shared_examples "wrapper_properties_test" do |version, type, checksum| + describe "gradle #{version}, distribution #{type}" do + let(:files) do + [ + Dependabot::DependencyFile.new( + name: "gradle/wrapper/gradle-wrapper.properties", + content: fixture("wrapper_properties_file", + "gradle-wrapper-#{version}-#{type}#{checksum ? '-checksum' : ''}.properties") + ) + ] + end + + its(:length) { is_expected.to eq(1) } + + describe "check dependency" do + subject(:dependency) { dependencies.first } + + it "has the right details" do + requirements = [ + { + requirement: version, + file: "gradle/wrapper/gradle-wrapper.properties", + groups: [], + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-#{version}-#{type}.zip", + property: "distributionUrl" + } + } + ] + if checksum + requirements << { + requirement: checksum, + file: "gradle/wrapper/gradle-wrapper.properties", + groups: [], + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-#{version}-#{type}.zip.sha256", + property: "distributionSha256Sum" + } + } + end + + expect(dependency).to be_a(Dependabot::Dependency) + expect(dependency.name).to eq("gradle-wrapper") + expect(dependency.version).to eq(version) + expect(dependency.requirements).to eq(requirements) + end + end + end + end + + it_behaves_like "wrapper_properties_test", "8.14.2", "bin", nil + it_behaves_like "wrapper_properties_test", "8.14.2", "all", nil + it_behaves_like "wrapper_properties_test", "9.0.0", "bin", + "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b" + it_behaves_like "wrapper_properties_test", "9.0.0", "all", + "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365" + end + describe "with a version catalog file" do let(:files) { [buildfile, version_catalog] } let(:version_catalog) do diff --git a/gradle/spec/dependabot/gradle/file_updater_spec.rb b/gradle/spec/dependabot/gradle/file_updater_spec.rb index d32207d8fee..4a21c1b26cc 100644 --- a/gradle/spec/dependabot/gradle/file_updater_spec.rb +++ b/gradle/spec/dependabot/gradle/file_updater_spec.rb @@ -627,6 +627,84 @@ end end + context "with a wrapper properties" do + shared_examples "wrapper properties" do |version, type, checksum, updated_checksum| + subject(:updated_buildfile) do + updated_files.find { |f| f.name == "gradle/wrapper/gradle-wrapper.properties" } + end + + let(:buildfile) do + Dependabot::DependencyFile.new( + name: "gradle/wrapper/gradle-wrapper.properties", + content: fixture("wrapper_properties_file", + "gradle-wrapper-#{version}-#{type}#{checksum ? '-checksum' : ''}.properties") + ) + end + + let(:dependency) do + requirements = [{ + file: "gradle/wrapper/gradle-wrapper.properties", + requirement: "9.0.0", + groups: [], + source: { type: "gradle-distribution", url: "https://services.gradle.org", property: "distributionUrl" } + }] + if checksum + requirements << { + file: "gradle/wrapper/gradle-wrapper.properties", + requirement: updated_checksum, + groups: [], + source: { type: "gradle-distribution", url: "https://services.gradle.org", property: "distributionSha256Sum" } + } + end + + previous_requirements = [{ + file: "gradle/wrapper/gradle-wrapper.properties", + requirement: version, + groups: [], + source: { type: "gradle-distribution", url: "https://services.gradle.org", property: "distributionUrl" } + }] + if checksum + previous_requirements << { + file: "gradle/wrapper/gradle-wrapper.properties", + requirement: checksum, + groups: [], + source: { type: "gradle-distribution", url: "https://services.gradle.org", property: "distributionSha256Sum" } + } + end + + Dependabot::Dependency.new( + name: "gradle-wrapper", + version: "9.0.0", + previous_version: version, + requirements: requirements, + previous_requirements: previous_requirements, + package_manager: "gradle" + ) + end + + its(:content) do + is_expected.to include( + "distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-#{type}.zip" + ) + + if checksum + is_expected.to include("distributionSha256Sum=#{updated_checksum}") + else + is_expected.not_to include("distributionSha256Sum=") + end + end + end + + it_behaves_like "wrapper properties", "8.14.2", "all", nil, nil + it_behaves_like "wrapper properties", "8.14.2", "bin", nil, nil + it_behaves_like "wrapper properties", "8.14.2", "bin", + "7197a12f450794931532469d4ff21a59ea2c1cd59a3ec3f89c035c3c420a6999", + "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b" + it_behaves_like "wrapper properties", "8.14.2", "all", + "443c9c8ee2ac1ee0e11881a40f2376d79c66386264a44b24a9f8ca67e633375f", + "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365" + end + context "with a version catalog" do subject(:updated_buildfile) do updated_files.find { |f| f.name == "gradle/libs.versions.toml" } diff --git a/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb b/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb new file mode 100644 index 00000000000..023033afc03 --- /dev/null +++ b/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb @@ -0,0 +1,186 @@ +# typed: false +# frozen_string_literal: true + +# rubocop:disable RSpec/ExampleLength + +require "spec_helper" +require "dependabot/gradle/update_checker/distributions_finder" + +RSpec.describe Dependabot::Gradle::UpdateChecker::DistributionsFinder do + before do + stub_request(:get, "https://services.gradle.org/versions/all") + .to_return( + status: 200, + body: fixture("gradle_distributions_metadata", "versions_all.json") + ) + end + + describe "#available_versions" do + it { + expect(described_class.available_versions).to eq(%w( + 0.7 + 0.8 + 0.9 + 0.9.1 + 0.9.2 + 1.0 + 1.1 + 1.2 + 1.3 + 1.4 + 1.5 + 1.6 + 1.7 + 1.8 + 1.9 + 1.10 + 1.11 + 1.12 + 2.0 + 2.1 + 2.2 + 2.2.1 + 2.3 + 2.4 + 2.5 + 2.6 + 2.7 + 2.8 + 2.9 + 2.10 + 2.11 + 2.12 + 2.13 + 2.14 + 2.14.1 + 3.0 + 3.1 + 3.2 + 3.2.1 + 3.3 + 3.4 + 3.4.1 + 3.5 + 3.5.1 + 4.0 + 4.0.1 + 4.0.2 + 4.1 + 4.2 + 4.2.1 + 4.3 + 4.3.1 + 4.4 + 4.4.1 + 4.5 + 4.5.1 + 4.6 + 4.7 + 4.8 + 4.8.1 + 4.9 + 4.10 + 4.10.1 + 4.10.2 + 4.10.3 + 5.0 + 5.1 + 5.1.1 + 5.2 + 5.2.1 + 5.3 + 5.3.1 + 5.4 + 5.4.1 + 5.5 + 5.5.1 + 5.6 + 5.6.1 + 5.6.2 + 5.6.3 + 5.6.4 + 6.0 + 6.0.1 + 6.1 + 6.1.1 + 6.2 + 6.2.1 + 6.2.2 + 6.3 + 6.4 + 6.4.1 + 6.5 + 6.5.1 + 6.6 + 6.6.1 + 6.7 + 6.7.1 + 6.8 + 6.8.1 + 6.8.2 + 6.8.3 + 6.9 + 6.9.1 + 6.9.2 + 6.9.3 + 6.9.4 + 7.0 + 7.0.1 + 7.0.2 + 7.1 + 7.1.1 + 7.2 + 7.3 + 7.3.1 + 7.3.2 + 7.3.3 + 7.4 + 7.4.1 + 7.4.2 + 7.5 + 7.5.1 + 7.6 + 7.6.1 + 7.6.2 + 7.6.3 + 7.6.4 + 7.6.5 + 7.6.6 + 8.0 + 8.0.1 + 8.0.2 + 8.1 + 8.1.1 + 8.2 + 8.2.1 + 8.3 + 8.4 + 8.5 + 8.6 + 8.7 + 8.8 + 8.9 + 8.10 + 8.10.1 + 8.10.2 + 8.11 + 8.11.1 + 8.12 + 8.12.1 + 8.13 + 8.14 + 8.14.1 + 8.14.2 + 8.14.3 + 9.0.0 + ).map do |version| + { + version: Dependabot::Gradle::Version.new(version), + source_url: "https://services.gradle.org" + } + end) + } + end +end + +# rubocop:enable RSpec/ExampleLength diff --git a/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb b/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb index fd50af50110..13ff9d23520 100644 --- a/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb +++ b/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb @@ -152,5 +152,87 @@ end end end + + context "with distribution dependency" do + let(:requirements) { [distribution_req, checksum_req] } + let(:latest_version) { version_class.new("9.0.0") } + + let(:distribution_req) do + { + requirement: "8.14.2", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-8.14.2-all.zip", + property: "distributionUrl" + }, + groups: [] + } + end + + let(:checksum_req) do + { + requirement: "443c9c8ee2ac1ee0e11881a40f2376d79c66386264a44b24a9f8ca67e633375f", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-8.14.2-all.zip.sha256", + property: "distributionUrlSha256Sum" + }, + groups: [] + } + end + + before do + stub_request(:get, "https://services.gradle.org/distributions/gradle-9.0.0-all.zip.sha256") + .to_return(status: 200, body: "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365") + end + + it "updates the checksum" do + expect(updater.updated_requirements).not_to eq(requirements) + expect(updater.updated_requirements).to eq([ + { + requirement: "9.0.0", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip", + property: "distributionUrl" + }, + groups: [] + }, + { + requirement: "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip.sha256", + property: "distributionUrlSha256Sum" + }, + groups: [] + } + ]) + end + + context "when no checksum is available" do + let(:requirements) { [distribution_req] } + + it "does not update the requirement" do + expect(updater.updated_requirements).not_to eq(requirements) + expect(updater.updated_requirements).to eq([ + { + requirement: "9.0.0", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip", + property: "distributionUrl" + }, + groups: [] + } + ]) + end + end + end end end diff --git a/gradle/spec/dependabot/gradle/update_checker/version_finder_spec.rb b/gradle/spec/dependabot/gradle/update_checker/version_finder_spec.rb index 4c5ee89c6f3..7b51536517c 100644 --- a/gradle/spec/dependabot/gradle/update_checker/version_finder_spec.rb +++ b/gradle/spec/dependabot/gradle/update_checker/version_finder_spec.rb @@ -825,5 +825,41 @@ end end end + + context "when the details come from gradle distributions" do + before do + stub_request(:get, "https://services.gradle.org/versions/all") + .to_return( + status: 200, + body: fixture("gradle_distributions_metadata", "versions_all.json") + ) + end + + describe "the last version" do + subject { versions.last } + + let(:dependency_name) { "gradle-distribution" } + let(:dependency_version) { "8.5-rc-3" } + let(:dependency_requirements) do + [{ + requirement: "8.5-rc-3", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-8.5-rc-3-bin.zip" + }, + groups: [] + }] + end + + its([:version]) do + is_expected.to eq(version_class.new("9.0.0")) + end + + its([:source_url]) do + is_expected.to eq("https://services.gradle.org") + end + end + end end end diff --git a/gradle/spec/fixtures/github/content_gradle_wrapper.json b/gradle/spec/fixtures/github/content_gradle_wrapper.json new file mode 100644 index 00000000000..67c735b9436 --- /dev/null +++ b/gradle/spec/fixtures/github/content_gradle_wrapper.json @@ -0,0 +1,34 @@ +[ + { + "name": "gradle-wrapper.jar", + "path": "gradle/wrapper/gradle-wrapper.jar", + "sha": "e708b1c023ec8b20f512888fe07c5bd3ff77bb8f", + "size": 59203, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradle/wrapper/gradle-wrapper.jar?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradle/wrapper/gradle-wrapper.jar", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/e708b1c023ec8b20f512888fe07c5bd3ff77bb8f", + "download_url": "https://raw.githubusercontent.com/bigandroidenergies/version_catalog/main/gradle/wrapper/gradle-wrapper.jar", + "type": "file", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradle/wrapper/gradle-wrapper.jar?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/e708b1c023ec8b20f512888fe07c5bd3ff77bb8f", + "html": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradle/wrapper/gradle-wrapper.jar" + } + }, + { + "name": "gradle-wrapper.properties", + "path": "gradle/wrapper/gradle-wrapper.properties", + "sha": "3ec3a7f5c2167bb4059a6b770addff024c9a3780", + "size": 230, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradle/wrapper/gradle-wrapper.properties?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradle/wrapper/gradle-wrapper.properties", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/3ec3a7f5c2167bb4059a6b770addff024c9a3780", + "download_url": "https://raw.githubusercontent.com/bigandroidenergies/version_catalog/main/gradle/wrapper/gradle-wrapper.properties", + "type": "file", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradle/wrapper/gradle-wrapper.properties?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/3ec3a7f5c2167bb4059a6b770addff024c9a3780", + "html": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradle/wrapper/gradle-wrapper.properties" + } + } +] diff --git a/gradle/spec/fixtures/github/gradle-wrapper.properties.json b/gradle/spec/fixtures/github/gradle-wrapper.properties.json new file mode 100644 index 00000000000..3e14f0ffeee --- /dev/null +++ b/gradle/spec/fixtures/github/gradle-wrapper.properties.json @@ -0,0 +1,18 @@ +{ + "name": "gradle-wrapper.properties", + "path": "gradle/wrapper/gradle-wrapper.properties", + "sha": "3ec3a7f5c2167bb4059a6b770addff024c9a3780", + "size": 230, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradle/wrapper/gradle-wrapper.properties?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradle/wrapper/gradle-wrapper.properties", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/3ec3a7f5c2167bb4059a6b770addff024c9a3780", + "download_url": "https://raw.githubusercontent.com/bigandroidenergies/version_catalog/main/gradle/wrapper/gradle-wrapper.properties", + "type": "file", + "content": "I01vbiBOb3YgMjggMTQ6Mjk6MzkgQ0VUIDIwMjIKZGlzdHJpYnV0aW9uQmFz\nZT1HUkFETEVfVVNFUl9IT01FCmRpc3RyaWJ1dGlvblVybD1odHRwc1w6Ly9z\nZXJ2aWNlcy5ncmFkbGUub3JnL2Rpc3RyaWJ1dGlvbnMvZ3JhZGxlLTcuNS1i\naW4uemlwCmRpc3RyaWJ1dGlvblBhdGg9d3JhcHBlci9kaXN0cwp6aXBTdG9y\nZVBhdGg9d3JhcHBlci9kaXN0cwp6aXBTdG9yZUJhc2U9R1JBRExFX1VTRVJf\nSE9NRQo=\n", + "encoding": "base64", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradle/wrapper/gradle-wrapper.properties?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/3ec3a7f5c2167bb4059a6b770addff024c9a3780", + "html": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradle/wrapper/gradle-wrapper.properties" + } +} diff --git a/gradle/spec/fixtures/gradle_distributions_metadata/versions_all.json b/gradle/spec/fixtures/gradle_distributions_metadata/versions_all.json new file mode 100644 index 00000000000..339e7ee0e22 --- /dev/null +++ b/gradle/spec/fixtures/gradle_distributions_metadata/versions_all.json @@ -0,0 +1,8056 @@ +[ + { + "version": "9.1.0-20250819013317+0000", + "buildTime": "20250819013317+0000", + "commitId": "f84d893857f41edc62179fb725639c3ab2ccc73f", + "current": false, + "snapshot": true, + "nightly": false, + "releaseNightly": true, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions-snapshots/gradle-9.1.0-20250819013317+0000-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions-snapshots/gradle-9.1.0-20250819013317+0000-bin.zip.sha256", + "checksum": "bd240c7a62b502de0194ab1eb36076f9ce48edf4a2f7207f2c07516f0785fd70", + "wrapperChecksumUrl": "https://services.gradle.org/distributions-snapshots/gradle-9.1.0-20250819013317+0000-wrapper.jar.sha256", + "wrapperChecksum": "76805e32c009c0cf0dd5d206bddc9fb22ea42e84db904b764f3047de095493f3" + }, + { + "version": "9.2.0-20250819010018+0000", + "buildTime": "20250819010018+0000", + "commitId": "05825104b5706ecabd1cd45b6f47198b28f99e33", + "current": false, + "snapshot": true, + "nightly": true, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions-snapshots/gradle-9.2.0-20250819010018+0000-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions-snapshots/gradle-9.2.0-20250819010018+0000-bin.zip.sha256", + "checksum": "6592acd35d3549f606b750804c42bd7d36db2e4e00b59e77a5418fb9bc399998", + "wrapperChecksumUrl": "https://services.gradle.org/distributions-snapshots/gradle-9.2.0-20250819010018+0000-wrapper.jar.sha256", + "wrapperChecksum": "9857c4fdc1823c334c98888ae2e6896efa258106045139647653abac06e897f1" + }, + { + "version": "9.1.0-rc-1", + "buildTime": "20250813123732+0000", + "commitId": "d99e08080200de174ff11b3a06689d996d338ad7", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": true, + "rcFor": "9.1.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.1.0-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.1.0-rc-1-bin.zip.sha256", + "checksum": "f80a20ef870555c9aae51c4d1868b6a31608296a0fd4f8de69a2687243b90f6f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.1.0-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "76805e32c009c0cf0dd5d206bddc9fb22ea42e84db904b764f3047de095493f3" + }, + { + "version": "9.0.0", + "buildTime": "20250731163512+0000", + "commitId": "328772c6bae126949610a8beb59cb227ee580241", + "current": true, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0.0-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-bin.zip.sha256", + "checksum": "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-wrapper.jar.sha256", + "wrapperChecksum": "76805e32c009c0cf0dd5d206bddc9fb22ea42e84db904b764f3047de095493f3" + }, + { + "version": "9.0.0-rc-4", + "buildTime": "20250728151002+0000", + "commitId": "a0a6deb6f9937f9e9894a4460f4158267a13ad03", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "9.0.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0.0-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-rc-4-bin.zip.sha256", + "checksum": "f09991ce63e889bf8a5f579a467a82bdf7621bc93d59cd2f8fe5982f39f28e2a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "76805e32c009c0cf0dd5d206bddc9fb22ea42e84db904b764f3047de095493f3" + }, + { + "version": "9.0.0-rc-3", + "buildTime": "20250717124800+0000", + "commitId": "2db9560bb68c367a265b10516c856c840f9bed8d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "9.0.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0.0-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-rc-3-bin.zip.sha256", + "checksum": "19ce31d8a4f2e59a99931cc13834c70c0e502804851c0640f31a1af9a7d5b003", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "76805e32c009c0cf0dd5d206bddc9fb22ea42e84db904b764f3047de095493f3" + }, + { + "version": "9.0.0-rc-2", + "buildTime": "20250711152331+0000", + "commitId": "2ae39f19925c59560b0b708b9eda586857cddb81", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "9.0.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0.0-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-rc-2-bin.zip.sha256", + "checksum": "4223eafcc72c463e99bad60333a90c974a89aa359ee683e4f329330e513a3736", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "76805e32c009c0cf0dd5d206bddc9fb22ea42e84db904b764f3047de095493f3" + }, + { + "version": "9.0.0-milestone-10", + "buildTime": "20250708052607+0000", + "commitId": "fd90cd1f4415bd77322abacfd66147724c432cde", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "9.0.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0.0-milestone-10-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-milestone-10-bin.zip.sha256", + "checksum": "0e2ac1877ee872cf65c2d8aa6a6aefcfd57226421d54c29937d21f492fdbde86", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-milestone-10-wrapper.jar.sha256", + "wrapperChecksum": "76805e32c009c0cf0dd5d206bddc9fb22ea42e84db904b764f3047de095493f3" + }, + { + "version": "8.14.3", + "buildTime": "20250704131544+0000", + "commitId": "e5ee1df3d88b8ca3a8074787a94f373e3090e1db", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14.3-bin.zip.sha256", + "checksum": "bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14.3-wrapper.jar.sha256", + "wrapperChecksum": "7d3a4ac4de1c32b59bc6a4eb8ecb8e612ccd0cf1ae1e99f66902da64df296172" + }, + { + "version": "7.6.6", + "buildTime": "20250704103426+0000", + "commitId": "c0be2570bd17666c8955ca5b66363f671f50bbd7", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.6.6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.6.6-bin.zip.sha256", + "checksum": "673d9776f303bc7048fc3329d232d6ebf1051b07893bd9d11616fad9a8673be0", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.6.6-wrapper.jar.sha256", + "wrapperChecksum": "14dfa961b6704bb3decdea06502781edaa796a82e6da41cd2e1962b14fbe21a3" + }, + { + "version": "9.0.0-rc-1", + "buildTime": "20250618075324+0000", + "commitId": "8493ac58b4a7baddb64080d415b11659be78dbea", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "9.0.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0.0-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-rc-1-bin.zip.sha256", + "checksum": "5086034b0656a79fee07a04cfadc103984b075ac85d3a20748649671283be1bb", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "76805e32c009c0cf0dd5d206bddc9fb22ea42e84db904b764f3047de095493f3" + }, + { + "version": "8.14.2", + "buildTime": "20250605133201+0000", + "commitId": "30db2a3bdfffa9f8b40e798095675f9dab990a9a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14.2-bin.zip.sha256", + "checksum": "7197a12f450794931532469d4ff21a59ea2c1cd59a3ec3f89c035c3c420a6999", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14.2-wrapper.jar.sha256", + "wrapperChecksum": "7d3a4ac4de1c32b59bc6a4eb8ecb8e612ccd0cf1ae1e99f66902da64df296172" + }, + { + "version": "7.6.5", + "buildTime": "20250604130222+0000", + "commitId": "13a09d0cc61025596acd4acf05d1980a79838906", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.6.5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.6.5-bin.zip.sha256", + "checksum": "b812fec0edb7d27e0ae35955887bb2954536fa3e44edaf481150da058e154d9a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.6.5-wrapper.jar.sha256", + "wrapperChecksum": "14dfa961b6704bb3decdea06502781edaa796a82e6da41cd2e1962b14fbe21a3" + }, + { + "version": "9.0.0-milestone-9", + "buildTime": "20250526083131+0000", + "commitId": "1ceb6a55a8b9f772540ea2655f7ec71cf71e773d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "9.0.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0.0-milestone-9-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-milestone-9-bin.zip.sha256", + "checksum": "f682abba2db33587373c58f558c9387b25f7ea592298b57defbf33fc5488c43d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-milestone-9-wrapper.jar.sha256", + "wrapperChecksum": "76805e32c009c0cf0dd5d206bddc9fb22ea42e84db904b764f3047de095493f3" + }, + { + "version": "8.14.1", + "buildTime": "20250522134409+0000", + "commitId": "c174b82566a79e3575bac8c7648c7b36cd815e94", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14.1-bin.zip.sha256", + "checksum": "845952a9d6afa783db70bb3b0effaae45ae5542ca2bb7929619e8af49cb634cf", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14.1-wrapper.jar.sha256", + "wrapperChecksum": "7d3a4ac4de1c32b59bc6a4eb8ecb8e612ccd0cf1ae1e99f66902da64df296172" + }, + { + "version": "9.0.0-milestone-8", + "buildTime": "20250516073511+0000", + "commitId": "2de7d5ba412c2a9e33f43076dfc4560488359ad2", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "9.0.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0.0-milestone-8-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-milestone-8-bin.zip.sha256", + "checksum": "9a69d11f90bb8b689b171889437d99a5925d17e7507413472ab45fbbc3949ef9", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0.0-milestone-8-wrapper.jar.sha256", + "wrapperChecksum": "f98ed44dd3f067fa699b5c34661be67c7f0097ea58b0017255141a08d2eb5f87" + }, + { + "version": "9.0-milestone-7", + "buildTime": "20250513065613+0000", + "commitId": "3c890746756262d3778e12eaa5155d661d7cbdf2", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "9.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-7-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-7-bin.zip.sha256", + "checksum": "8e8fc68b78a272aa8da4e6fd608502874f7b9d29257fe1345c7209b725cb7565", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-7-wrapper.jar.sha256", + "wrapperChecksum": "f98ed44dd3f067fa699b5c34661be67c7f0097ea58b0017255141a08d2eb5f87" + }, + { + "version": "9.0-milestone-6", + "buildTime": "20250508062448+0000", + "commitId": "0436db0122ff0c2c8f9ae3db45371f2c067ebfbd", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "9.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-6-bin.zip.sha256", + "checksum": "47177c00fc3574e3557902ed9f4bab073597d22c6d9a3fcde8bf8bbc8286f220", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-6-wrapper.jar.sha256", + "wrapperChecksum": "f98ed44dd3f067fa699b5c34661be67c7f0097ea58b0017255141a08d2eb5f87" + }, + { + "version": "9.0-milestone-5", + "buildTime": "20250429093659+0000", + "commitId": "34d31f8f53af29e93357bc88a9a47a1a8001a4ef", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "9.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-5-bin.zip.sha256", + "checksum": "d9f0549d640c07389b2d83717a9ae4ca9a49ed2120f95d14015da227ecba16fc", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-5-wrapper.jar.sha256", + "wrapperChecksum": "c605ee1b011c0da3bc468735530c1d43ea3ede0fb8ce978b5479c7f688343ef5" + }, + { + "version": "9.0-milestone-4", + "buildTime": "20250428144937+0000", + "commitId": "ad8b92fc649c0f2efe95287bc43e61a5c0cf618a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "9.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-4-bin.zip.sha256", + "checksum": "ad3873e76d4127629e605d8551fa2b1f893b59d9171138c9463bd5c2001981a9", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-4-wrapper.jar.sha256", + "wrapperChecksum": "c605ee1b011c0da3bc468735530c1d43ea3ede0fb8ce978b5479c7f688343ef5" + }, + { + "version": "8.14", + "buildTime": "20250425092908+0000", + "commitId": "34c560e3be961658a6fbcd7170ec2443a228b109", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14-bin.zip.sha256", + "checksum": "61ad310d3c7d3e5da131b76bbf22b5a4c0786e9d892dae8c1658d4b484de3caa", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14-wrapper.jar.sha256", + "wrapperChecksum": "7d3a4ac4de1c32b59bc6a4eb8ecb8e612ccd0cf1ae1e99f66902da64df296172" + }, + { + "version": "8.14-rc-3", + "buildTime": "20250423120032+0000", + "commitId": "8afb1d3427f2721ac7aaa95c1b82c73651870d49", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.14", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14-rc-3-bin.zip.sha256", + "checksum": "d6442642e2f9d920bad96115c91e30a38afd6cdce61f9043ee45e2ab1e1a2972", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "7d3a4ac4de1c32b59bc6a4eb8ecb8e612ccd0cf1ae1e99f66902da64df296172" + }, + { + "version": "9.0-milestone-3", + "buildTime": "20250422030543+0000", + "commitId": "b86fa516155d1d3baef664ba5288ad578b337b07", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "9.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-3-bin.zip.sha256", + "checksum": "d9a2c448ef8adb196c65deda1b9680060372528946aed78c7bf24c0ab6443518", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-3-wrapper.jar.sha256", + "wrapperChecksum": "c605ee1b011c0da3bc468735530c1d43ea3ede0fb8ce978b5479c7f688343ef5" + }, + { + "version": "8.14-rc-2", + "buildTime": "20250417124738+0000", + "commitId": "c6a073de26dd590617441ea3805bc2743fb315eb", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.14", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14-rc-2-bin.zip.sha256", + "checksum": "64caf15a08354b01c3c32de0e433179e6678041e8dfe8aa2a27da06ec81c7e35", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "7d3a4ac4de1c32b59bc6a4eb8ecb8e612ccd0cf1ae1e99f66902da64df296172" + }, + { + "version": "9.0-milestone-2", + "buildTime": "20250414083159+0000", + "commitId": "ce1ff4a2ca36b5f7959f30e211eb2025b9433c89", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "9.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-2-bin.zip.sha256", + "checksum": "19507539796ff63011c87493b926038e2028b94f200f3ba02e5c776e1cdc20ca", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-2-wrapper.jar.sha256", + "wrapperChecksum": "c605ee1b011c0da3bc468735530c1d43ea3ede0fb8ce978b5479c7f688343ef5" + }, + { + "version": "9.0-milestone-1", + "buildTime": "20250410115011+0000", + "commitId": "db647b24a4039507bbcac1273883745322ae84c3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "9.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-1-bin.zip.sha256", + "checksum": "6963d0abe43cacb1e159bbc28a0e4e80c1622c0384549c3792257981d89d37ed", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-9.0-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "9687bf4e8beb2c293cfd1393cbf2854ef68f921757302116033f476289abf7b0" + }, + { + "version": "8.14-rc-1", + "buildTime": "20250409084650+0000", + "commitId": "266969fceec7f1ad8c1d39e1354d963ce2857269", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.14", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14-rc-1-bin.zip.sha256", + "checksum": "ea87df6204bb94a432cf58d9a915408b1588a8bf146643a347e31fabd7b0e5a8", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "7d3a4ac4de1c32b59bc6a4eb8ecb8e612ccd0cf1ae1e99f66902da64df296172" + }, + { + "version": "8.14-milestone-8", + "buildTime": "20250408011208+0000", + "commitId": "31bca59472c3050181a775f6ca54e5337b8a75e3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.14", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-8-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-8-bin.zip.sha256", + "checksum": "6b6e36374f80d3e5594d9fda7040bf45e1e4617ecb95529f4f5cae77d4c6cd8f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-8-wrapper.jar.sha256", + "wrapperChecksum": "81a82aaea5abcc8ff68b3dfcb58b3c3c429378efd98e7433460610fecd7ae45f" + }, + { + "version": "8.14-milestone-7", + "buildTime": "20250324073617+0000", + "commitId": "48de48758fc3bc62eccebd723f68f9b8d8173e66", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.14", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-7-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-7-bin.zip.sha256", + "checksum": "13c012a0343d1d310966e6ee1347b3a9b90f210f06a1b1e54ce57fbea8a1233d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-7-wrapper.jar.sha256", + "wrapperChecksum": "81a82aaea5abcc8ff68b3dfcb58b3c3c429378efd98e7433460610fecd7ae45f" + }, + { + "version": "8.14-milestone-5", + "buildTime": "20250320082137+0000", + "commitId": "9728ad5ef05b47255083a31f83ed0fbc3f5035e3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.14", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-5-bin.zip.sha256", + "checksum": "4d7f406f60d84969fb10722f627067cd7a505da593a64afc5769ca7b96b65109", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-5-wrapper.jar.sha256", + "wrapperChecksum": "81a82aaea5abcc8ff68b3dfcb58b3c3c429378efd98e7433460610fecd7ae45f" + }, + { + "version": "8.14-milestone-4", + "buildTime": "20250306073633+0000", + "commitId": "2f19ff9006b6e7d3d81d614ee87ee6a1f251a3b0", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.14", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-4-bin.zip.sha256", + "checksum": "c348e50e30d188490f99bc7bd9a27262f2bf2b63b6df29a126660fbf8dc64a10", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-4-wrapper.jar.sha256", + "wrapperChecksum": "81a82aaea5abcc8ff68b3dfcb58b3c3c429378efd98e7433460610fecd7ae45f" + }, + { + "version": "8.13", + "buildTime": "20250225092214+0000", + "commitId": "073314332697ba45c16c0a0ce1891fa6794179ff", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.13-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.13-bin.zip.sha256", + "checksum": "20f1b1176237254a6fc204d8434196fa11a4cfb387567519c61556e8710aed78", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.13-wrapper.jar.sha256", + "wrapperChecksum": "81a82aaea5abcc8ff68b3dfcb58b3c3c429378efd98e7433460610fecd7ae45f" + }, + { + "version": "8.14-milestone-3", + "buildTime": "20250221141330+0000", + "commitId": "8b48d0ed4b1711a8c7a8ce63183970b23c1e9490", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.14", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-3-bin.zip.sha256", + "checksum": "b232697f41807f172f991dfb78e5013b6ed71d8c7d0256b2d93df41eba18c5cd", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-3-wrapper.jar.sha256", + "wrapperChecksum": "81a82aaea5abcc8ff68b3dfcb58b3c3c429378efd98e7433460610fecd7ae45f" + }, + { + "version": "8.13-rc-2", + "buildTime": "20250220142623+0000", + "commitId": "160d52df5c7663f9854ab7fddf0123a8f044c530", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.13", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.13-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.13-rc-2-bin.zip.sha256", + "checksum": "264353f17a13391626fc8d0e86ae8023f30ea334a470caae0cfee02fe6cd1f3d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.13-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "81a82aaea5abcc8ff68b3dfcb58b3c3c429378efd98e7433460610fecd7ae45f" + }, + { + "version": "8.14-milestone-2", + "buildTime": "20250220124058+0000", + "commitId": "affa639ae530da704951a05c80cef66583558ace", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.14", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-2-bin.zip.sha256", + "checksum": "2db4c39174c3dc0ced756b60b2b8d151eb0d12b65e539c91ac7f7d36b7e7dd2d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-2-wrapper.jar.sha256", + "wrapperChecksum": "81a82aaea5abcc8ff68b3dfcb58b3c3c429378efd98e7433460610fecd7ae45f" + }, + { + "version": "8.14-milestone-1", + "buildTime": "20250214133101+0000", + "commitId": "dc47699e834411a85029a51a0723e2381afced09", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.14", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-1-bin.zip.sha256", + "checksum": "0978afc2b32e0f05dbe881681de850a2413f85f6ebe96848719e2b710b9fbde7", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.14-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "81a82aaea5abcc8ff68b3dfcb58b3c3c429378efd98e7433460610fecd7ae45f" + }, + { + "version": "8.13-rc-1", + "buildTime": "20250212094604+0000", + "commitId": "e1568ff83ddecf64248260376da957b986d625e7", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.13", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.13-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.13-rc-1-bin.zip.sha256", + "checksum": "3b3565efd2df2dd999774b6ef8ea571878c5532cbac6dbaaeb4b2731f42e6704", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.13-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "81a82aaea5abcc8ff68b3dfcb58b3c3c429378efd98e7433460610fecd7ae45f" + }, + { + "version": "8.12.1", + "buildTime": "20250124125512+0000", + "commitId": "0b1ee1ff81d1f4a26574ff4a362ac9180852b140", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.12.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.12.1-bin.zip.sha256", + "checksum": "8d97a97984f6cbd2b85fe4c60a743440a347544bf18818048e611f5288d46c94", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.12.1-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.13-milestone-3", + "buildTime": "20250121164636+0000", + "commitId": "008d02e96f845b2d5a628758831c97d305983d68", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.13", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.13-milestone-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.13-milestone-3-bin.zip.sha256", + "checksum": "f22cfbc3bd7e2e762910ed22926614b11af5af23456cec8730cde390b3e6da58", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.13-milestone-3-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.12.1-milestone-1", + "buildTime": "20250121110021+0000", + "commitId": "6d9f96d13ea6d230832feb4bf74b71af5df083d6", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.12.1", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.12.1-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.12.1-milestone-1-bin.zip.sha256", + "checksum": "003255422dfe4b7306412cd39a120a4382d5db51df9acac33f997b2cb54c4ccd", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.12.1-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.13-milestone-2", + "buildTime": "20250110085439+0000", + "commitId": "bf974bdd5b1a046611eb50a5ec863c07f7630bfd", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.13", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.13-milestone-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.13-milestone-2-bin.zip.sha256", + "checksum": "e8b04d5491ad67bb5e2cd6a3168631dde9b5ab8d0faf5ed1fd3081526cded0ea", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.13-milestone-2-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.13-milestone-1", + "buildTime": "20250109202014+0000", + "commitId": "017df4898587f8decd1ee7dae2dd33f94c9f5a8a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.13", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.13-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.13-milestone-1-bin.zip.sha256", + "checksum": "524079334d60703b233cab4a467574eac0208783ae00c70ef722d349e3db3623", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.13-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.12", + "buildTime": "20241220154653+0000", + "commitId": "a3cacb207fec727859be9354c1937da2e59004c1", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.12-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.12-bin.zip.sha256", + "checksum": "7a00d51fb93147819aab76024feece20b6b84e420694101f276be952e08bef03", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.12-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.12-rc-2", + "buildTime": "20241217162852+0000", + "commitId": "98f15d7fbb920b0d3b5388dd0a3e6fb244302f8f", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.12", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.12-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.12-rc-2-bin.zip.sha256", + "checksum": "4c403eac4e3957107a6e954ae2b59ba6cf9823f683276f1f9e20ef79b8d350a2", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.12-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.12-rc-1", + "buildTime": "20241212152352+0000", + "commitId": "e385beb86216461fe39ad37767b95bb0fa6ff777", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.12", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.12-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.12-rc-1-bin.zip.sha256", + "checksum": "4d9d7ad4cf8842f279649213d2f87d8f7e9a03ae75ac4389517aa574b1404b2a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.12-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.11.1", + "buildTime": "20241120165646+0000", + "commitId": "481cb05a490e0ef9f8620f7873b83bd8a72e7c39", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.11.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.11.1-bin.zip.sha256", + "checksum": "f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.11.1-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.11", + "buildTime": "20241111135801+0000", + "commitId": "b2ef976169a05b3c76d04f0fa76a940859f96fa4", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.11-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.11-bin.zip.sha256", + "checksum": "57dafb5c2622c6cc08b993c85b7c06956a2f53536432a30ead46166dbca0f1e9", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.11-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.11-rc-3", + "buildTime": "20241107134628+0000", + "commitId": "ca3040e548f099c5c879ec2ef93f2f0496551d4b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.11", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.11-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.11-rc-3-bin.zip.sha256", + "checksum": "8e4b38e068e5d73272498ce4743d86adccebfdadaa4233dd15bfb6c6b82b9152", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.11-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.11-rc-2", + "buildTime": "20241031150259+0000", + "commitId": "484cebf8e46e7e0150107705c7ef8d62d72af447", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.11", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.11-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.11-rc-2-bin.zip.sha256", + "checksum": "7565ee2f3d2193fce6e752f474be66eb0c6252f0c9ef792a8bffda6e7fd31b36", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.11-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.11-rc-1", + "buildTime": "20241017104024+0000", + "commitId": "4eab5987e618554d2d5e51fbc7b1dd1a3c7e8cb8", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.11", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.11-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.11-rc-1-bin.zip.sha256", + "checksum": "2522b1593704b6b26e03cb2dec86d792b1c6ca5c33d10e078fab7a146354130e", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.11-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.11-milestone-1", + "buildTime": "20241006083426+0000", + "commitId": "4a6676a6310b36abe94e9451436a8621e113728a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.11", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.11-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.11-milestone-1-bin.zip.sha256", + "checksum": "2c406ba10eaed701b69d01de924dfaf36106d4764e2090175d103b2e7acba211", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.11-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.10.2", + "buildTime": "20240923212839+0000", + "commitId": "415adb9e06a516c44b391edff552fd42139443f7", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.10.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.10.2-bin.zip.sha256", + "checksum": "31c55713e40233a8303827ceb42ca48a47267a0ad4bab9177123121e71524c26", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.10.2-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.10.2-milestone-1", + "buildTime": "20240919234735+0000", + "commitId": "c3ea2131e78003a1506533a3ddc952014217cee3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.10.2", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.10.2-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.10.2-milestone-1-bin.zip.sha256", + "checksum": "b6650db1f41b146b4a780c2a183e14602a6cf861a7797d97ea530fb1384d6336", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.10.2-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.10.1", + "buildTime": "20240909074256+0000", + "commitId": "8716158d3ec8c59e38f87a67f1f311f297b79576", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.10.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.10.1-bin.zip.sha256", + "checksum": "1541fa36599e12857140465f3c91a97409b4512501c26f9631fb113e392c5bd1", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.10.1-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.10", + "buildTime": "20240814110745+0000", + "commitId": "fef2edbed8af1022cefaf44d4c0514c5f89d7b78", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.10-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.10-bin.zip.sha256", + "checksum": "5b9c5eb3f9fc2c94abaea57d90bd78747ca117ddbbf96c859d3741181a12bf2a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.10-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.10-rc-1", + "buildTime": "20240808060755+0000", + "commitId": "4f143ee84909970e5148c38b3ac7db3ff826a022", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.10", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.10-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.10-rc-1-bin.zip.sha256", + "checksum": "de2ad3b249d89af001ce3dace548f8149675c692ef8bccf271444985b590d284", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.10-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046" + }, + { + "version": "8.9", + "buildTime": "20240711143741+0000", + "commitId": "d536ef36a19186ccc596d8817123e5445f30fef8", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.9-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.9-bin.zip.sha256", + "checksum": "d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.9-wrapper.jar.sha256", + "wrapperChecksum": "498495120a03b9a6ab5d155f5de3c8f0d986a449153702fb80fc80e134484f17" + }, + { + "version": "8.9-rc-2", + "buildTime": "20240705153825+0000", + "commitId": "fcee8d48f54051165ef816487636dfc0aa4c88a0", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.9-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.9-rc-2-bin.zip.sha256", + "checksum": "c2b58a752b82346a89a9d5384ba0882d9c3f0c29e0700c8e050002b81d6d4ff9", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.9-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "498495120a03b9a6ab5d155f5de3c8f0d986a449153702fb80fc80e134484f17" + }, + { + "version": "8.9-rc-1", + "buildTime": "20240621131308+0000", + "commitId": "a667c19ff4d039304aa43268948139dc9ca6baa6", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.9-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.9-rc-1-bin.zip.sha256", + "checksum": "3ae7f7d3d433936b546c13505bb55adbae7708e715bfc4cf36cfc22650e6a881", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.9-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "498495120a03b9a6ab5d155f5de3c8f0d986a449153702fb80fc80e134484f17" + }, + { + "version": "8.8", + "buildTime": "20240531214656+0000", + "commitId": "4bd1b3d3fc3f31db5a26eecb416a165b8cc36082", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.8-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.8-bin.zip.sha256", + "checksum": "a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.8-wrapper.jar.sha256", + "wrapperChecksum": "cb0da6751c2b753a16ac168bb354870ebb1e162e9083f116729cec9c781156b8" + }, + { + "version": "8.8-rc-2", + "buildTime": "20240527070937+0000", + "commitId": "d0f4982aba27e390b46c383277db130abfc1b44e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.8-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.8-rc-2-bin.zip.sha256", + "checksum": "b50250702d1b238f797c0778259f8b58714d5d16fbfec41fb19135bf86c64fe8", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.8-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "cb0da6751c2b753a16ac168bb354870ebb1e162e9083f116729cec9c781156b8" + }, + { + "version": "8.8-rc-1", + "buildTime": "20240426151958+0000", + "commitId": "000ef8587278729b8ea91c89b1c527ba0164338a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.8-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.8-rc-1-bin.zip.sha256", + "checksum": "a2e1cfee7ffdeee86015b85b2dd2a435032c40eedc01d8172285556c7d8fea13", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.8-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "cb0da6751c2b753a16ac168bb354870ebb1e162e9083f116729cec9c781156b8" + }, + { + "version": "8.7", + "buildTime": "20240322155246+0000", + "commitId": "650af14d7653aa949fce5e886e685efc9cf97c10", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.7-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.7-bin.zip.sha256", + "checksum": "544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.7-wrapper.jar.sha256", + "wrapperChecksum": "cb0da6751c2b753a16ac168bb354870ebb1e162e9083f116729cec9c781156b8" + }, + { + "version": "8.7-rc-4", + "buildTime": "20240320140334+0000", + "commitId": "b9db7ce7ad5d1f2adf1928955ae926329262cf82", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.7-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.7-rc-4-bin.zip.sha256", + "checksum": "a14ad975075d5d2dcc1fa1667e622597c6f8721e2ca42dff54ebe40c07eb1bc5", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.7-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "cb0da6751c2b753a16ac168bb354870ebb1e162e9083f116729cec9c781156b8" + }, + { + "version": "8.7-rc-3", + "buildTime": "20240311171310+0000", + "commitId": "ab30a66001c3476658e07c46e1a9c5e862aed438", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.7-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.7-rc-3-bin.zip.sha256", + "checksum": "f0183d411f68b72d37112e47b539c6d91d1870842f5f2ce9cffefa0a7756ae52", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.7-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "cb0da6751c2b753a16ac168bb354870ebb1e162e9083f116729cec9c781156b8" + }, + { + "version": "8.7-rc-2", + "buildTime": "20240229125337+0000", + "commitId": "cf4549b56c9b4d7c453795158e19a544b2a0dd60", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.7-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.7-rc-2-bin.zip.sha256", + "checksum": "3348170800c324fc97ff201fdc139ad465c073ab19760cfe22a872b5b858560f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.7-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "cb0da6751c2b753a16ac168bb354870ebb1e162e9083f116729cec9c781156b8" + }, + { + "version": "8.7-rc-1", + "buildTime": "20240222213949+0000", + "commitId": "6cd7d3cf5929e1bd9f917b7dc67d03cd65d22d08", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.7-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.7-rc-1-bin.zip.sha256", + "checksum": "4354bc6c46d1f1e1e37cb371b7c31556a4427eb3f57d03c23e5aae8aa606aedb", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.7-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "cb0da6751c2b753a16ac168bb354870ebb1e162e9083f116729cec9c781156b8" + }, + { + "version": "7.6.4", + "buildTime": "20240205142918+0000", + "commitId": "e0bb3fc8cefad8432c9033cdfb12dc14facc9dd9", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.6.4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.6.4-bin.zip.sha256", + "checksum": "bed1da33cca0f557ab13691c77f38bb67388119e4794d113e051039b80af9bb1", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.6.4-wrapper.jar.sha256", + "wrapperChecksum": "14dfa961b6704bb3decdea06502781edaa796a82e6da41cd2e1962b14fbe21a3" + }, + { + "version": "8.6", + "buildTime": "20240202164716+0000", + "commitId": "d55c486870a0dc6f6278f53d21381396d0741c6e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.6-bin.zip.sha256", + "checksum": "9631d53cf3e74bfa726893aee1f8994fee4e060c401335946dba2156f440f24c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.6-wrapper.jar.sha256", + "wrapperChecksum": "d3b261c2820e9e3d8d639ed084900f11f4a86050a8f83342ade7b6bc9b0d2bdd" + }, + { + "version": "8.6-rc-4", + "buildTime": "20240131130628+0000", + "commitId": "f1b03c0a136f87f0d33406b8ea3f2039caec2a32", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.6-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.6-rc-4-bin.zip.sha256", + "checksum": "1fb8db52c64b78eb27358dbe7119040090d227cb7de0436c0a657863c44b84c6", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.6-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "d3b261c2820e9e3d8d639ed084900f11f4a86050a8f83342ade7b6bc9b0d2bdd" + }, + { + "version": "8.6-rc-3", + "buildTime": "20240123150619+0000", + "commitId": "40b1a053f84abb1d167d88142af835c96eb4c3d7", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.6-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.6-rc-3-bin.zip.sha256", + "checksum": "281b47656267472c9f853e7ed54002bfd435bfdcd292286709705324fd96f5dc", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.6-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "d3b261c2820e9e3d8d639ed084900f11f4a86050a8f83342ade7b6bc9b0d2bdd" + }, + { + "version": "8.6-rc-2", + "buildTime": "20240112144903+0000", + "commitId": "cee3a34b18b771fe4174800920b5a0009a980034", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.6-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.6-rc-2-bin.zip.sha256", + "checksum": "3a36cedd25c02335d991e3684e17985239150e24b744a8513d466543083ca250", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.6-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "d3b261c2820e9e3d8d639ed084900f11f4a86050a8f83342ade7b6bc9b0d2bdd" + }, + { + "version": "8.6-rc-1", + "buildTime": "20231228064048+0000", + "commitId": "19db0f499fd22a228355c1a6594b9159176a466e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.6-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.6-rc-1-bin.zip.sha256", + "checksum": "a2da4ba435f6728b43554c5845f6f88f79589c3e0018c29ab33eb23bd781255b", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.6-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "d3b261c2820e9e3d8d639ed084900f11f4a86050a8f83342ade7b6bc9b0d2bdd" + }, + { + "version": "8.6-milestone-1", + "buildTime": "20231208093905+0000", + "commitId": "68a2e7c3355e027b514e59fe9e4671d780409535", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.6", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.6-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.6-milestone-1-bin.zip.sha256", + "checksum": "0bd40db84cb02df49bde4c3f45b6fa7267f78c075447cb70bac3cc79aed233b7", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.6-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "d3b261c2820e9e3d8d639ed084900f11f4a86050a8f83342ade7b6bc9b0d2bdd" + }, + { + "version": "8.5", + "buildTime": "20231129140857+0000", + "commitId": "28aca86a7180baa17117e0e5ba01d8ea9feca598", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.5-bin.zip.sha256", + "checksum": "9d926787066a081739e8200858338b4a69e837c3a821a33aca9db09dd4a41026", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.5-wrapper.jar.sha256", + "wrapperChecksum": "d3b261c2820e9e3d8d639ed084900f11f4a86050a8f83342ade7b6bc9b0d2bdd" + }, + { + "version": "8.5-rc-4", + "buildTime": "20231124091900+0000", + "commitId": "ff7bf18d018392c80aead72f93d4530726e9504d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.5-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.5-rc-4-bin.zip.sha256", + "checksum": "614587c584e4d97a00368c8f5e6749d3e38345b7810bcfef1c7b8e002127b3a3", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.5-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "d3b261c2820e9e3d8d639ed084900f11f4a86050a8f83342ade7b6bc9b0d2bdd" + }, + { + "version": "8.5-rc-3", + "buildTime": "20231117134310+0000", + "commitId": "d8463b2b64aa2952b741fcb1a7da11710ffc2c5a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.5-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.5-rc-3-bin.zip.sha256", + "checksum": "7207f771dac48bfe19d5990c8f1e7e5f3d5e8b2b98e09ad9a4c484af537f86b2", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.5-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "d3b261c2820e9e3d8d639ed084900f11f4a86050a8f83342ade7b6bc9b0d2bdd" + }, + { + "version": "8.5-rc-2", + "buildTime": "20231114141630+0000", + "commitId": "9bfdf5b90ff69b6775c2fe163808a99eac2dc543", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.5-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.5-rc-2-bin.zip.sha256", + "checksum": "547d33f88a30b6d9666c79fde614b1e5a1a3e2f86216bc70c4c7e3421f0d4627", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.5-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "d3b261c2820e9e3d8d639ed084900f11f4a86050a8f83342ade7b6bc9b0d2bdd" + }, + { + "version": "8.5-rc-1", + "buildTime": "20231107155056+0000", + "commitId": "3dc993b32164f697b540e88c2426977e097d3aff", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.5-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.5-rc-1-bin.zip.sha256", + "checksum": "8c74462b1d83f8b17c4838c925fc4c46d1fbb4467b18b8a17f5cdaaee45b7f09", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.5-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "d3b261c2820e9e3d8d639ed084900f11f4a86050a8f83342ade7b6bc9b0d2bdd" + }, + { + "version": "8.4", + "buildTime": "20231004205213+0000", + "commitId": "e9251e572c9bd1d01e503a0dfdf43aedaeecdc3f", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.4-bin.zip.sha256", + "checksum": "3e1af3ae886920c3ac87f7a91f816c0c7c436f276a6eefdb3da152100fef72ae", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.4-wrapper.jar.sha256", + "wrapperChecksum": "0336f591bc0ec9aa0c9988929b93ecc916b3c1d52aed202c7381db144aa0ef15" + }, + { + "version": "7.6.3", + "buildTime": "20231004155947+0000", + "commitId": "1694251d59e0d4752d547e1fd5b5020b798a7e71", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.6.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.6.3-bin.zip.sha256", + "checksum": "740c2e472ee4326c33bf75a5c9f5cd1e69ecf3f9b580f6e236c86d1f3d98cfac", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.6.3-wrapper.jar.sha256", + "wrapperChecksum": "14dfa961b6704bb3decdea06502781edaa796a82e6da41cd2e1962b14fbe21a3" + }, + { + "version": "8.4-rc-3", + "buildTime": "20230929135700+0000", + "commitId": "7788100a0736a67692b30f53fe3b2442dbb9816d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.4-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.4-rc-3-bin.zip.sha256", + "checksum": "cb1945fa73552ddf99cf32ec2fcd065771fcb6bf4a366b9408e79f9561601853", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.4-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "0336f591bc0ec9aa0c9988929b93ecc916b3c1d52aed202c7381db144aa0ef15" + }, + { + "version": "8.4-rc-2", + "buildTime": "20230926114721+0000", + "commitId": "21dd48a6b94a5dfff7fa19c4e3c65b5522c75cb3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.4-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.4-rc-2-bin.zip.sha256", + "checksum": "f7dca5ae44f1a45ee7950fa3e01418a664eaa04136ff594a99bebf7ee353a943", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.4-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "0336f591bc0ec9aa0c9988929b93ecc916b3c1d52aed202c7381db144aa0ef15" + }, + { + "version": "8.4-rc-1", + "buildTime": "20230920065917+0000", + "commitId": "ebdfd04b7e181147b7ce87af0f72b950261085f7", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.4-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.4-rc-1-bin.zip.sha256", + "checksum": "7eec87a597388fb67df02d0cc4f8bc566abd5adf5838dab1f4db0e83fa96bd4f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.4-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "0336f591bc0ec9aa0c9988929b93ecc916b3c1d52aed202c7381db144aa0ef15" + }, + { + "version": "8.3", + "buildTime": "20230817070647+0000", + "commitId": "8afbf24b469158b714b36e84c6f4d4976c86fcd5", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.3-bin.zip.sha256", + "checksum": "591855b517fc635b9e04de1d05d5e76ada3f89f5fc76f87978d1b245b4f69225", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.3-wrapper.jar.sha256", + "wrapperChecksum": "0336f591bc0ec9aa0c9988929b93ecc916b3c1d52aed202c7381db144aa0ef15" + }, + { + "version": "8.3-rc-4", + "buildTime": "20230814082841+0000", + "commitId": "45d5bd72d0d837799c297e94bc1fbca9fee637eb", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.3-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.3-rc-4-bin.zip.sha256", + "checksum": "e4d88e0e636799134179376b5b058b0c691e58a1e9150c1d0a3898ffd402abaa", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.3-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "0336f591bc0ec9aa0c9988929b93ecc916b3c1d52aed202c7381db144aa0ef15" + }, + { + "version": "8.3-rc-3", + "buildTime": "20230802172145+0000", + "commitId": "5137ec0e9b3df9f4d40bc9e055d5f0b1024d9327", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.3-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.3-rc-3-bin.zip.sha256", + "checksum": "7af08310663d2849d8288d075cc2b74ca56dbacfa7ae60257c02aab0e8fe3111", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.3-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "0336f591bc0ec9aa0c9988929b93ecc916b3c1d52aed202c7381db144aa0ef15" + }, + { + "version": "8.3-rc-2", + "buildTime": "20230726152039+0000", + "commitId": "c48101dc7f9c766efa8206574aa9c2195d2b7960", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.3-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.3-rc-2-bin.zip.sha256", + "checksum": "222818637ce0a4cb82e322bf847ea49ac319aecdb363d81acabd9e81315d08f6", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.3-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "0336f591bc0ec9aa0c9988929b93ecc916b3c1d52aed202c7381db144aa0ef15" + }, + { + "version": "8.3-rc-1", + "buildTime": "20230719075404+0000", + "commitId": "d036e6078ed80de7a7e1ad6a17aae6be115b5d0d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.3-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.3-rc-1-bin.zip.sha256", + "checksum": "05d10c69f03ef1ed1569171e637fc1737828bceaf4bb4a1e87407a4a7d1c01e6", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.3-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "0336f591bc0ec9aa0c9988929b93ecc916b3c1d52aed202c7381db144aa0ef15" + }, + { + "version": "8.2.1", + "buildTime": "20230710121235+0000", + "commitId": "a38ec64d3c4612da9083cc506a1ccb212afeecaa", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.2.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.2.1-bin.zip.sha256", + "checksum": "03ec176d388f2aa99defcadc3ac6adf8dd2bce5145a129659537c0874dea5ad1", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.2.1-wrapper.jar.sha256", + "wrapperChecksum": "a8451eeda314d0568b5340498b36edf147a8f0d692c5ff58082d477abe9146e4" + }, + { + "version": "8.2", + "buildTime": "20230630180230+0000", + "commitId": "5f4a070a62a31a17438ac998c2b849f4f6892877", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.2-bin.zip.sha256", + "checksum": "38f66cd6eef217b4c35855bb11ea4e9fbc53594ccccb5fb82dfd317ef8c2c5a3", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.2-wrapper.jar.sha256", + "wrapperChecksum": "a8451eeda314d0568b5340498b36edf147a8f0d692c5ff58082d477abe9146e4" + }, + { + "version": "7.6.2", + "buildTime": "20230630154251+0000", + "commitId": "dab132169006b16e7ada4ab2456e0c9d6415b52a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.6.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.6.2-bin.zip.sha256", + "checksum": "a01b6587e15fe7ed120a0ee299c25982a1eee045abd6a9dd5e216b2f628ef9ac", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.6.2-wrapper.jar.sha256", + "wrapperChecksum": "14dfa961b6704bb3decdea06502781edaa796a82e6da41cd2e1962b14fbe21a3" + }, + { + "version": "8.2-rc-3", + "buildTime": "20230628070204+0000", + "commitId": "66d698f44a1d71c01e80664f984a5c86a83bd28d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.2-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.2-rc-3-bin.zip.sha256", + "checksum": "345389a51e2ec796b1102c1ce513ac8f571978fd698e3fb10b6e0457091b6edc", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.2-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "a8451eeda314d0568b5340498b36edf147a8f0d692c5ff58082d477abe9146e4" + }, + { + "version": "8.2-rc-2", + "buildTime": "20230606183136+0000", + "commitId": "5b4d99e3745b5e4c9929621c9377b6f8fb97f3fd", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.2-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.2-rc-2-bin.zip.sha256", + "checksum": "0906569bf96e8ebefbc1aa56318c74aeafd9710455b2817c70d709c5d77785c4", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.2-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "5c9a1a6f50b4f8c0264b1ac69013bef9f8363733275fafa56c70c84be3276bb8" + }, + { + "version": "8.2-rc-1", + "buildTime": "20230531181205+0000", + "commitId": "2a2778f51363d9574f808ae80d34d8b5bd99d98b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.2-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.2-rc-1-bin.zip.sha256", + "checksum": "f93546eb9b9ca57eb1d22f6e6d50a181e70720d4ba6d6af8fc96037fe4c8daf6", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.2-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "55e949185c26ba3ddcd2c6a4217d043bfa0ce3cc002bbbb52b709a181a513e81" + }, + { + "version": "8.2-milestone-1", + "buildTime": "20230426164225+0000", + "commitId": "0f7d6b14b563ca06bfd34d2dde25d0f1f93279e3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.2", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.2-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.2-milestone-1-bin.zip.sha256", + "checksum": "4d06de8a5bfe1d53646d78cbe193ceae1d16b2145f522b3724b69d394c38e44f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.2-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "55e949185c26ba3ddcd2c6a4217d043bfa0ce3cc002bbbb52b709a181a513e81" + }, + { + "version": "8.1.1", + "buildTime": "20230421123126+0000", + "commitId": "1cf537a851c635c364a4214885f8b9798051175b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.1.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.1.1-bin.zip.sha256", + "checksum": "e111cb9948407e26351227dabce49822fb88c37ee72f1d1582a69c68af2e702f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.1.1-wrapper.jar.sha256", + "wrapperChecksum": "ed2c26eba7cfb93cc2b7785d05e534f07b5b48b5e7fc941921cd098628abca58" + }, + { + "version": "8.1", + "buildTime": "20230412120745+0000", + "commitId": "40ba32cde9d6daf2b92c39376d2758909dd6b813", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.1-bin.zip.sha256", + "checksum": "a62c5f99585dd9e1f95dab7b9415a0e698fa9dd1e6c38537faa81ac078f4d23e", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.1-wrapper.jar.sha256", + "wrapperChecksum": "ed2c26eba7cfb93cc2b7785d05e534f07b5b48b5e7fc941921cd098628abca58" + }, + { + "version": "8.1-rc-4", + "buildTime": "20230411093751+0000", + "commitId": "a63ac23cdbaf9c9e5e43b9fdb7fa478780fc40b2", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.1-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.1-rc-4-bin.zip.sha256", + "checksum": "75cbca1c36f3695ec15b39ac1f22103e5c84ba949b672497e70e9a99dc2ca195", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.1-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "ed2c26eba7cfb93cc2b7785d05e534f07b5b48b5e7fc941921cd098628abca58" + }, + { + "version": "8.1-rc-3", + "buildTime": "20230404095841+0000", + "commitId": "7eb689e589a42dcabd23aa8ccffa9a020c2010d2", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.1-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.1-rc-3-bin.zip.sha256", + "checksum": "4087d4c8eb90335f7c635082424cf34480721544ad36b595dcf8c143c653c149", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.1-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "ed2c26eba7cfb93cc2b7785d05e534f07b5b48b5e7fc941921cd098628abca58" + }, + { + "version": "8.1-rc-2", + "buildTime": "20230329080943+0000", + "commitId": "b7cde67fa9c3fcbf03a4cefdb2214d52963a8678", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.1-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.1-rc-2-bin.zip.sha256", + "checksum": "c8e041dcbf7b747bf967b607942d8cf9a7cf992f4c05c90b1c8826901c183617", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.1-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "ed2c26eba7cfb93cc2b7785d05e534f07b5b48b5e7fc941921cd098628abca58" + }, + { + "version": "8.1-rc-1", + "buildTime": "20230320143921+0000", + "commitId": "cd44247d421f76903decf83a0efad7bbc1552dc1", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.1-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.1-rc-1-bin.zip.sha256", + "checksum": "0a0143227c5a1699753e5e37f0c03bd784b3bd6c617d19e4f0c4df12c32b0fe2", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.1-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "ed2c26eba7cfb93cc2b7785d05e534f07b5b48b5e7fc941921cd098628abca58" + }, + { + "version": "8.0.2", + "buildTime": "20230303164137+0000", + "commitId": "7d6581558e226a580d91d399f7dfb9e3095c2b1d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0.2-bin.zip.sha256", + "checksum": "ff7bf6a86f09b9b2c40bb8f48b25fc19cf2b2664fd1d220cd7ab833ec758d0d7", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0.2-wrapper.jar.sha256", + "wrapperChecksum": "91941f522fbfd4431cf57e445fc3d5200c85f957bda2de5251353cf11174f4b5" + }, + { + "version": "7.6.1", + "buildTime": "20230224135442+0000", + "commitId": "3905fe8ac072bbd925c70ddbddddf4463341f4b4", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.6.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.6.1-bin.zip.sha256", + "checksum": "6147605a23b4eff6c334927a86ff3508cb5d6722cd624c97ded4c2e8640f1f87", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.6.1-wrapper.jar.sha256", + "wrapperChecksum": "c5a643cf80162e665cc228f7b16f343fef868e47d3a4836f62e18b7e17ac018a" + }, + { + "version": "6.9.4", + "buildTime": "20230222084312+0000", + "commitId": "7f9380f27d6dc6a1ee6dfc466b834b0408d0b0c4", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.9.4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.9.4-bin.zip.sha256", + "checksum": "3e240228538de9f18772a574e99a0ba959e83d6ef351014381acd9631781389a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.9.4-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "8.0.1", + "buildTime": "20230217200948+0000", + "commitId": "68959bf76cef4d28c678f2e2085ee84e8647b77a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0.1-bin.zip.sha256", + "checksum": "1b6b558be93f29438d3df94b7dfee02e794b94d9aca4611a92cdb79b6b88e909", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0.1-wrapper.jar.sha256", + "wrapperChecksum": "91941f522fbfd4431cf57e445fc3d5200c85f957bda2de5251353cf11174f4b5" + }, + { + "version": "8.0", + "buildTime": "20230213131521+0000", + "commitId": "62ab9b7c7f884426cf79fbedcf07658b2dbe9e97", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0-bin.zip.sha256", + "checksum": "4159b938ec734a8388ce03f52aa8f3c7ed0d31f5438622545de4f83a89b79788", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0-wrapper.jar.sha256", + "wrapperChecksum": "91941f522fbfd4431cf57e445fc3d5200c85f957bda2de5251353cf11174f4b5" + }, + { + "version": "8.0-rc-5", + "buildTime": "20230209233943+0000", + "commitId": "47a354e154889b2656373419e3571410291404a7", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-5-bin.zip.sha256", + "checksum": "c01b46042141d23aea23ae5b09a12410a7996bac8c7fdf367547acd1b3c772d9", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-5-wrapper.jar.sha256", + "wrapperChecksum": "91941f522fbfd4431cf57e445fc3d5200c85f957bda2de5251353cf11174f4b5" + }, + { + "version": "8.0-rc-4", + "buildTime": "20230209172637+0000", + "commitId": "5eb67a82c4283959484a3b93cb3ede1a08a2504b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-4-bin.zip.sha256", + "checksum": "c1e2a61fd7257fdb869020808930487a69179488490a27664b06e472ecbf4ed7", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "91941f522fbfd4431cf57e445fc3d5200c85f957bda2de5251353cf11174f4b5" + }, + { + "version": "8.0-rc-3", + "buildTime": "20230206094910+0000", + "commitId": "0acb34c510be84f8fad1923e3a62c17eecbc886a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-3-bin.zip.sha256", + "checksum": "9fb87bbe73f963a4c23daede3a5ed78e7ae770f3e980d3cb15d8df04518b542d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "91941f522fbfd4431cf57e445fc3d5200c85f957bda2de5251353cf11174f4b5" + }, + { + "version": "8.0-rc-2", + "buildTime": "20230117102518+0000", + "commitId": "8dcd942c9efaac6cb7f577f3b7a7521d0801704d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-2-bin.zip.sha256", + "checksum": "28ebe9afc20564bcdc39bfe36f6b60a373e40be2c3c307a0028b545b8ccf6ba0", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "91941f522fbfd4431cf57e445fc3d5200c85f957bda2de5251353cf11174f4b5" + }, + { + "version": "8.0-rc-1", + "buildTime": "20221229123250+0000", + "commitId": "ae81f85f0e184196c188b96016eb3d9e38f60673", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "8.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-1-bin.zip.sha256", + "checksum": "d5bb29e784426547e4f455fbc0e6512d7a6a67d7d890cf24d601309287128b79", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "91941f522fbfd4431cf57e445fc3d5200c85f957bda2de5251353cf11174f4b5" + }, + { + "version": "8.0-milestone-6", + "buildTime": "20221220081158+0000", + "commitId": "6abc8d20bdd7b25edb3a24f62454f0e56257f552", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-6-bin.zip.sha256", + "checksum": "5db785194950909ded9d2bcad3cd6874e7578bc93c11bf1aaa2d3e89aa8c9deb", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-6-wrapper.jar.sha256", + "wrapperChecksum": "91941f522fbfd4431cf57e445fc3d5200c85f957bda2de5251353cf11174f4b5" + }, + { + "version": "8.0-milestone-5", + "buildTime": "20221208181122+0000", + "commitId": "3fb0faa58efc3d984465da3316663a0b89e0b728", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-5-bin.zip.sha256", + "checksum": "0288540bc5ad21c4c921743464da8b7c8c8403750ddb20d050dc088282814664", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-5-wrapper.jar.sha256", + "wrapperChecksum": "91941f522fbfd4431cf57e445fc3d5200c85f957bda2de5251353cf11174f4b5" + }, + { + "version": "8.0-milestone-4", + "buildTime": "20221201090656+0000", + "commitId": "d06a65fb5320997b66461bbfa74266aa050a3b1d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-4-bin.zip.sha256", + "checksum": "8ecb39c34977c75381299045cb238f6e4d3368e67b7221fcd9ac34ad344e4b63", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-4-wrapper.jar.sha256", + "wrapperChecksum": "577b2de036000db2e0f04f2ec842a4f1e648c8b6f9c87f29a8d896acb1732538" + }, + { + "version": "7.6", + "buildTime": "20221125133510+0000", + "commitId": "daece9dbc5b79370cc8e4fd6fe4b2cd400e150a8", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.6-bin.zip.sha256", + "checksum": "7ba68c54029790ab444b39d7e293d3236b2632631fb5f2e012bb28b4ff669e4b", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.6-wrapper.jar.sha256", + "wrapperChecksum": "c5a643cf80162e665cc228f7b16f343fef868e47d3a4836f62e18b7e17ac018a" + }, + { + "version": "7.6-rc-4", + "buildTime": "20221122094210+0000", + "commitId": "87a8037940defe7c18ef332efac18f0405baa37b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.6-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.6-rc-4-bin.zip.sha256", + "checksum": "eb93e4f8abf8db59d5bd1bbdd716f971d010bfc82fd01fe46905d499305718a0", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.6-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "c5a643cf80162e665cc228f7b16f343fef868e47d3a4836f62e18b7e17ac018a" + }, + { + "version": "7.6-rc-3", + "buildTime": "20221111142340+0000", + "commitId": "6c339330ec227cafd6049ff3245ccef45ae8c7d4", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.6-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.6-rc-3-bin.zip.sha256", + "checksum": "21e2bf8e6c6ac310182c817776ffc6cca80142f5de4b2b4151f9f72b9ec35b50", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.6-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "c5a643cf80162e665cc228f7b16f343fef868e47d3a4836f62e18b7e17ac018a" + }, + { + "version": "7.6-rc-2", + "buildTime": "20221108130606+0000", + "commitId": "9e7785b963b6627bf6a0d8599d971f4c56f22a5a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.6-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.6-rc-2-bin.zip.sha256", + "checksum": "1a0c892659d3eec2a33ab23857784ee3c9674b681cab068f67780da412d3f61f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.6-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "c5a643cf80162e665cc228f7b16f343fef868e47d3a4836f62e18b7e17ac018a" + }, + { + "version": "8.0-milestone-3", + "buildTime": "20221028140616+0000", + "commitId": "fbe9699332c66d9dc7d28aaa4982f7ffc7aab81a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-3-bin.zip.sha256", + "checksum": "ad9460264653b6ed16cc8aebf9ee4dc12d1a301351323233eb905fce5d522ab4", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-3-wrapper.jar.sha256", + "wrapperChecksum": "c5a643cf80162e665cc228f7b16f343fef868e47d3a4836f62e18b7e17ac018a" + }, + { + "version": "7.6-rc-1", + "buildTime": "20221028075211+0000", + "commitId": "62973455a8df25d003949f3f573593cd10d083a3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.6-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.6-rc-1-bin.zip.sha256", + "checksum": "458550f35b74ad9fbbdf3a1eb69c3f4faef7944cffa3d7fb91b46327875b0b17", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.6-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "c5a643cf80162e665cc228f7b16f343fef868e47d3a4836f62e18b7e17ac018a" + }, + { + "version": "6.9.3", + "buildTime": "20221017074402+0000", + "commitId": "a6198e44749b18b37e26b3b3467db17e034bcff4", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.9.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.9.3-bin.zip.sha256", + "checksum": "dcf350b8ae1aa192fc299aed6efc77b43825d4fedb224c94118ae7faf5fb035d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.9.3-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "8.0-milestone-2", + "buildTime": "20221009102113+0000", + "commitId": "2fa96f7c0db3ece3385edf57f44e89589cd59486", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-2-bin.zip.sha256", + "checksum": "7fe8e8147543e80b4e1a11dfaf819d80d5bd32d1d922b11944e768a15c7c6a7b", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-2-wrapper.jar.sha256", + "wrapperChecksum": "c5a643cf80162e665cc228f7b16f343fef868e47d3a4836f62e18b7e17ac018a" + }, + { + "version": "8.0-milestone-1", + "buildTime": "20220923110128+0000", + "commitId": "60cd44b5204ccedca6bf0f194bc4b17b8a3a7ad5", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "8.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-1-bin.zip.sha256", + "checksum": "573715e1f25829fc3c2ad2e97578e9f8433050da87ddab5413e587663a621ebe", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-8.0-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "c5a643cf80162e665cc228f7b16f343fef868e47d3a4836f62e18b7e17ac018a" + }, + { + "version": "7.6-milestone-1", + "buildTime": "20220923093944+0000", + "commitId": "d4f94bd96c2dfb7374cd71abbc4b1f628a2d6a2b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "7.6", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.6-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.6-milestone-1-bin.zip.sha256", + "checksum": "9ca7bc6d09c52b365cc61f4ef9e0410f79f6122bc126786c76847b987a4b7cbe", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.6-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "c5a643cf80162e665cc228f7b16f343fef868e47d3a4836f62e18b7e17ac018a" + }, + { + "version": "7.5.1", + "buildTime": "20220805211756+0000", + "commitId": "d1daa0cbf1a0103000b71484e1dbfe096e095918", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.5.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.5.1-bin.zip.sha256", + "checksum": "f6b8596b10cce501591e92f229816aa4046424f3b24d771751b06779d58c8ec4", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.5.1-wrapper.jar.sha256", + "wrapperChecksum": "91a239400bb638f36a1795d8fdf7939d532cdc7d794d1119b7261aac158b1e60" + }, + { + "version": "7.5", + "buildTime": "20220714124815+0000", + "commitId": "c7db7b958189ad2b0c1472b6fe663e6d654a5103", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.5-bin.zip.sha256", + "checksum": "cb87f222c5585bd46838ad4db78463a5c5f3d336e5e2b98dc7c0c586527351c2", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.5-wrapper.jar.sha256", + "wrapperChecksum": "91a239400bb638f36a1795d8fdf7939d532cdc7d794d1119b7261aac158b1e60" + }, + { + "version": "7.5-rc-5", + "buildTime": "20220712114039+0000", + "commitId": "0da5e9cce20a3cb79ede91fbc52d3efec9e309a9", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-5-bin.zip.sha256", + "checksum": "c0bbfe570634634271f472aa30ec8d059a2e97b920be687d4c6446efbad9cc58", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-5-wrapper.jar.sha256", + "wrapperChecksum": "91a239400bb638f36a1795d8fdf7939d532cdc7d794d1119b7261aac158b1e60" + }, + { + "version": "7.5-rc-4", + "buildTime": "20220706171202+0000", + "commitId": "a641d1caebe02ea109a69ca5fc0f59c20bceb9de", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-4-bin.zip.sha256", + "checksum": "d98c4322d882e7b115fbf2a33ccd3e03677653b88c4f245e33cbea28b531a173", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "91a239400bb638f36a1795d8fdf7939d532cdc7d794d1119b7261aac158b1e60" + }, + { + "version": "7.5-rc-3", + "buildTime": "20220629120328+0000", + "commitId": "db02cfd2c0a9d1503dec236222fcc5b545413102", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-3-bin.zip.sha256", + "checksum": "d10d8e6206d613313379834f3ed94ec7b781790f22edd44b0f2afa76708e2050", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "91a239400bb638f36a1795d8fdf7939d532cdc7d794d1119b7261aac158b1e60" + }, + { + "version": "7.5-rc-2", + "buildTime": "20220610165005+0000", + "commitId": "e97f154bbdce2d3da1d46161417f7a7eaa9e00f2", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-2-bin.zip.sha256", + "checksum": "ba761aa1563f5d893d1a6e7ddca48bbdc4385fdd527974e6472b873b7eae9a32", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "91a239400bb638f36a1795d8fdf7939d532cdc7d794d1119b7261aac158b1e60" + }, + { + "version": "7.5-rc-1", + "buildTime": "20220512190923+0000", + "commitId": "8d531f6b22fb3a97fb623f949c5e7bae8a2e1fe2", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-1-bin.zip.sha256", + "checksum": "8ba57a37e1e0b8c415e4d91718d51035223aa73131cf719a50c95a2a88269eb2", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.5-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "91a239400bb638f36a1795d8fdf7939d532cdc7d794d1119b7261aac158b1e60" + }, + { + "version": "7.4.2", + "buildTime": "20220331152529+0000", + "commitId": "540473b8118064efcc264694cbcaa4b677f61041", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.4.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.4.2-bin.zip.sha256", + "checksum": "29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.4.2-wrapper.jar.sha256", + "wrapperChecksum": "575098db54a998ff1c6770b352c3b16766c09848bee7555dab09afc34e8cf590" + }, + { + "version": "7.4.1", + "buildTime": "20220309150447+0000", + "commitId": "36dc52588e09b4b72f2010bc07599e0ee0434e2e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.4.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.4.1-bin.zip.sha256", + "checksum": "e5444a57cda4a95f90b0c9446a9e1b47d3d7f69057765bfb54bd4f482542d548", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.4.1-wrapper.jar.sha256", + "wrapperChecksum": "575098db54a998ff1c6770b352c3b16766c09848bee7555dab09afc34e8cf590" + }, + { + "version": "7.4", + "buildTime": "20220208095838+0000", + "commitId": "f0d9291c04b90b59445041eaa75b2ee744162586", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.4-bin.zip.sha256", + "checksum": "8cc27038d5dbd815759851ba53e70cf62e481b87494cc97cfd97982ada5ba634", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.4-wrapper.jar.sha256", + "wrapperChecksum": "575098db54a998ff1c6770b352c3b16766c09848bee7555dab09afc34e8cf590" + }, + { + "version": "7.4-rc-2", + "buildTime": "20220202150044+0000", + "commitId": "88ab9b652933bc3b2e3161b31ad8b8f4f0516351", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.4-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.4-rc-2-bin.zip.sha256", + "checksum": "21491c9f0656e1529ccb39cbd587d01c33ba00d25f994b10240748ed0d45894a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.4-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "575098db54a998ff1c6770b352c3b16766c09848bee7555dab09afc34e8cf590" + }, + { + "version": "7.4-rc-1", + "buildTime": "20220117201507+0000", + "commitId": "693625f25f2210d1a3ca866897d69ac221de6811", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.4-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.4-rc-1-bin.zip.sha256", + "checksum": "b2a452bc37637aa453f0f3fb526240caed02878c47a9736f3059590605893bdb", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.4-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "575098db54a998ff1c6770b352c3b16766c09848bee7555dab09afc34e8cf590" + }, + { + "version": "7.3.3", + "buildTime": "20211222123754+0000", + "commitId": "6f556c80f945dc54b50e0be633da6c62dbe8dc71", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.3.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.3.3-bin.zip.sha256", + "checksum": "b586e04868a22fd817c8971330fec37e298f3242eb85c374181b12d637f80302", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.3.3-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.3.3-rc-1", + "buildTime": "20211222090657+0000", + "commitId": "6f556c80f945dc54b50e0be633da6c62dbe8dc71", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.3.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.3.3-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.3.3-rc-1-bin.zip.sha256", + "checksum": "07a1cd283d6cfe437eb08fe08936dc1af5f12946e67dc9f5e0a9f4b948ebfd3a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.3.3-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "6.9.2", + "buildTime": "20211221172537+0000", + "commitId": "5d94aa68c0fdbe443838bb977080e3b9f273e889", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.9.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.9.2-bin.zip.sha256", + "checksum": "8b356fd8702d5ffa2e066ed0be45a023a779bba4dd1a68fd11bc2a6bdc981e8f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.9.2-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "7.3.2", + "buildTime": "20211215112231+0000", + "commitId": "26c186eb63b2b02e68d83b0dbc6ec69ab118653a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.3.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.3.2-bin.zip.sha256", + "checksum": "23b89f8eac363f5f4b8336e0530c7295c55b728a9caa5268fdd4a532610d5392", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.3.2-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.3.1", + "buildTime": "20211201154220+0000", + "commitId": "2c62cec93e0b15a7d2cd68746f3348796d6d42bd", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.3.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.3.1-bin.zip.sha256", + "checksum": "9afb3ca688fc12c761a0e9e4321e4d24e977a4a8916c8a768b1fe05ddb4d6b66", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.3.1-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.3", + "buildTime": "20211109204036+0000", + "commitId": "96754b8c44399658178a768ac764d727c2addb37", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.3-bin.zip.sha256", + "checksum": "de8f52ad49bdc759164f72439a3bf56ddb1589c4cde802d3cec7d6ad0e0ee410", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.3-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.3-rc-5", + "buildTime": "20211105184337+0000", + "commitId": "426f267f7b768154fd63b27e055ba56b357e6e4e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-5-bin.zip.sha256", + "checksum": "dca199cee2553ec2497e840bf17969e56d4f99df661a693740b90de7ed0efbeb", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-5-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.3-rc-4", + "buildTime": "20211105160540+0000", + "commitId": "426f267f7b768154fd63b27e055ba56b357e6e4e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-4-bin.zip.sha256", + "checksum": "488d250f4a1ae7744dcdf53fef0708f4a3e373023b8c134eda1be98aba4ed260", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.3-rc-3", + "buildTime": "20211026162420+0000", + "commitId": "c49d04ba7bd0708b11bf2ecf2e2d0bbd12a5123a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-3-bin.zip.sha256", + "checksum": "d57eb720003db00f85915c48ff4a5ac3c7e8a8a34bd34ced16ca0c7a31c10110", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.3-rc-2", + "buildTime": "20211020220023+0000", + "commitId": "93609146327efb378cbea19477ed638d03be1e57", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-2-bin.zip.sha256", + "checksum": "e6a7b81aa2fd2fa05efba3cf7d0c79d629b4d3b189aa4d4b57729933a211af79", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.3-rc-1", + "buildTime": "20211012072418+0000", + "commitId": "d71b6cdb688f94d57ff4c27c7b185afbcb338a5f", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-1-bin.zip.sha256", + "checksum": "d23a3a902b3c4a8cc6952ff236fb83279a266aec1854b01286ed04788a5d3d9a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.3-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "6.9.1", + "buildTime": "20210820111518+0000", + "commitId": "f0ddb54aaae0e44f0a7209c3c0274d506ea742a0", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.9.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.9.1-bin.zip.sha256", + "checksum": "8c12154228a502b784f451179846e518733cf856efc7d45b2e6691012977b2fe", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.9.1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "7.2", + "buildTime": "20210817095903+0000", + "commitId": "a773786b58bb28710e3dc96c4d1a7063628952ad", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.2-bin.zip.sha256", + "checksum": "f581709a9c35e9cb92e16f585d2c4bc99b2b1a5f85d2badbd3dc6bff59e1e6dd", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.2-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.2-rc-3", + "buildTime": "20210812075909+0000", + "commitId": "c85cebe8534173e68d3c36cbf78ee1eaaa408301", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.2-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.2-rc-3-bin.zip.sha256", + "checksum": "12215a4146ab05309893c24fb7d0c32366ab6b548e2de84185d781ec639a6283", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.2-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.2-rc-2", + "buildTime": "20210805122137+0000", + "commitId": "9a8406d602d05d95ddea924dd2443954f9b9e0c8", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.2-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.2-rc-2-bin.zip.sha256", + "checksum": "e7ed72455ea34234ffb244621d384c94e86c4adfcb0bc9e7c60ff4849ee69a77", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.2-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.2-rc-1", + "buildTime": "20210729075128+0000", + "commitId": "d25e5bd8039ad18a2d63706b5a97cdc12e906ac3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.2-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.2-rc-1-bin.zip.sha256", + "checksum": "fb0e3b9890cbe993819154d099b9cbcfdfccb4a6bf78f9b6189871e36663ce44", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.2-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.1.1", + "buildTime": "20210702121643+0000", + "commitId": "774525a055494e0ece39f522ac7ad17498ce032c", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.1.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.1.1-bin.zip.sha256", + "checksum": "bf8b869948901d422e9bb7d1fa61da6a6e19411baa7ad6ee929073df85d6365d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.1.1-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.1", + "buildTime": "20210614144726+0000", + "commitId": "989ccc9952b140ee6ab88870e8a12f1b2998369e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.1-bin.zip.sha256", + "checksum": "2debee19271e1b82c6e41137d78e44e6e841035230a1a169ca47fd3fb09ed87b", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.1-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.1-rc-2", + "buildTime": "20210608153520+0000", + "commitId": "79bbe8b8ea2f705f4af44f8e88af0d67fee6a898", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.1-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.1-rc-2-bin.zip.sha256", + "checksum": "caa8e323577de2fa421b47dded5278e7376c2bb6420221fbaf7908dfa9be8657", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.1-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.1-rc-1", + "buildTime": "20210531095845+0000", + "commitId": "c2d15c6444215f4b5a788a110922e3ee48a14f08", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.1-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.1-rc-1-bin.zip.sha256", + "checksum": "bac27c9878c4aa5b4b35f92105ca71de2ad39c323bc81117e611c65f2dffd941", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.1-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89" + }, + { + "version": "7.0.2", + "buildTime": "20210514120231+0000", + "commitId": "1ef1b260d39daacbf9357f9d8594a8a743e2152e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.0.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.0.2-bin.zip.sha256", + "checksum": "0e46229820205440b48a5501122002842b82886e76af35f0f3a069243dca4b3c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.0.2-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "7.0.1", + "buildTime": "20210510160858+0000", + "commitId": "67e618faef187783dadd03a34fdab9dc71b85b19", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.0.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.0.1-bin.zip.sha256", + "checksum": "dccda8aa069563c8ba2f6cdfd0777df0e34a5b4d15138ca8b9757e94f4e8a8cb", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.0.1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.9", + "buildTime": "20210507072853+0000", + "commitId": "afe2e24ababc7b0213ccffff44970aa18035fc0e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.9-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.9-bin.zip.sha256", + "checksum": "765442b8069c6bee2ea70713861c027587591c6b1df2c857a23361512560894e", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.9-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.9-rc-2", + "buildTime": "20210505141217+0000", + "commitId": "56bca94e761b37ff00dfa1afdeda4bed4f15ae45", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.9-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.9-rc-2-bin.zip.sha256", + "checksum": "ce62238c6f84286a524590cb60706b7e6ecf00c3be5bddfa0c78345b94d0d127", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.9-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.9-rc-1", + "buildTime": "20210427125445+0000", + "commitId": "b110653415a762d00576628358f6bf6b9edeff25", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.9-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.9-rc-1-bin.zip.sha256", + "checksum": "0edea03c77d94adbbb02c77a8f20c73afb8caf206f364727be0517136f6fb347", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.9-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "7.0", + "buildTime": "20210409222731+0000", + "commitId": "d5661e3f0e07a8caff705f1badf79fb5df8022c4", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.0-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.0-bin.zip.sha256", + "checksum": "eb8b89184261025b0430f5b2233701ff1377f96da1ef5e278af6ae8bac5cc305", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.0-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "7.0-rc-2", + "buildTime": "20210401212639+0000", + "commitId": "912a3368b654b71250dfc92234da35a20d620393", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.0-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.0-rc-2-bin.zip.sha256", + "checksum": "a5db0c919dfd184f7408ca761b438853b55ceab20d7ebb41ea3f72befd8bfb3f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.0-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "7.0-rc-1", + "buildTime": "20210323010230+0000", + "commitId": "f5bf7ade373b74058e49f07749083b4c3075549a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "7.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.0-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.0-rc-1-bin.zip.sha256", + "checksum": "12b807b5d6b065f05e0e47d8d00e9d55fe26d3cfc6cdb22d6825a93940edec90", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.0-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "7.0-milestone-3", + "buildTime": "20210313010321+0000", + "commitId": "2c491436533ea8ed227f70e9246801d92848ba4a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "7.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.0-milestone-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.0-milestone-3-bin.zip.sha256", + "checksum": "2e6b95b41001bd9f099b17a772c3308fe59356f8b7f995ffd7bf74400db0f13c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.0-milestone-3-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "7.0-milestone-2", + "buildTime": "20210223230254+0000", + "commitId": "b3ebdd96f5efa645c12a2b0af93025a715197e86", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "7.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.0-milestone-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.0-milestone-2-bin.zip.sha256", + "checksum": "a971b1cd25348e0dbeb56e4b7a7bb7dd06d7b092c166116f5247427f32fc4281", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.0-milestone-2-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.8.3", + "buildTime": "20210222161328+0000", + "commitId": "9e26b4a9ebb910eaa1b8da8ff8575e514bc61c78", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.8.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.8.3-bin.zip.sha256", + "checksum": "7faa7198769f872826c8ef4f1450f839ec27f0b4d5d1e51bade63667cbccd205", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.8.3-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.8.2", + "buildTime": "20210205125300+0000", + "commitId": "b9bd4a5c6026ac52f690eaf2829ee26563cad426", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.8.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.8.2-bin.zip.sha256", + "checksum": "8de6efc274ab52332a9c820366dd5cf5fc9d35ec7078fd70c8ec6913431ee610", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.8.2-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "7.0-milestone-1", + "buildTime": "20210203220023+0000", + "commitId": "d86fce68d4c6d73845da89f55390a3ef594d1767", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "7.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-7.0-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-7.0-milestone-1-bin.zip.sha256", + "checksum": "627fc72166c8a6ae9bf3e6d9b59c0a8cc4efe5cd5417a2fc525b5c7d05409aa5", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-7.0-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.8.1", + "buildTime": "20210122132008+0000", + "commitId": "31f14a87d93945024ab7a78de84102a3400fa5b2", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.8.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.8.1-bin.zip.sha256", + "checksum": "fd591a34af7385730970399f473afabdb8b28d57fd97d6625c388d090039d6fd", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.8.1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.8", + "buildTime": "20210108163846+0000", + "commitId": "b7e82460c5373e194fb478a998c4fcfe7da53a7e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.8-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.8-bin.zip.sha256", + "checksum": "e2774e6fb77c43657decde25542dea710aafd78c4022d19b196e7e78d79d8c6c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.8-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.8-rc-5", + "buildTime": "20210104202203+0000", + "commitId": "d668fa996848d20ec622982d226fe84a6a538dcf", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.8-rc-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.8-rc-5-bin.zip.sha256", + "checksum": "569bebddc0c174475cc25d708e54af793f25fd37e5a72e53674f8ef628b6ddfd", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.8-rc-5-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.8-rc-4", + "buildTime": "20201222084410+0000", + "commitId": "b8b010210c7645fd62d2d73ac876445f2c2b94ae", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.8-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.8-rc-4-bin.zip.sha256", + "checksum": "6cb03b71767b169eda987338091172cbc84eb0cd53a93c17e6661688411e267e", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.8-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.8-rc-3", + "buildTime": "20201217142452+0000", + "commitId": "183b081d53044028848dab1b00a05506c564dab2", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.8-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.8-rc-3-bin.zip.sha256", + "checksum": "6c929633a439d248413d3d1bff477195ee662ccadc6fdc31f6f50f8059a2be36", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.8-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.8-rc-1", + "buildTime": "20201126092543+0000", + "commitId": "6817ac1108f950a6ebd6ed3f74e4e86efef9246a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.8-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.8-rc-1-bin.zip.sha256", + "checksum": "155bafc3a46f81b7af481ad7dba391a3b9c12818f27da8684178ffeaa40e6d7e", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.8-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.7.1", + "buildTime": "20201116170924+0000", + "commitId": "2972ff02f3210d2ceed2f1ea880f026acfbab5c0", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.7.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.7.1-bin.zip.sha256", + "checksum": "3239b5ed86c3838a37d983ac100573f64c1f3fd8e1eb6c89fa5f9529b5ec091d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.7.1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.8-milestone-3", + "buildTime": "20201115200053+0000", + "commitId": "31e2ecb5fb775e8ec16cbd3fafe61cc29a27fb9d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "6.8", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.8-milestone-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.8-milestone-3-bin.zip.sha256", + "checksum": "47fa64cc30ab93a78901bdae68f33410da070c46f750f7e7978a6fb2a7b7ab50", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.8-milestone-3-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.8-milestone-2", + "buildTime": "20201028055518+0000", + "commitId": "d75d27c882fd80a18d853e0eb8aa0a41f9fdf6b0", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "6.8", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.8-milestone-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.8-milestone-2-bin.zip.sha256", + "checksum": "0e15751be3270c3cbff10742cc259cbd3b92f379204d645397541f676b0667f6", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.8-milestone-2-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.7", + "buildTime": "20201014161312+0000", + "commitId": "312ba9e0f4f8a02d01854d1ed743b79ed996dfd3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.7-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.7-bin.zip.sha256", + "checksum": "8ad57759019a9233dc7dc4d1a530cefe109dc122000d57f7e623f8cf4ba9dfc4", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.7-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.8-milestone-1", + "buildTime": "20201013065906+0000", + "commitId": "cffde3dcc3794fbe1f08373bf38df91b8a5abbc8", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "6.8", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.8-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.8-milestone-1-bin.zip.sha256", + "checksum": "cddca6851af8503eb7c8bf5ba778c4c9e878a7b6cf74708fda09cae1952656fc", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.8-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.7-rc-5", + "buildTime": "20201012190940+0000", + "commitId": "e019f250eece15efaddc7c812d56b34583950a40", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-5-bin.zip.sha256", + "checksum": "c7c33aa33d32e4bd68df71deb5c6d00f2c4675d88b8a14748661196a717dfe2c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-5-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.7-rc-4", + "buildTime": "20201008165738+0000", + "commitId": "40a302302ce9adfc1dc21dbc4cecae16dd980e5d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-4-bin.zip.sha256", + "checksum": "01b4f3804b6c3f15ff3eb39e56efae55e265b6007c9fa3bd58b83b2dc4697dc4", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.7-rc-3", + "buildTime": "20200930191651+0000", + "commitId": "836e96a80625c9c48b612e662e3b13bd2e2f4c3b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-3-bin.zip.sha256", + "checksum": "f4a236ffc777d6a4c25cdf7b1c45fe7024910afc65c88a9c9027aab9a765d295", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.7-rc-2", + "buildTime": "20200925201444+0000", + "commitId": "a57db4f9f8ee3f033fd1137d97d351d6b9c637fd", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-2-bin.zip.sha256", + "checksum": "34d87e1fe52cb50b9670cd7c817843273d40afa572a2d4f1b6f866daedfee8af", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.7-rc-1", + "buildTime": "20200911161705+0000", + "commitId": "fe783600075485236c778e073cad5640729cf8f5", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-1-bin.zip.sha256", + "checksum": "77822eaca04dd0e1c59065877ab22b96f0b0c5d5a65df8f63a58ae31f8938c8a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.7-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.6.1", + "buildTime": "20200825162912+0000", + "commitId": "f2d1fb54a951d8b11d25748e4711bec8d128d7e3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.6.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.6.1-bin.zip.sha256", + "checksum": "7873ed5287f47ca03549ab8dcb6dc877ac7f0e3d7b1eb12685161d10080910ac", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.6.1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.6", + "buildTime": "20200810220619+0000", + "commitId": "d119144684a0c301aea027b79857815659e431b9", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.6-bin.zip.sha256", + "checksum": "e6f83508f0970452f56197f610d13c5f593baaf43c0e3c6a571e5967be754025", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.6-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.6-rc-6", + "buildTime": "20200805195744+0000", + "commitId": "d4d3dd932ea87b4f1c470c93df56dfe00862d710", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-6-bin.zip.sha256", + "checksum": "5d24a11971f2324bf55899e9c5cd84e85fe94c63ff0456b10a53f93f7a14d288", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-6-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.6-rc-5", + "buildTime": "20200803185444+0000", + "commitId": "899b462147bbdf177c655173433336ffe6a93de9", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-5-bin.zip.sha256", + "checksum": "076f1c7d463cb8fa5fec51e1818e18fed9e6c5c6dc06ffa6325eef07a9746661", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-5-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.6-rc-4", + "buildTime": "20200730144824+0000", + "commitId": "b573ec13e0627bf831dcaa0cfc67403c0a93fb33", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-4-bin.zip.sha256", + "checksum": "f743d14deb36c6f1cfdf0480452e369d3098f63034c4e2c92fc1154740cb7bce", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.6-rc-3", + "buildTime": "20200724140409+0000", + "commitId": "13b5dcc4f294b395e61d937a3601fd47be38e76e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-3-bin.zip.sha256", + "checksum": "030078a5900466f172f1e59e0f3351280328693929de08ab10747103fb6d9faf", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.6-rc-2", + "buildTime": "20200720214344+0000", + "commitId": "ff063bb2d5573aeee22c08133a268c6545195153", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-2-bin.zip.sha256", + "checksum": "c981f305803093525a64aeee8adb356ef2b909b01b44f11a70c6ed6d6ea92fc5", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.6-rc-1", + "buildTime": "20200713135325+0000", + "commitId": "1ed79f4fbe18d90df8cb759235804f95a99b30a2", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-1-bin.zip.sha256", + "checksum": "2253ab246976353b225002ecba04859b5dbad0620f57052ef057fdcfcb888c5c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.6-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.6-milestone-3", + "buildTime": "20200707160951+0000", + "commitId": "e3fcd2f83cbe862e41a1c12df3213be5698041b5", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "6.6", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.6-milestone-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.6-milestone-3-bin.zip.sha256", + "checksum": "c85644cecb8276ee7621ed7b7309897f5927b175a3e658b54d25889aaf7cfeb3", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.6-milestone-3-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.5.1", + "buildTime": "20200630063247+0000", + "commitId": "66bc713f7169626a7f0134bf452abde51550ea0a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.5.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.5.1-bin.zip.sha256", + "checksum": "50a7d30529fa939721fe9268a0205142f3f2302bcac5fb45b27a3902e58db54a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.5.1-wrapper.jar.sha256", + "wrapperChecksum": "70239e6ca1f0d5e3b2808ef6d82390cf9ad58d3a3a0d271677a51d1b89475857" + }, + { + "version": "6.6-milestone-2", + "buildTime": "20200623122834+0000", + "commitId": "19fa87a998bd6ec4c21ba50dbf6fe9d12f374193", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "6.6", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.6-milestone-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.6-milestone-2-bin.zip.sha256", + "checksum": "c7a17a7816572ec0ec3632fcae4e2d877db03cb53b9127e9f5ab60529e1699e2", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.6-milestone-2-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.6-milestone-1", + "buildTime": "20200611202418+0000", + "commitId": "bc05809b2ebf24012a91dcb7f8a5cab83f94016a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "6.6", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.6-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.6-milestone-1-bin.zip.sha256", + "checksum": "287d42827c2da3a27c8826cb791af3788ac7ed3bceed415125512c4140706c14", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.6-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "e996d452d2645e70c01c11143ca2d3742734a28da2bf61f25c82bdc288c9e637" + }, + { + "version": "6.5", + "buildTime": "20200602204621+0000", + "commitId": "a27f41e4ae5e8a41ab9b19f8dd6d86d7b384dad4", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.5-bin.zip.sha256", + "checksum": "23e7d37e9bb4f8dabb8a3ea7fdee9dd0428b9b1a71d298aefd65b11dccea220f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.5-wrapper.jar.sha256", + "wrapperChecksum": "70239e6ca1f0d5e3b2808ef6d82390cf9ad58d3a3a0d271677a51d1b89475857" + }, + { + "version": "6.5-rc-1", + "buildTime": "20200526200448+0000", + "commitId": "2ce1bc8db4b993f0dd1d8834be5b53e43f657985", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.5-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.5-rc-1-bin.zip.sha256", + "checksum": "fd64fa437cb3dfb53a037fff72cbe24e1280bc83ceb3bd35b2f96637ab6efeff", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.5-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "70239e6ca1f0d5e3b2808ef6d82390cf9ad58d3a3a0d271677a51d1b89475857" + }, + { + "version": "6.4.1", + "buildTime": "20200515194340+0000", + "commitId": "1a04183c502614b5c80e33d603074e0b4a2777c5", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.4.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.4.1-bin.zip.sha256", + "checksum": "e58cdff0cee6d9b422dcd08ebeb3177bc44eaa09bd9a2e838ff74c408fe1cbcd", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.4.1-wrapper.jar.sha256", + "wrapperChecksum": "70239e6ca1f0d5e3b2808ef6d82390cf9ad58d3a3a0d271677a51d1b89475857" + }, + { + "version": "6.5-milestone-2", + "buildTime": "20200515094006+0000", + "commitId": "a1fbc4cd16fd3f9c51345111a4bd8a03364e34cd", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "6.5", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.5-milestone-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.5-milestone-2-bin.zip.sha256", + "checksum": "3e269c619d1d19cbbcbd74165487a973d8ad307def9552883e601a93b60ced4b", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.5-milestone-2-wrapper.jar.sha256", + "wrapperChecksum": "70239e6ca1f0d5e3b2808ef6d82390cf9ad58d3a3a0d271677a51d1b89475857" + }, + { + "version": "6.5-milestone-1", + "buildTime": "20200507135506+0000", + "commitId": "c123669c38bdc112ea577e999a0d6c1bd43af8a1", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "6.5", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.5-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.5-milestone-1-bin.zip.sha256", + "checksum": "7e6ac72a36af92474ee8c4ddae73cbc3cc5e6be33fb088ff6668465b25addcd9", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.5-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "70239e6ca1f0d5e3b2808ef6d82390cf9ad58d3a3a0d271677a51d1b89475857" + }, + { + "version": "6.4", + "buildTime": "20200505191855+0000", + "commitId": "42f7c3d0c3066b7b38bd0726760d4881e86fd19f", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.4-bin.zip.sha256", + "checksum": "b888659f637887e759749f6226ddfcb1cb04f828c58c41279de73c463fdbacc9", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.4-wrapper.jar.sha256", + "wrapperChecksum": "70239e6ca1f0d5e3b2808ef6d82390cf9ad58d3a3a0d271677a51d1b89475857" + }, + { + "version": "6.4-rc-4", + "buildTime": "20200430212330+0000", + "commitId": "9aca99e4db8808881606548487fa98e012fb39e1", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.4-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.4-rc-4-bin.zip.sha256", + "checksum": "7307d73b87b4e2416eeb6a376ac7f1bcce6c7cff8eb87e6dca2e130f0016858b", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.4-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "70239e6ca1f0d5e3b2808ef6d82390cf9ad58d3a3a0d271677a51d1b89475857" + }, + { + "version": "6.4-rc-3", + "buildTime": "20200428190039+0000", + "commitId": "87fd55432350f0e70a2498bf643a9be319d3bb4a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.4-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.4-rc-3-bin.zip.sha256", + "checksum": "b80df15a8398f020e5689233d912704e42c9dc567cd32c539a3c59f8616e8954", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.4-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "70239e6ca1f0d5e3b2808ef6d82390cf9ad58d3a3a0d271677a51d1b89475857" + }, + { + "version": "6.4-rc-2", + "buildTime": "20200422163205+0000", + "commitId": "20a24c0cf0c107d7560b7656a96bd346bae4947b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.4-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.4-rc-2-bin.zip.sha256", + "checksum": "a74a1d4ff45e7b6f42c7384546bba2620e23a1172d4b3dcfc1418000ad5d793c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.4-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "70239e6ca1f0d5e3b2808ef6d82390cf9ad58d3a3a0d271677a51d1b89475857" + }, + { + "version": "6.4-rc-1", + "buildTime": "20200415202839+0000", + "commitId": "4162fd0e34887a8c600495239d421cecaa5f17ff", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.4-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.4-rc-1-bin.zip.sha256", + "checksum": "f8e14fc40ebc468d578601cfeaef402844048ff8fc727d452e6b28922c53459c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.4-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "70239e6ca1f0d5e3b2808ef6d82390cf9ad58d3a3a0d271677a51d1b89475857" + }, + { + "version": "6.3", + "buildTime": "20200324195207+0000", + "commitId": "bacd40b727b0130eeac8855ae3f9fd9a0b207c60", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.3-bin.zip.sha256", + "checksum": "038794feef1f4745c6347107b6726279d1c824f3fc634b60f86ace1e9fbd1768", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.3-wrapper.jar.sha256", + "wrapperChecksum": "1cef53de8dc192036e7b0cc47584449b0cf570a00d560bfaa6c9eabe06e1fc06" + }, + { + "version": "6.3-rc-4", + "buildTime": "20200320053945+0000", + "commitId": "507eaa2e999827ec256a700ffc413c5e92a9e69d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.3-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.3-rc-4-bin.zip.sha256", + "checksum": "eb17f321c7892267869541962484de3c375b12dfe98dfe2a55139996d1e71aec", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.3-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "1cef53de8dc192036e7b0cc47584449b0cf570a00d560bfaa6c9eabe06e1fc06" + }, + { + "version": "6.3-rc-3", + "buildTime": "20200318152649+0000", + "commitId": "da54f723f8f1c5f94526bc72bf78f15b0f1409ec", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.3-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.3-rc-3-bin.zip.sha256", + "checksum": "492b013ee962016f83a49defd221bd1fdc80003a9d50a9ad3c5f869c8f48c864", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.3-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "1cef53de8dc192036e7b0cc47584449b0cf570a00d560bfaa6c9eabe06e1fc06" + }, + { + "version": "6.3-rc-2", + "buildTime": "20200317124036+0000", + "commitId": "2cc0a9fd7e59c7876fe2fac480124f07ea31be5b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.3-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.3-rc-2-bin.zip.sha256", + "checksum": "7431e8b723dbe8fea36b635ec578a676df5458a21faa7aaabc8279dc5f9c86dc", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.3-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "1cef53de8dc192036e7b0cc47584449b0cf570a00d560bfaa6c9eabe06e1fc06" + }, + { + "version": "6.3-rc-1", + "buildTime": "20200311214114+0000", + "commitId": "7bc8f57a5b03db954a651cf24b5247aa9629e72f", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.3-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.3-rc-1-bin.zip.sha256", + "checksum": "b72707eb36a9e6fffb8dbe1653c59d8cbd7e4b839f4ef6131c46629dd9fa5686", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.3-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "1cef53de8dc192036e7b0cc47584449b0cf570a00d560bfaa6c9eabe06e1fc06" + }, + { + "version": "6.2.2", + "buildTime": "20200304084931+0000", + "commitId": "7d0bf6dcb46c143bcc3b7a0fa40a8e5ca28e5856", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.2.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.2.2-bin.zip.sha256", + "checksum": "0f6ba231b986276d8221d7a870b4d98e0df76e6daf1f42e7c0baec5032fb7d17", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.2.2-wrapper.jar.sha256", + "wrapperChecksum": "96f793a18e056c23ffeec67c1f3bb8eccff5a4a407fc9ceac183527e7eedf4b6" + }, + { + "version": "6.2.1", + "buildTime": "20200224202410+0000", + "commitId": "aacbcb7e587faa6a8e7851751a76183b6187b164", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.2.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.2.1-bin.zip.sha256", + "checksum": "a68ca7ba57f3404c3f6fc1f70a02d3a7d78652e6b46bbfaff83fc9a17168c279", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.2.1-wrapper.jar.sha256", + "wrapperChecksum": "96f793a18e056c23ffeec67c1f3bb8eccff5a4a407fc9ceac183527e7eedf4b6" + }, + { + "version": "6.2", + "buildTime": "20200217083201+0000", + "commitId": "61d3320259a1a0d31519bf208eb13741679a742f", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.2-bin.zip.sha256", + "checksum": "b93a5f30d01195ec201e240f029c8b42d59c24086b8d1864112c83558e23cf8a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.2-wrapper.jar.sha256", + "wrapperChecksum": "96f793a18e056c23ffeec67c1f3bb8eccff5a4a407fc9ceac183527e7eedf4b6" + }, + { + "version": "6.2-rc-3", + "buildTime": "20200213012914+0000", + "commitId": "68b48dea20ab558725a7f61ab1e523253df94495", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.2-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.2-rc-3-bin.zip.sha256", + "checksum": "3e8db98ac4398938ffcdb95241518eadf8858cee65f951f5f75e22cf5efb4cc2", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.2-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "96f793a18e056c23ffeec67c1f3bb8eccff5a4a407fc9ceac183527e7eedf4b6" + }, + { + "version": "6.2-rc-2", + "buildTime": "20200211221400+0000", + "commitId": "8a7f6425a217ceeff6c5a76f8dd533b770606110", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.2-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.2-rc-2-bin.zip.sha256", + "checksum": "cf53ad90046348ab326f07b77f7362d6e8f101125ddd815e46df2f296ed2a0ee", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.2-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "96f793a18e056c23ffeec67c1f3bb8eccff5a4a407fc9ceac183527e7eedf4b6" + }, + { + "version": "6.2-rc-1", + "buildTime": "20200203123003+0000", + "commitId": "3931d0c37f00de3bd45f713520bd47a09b6bad30", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.2-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.2-rc-1-bin.zip.sha256", + "checksum": "4e40b36d619f5e7a9eb9a97d6652c062a13df828995be79137b7215c062b9139", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.2-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "96f793a18e056c23ffeec67c1f3bb8eccff5a4a407fc9ceac183527e7eedf4b6" + }, + { + "version": "6.1.1", + "buildTime": "20200124223024+0000", + "commitId": "a8c3750babb99d1894378073499d6716a1a1fa5d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.1.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.1.1-bin.zip.sha256", + "checksum": "9d94e6e4a28ad328072ef6e56bce79a810494ae756751fdcedffdeaf27c093b1", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.1.1-wrapper.jar.sha256", + "wrapperChecksum": "96f793a18e056c23ffeec67c1f3bb8eccff5a4a407fc9ceac183527e7eedf4b6" + }, + { + "version": "6.1", + "buildTime": "20200115235646+0000", + "commitId": "539d277fdba571ebcc9617a34329c83d7d2b259e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.1-bin.zip.sha256", + "checksum": "d0c43d14e1c70a48b82442f435d06186351a2d290d72afd5b8866f15e6d7038a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.1-wrapper.jar.sha256", + "wrapperChecksum": "96f793a18e056c23ffeec67c1f3bb8eccff5a4a407fc9ceac183527e7eedf4b6" + }, + { + "version": "6.1-rc-3", + "buildTime": "20200113162324+0000", + "commitId": "52aebd9acc0e395deba9a17db22f6cffe7d61cf1", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.1-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.1-rc-3-bin.zip.sha256", + "checksum": "f150eccc7ab05d14bd89a04cdfc4de94e320d5962828e69d10c43bfff12d176d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.1-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "96f793a18e056c23ffeec67c1f3bb8eccff5a4a407fc9ceac183527e7eedf4b6" + }, + { + "version": "6.1-rc-2", + "buildTime": "20200107211705+0000", + "commitId": "8ea1a9823c6a4bfe11b14a3fcbed0630992b126f", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.1-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.1-rc-2-bin.zip.sha256", + "checksum": "f451724e3f6157893e6efd98f91e26fbed1bac89d43fd248d4535cc918b83ee7", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.1-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "96f793a18e056c23ffeec67c1f3bb8eccff5a4a407fc9ceac183527e7eedf4b6" + }, + { + "version": "6.1-rc-1", + "buildTime": "20191219215643+0000", + "commitId": "091da954cc24262bb056965f70f172e1e587e9ca", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.1-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.1-rc-1-bin.zip.sha256", + "checksum": "8262a8509cdd281ab19b87c79f03d4a5d0629f2a03a28c284203431f12c70960", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.1-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "96f793a18e056c23ffeec67c1f3bb8eccff5a4a407fc9ceac183527e7eedf4b6" + }, + { + "version": "6.1-milestone-3", + "buildTime": "20191203141333+0000", + "commitId": "b360d725d00cc62bad1e1f95f66077b18b5cf9a0", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "6.1", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.1-milestone-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.1-milestone-3-bin.zip.sha256", + "checksum": "31b51f1c7db4aa3927c3621a5732e777f7655f7b4d769225337c251cfbb8cdf6", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.1-milestone-3-wrapper.jar.sha256", + "wrapperChecksum": "3888c76faa032ea8394b8a54e04ce2227ab1f4be64f65d450f8509fe112d38ce" + }, + { + "version": "6.1-milestone-2", + "buildTime": "20191128101755+0000", + "commitId": "0f4f797500d442efec2e41485029d66470049b4a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "6.1", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.1-milestone-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.1-milestone-2-bin.zip.sha256", + "checksum": "3c2040ce128a323e96163eb2e87ac7a50475756f767fa7a139e0edc34447548e", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.1-milestone-2-wrapper.jar.sha256", + "wrapperChecksum": "3888c76faa032ea8394b8a54e04ce2227ab1f4be64f65d450f8509fe112d38ce" + }, + { + "version": "6.1-milestone-1", + "buildTime": "20191120132405+0000", + "commitId": "0e10d43391411ce56234fec67bfa38066df5f191", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "6.1", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.1-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.1-milestone-1-bin.zip.sha256", + "checksum": "b13a85987bf9b2b8aa7c24a9b8e68c46a32acb6b623477ac457bca8b0ea9fc04", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.1-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "3888c76faa032ea8394b8a54e04ce2227ab1f4be64f65d450f8509fe112d38ce" + }, + { + "version": "6.0.1", + "buildTime": "20191118202501+0000", + "commitId": "fad121066a68c4701acd362daf4287a7c309a0f5", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.0.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.0.1-bin.zip.sha256", + "checksum": "d364b7098b9f2e58579a3603dc0a12a1991353ac58ed339316e6762b21efba44", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.0.1-wrapper.jar.sha256", + "wrapperChecksum": "28b330c20a9a73881dfe9702df78d4d78bf72368e8906c70080ab6932462fe9e" + }, + { + "version": "6.0", + "buildTime": "20191108181212+0000", + "commitId": "0a5b531749138f2f983f7c888fa7790bfc52d88a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.0-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.0-bin.zip.sha256", + "checksum": "5a3578b9f0bb162f5e08cf119f447dfb8fa950cedebb4d2a977e912a11a74b91", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.0-wrapper.jar.sha256", + "wrapperChecksum": "28b330c20a9a73881dfe9702df78d4d78bf72368e8906c70080ab6932462fe9e" + }, + { + "version": "6.0-rc-3", + "buildTime": "20191105175639+0000", + "commitId": "74fa127e4a6787a1983bd8467e9443662fa0fe3d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.0-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.0-rc-3-bin.zip.sha256", + "checksum": "d30c88a6644e28ba5a45923ae3a4850d55ba0f35dd14a3108595359cdfb0401e", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.0-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "28b330c20a9a73881dfe9702df78d4d78bf72368e8906c70080ab6932462fe9e" + }, + { + "version": "5.6.4", + "buildTime": "20191101204200+0000", + "commitId": "dd870424f9bd8e195d614dc14bb140f43c22da98", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.6.4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.6.4-bin.zip.sha256", + "checksum": "1f3067073041bc44554d0efe5d402a33bc3d3c93cc39ab684f308586d732a80d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.6.4-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "6.0-rc-2", + "buildTime": "20191030160321+0000", + "commitId": "990710705df1acf6809b5982a37307677a436d6f", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.0-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.0-rc-2-bin.zip.sha256", + "checksum": "dbb366685bd15d08e592e384744bc19715d00203adeacf43dcf4c8c3a46b6b01", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.0-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "28b330c20a9a73881dfe9702df78d4d78bf72368e8906c70080ab6932462fe9e" + }, + { + "version": "6.0-rc-1", + "buildTime": "20191018192416+0000", + "commitId": "5ed5fea1446b3300afa321c661d6e865ab3157a1", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "6.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-6.0-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-6.0-rc-1-bin.zip.sha256", + "checksum": "e73ab0c91f71e051f9798c6c89e0b9c0ecc95f0877e683554425c68835998509", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-6.0-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "28b330c20a9a73881dfe9702df78d4d78bf72368e8906c70080ab6932462fe9e" + }, + { + "version": "5.6.3", + "buildTime": "20191018002836+0000", + "commitId": "bd168bbf5d152c479186a897f2cea494b7875d13", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.6.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.6.3-bin.zip.sha256", + "checksum": "60a6d8f687e3e7a4bc901cc6bc3db190efae0f02f0cc697e323e0f9336f224a3", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.6.3-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.6.2", + "buildTime": "20190905161354+0000", + "commitId": "55a5e53d855db8fc7b0e494412fc624051a8e781", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.6.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.6.2-bin.zip.sha256", + "checksum": "32fce6628848f799b0ad3205ae8db67d0d828c10ffe62b748a7c0d9f4a5d9ee0", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.6.2-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.6.1", + "buildTime": "20190828024934+0000", + "commitId": "b6bd8e7934ca41d9e52610058aa7cb834df81fc4", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.6.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.6.1-bin.zip.sha256", + "checksum": "0986244820e4a35d32d91df2ec4b768b5ba5d6c8246753794f85159f9963ec12", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.6.1-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.6", + "buildTime": "20190814210525+0000", + "commitId": "f0b9d60906c7b8c42cd6c61a39ae7b74767bb012", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.6-bin.zip.sha256", + "checksum": "15c02ef5dd3631ec02ac52e8725703e0285d9a7eecbf4e5939aa9e924604d01d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.6-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.6-rc-2", + "buildTime": "20190807150342+0000", + "commitId": "19680ca6170bfa0a541cc161004c95fe23bb3e36", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.6-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.6-rc-2-bin.zip.sha256", + "checksum": "26c4451c7297dd160314fe509273f97c4f1ee68527dc3fda3d87f0973df8eecb", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.6-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.6-rc-1", + "buildTime": "20190729112626+0000", + "commitId": "f51e6f079cea308de4ef2fb04bdc3b108db6eeaf", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.6-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.6-rc-1-bin.zip.sha256", + "checksum": "e09932eeca0e94f08bf81b1b58bc199ee8b8044d553c9ed5e1a906b641ce9c90", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.6-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.5.1", + "buildTime": "20190710203812+0000", + "commitId": "3245f748c7061472da4dc184991919810f7935a5", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.5.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.5.1-bin.zip.sha256", + "checksum": "222a03fcf2fcaf3691767ce9549f78ebd4a77e73f9e23a396899fb70b420cd00", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.5.1-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.5", + "buildTime": "20190628173605+0000", + "commitId": "83820928f3ada1a3a1dbd9a6c0d47eb3f199378f", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.5-bin.zip.sha256", + "checksum": "8d78b2ed63e7f07ad169c1186d119761c4773e681f332cfe1901045b1b0141bc", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.5-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.5-rc-4", + "buildTime": "20190624152432+0000", + "commitId": "787552139af6f0f19c748ac6a917a54d33f15ab0", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.5-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.5-rc-4-bin.zip.sha256", + "checksum": "8d0844d974a2da25b741382094cb63d035ad2e9572b978e63bdceb927231e9ea", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.5-rc-4-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.5-rc-3", + "buildTime": "20190614231538+0000", + "commitId": "37d86b7ed068116d20e7a31c88d9dfe3e8ec3bd8", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.5-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.5-rc-3-bin.zip.sha256", + "checksum": "1d3f37c0b53084ba5e6642691a9b9fb5f588a801f8ca613f15d82042b2c7dad8", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.5-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.5-rc-2", + "buildTime": "20190607090657+0000", + "commitId": "360949f7e785578195c7fe7e4b6ca2dc566d55c5", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.5-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.5-rc-2-bin.zip.sha256", + "checksum": "440429bd2195030d944b8d148c0d056edb2463813a04132ee7bf7123b471858a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.5-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.5-rc-1", + "buildTime": "20190529115119+0000", + "commitId": "6c070eb6e47979d5642a181e3efa11bf237dc69c", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.5-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.5-rc-1-bin.zip.sha256", + "checksum": "7fe31cb63223b292fae0c42b124de3d8d028a3567992e9caf08a240c10d48f6c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.5-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.4.1", + "buildTime": "20190426081442+0000", + "commitId": "261d171646b36a6a28d5a19a69676cd098a4c19d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.4.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.4.1-bin.zip.sha256", + "checksum": "7bdbad1e4f54f13c8a78abc00c26d44dd8709d4aedb704d913fb1bb78ac025dc", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.4.1-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.4", + "buildTime": "20190416024416+0000", + "commitId": "a4f3f91a30d4e36d82cc7592c4a0726df52aba0d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.4-bin.zip.sha256", + "checksum": "c8c17574245ecee9ed7fe4f6b593b696d1692d1adbfef425bef9b333e3a0e8de", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.4-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.4-rc-1", + "buildTime": "20190410011532+0000", + "commitId": "efacce4b4916e5709f25141b61fc3ec594d3893d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.4-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.4-rc-1-bin.zip.sha256", + "checksum": "86dbc7499f0cc0810c2ca8683b5adcd0dd7841bfe14544401de0e49b885542a2", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.4-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.3.1", + "buildTime": "20190328090923+0000", + "commitId": "f2fae6ba563cfb772c8bc35d31e43c59a5b620c3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.3.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.3.1-bin.zip.sha256", + "checksum": "1c59a17a054e9c82f0dd881871c9646e943ec4c71dd52ebc6137d17f82337436", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.3.1-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.3", + "buildTime": "20190320110329+0000", + "commitId": "f5c64796748a98efdbf6f99f44b6afe08492c2a0", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.3-bin.zip.sha256", + "checksum": "bed2bdd3955be5a09ca7e0201e9d131f194f7f6c466e1795a733733ccfb09f25", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.3-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.3-rc-3", + "buildTime": "20190313202708+0000", + "commitId": "4b3a8d84d9a8983836f9bb3006c39baec692ca4b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.3-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.3-rc-3-bin.zip.sha256", + "checksum": "63b7114caa8629f5dc3074aab09b87476fbfba548ea20aefe97068287621acb7", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.3-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.3-rc-2", + "buildTime": "20190311210726+0000", + "commitId": "cb19a113017a9351f8d9fa767d50a9a0f590617a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.3-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.3-rc-2-bin.zip.sha256", + "checksum": "4110201a819b28600bfe06ef02950c6b749616c2197ed0da2514451a378c709b", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.3-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.3-rc-1", + "buildTime": "20190305205202+0000", + "commitId": "ec8a8bc2dd4c0761880ccec4f28c5db79c2244bb", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.3-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.3-rc-1-bin.zip.sha256", + "checksum": "5650e801e191cc8f12f6ea3f27e081ad0a0012d44d53ba226b7c148d3282956c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.3-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "3dc39ad650d40f6c029bd8ff605c6d95865d657dbfdeacdb079db0ddfffedf9f" + }, + { + "version": "5.2.1", + "buildTime": "20190208190010+0000", + "commitId": "f02764e074c32ee8851a4e1877dd1fea8ffb7183", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.2.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.2.1-bin.zip.sha256", + "checksum": "748c33ff8d216736723be4037085b8dc342c6a0f309081acf682c9803e407357", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.2.1-wrapper.jar.sha256", + "wrapperChecksum": "76b12da7f4a7cdd025e5996811a2e49bf5df0fb62d72554ab555c0e434b63aae" + }, + { + "version": "5.2", + "buildTime": "20190204111648+0000", + "commitId": "840644a429c8b8b9ae399867eb1660e3109bc7a3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.2-bin.zip.sha256", + "checksum": "ff322863250159595e93b5a4d17a6f0d21c59a1a0497c1e1cf1d53826485503f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.2-wrapper.jar.sha256", + "wrapperChecksum": "76b12da7f4a7cdd025e5996811a2e49bf5df0fb62d72554ab555c0e434b63aae" + }, + { + "version": "5.2-rc-1", + "buildTime": "20190128225604+0000", + "commitId": "633c8d5c1c568402d7a26e94c1213d747bfa594b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.2-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.2-rc-1-bin.zip.sha256", + "checksum": "9e882e3899d7ef999f862f71a4a7494505a9a3f87c1cea427a3ae44941b94c70", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.2-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "76b12da7f4a7cdd025e5996811a2e49bf5df0fb62d72554ab555c0e434b63aae" + }, + { + "version": "5.1.1", + "buildTime": "20190110230502+0000", + "commitId": "3c9abb645fb83932c44e8610642393ad62116807", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.1.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.1.1-bin.zip.sha256", + "checksum": "4953323605c5d7b89e97d0dc7779e275bccedefcdac090aec123375eae0cc798", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.1.1-wrapper.jar.sha256", + "wrapperChecksum": "76b12da7f4a7cdd025e5996811a2e49bf5df0fb62d72554ab555c0e434b63aae" + }, + { + "version": "5.1", + "buildTime": "20190102185747+0000", + "commitId": "d09c2e354576ac41078c322815cc6db2b66d976e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.1-bin.zip.sha256", + "checksum": "7506638a380092a0406364c79d6c87d03d23017fc25a5770379d1ce23c3fcd4d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.1-wrapper.jar.sha256", + "wrapperChecksum": "76b12da7f4a7cdd025e5996811a2e49bf5df0fb62d72554ab555c0e434b63aae" + }, + { + "version": "5.1-rc-3", + "buildTime": "20181221230345+0000", + "commitId": "bf267654ac894c160b5b6c5e5c06d72f1ecaa23c", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.1-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.1-rc-3-bin.zip.sha256", + "checksum": "aba05e1d60c4b976e8bb9ea1911aaa8b19783cdc63e788320fcb75e9613ba45d", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.1-rc-3-wrapper.jar.sha256", + "wrapperChecksum": "76b12da7f4a7cdd025e5996811a2e49bf5df0fb62d72554ab555c0e434b63aae" + }, + { + "version": "5.1-rc-2", + "buildTime": "20181217224201+0000", + "commitId": "4f93941ff2f23ed981b9416a66af36ab0a8ef4de", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.1-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.1-rc-2-bin.zip.sha256", + "checksum": "a5f43f07530f2e02f4df3b0fe14300586d6302ad4462d0ed95971e6bf107b66a", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.1-rc-2-wrapper.jar.sha256", + "wrapperChecksum": "76b12da7f4a7cdd025e5996811a2e49bf5df0fb62d72554ab555c0e434b63aae" + }, + { + "version": "5.1-rc-1", + "buildTime": "20181213060004+0000", + "commitId": "0937d57caa43dabc31d331dea6c9c0cf72de8607", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.1-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.1-rc-1-bin.zip.sha256", + "checksum": "160b5b497b076c8d490fd7f2de6d389db4972dc495d5b86e5713ebdf63bf47fd", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.1-rc-1-wrapper.jar.sha256", + "wrapperChecksum": "76b12da7f4a7cdd025e5996811a2e49bf5df0fb62d72554ab555c0e434b63aae" + }, + { + "version": "4.10.3", + "buildTime": "20181205005054+0000", + "commitId": "e76905e3a1034e6f724566aeb985621347ff43bc", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.10.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.10.3-bin.zip.sha256", + "checksum": "8626cbf206b4e201ade7b87779090690447054bc93f052954c78480fa6ed186e", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.10.3-wrapper.jar.sha256", + "wrapperChecksum": "660ab018b8e319e9ae779fdb1b7ac47d0321bde953bf0eb4545f14952cfdcaa3" + }, + { + "version": "5.1-milestone-1", + "buildTime": "20181203174147+0000", + "commitId": "00340d696f2e7161233ac9a363cd4e5238588318", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "5.1", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.1-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.1-milestone-1-bin.zip.sha256", + "checksum": "f7f38376ef3cf461eaf4da9d7abf4a9a4325cbbc93fbe19efbdb2f35c4171757", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.1-milestone-1-wrapper.jar.sha256", + "wrapperChecksum": "8ff6bee43c55efc0cce9e1147860a76fc970398fbef587e64b6e7a5a7e0291df" + }, + { + "version": "5.0", + "buildTime": "20181126114843+0000", + "commitId": "7fc6e5abf2fc5fe0824aec8a0f5462664dbcd987", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.0-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.0-bin.zip.sha256", + "checksum": "6157ac9f3410bc63644625b3b3e9e96c963afd7910ae0697792db57813ee79a6", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-5.0-wrapper.jar.sha256", + "wrapperChecksum": "f1a597a1f2b23089deec11d5b924d074f9e4ed810f2093be7021ded01c8073ad" + }, + { + "version": "5.0-rc-5", + "buildTime": "20181122195845+0000", + "commitId": "42e59c2484a49702234030881640aa8d8bfa6d43", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.0-rc-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.0-rc-5-bin.zip.sha256", + "checksum": "369ff446973f5309c550b9ef543d5cdf45470a0db20e3f6c00dcca122faa045d" + }, + { + "version": "5.0-rc-4", + "buildTime": "20181120092642+0000", + "commitId": "50c28fc7284c0aa377c8edb49723d9258565780f", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.0-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.0-rc-4-bin.zip.sha256", + "checksum": "414d6ffa6a4ec14355eb78b7577576ab63d07658ac640ec41b5e63b573400de0" + }, + { + "version": "5.0-rc-3", + "buildTime": "20181114160147+0000", + "commitId": "63f11c722124617f7cbe2f95ad5a5e045b8b42f6", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.0-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.0-rc-3-bin.zip.sha256", + "checksum": "684a20ad90fc0d133c7b03da392c21e2a211b5df32faacb9f72e6847628aea20" + }, + { + "version": "5.0-rc-2", + "buildTime": "20181112080541+0000", + "commitId": "bcbd24a720641ddf900df0503def5b5c08c4a8b4", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.0-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.0-rc-2-bin.zip.sha256", + "checksum": "6585344d4a6047bcd19894c9d75e32d62a0a908b6886c3f21049b7d9e3a14d02" + }, + { + "version": "5.0-rc-1", + "buildTime": "20181030135922+0000", + "commitId": "0b94d7e5908d1d96b8a353d1f28d9c443d767327", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "5.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.0-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.0-rc-1-bin.zip.sha256", + "checksum": "6494ddd4191b99d1a5e8d31fc179d1cab68631ebbac9adfcaa229f56496c5427" + }, + { + "version": "5.0-milestone-1", + "buildTime": "20181002224615+0000", + "commitId": "abaf9d545140f5775f3442e4cfe9c61603d4fb3e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "5.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-5.0-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-5.0-milestone-1-bin.zip.sha256", + "checksum": "0c4e5366b479934844da39c156c20d509f6b2c40b978c10598221fd591c0cf57" + }, + { + "version": "4.10.2", + "buildTime": "20180919181015+0000", + "commitId": "b4d8d5d170bb4ba516e88d7fe5647e2323d791dd", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.10.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.10.2-bin.zip.sha256", + "checksum": "b49c6da1b2cb67a0caf6c7480630b51c70a11ca2016ff2f555eaeda863143a29", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.10.2-wrapper.jar.sha256", + "wrapperChecksum": "ad63ba21fb91e490e0f6fd0ca7d4049241f0f68a454b0b3075c041c4554e611c" + }, + { + "version": "4.10.1", + "buildTime": "20180912113327+0000", + "commitId": "76c9179ea9bddc32810f9125ad97c3315c544919", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.10.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.10.1-bin.zip.sha256", + "checksum": "e53ce3a01cf016b5d294eef20977ad4e3c13e761ac1e475f1ffad4c6141a92bd", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.10.1-wrapper.jar.sha256", + "wrapperChecksum": "d8a69ca8efe271d8de080c42a2ea4b08fc9e85c41aa2d163255c70d9da239db0" + }, + { + "version": "4.10", + "buildTime": "20180827183506+0000", + "commitId": "ee3751ed9f2034effc1f0072c2b2ee74b5dce67d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.10-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.10-bin.zip.sha256", + "checksum": "248cfd92104ce12c5431ddb8309cf713fe58de8e330c63176543320022f59f18", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.10-wrapper.jar.sha256", + "wrapperChecksum": "778e7f46bd67eaea2de5bcbdbb40878c6614656014ba59a72ce8648eaf43a925" + }, + { + "version": "4.10-rc-3", + "buildTime": "20180823120756+0000", + "commitId": "1b827f2119c11123e178e731421ae79d52a8991a", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.10", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.10-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.10-rc-3-bin.zip.sha256", + "checksum": "4e5f3a2e0c4f1f0313211253d799dd66570afdf0ebb3d785ee97a97d942c632d" + }, + { + "version": "4.10-rc-2", + "buildTime": "20180814180001+0000", + "commitId": "7d610b59feb93583b5d19b01ce63477472d87696", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.10", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.10-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.10-rc-2-bin.zip.sha256", + "checksum": "e90d3c32910e259814bcca82b3911172ecca1ff1ab5ed69b4de3c1df8b378b40" + }, + { + "version": "4.10-rc-1", + "buildTime": "20180809061937+0000", + "commitId": "97951b7f541f1da43de291246cc7b17507e75a14", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.10", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.10-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.10-rc-1-bin.zip.sha256", + "checksum": "f68220df44d943418a49aecccf0d5b8547f52201926bc8f13c2c3e5b81eb763a" + }, + { + "version": "4.9", + "buildTime": "20180716081403+0000", + "commitId": "efcf8c1cf533b03c70f394f270f46a174c738efc", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.9-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.9-bin.zip.sha256", + "checksum": "e66e69dce8173dd2004b39ba93586a184628bc6c28461bc771d6835f7f9b0d28", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.9-wrapper.jar.sha256", + "wrapperChecksum": "e55e7e47a79e04c26363805b31e2f40b7a9cc89ea12113be7de750a3b2cede85" + }, + { + "version": "4.9-rc-2", + "buildTime": "20180711004640+0000", + "commitId": "9b5ff22063b9eb8bab8a2f304d47903b531054c7", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.9-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.9-rc-2-bin.zip.sha256", + "checksum": "651e3d8c41221e7e767f23a5ead0bbe06ada6abec017e7b6ce99f3cbcb4808e5" + }, + { + "version": "4.9-rc-1", + "buildTime": "20180703131446+0000", + "commitId": "c38f1f17599655fc0de0ea44a8d366aebcfdb9f2", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.9-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.9-rc-1-bin.zip.sha256", + "checksum": "52e32ccfa4edc679e6bfad93e0f9fcd6358dc39dfb7bf8f2e1222b8d18ead359" + }, + { + "version": "4.8.1", + "buildTime": "20180621075306+0000", + "commitId": "0abdea078047b12df42e7750ccba34d69b516a22", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.8.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.8.1-bin.zip.sha256", + "checksum": "af334d994b5e69e439ab55b5d2b7d086da5ea6763d78054f49f147b06370ed71", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.8.1-wrapper.jar.sha256", + "wrapperChecksum": "080e30657661539701b66827b96eb0043191e0a7a73090e8a57bd6735e5af5c5" + }, + { + "version": "4.8", + "buildTime": "20180604103958+0000", + "commitId": "9e1261240e412cbf61a5e3a5ab734f232b2f887d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.8-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.8-bin.zip.sha256", + "checksum": "f3e29692a8faa94eb0b02ebf36fa263a642b3ae8694ef806c45c345b8683f1ba", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.8-wrapper.jar.sha256", + "wrapperChecksum": "4160d5a6d8d6efc6af336582bbbba8194e4d7a742835f7b0fd3964cbd419c994" + }, + { + "version": "4.8-rc-3", + "buildTime": "20180531140436+0000", + "commitId": "9803e11cf1218511e0fd1595bdc66e0a6210a0b6", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.8-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.8-rc-3-bin.zip.sha256", + "checksum": "459195ae148201ef4c1235cfca08aaa20b1293f280fb643c666499a58e228dac" + }, + { + "version": "4.8-rc-2", + "buildTime": "20180524092821+0000", + "commitId": "0b1824635622a85b201776fc1245b6a40f4a5b22", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.8-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.8-rc-2-bin.zip.sha256", + "checksum": "a89682f4c2ec77a2b49ca139628e95de7b7648552643edd2ea3988cbd0a0a07b" + }, + { + "version": "4.8-rc-1", + "buildTime": "20180515173233+0000", + "commitId": "cfb66ee34d37b52c741150a398663618a94d2045", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.8-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.8-rc-1-bin.zip.sha256", + "checksum": "c6ba15fbb51ac0c8b370dfd3a239c3b48b1cee5bbfdf5597cb586a216f8690b0" + }, + { + "version": "4.7", + "buildTime": "20180418090912+0000", + "commitId": "b9a962bf70638332300e7f810689cb2febbd4a6c", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.7-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.7-bin.zip.sha256", + "checksum": "fca5087dc8b50c64655c000989635664a73b11b9bd3703c7d6cabd31b7dcdb04", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.7-wrapper.jar.sha256", + "wrapperChecksum": "7d6fe0a055f133226409de2457fb0e887d1f6b096f36c8d5fd76fb7a9357cd45" + }, + { + "version": "4.7-rc-2", + "buildTime": "20180413125323+0000", + "commitId": "943291f9d94f68a0172ce7648b6a9dab7711fd47", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.7-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.7-rc-2-bin.zip.sha256", + "checksum": "b9289ecb1f9ce8bc325ce71805ee779f3e03da22e394deced6e682cd6297d110" + }, + { + "version": "4.7-rc-1", + "buildTime": "20180403113602+0000", + "commitId": "2f0b7b15068980c05470af1882d79e9c8ef5c71b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.7-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.7-rc-1-bin.zip.sha256", + "checksum": "fbf286558c27f6026c0da6daa57750ce1539e6535227e6738a6f4909dc130d12" + }, + { + "version": "4.6", + "buildTime": "20180228133636+0000", + "commitId": "8fa6ce7945b640e6168488e4417f9bb96e4ab46c", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.6-bin.zip.sha256", + "checksum": "98bd5fd2b30e070517e03c51cbb32beee3e2ee1a84003a5a5d748996d4b1b915", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.6-wrapper.jar.sha256", + "wrapperChecksum": "381dff8aa434499aa93bc25572b049c8c586a67faff2c02f375e4f23e17e49de" + }, + { + "version": "4.6-rc-2", + "buildTime": "20180221152842+0000", + "commitId": "819e0059da49f469d3e9b2896dc4e72537c4847d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.6-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.6-rc-2-bin.zip.sha256", + "checksum": "1fab26f72fe5f52d5773c2cf4bb0beaec60c3b24a5f49d09be5a092a7473bfdd" + }, + { + "version": "4.6-rc-1", + "buildTime": "20180216162807+0000", + "commitId": "ac6267d33138856ffe71b159ab8154e71e9da72e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.6-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.6-rc-1-bin.zip.sha256", + "checksum": "f8ed6380bcc3db71ec524950aa53d78ccf1da0ead900f379f3573dfef60500c9" + }, + { + "version": "4.5.1", + "buildTime": "20180205132249+0000", + "commitId": "37007e1c012001ff09973e0bd095139239ecd3b3", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.5.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.5.1-bin.zip.sha256", + "checksum": "3e2ea0d8b96605b7c528768f646e0975bd9822f06df1f04a64fd279b1a17805e", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.5.1-wrapper.jar.sha256", + "wrapperChecksum": "3bf04e39ed259ff0a1217a875199a11775855d2a29207b98318ac79178249de8" + }, + { + "version": "4.5", + "buildTime": "20180124170452+0000", + "commitId": "77d0ec90636f43669dc794ca17ef80dd65457bec", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.5-bin.zip.sha256", + "checksum": "03f2a43a314ff0fb843a85ef68078e06d181c4549c1e5fb983f289382b59b5e3", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.5-wrapper.jar.sha256", + "wrapperChecksum": "d283a04caee0e97b666b09e50ab394834934bee6225c2e9cd4650afdeac43828" + }, + { + "version": "4.5-rc-2", + "buildTime": "20180122164244+0000", + "commitId": "459d2caa04b8145b40955950cc6037034e9123b1", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.5-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.5-rc-2-bin.zip.sha256", + "checksum": "401363cc3491055b878bba54463129c3bb0d3a76e337e5e515729a6b6fa4c883" + }, + { + "version": "4.5-rc-1", + "buildTime": "20180109010527+0000", + "commitId": "d6e5a1c698884ebc887980c82687c8c11ad22dd6", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.5-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.5-rc-1-bin.zip.sha256", + "checksum": "fa8f4721d121d4501871877a9c1bf83db5ba44bb0ee9dd177a4981c11cede7c6" + }, + { + "version": "4.4.1", + "buildTime": "20171220154523+0000", + "commitId": "10ed9dc355dc39f6307cc98fbd8cea314bdd381c", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.4.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.4.1-bin.zip.sha256", + "checksum": "e7cf7d1853dfc30c1c44f571d3919eeeedef002823b66b6a988d27e919686389", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.4.1-wrapper.jar.sha256", + "wrapperChecksum": "4e318d74d06aa7b998091345c397a3c7c4b291b59da31e6f9c772a596711acac" + }, + { + "version": "4.4", + "buildTime": "20171206090506+0000", + "commitId": "cf7821a6f79f8e2a598df21780e3ff7ce8db2b82", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.4-bin.zip.sha256", + "checksum": "fa4873ae2c7f5e8c02ec6948ba95848cedced6134772a0169718eadcb39e0a2f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.4-wrapper.jar.sha256", + "wrapperChecksum": "88b5b31f390a268ab3773df580d83fd1e388f49c2b685f78a16600577bd72fe2" + }, + { + "version": "4.4-rc-6", + "buildTime": "20171204084815+0000", + "commitId": "cf7821a6f79f8e2a598df21780e3ff7ce8db2b82", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.4-rc-6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.4-rc-6-bin.zip.sha256", + "checksum": "03480998491b94e27d95759c47ae6ac864e95b9db17cd5890cd37ff536431ba0" + }, + { + "version": "4.4-rc-5", + "buildTime": "20171130152137+0000", + "commitId": "f4daa310b16df9abd4f37257bae8312b5293a251", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.4-rc-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.4-rc-5-bin.zip.sha256", + "checksum": "b52d338f285dd255f3abf6bcd3e0b447cc62aa8dc83a281c42f8ec1aec10dc89" + }, + { + "version": "4.4-rc-4", + "buildTime": "20171128123659+0000", + "commitId": "f0a427cdb7eaa95779c9ccd8147878970fbb53fb", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.4-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.4-rc-4-bin.zip.sha256", + "checksum": "d663fe846e3b2e30285b578e0bb957c4fb846cca0f36694ab32d5e5ba25c0cb8" + }, + { + "version": "4.4-rc-3", + "buildTime": "20171127103138+0000", + "commitId": "340c20678da78bf34d58da72071f95bb60d037e9", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.4-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.4-rc-3-bin.zip.sha256", + "checksum": "607b5c3493dc78da8d6207edd43c680132d9b69912fa1de2fa42f24be72f30cd" + }, + { + "version": "4.4-rc-2", + "buildTime": "20171124103528+0000", + "commitId": "9ab11aefa43e1dedcf68294d5f15f246bbe54221", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.4-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.4-rc-2-bin.zip.sha256", + "checksum": "939ec641887df3677dd3ac1ed8cb6e2815dae0f33bf36db8ae64a71b4c32f8f8" + }, + { + "version": "4.4-rc-1", + "buildTime": "20171121153105+0000", + "commitId": "089fe1e08ca477b49583c6e00abf87f4675d0c06", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.4-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.4-rc-1-bin.zip.sha256", + "checksum": "3b5d35b41d5807f6471e90ca81e4d1bf4fee48deca7d99e0e579f758b4db85b1" + }, + { + "version": "4.3.1", + "buildTime": "20171108085945+0000", + "commitId": "e4f4804807ef7c2829da51877861ff06e07e006d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.3.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.3.1-bin.zip.sha256", + "checksum": "15ebe098ce0392a2d06d252bff24143cc88c4e963346582c8d88814758d93ac7", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.3.1-wrapper.jar.sha256", + "wrapperChecksum": "383f4efa709b52632a520708e8a07353961970941ab3867ab8ac182132ce1c54" + }, + { + "version": "4.3", + "buildTime": "20171030154329+0000", + "commitId": "c684c202534c4138b51033b52d871939b8d38d72", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.3-bin.zip.sha256", + "checksum": "8dcbf44eef92575b475dcb1ce12b5f19d38dc79e84c662670248dc8b8247654c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.3-wrapper.jar.sha256", + "wrapperChecksum": "ba496e7e0e03ffa432eaf715bb1466fac2ffc8491a71e7164a5438c48c79d8ea" + }, + { + "version": "4.3-rc-4", + "buildTime": "20171026162557+0000", + "commitId": "89af43c4d0506f69980f00dde78c97b2f81437f8", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.3-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.3-rc-4-bin.zip.sha256", + "checksum": "6615d3d67b7c5ca936ef34464495aeac4145dcac8df65d8fdd20f4085e48fbb6" + }, + { + "version": "4.3-rc-3", + "buildTime": "20171024142633+0000", + "commitId": "d13daf4f8c434761df3ba0af55fb1f3d9513624e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.3-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.3-rc-3-bin.zip.sha256", + "checksum": "3e3fad053c2d14a7dbe49006d09034576517e1f6c3f15aca7e5c594f17d08bbf" + }, + { + "version": "4.3-rc-2", + "buildTime": "20171018073714+0000", + "commitId": "3fb6d5b8810eeecce1472faa7f12ef1318870d9d", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.3-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.3-rc-2-bin.zip.sha256", + "checksum": "e55a78b879a5d45840003a1692fb00d1d1780298bcd696c7f10370e7922aad4f" + }, + { + "version": "4.3-rc-1", + "buildTime": "20171012161416+0000", + "commitId": "168523089264845c0560d994b565cae4c6e93563", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.3-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.3-rc-1-bin.zip.sha256", + "checksum": "a2fbaa80f98b59509e3f956c9fdaeb593516ea633ce80946735fa7cb7dd74a55" + }, + { + "version": "4.2.1", + "buildTime": "20171002153621+0000", + "commitId": "a88ebd6be7840c2e59ae4782eb0f27fbe3405ddf", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.2.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.2.1-bin.zip.sha256", + "checksum": "b551cc04f2ca51c78dd14edb060621f0e5439bdfafa6fd167032a09ac708fbc0", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.2.1-wrapper.jar.sha256", + "wrapperChecksum": "c536e519e65a4bb787e071c6a90d23bd219c9d409a2123db649d3684acbf3ae7" + }, + { + "version": "4.2", + "buildTime": "20170920144823+0000", + "commitId": "5ba503cc17748671c83ce35d7da1cffd6e24dfbd", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.2-bin.zip.sha256", + "checksum": "515dd63d32e55a9c05667809c5e40a947529de3054444ad274b3b75af5582eae", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.2-wrapper.jar.sha256", + "wrapperChecksum": "53aa048fef3c06a8442c6a44df5edd2e8c791ee883e42ded6189c7eed112095d" + }, + { + "version": "4.2-rc-2", + "buildTime": "20170913122310+0000", + "commitId": "e7e9502dbcf5bf8e4ca5e0c1763a301372a9ed83", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.2-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.2-rc-2-bin.zip.sha256", + "checksum": "e32c378a7e49e074647c59a2a618444db3871ca05e4a151122041252f2dcb640" + }, + { + "version": "4.2-rc-1", + "buildTime": "20170907081216+0000", + "commitId": "73d54c86eca92ae26decccd774f49bfc2b01c314", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.2-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.2-rc-1-bin.zip.sha256", + "checksum": "7d4f7ebe327047eeb713566de36b466f6f966aa9fd471d0b5a89f76337845829" + }, + { + "version": "4.1", + "buildTime": "20170807143848+0000", + "commitId": "941559e020f6c357ebb08d5c67acdb858a3defc2", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.1-bin.zip.sha256", + "checksum": "d55dfa9cfb5a3da86a1c9e75bb0b9507f9a8c8c100793ccec7beb6e259f9ed43", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-4.1-wrapper.jar.sha256", + "wrapperChecksum": "f4d953f31fbf6c38a8c330d19171c8ba6e0d1ff59d4d5c5c2d3ed821c9f3d5a3" + }, + { + "version": "4.1-rc-2", + "buildTime": "20170731142943+0000", + "commitId": "941559e020f6c357ebb08d5c67acdb858a3defc2", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.1-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.1-rc-2-bin.zip.sha256", + "checksum": "c3ea162956646b681bdbf697e45737e654492c825b7958892b44be286a4594f6" + }, + { + "version": "4.0.2", + "buildTime": "20170726161918+0000", + "commitId": "108c593aa7b43852f39045337ee84ee1d87c87fd", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.0.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.0.2-bin.zip.sha256", + "checksum": "79ac421342bd11f6a4f404e0988baa9c1f5fabf07e3c6fa65b0c15c1c31dda22" + }, + { + "version": "4.1-rc-1", + "buildTime": "20170720152215+0000", + "commitId": "e9f4cb3be4b0a16506ad54b44485b7f0862f6c59", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.1-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.1-rc-1-bin.zip.sha256", + "checksum": "782866e286d0e7d527f8110337e96e7e0c886376d9a35966d74ca4024ede7153" + }, + { + "version": "4.0.1", + "buildTime": "20170707140241+0000", + "commitId": "38e5dc0f772daecca1d2681885d3d85414eb6826", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.0.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.0.1-bin.zip.sha256", + "checksum": "d717e46200d1359893f891dab047fdab98784143ac76861b53c50dbd03b44fd4" + }, + { + "version": "4.1-milestone-1", + "buildTime": "20170620170546+0000", + "commitId": "3ad5af92d482b963cc6b00fb5ad53b608606d657", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "4.1", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.1-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.1-milestone-1-bin.zip.sha256", + "checksum": "48edfe37620b5de2fd6e111a65b384dd730c377890c26a01a1ae55ae0220abc1" + }, + { + "version": "3.5.1", + "buildTime": "20170616143627+0000", + "commitId": "d4c3bb4eac74bd0a3c70a0d213709e484193e251", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.5.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.5.1-bin.zip.sha256", + "checksum": "8dce35f52d4c7b4a4946df73aa2830e76ba7148850753d8b5e94c5dc325ceef8" + }, + { + "version": "4.0", + "buildTime": "20170614151108+0000", + "commitId": "316546a5fcb4e2dfe1d6aa0b73a4e09e8cecb5a5", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.0-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.0-bin.zip.sha256", + "checksum": "56bd2dde29ba2a93903c557da1745cafd72cdd8b6b0b83c05a40ed7896b79dfe" + }, + { + "version": "4.0-rc-3", + "buildTime": "20170612150444+0000", + "commitId": "78d6b5b1e5cdb3dd4e233eb2f2e2bf721c53ca9e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.0-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.0-rc-3-bin.zip.sha256", + "checksum": "f4229169204b98dbc2718386b36538cef2fd28e249aec4e9472eb820a93beeb3" + }, + { + "version": "4.0-rc-2", + "buildTime": "20170607152236+0000", + "commitId": "14679a04a9d5afc2038c57d9392a36d8cc2e850e", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.0-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.0-rc-2-bin.zip.sha256", + "checksum": "35f92e48b73f6f6d99997094c7dec298fbdae5a3ee989805c6cde0abe24ff6fe" + }, + { + "version": "4.0-rc-1", + "buildTime": "20170530162617+0000", + "commitId": "f114de85c48350feb8cf352522f1af471e832a33", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "4.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.0-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.0-rc-1-bin.zip.sha256", + "checksum": "19d7be3fd349bcf0d36d5a29ded4dd704e5d391e8e8751f32d5bb199636df053" + }, + { + "version": "4.0-milestone-2", + "buildTime": "20170517143324+0000", + "commitId": "0e3bb607e7ee1e805455d1c6388f6830f0ab9eca", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "4.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.0-milestone-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.0-milestone-2-bin.zip.sha256", + "checksum": "87120d217d97704702136984e51002d979fec49ee2ff1524ed2769d98dd1f5c5" + }, + { + "version": "4.0-milestone-1", + "buildTime": "20170428074509+0000", + "commitId": "c1e7532b308e20803a3678ad5b4cfbe682dbb9fc", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "4.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-4.0-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-4.0-milestone-1-bin.zip.sha256", + "checksum": "56a98b39db79d947e9227646b3fc72376bdc3daf09ce4d885973510057841738" + }, + { + "version": "3.5", + "buildTime": "20170410133725+0000", + "commitId": "b762622a185d59ce0cfc9cbc6ab5dd22469e18a6", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.5-bin.zip.sha256", + "checksum": "0b7450798c190ff76b9f9a3d02e18b33d94553f708ebc08ebe09bdf99111d110" + }, + { + "version": "3.5-rc-3", + "buildTime": "20170404150413+0000", + "commitId": "b762622a185d59ce0cfc9cbc6ab5dd22469e18a6", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.5-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.5-rc-3-bin.zip.sha256", + "checksum": "add85f5073e3051a23008e9d371fc49bbb6719b503c9f43a7cf6ab61337e05b9" + }, + { + "version": "3.5-rc-2", + "buildTime": "20170327155623+0000", + "commitId": "ec63970cd167993d3dcda346a1d00a286a23b1c9", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.5-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.5-rc-2-bin.zip.sha256", + "checksum": "c23b319547d87b35f16d0bd251a13495b8bc26fe8c7356f678bae766bb5f6ab7" + }, + { + "version": "3.5-rc-1", + "buildTime": "20170322151607+0000", + "commitId": "f1f4d6c61299f1225fb2190ca02802c8b821c5ec", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.5-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.5-rc-1-bin.zip.sha256", + "checksum": "ed17b488dcc8969503aabcce7e1462fb99518e2dddd6e766b0a18e99685dad50" + }, + { + "version": "3.4.1", + "buildTime": "20170303194541+0000", + "commitId": "9eb76efdd3d034dc506c719dac2955efb5ff9a93", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.4.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.4.1-bin.zip.sha256", + "checksum": "db1db193d479cc1202be843f17e4526660cfb0b21b57d62f3a87f88c878af9b2" + }, + { + "version": "3.4", + "buildTime": "20170220144926+0000", + "commitId": "73f32d68824582945f5ac1810600e8d87794c3d4", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.4-bin.zip.sha256", + "checksum": "72d0cd4dcdd5e3be165eb7cd7bbd25cf8968baf400323d9ab1bba622c3f72205" + }, + { + "version": "3.4-rc-3", + "buildTime": "20170213145527+0000", + "commitId": "6e76fb227406ebcf649a0cb109747149677c4f27", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.4-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.4-rc-3-bin.zip.sha256", + "checksum": "c492b318d35f65ba1038289067e04d08598d85e0ea98b33430effd0f1b04bc7c" + }, + { + "version": "3.4-rc-2", + "buildTime": "20170206211728+0000", + "commitId": "4a4d6ae7c800239c63561020194df4d7a5e82cd7", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.4-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.4-rc-2-bin.zip.sha256", + "checksum": "a6184aab4ea11f0264711e989dabc4486045bc6aaaa30110fff3fd4b5250061f" + }, + { + "version": "3.4-rc-1", + "buildTime": "20170126154849+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.4-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.4-rc-1-bin.zip.sha256", + "checksum": "c8323ca48a9f3e7993bce566e3edc464f459a5a8bfcedbd6ce7e8b7d0c45fd46" + }, + { + "version": "3.3", + "buildTime": "20170103153104+0000", + "commitId": "075893a3d0798c0c1f322899b41ceca82e4e134b", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.3-bin.zip.sha256", + "checksum": "c58650c278d8cf0696cab65108ae3c8d95eea9c1938e0eb8b997095d5ca9a292" + }, + { + "version": "3.3-rc-1", + "buildTime": "20161219160724+0000", + "commitId": "f381de5273f05b2e7075bbd79f33e8be31247bfc", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.3-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.3-rc-1-bin.zip.sha256", + "checksum": "845135efa934b533f732cb96a34538f10c5703cea39474c148e18ac69d4db49f" + }, + { + "version": "3.2.1", + "buildTime": "20161122151954+0000", + "commitId": "83b485b914fd4f335ad0e66af9d14aad458d2cc5", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.2.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.2.1-bin.zip.sha256", + "checksum": "9843a3654d3e57dce54db06d05f18b664b95c22bf90c6becccb61fc63ce60689", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-3.2.1-wrapper.jar.sha256", + "wrapperChecksum": "020ef0245a07b33ca48b12f59415e7e5083cf701ef02690464a8cc2ab3984608" + }, + { + "version": "3.2", + "buildTime": "20161114123259+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.2-bin.zip.sha256", + "checksum": "5321b36837226dc0377047a328f12010f42c7bf88ee4a3b1cee0c11040082935", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-3.2-wrapper.jar.sha256", + "wrapperChecksum": "d2d3abae74e89cc4200f48d4a08a7e5960363c33ee62272ef5ffbb39f4c7f83e" + }, + { + "version": "3.2-rc-3", + "buildTime": "20161107153233+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.2-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.2-rc-3-bin.zip.sha256", + "checksum": "dadae3f8ff6c60637ac749693a074ae181315a7f43c5a6d313565371cbcab740" + }, + { + "version": "3.2-rc-2", + "buildTime": "20161031160822+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.2-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.2-rc-2-bin.zip.sha256", + "checksum": "45e362f471b9d112f820f3d4cf3901f9c5b112efb309324963078f53a80cff40" + }, + { + "version": "3.2-rc-1", + "buildTime": "20161024194725+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.2-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.2-rc-1-bin.zip.sha256", + "checksum": "fe2ec80d91ab79ddb72e30d25e3646091fafa7cac379c1f46b743bcad52ed4f3" + }, + { + "version": "3.1", + "buildTime": "20160919105353+0000", + "commitId": "13f38ba699afd86d7cdc4ed8fd7dd3960c0b1f97", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.1-bin.zip.sha256", + "checksum": "c7de3442432253525902f7e8d7eac8b5fd6ce1623f96d76916af6d0e383010fc", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-3.1-wrapper.jar.sha256", + "wrapperChecksum": "0f49043be582d7a39b671f924c66bd9337b92fa88ff5951225acc60560053067" + }, + { + "version": "3.1-rc-1", + "buildTime": "20160912123424+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.1-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.1-rc-1-bin.zip.sha256", + "checksum": "9d67811a2dee405c920e6bced2d687142e2378eb33c3af960bdbaef39bcb2485" + }, + { + "version": "3.0", + "buildTime": "20160815131501+0000", + "commitId": "ad76ba00f59ecb287bd3c037bd25fc3df13ca558", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.0-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.0-bin.zip.sha256", + "checksum": "39c906941a474444afbddc38144ed44166825acb0a57b0551dddb04bbf157f80", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-3.0-wrapper.jar.sha256", + "wrapperChecksum": "42d7a2f636983aa09d21dfeb6e90d21d7a8dad905351390643ce60cc82c8f8a9" + }, + { + "version": "3.0-rc-2", + "buildTime": "20160808133410+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.0-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.0-rc-2-bin.zip.sha256", + "checksum": "874e3bb85a85961f17cb371cd1291f9c0015bcc1e4bcc9df6e2c29b249438a73" + }, + { + "version": "3.0-rc-1", + "buildTime": "20160802061335+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "3.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.0-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.0-rc-1-bin.zip.sha256", + "checksum": "98c51e7f465b61d17578098f9ca8dc081014a551fb4dff66cce52fbfcb23376f" + }, + { + "version": "2.14.1", + "buildTime": "20160718063837+0000", + "commitId": "d9e2113d9fb05a5caabba61798bdb8dfdca83719", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.14.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.14.1-bin.zip.sha256", + "checksum": "cfc61eda71f2d12a572822644ce13d2919407595c2aec3e3566d2aab6f97ef39", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.14.1-wrapper.jar.sha256", + "wrapperChecksum": "8e47da0b2656354d059609cae9d44b196d4f9b14512e688ffee4e0eb7e723ae9" + }, + { + "version": "2.14.1-rc-2", + "buildTime": "20160711105827+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.14.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.14.1-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.14.1-rc-2-bin.zip.sha256", + "checksum": "784175796a5dc8180c90f3e26249e858f62d400aaec3db81153992f9d749cda6" + }, + { + "version": "2.14.1-rc-1", + "buildTime": "20160629051303+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.14.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.14.1-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.14.1-rc-1-bin.zip.sha256", + "checksum": "c20590dc930c78d21218d10ddf2c637ca0a2ee895e9c3476b670789aa60b5da4" + }, + { + "version": "3.0-milestone-2", + "buildTime": "20160621224128+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "3.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.0-milestone-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.0-milestone-2-bin.zip.sha256", + "checksum": "5c3e8e9a38c92ae85e05df609c6c1b6f51e5a08b39a26d61bd8a7044268135e7" + }, + { + "version": "2.14", + "buildTime": "20160614071637+0000", + "commitId": "cba5fea19f1e0c6a00cc904828a6ec4e11739abc", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.14-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.14-bin.zip.sha256", + "checksum": "993b4f33b652c689e9721917d8e021cab6bbd3eae81b39ab2fd46fdb19a928d5", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.14-wrapper.jar.sha256", + "wrapperChecksum": "b5ca811c057b3eb4164c78f4155d667c6092ff98ba91a4c90d29e127426f37a7" + }, + { + "version": "2.14-rc-6", + "buildTime": "20160610181946+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.14", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.14-rc-6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.14-rc-6-bin.zip.sha256", + "checksum": "f26dd25087dc68bd41ab5fdf31532eaf682c3b2693052d4cf9f7c727e2a47231" + }, + { + "version": "3.0-milestone-1", + "buildTime": "20160608013148+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "3.0", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-3.0-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-3.0-milestone-1-bin.zip.sha256", + "checksum": "dfff9f7fbf75d025cf5b4f7b61ea9e24757f74a6934ba7249658e7e2de9d329f" + }, + { + "version": "2.14-rc-5", + "buildTime": "20160607135817+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.14", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.14-rc-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.14-rc-5-bin.zip.sha256", + "checksum": "dcdd1021345cfabd2c06a345700afe537bde5478cfb8c3ac59d6348eeb0647e9" + }, + { + "version": "2.14-rc-4", + "buildTime": "20160603110827+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.14", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.14-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.14-rc-4-bin.zip.sha256", + "checksum": "471424c0998851572c8b0ac71807215fc717de1373dcb5b64889e0aa5d147d26" + }, + { + "version": "2.14-rc-3", + "buildTime": "20160530112111+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.14", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.14-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.14-rc-3-bin.zip.sha256", + "checksum": "6b076728aef0adb281bcc31db7b4f83a061caaa36d61f00dc43e606a3de85578" + }, + { + "version": "2.14-rc-2", + "buildTime": "20160527175624+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.14", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.14-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.14-rc-2-bin.zip.sha256", + "checksum": "eb824186223dec65fc3f9bb2755934b38c1cd005a0e6f0d80e282a2390214735" + }, + { + "version": "2.14-rc-1", + "buildTime": "20160518093824+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.14", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.14-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.14-rc-1-bin.zip.sha256", + "checksum": "2ff85eb9eda60f13bc8debec69849e1e2a72b7bfc5af5d26e61a293b5dcbceba" + }, + { + "version": "2.13", + "buildTime": "20160425041010+0000", + "commitId": "3b427b1481e46232107303c90be7b05079b05b1c", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.13-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.13-bin.zip.sha256", + "checksum": "0f665ec6a5a67865faf7ba0d825afb19c26705ea0597cec80dd191b0f2cbb664", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.13-wrapper.jar.sha256", + "wrapperChecksum": "0c3c576e28b44eddcab6b8b4854f484363dfbcd047657d41654e839835da2c53" + }, + { + "version": "2.13-rc-2", + "buildTime": "20160419145240+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.13", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.13-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.13-rc-2-bin.zip.sha256", + "checksum": "949853dedce0b63898a1aedde39a8e8610ca061a59268a9bc70b496f91e60854" + }, + { + "version": "2.13-rc-1", + "buildTime": "20160406110211+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.13", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.13-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.13-rc-1-bin.zip.sha256", + "checksum": "75941a17c6db68b83e82ca27b8d813cc8855b3b8999228b82b1704798f2d4b6b" + }, + { + "version": "2.12", + "buildTime": "20160314083203+0000", + "commitId": "b29fbb64ad6b068cb3f05f7e40dc670472129bc0", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.12-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.12-bin.zip.sha256", + "checksum": "e77064981906cd0476ff1e0de3e6fef747bd18e140960f1915cca8ff6c33ab5c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.12-wrapper.jar.sha256", + "wrapperChecksum": "4894520b03c007bf38e983bf933320c483a9790010d997029fa8985dc6128559" + }, + { + "version": "2.12-rc-1", + "buildTime": "20160307174118+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.12", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.12-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.12-rc-1-bin.zip.sha256", + "checksum": "bb4ccf5399301d34a1d2a6ae6ae6dfb4bd4db61b499581a1bcbd976008a278a2" + }, + { + "version": "2.11", + "buildTime": "20160208075916+0000", + "commitId": "584db1c7c90bdd1de1d1c4c51271c665bfcba978", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.11-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.11-bin.zip.sha256", + "checksum": "8d7437082356c9fd6309a4479c8db307673965546daea445c6c72759cd6b1ed6", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.11-wrapper.jar.sha256", + "wrapperChecksum": "0bc7b16a0a3fa52af674de44d1fea48abc4dee3431f3d4829cd9ea329836e596" + }, + { + "version": "2.11-rc-3", + "buildTime": "20160203190922+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.11", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.11-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.11-rc-3-bin.zip.sha256", + "checksum": "6191865dbe7e2e45125285d6c4316f99d02280dadf8375c290c16e9c995c3188" + }, + { + "version": "2.11-rc-2", + "buildTime": "20160202162431+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.11", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.11-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.11-rc-2-bin.zip.sha256", + "checksum": "7112bffc0e69c35040d4f0a6e71c3593a629831d698e8e85797b2afafae18cee" + }, + { + "version": "2.11-rc-1", + "buildTime": "20160120084154+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.11", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.11-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.11-rc-1-bin.zip.sha256", + "checksum": "4af1d57f3f3679452944cfeac172949991ff76257b6e511287b2c02951dd7706" + }, + { + "version": "2.10", + "buildTime": "20151221211504+0000", + "commitId": "276bdcded730f53aa8c11b479986aafa58e124a6", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.10-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.10-bin.zip.sha256", + "checksum": "66406247f745fc6f05ab382d3f8d3e120c339f34ef54b86f6dc5f6efc18fbb13", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.10-wrapper.jar.sha256", + "wrapperChecksum": "16caeaf66d57a0d1d2087fef6a97efa62de8da69afa5b908f40db35afc4342da" + }, + { + "version": "2.10-rc-2", + "buildTime": "20151218164026+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.10", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.10-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.10-rc-2-bin.zip.sha256", + "checksum": "49650433ba07e8d1cdcb4a3ee6568fbf82ccff61b8cb76e2e7040a2c2f1a9c7b" + }, + { + "version": "2.10-rc-1", + "buildTime": "20151208224811+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.10", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.10-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.10-rc-1-bin.zip.sha256", + "checksum": "f1799317f138612764db1c9cf53638e100038b3494803bf38966d55e8db58cef" + }, + { + "version": "2.9", + "buildTime": "20151117070217+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.9-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.9-bin.zip.sha256", + "checksum": "c9159ec4362284c0a38d73237e224deae6139cbde0db4f0f44e1c7691dd3de2f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.9-wrapper.jar.sha256", + "wrapperChecksum": "b92386e36a96da6be89e91f71087d1394a26c0450231ba0b22e28ee1ee8fa14b" + }, + { + "version": "2.9-rc-1", + "buildTime": "20151103230218+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.9-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.9-rc-1-bin.zip.sha256", + "checksum": "d278e80f9f0590f6eaa9c8b9c69c4d66a281c5a9bbb736524fdba5f74c4875a1" + }, + { + "version": "2.8", + "buildTime": "20151020034636+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.8-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.8-bin.zip.sha256", + "checksum": "a88db9c2f104defdaa8011c58cf6cda6c114298ae3695ecfb8beb30da3a903cb", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.8-wrapper.jar.sha256", + "wrapperChecksum": "198159fcd7d29533c0d37423d66c44729982d5280c9e2c7c5f4b7bc6a9317f6b" + }, + { + "version": "2.8-rc-2", + "buildTime": "20151015124208+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.8-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.8-rc-2-bin.zip.sha256", + "checksum": "659d6057613a33211f91ce17ce99cfeea03171db771ce842a1968ec49be17696" + }, + { + "version": "2.8-rc-1", + "buildTime": "20150930171102+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.8-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.8-rc-1-bin.zip.sha256", + "checksum": "048735c9f06c654b925156e8ca6237c623982ac3b425c3925b8097c13c77dfab" + }, + { + "version": "2.7", + "buildTime": "20150914072616+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.7-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.7-bin.zip.sha256", + "checksum": "cde43b90945b5304c43ee36e58aab4cc6fb3a3d5f9bd9449bb1709a68371cb06", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.7-wrapper.jar.sha256", + "wrapperChecksum": "d7e1975ccf2dc079d4f0b1010febdad466506d1565c5aa8017c88ebc5e471604" + }, + { + "version": "2.7-rc-2", + "buildTime": "20150905140615+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.7-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.7-rc-2-bin.zip.sha256", + "checksum": "0854997cd8d77f79a58f3ebc2f19b0b9891d30579fe5392cb5a746b563c20e78" + }, + { + "version": "2.7-rc-1", + "buildTime": "20150828140928+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.7-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.7-rc-1-bin.zip.sha256", + "checksum": "5f54dea2792e1c94bbf2f76189a6b8404cc2492a56ffc06bda6dd4aef2d9d8f8" + }, + { + "version": "2.6", + "buildTime": "20150810131506+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.6-bin.zip.sha256", + "checksum": "18a98c560af231dfa0d3f8e0802c20103ae986f12428bb0a6f5396e8f14e9c83", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.6-wrapper.jar.sha256", + "wrapperChecksum": "695089a2b306f55f0bd63140fbcc5ead8c383819018188ce484cd5a055bec6e4" + }, + { + "version": "2.6-rc-2", + "buildTime": "20150804104806+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.6-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.6-rc-2-bin.zip.sha256", + "checksum": "82ad20a1c6408176b50e9c07dae8a1c1e2bf9cdd02d11ace8ee92539672f45db" + }, + { + "version": "2.6-rc-1", + "buildTime": "20150728171643+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.6-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.6-rc-1-bin.zip.sha256", + "checksum": "5d98379be8076d4c11eaaae8a17c6cbe58cc3d6d76ddd08d962ce8e76c2df67e" + }, + { + "version": "2.5", + "buildTime": "20150708073837+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.5-bin.zip.sha256", + "checksum": "3f953e0cb14bb3f9ebbe11946e84071547bf5dfd575d90cfe9cc4e788da38555", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.5-wrapper.jar.sha256", + "wrapperChecksum": "718d7b25ea60b357fc4cb2212ce10b3f03dfd0e6fe5f23f565b15553ec46bb7e" + }, + { + "version": "2.5-rc-2", + "buildTime": "20150702151559+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.5-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.5-rc-2-bin.zip.sha256", + "checksum": "8807bc2e29e215e5d4760fb665815477ff7a07b7fddf3d56c38260e5981a2825" + }, + { + "version": "2.5-rc-1", + "buildTime": "20150623180452+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.5-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.5-rc-1-bin.zip.sha256", + "checksum": "1c712b049108d6d0630c78ada345d9adbfc3e1ca4fc6a2bcaecca25634292809" + }, + { + "version": "2.4", + "buildTime": "20150505080924+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.4-bin.zip.sha256", + "checksum": "c4eaecc621a81f567ded1aede4a5ddb281cc02a03a6a87c4f5502add8fc2f16f", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.4-wrapper.jar.sha256", + "wrapperChecksum": "98420079ffe3e24b1013180d9b9bc2e2ee6a9d867ee232004b75a961d9c18e27" + }, + { + "version": "2.4-rc-2", + "buildTime": "20150429045020+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.4-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.4-rc-2-bin.zip.sha256", + "checksum": "f36496775b847302e7081b6b051086296882804c7365c0b5e073227ff1cec8ac" + }, + { + "version": "2.4-rc-1", + "buildTime": "20150423031523+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.4-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.4-rc-1-bin.zip.sha256", + "checksum": "ebd8ebc8954b0fb30696d561e41d6a717db42af6c0640099af8e688b10813135" + }, + { + "version": "2.3", + "buildTime": "20150216050933+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.3-bin.zip.sha256", + "checksum": "010dd9f31849abc3d5644e282943b1c1c355f8e2635c5789833979ce590a3774", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.3-wrapper.jar.sha256", + "wrapperChecksum": "b18a1114ebe81fb7502d40ad9a4f86cef82fff244a865ad45533b4d5e7ff0cc8" + }, + { + "version": "2.3-rc-4", + "buildTime": "20150211163922+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.3-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.3-rc-4-bin.zip.sha256", + "checksum": "34878db3896bd7d2b29406cbdb0c156078ab62f3361f9b4df689cfb3814d8906" + }, + { + "version": "2.3-rc-3", + "buildTime": "20150208183759+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.3-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.3-rc-3-bin.zip.sha256", + "checksum": "6ce92b77f67f3bf0f543cfb723796919964b969b454e630c8e8b882692e90f23" + }, + { + "version": "2.3-rc-2", + "buildTime": "20150204105413+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.3-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.3-rc-2-bin.zip.sha256", + "checksum": "1a90fbaf3db2b0b86d7b8b7df5c1760732ef94f984ffd71264b1821076e268c9" + }, + { + "version": "2.3-rc-1", + "buildTime": "20150127140232+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.3-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.3-rc-1-bin.zip.sha256", + "checksum": "a78846df63ed81971eed2db62efca4ce0d595a53a9f1d08e341c7ddae0c04b56" + }, + { + "version": "2.2.1", + "buildTime": "20141124094535+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.2.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.2.1-bin.zip.sha256", + "checksum": "420aa50738299327b611c10b8304b749e8d3a579407ee9e755b15921d95ff418", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.2.1-wrapper.jar.sha256", + "wrapperChecksum": "5f73d431fd1c5dcc2cf11555b8e486c43249c1099f678ccc6088b05be600a2e1" + }, + { + "version": "2.2.1-rc-1", + "buildTime": "20141117101237+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.2.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.2.1-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.2.1-rc-1-bin.zip.sha256", + "checksum": "65b87391af213341f19bf74b15f2a506a0136bb8aa466d87ac2b7d55d3ddab71" + }, + { + "version": "2.2", + "buildTime": "20141110133144+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.2-bin.zip.sha256", + "checksum": "91e5655fe11ef414449f218c4fa2985b3a49b7903c57556da109c84fa26e1dfb", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.2-wrapper.jar.sha256", + "wrapperChecksum": "fa9b4294d47cf8db7039cb9b2435de3dd1accb0d3d67926705775a0579dfa397" + }, + { + "version": "2.2-rc-2", + "buildTime": "20141103170404+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.2-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.2-rc-2-bin.zip.sha256", + "checksum": "d430d7e508116a7c917c394879f85c29e1bdce921f15d12ddf8473fab0564d92" + }, + { + "version": "2.2-rc-1", + "buildTime": "20141020163257+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.2-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.2-rc-1-bin.zip.sha256", + "checksum": "58292023856cc9ceb7e6376efece7ee3c2f95b7d1986d7f5f95b7db5f2120767" + }, + { + "version": "2.1", + "buildTime": "20140908104039+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.1-bin.zip.sha256", + "checksum": "3eee4f9ea2ab0221b89f8e4747a96d4554d00ae46d8d633f11cfda60988bf878", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.1-wrapper.jar.sha256", + "wrapperChecksum": "5e27c39c2336c25748f279d8b105162d14b1a39eb7839d0b658432282d0ce79f" + }, + { + "version": "2.1-rc-4", + "buildTime": "20140903092053+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.1-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.1-rc-4-bin.zip.sha256", + "checksum": "9894bc2d60e5a1cca564313f6e68af0b57cd21b95cd68e96c8bd215cab8a944d" + }, + { + "version": "2.1-rc-3", + "buildTime": "20140901103549+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.1-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.1-rc-3-bin.zip.sha256", + "checksum": "8a6839bac38e97d2b55fa1ad1e10c0223f3a1e39f4ced9178a8f666fd017829f" + }, + { + "version": "2.1-rc-2", + "buildTime": "20140828023229+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.1-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.1-rc-2-bin.zip.sha256", + "checksum": "6a641aa38dd88b572d1baa35ac14858b4d7f0f4b83f1677fbb3adfe4391950ce" + }, + { + "version": "2.1-rc-1", + "buildTime": "20140819194409+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.1-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.1-rc-1-bin.zip.sha256", + "checksum": "eeff5d7f43b4ef1c1c29916b29c50c4d8cda32b65ab4e322a6d50f04b7601ae1" + }, + { + "version": "2.0", + "buildTime": "20140701074534+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.0-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.0-bin.zip.sha256", + "checksum": "a1eb880c8755333c4d33c4351b269bebe517002532d3142c0b6164c9e8c081c3", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-2.0-wrapper.jar.sha256", + "wrapperChecksum": "80a33ca14e3bca3116bc8749550397f739f126190c82bb6399fdc8d10f49661f" + }, + { + "version": "2.0-rc-2", + "buildTime": "20140623080236+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.0-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.0-rc-2-bin.zip.sha256", + "checksum": "932fbabf535876be50ff1d07a4d7fab7f7ae03275a2c5615da2e8add5d4b7c76" + }, + { + "version": "2.0-rc-1", + "buildTime": "20140606070241+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "2.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-2.0-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-2.0-rc-1-bin.zip.sha256", + "checksum": "8240c8f325d0233146e1e21dab31de6b7e653870111187d911eaf4704798faec" + }, + { + "version": "1.12", + "buildTime": "20140429092431+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.12-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.12-bin.zip.sha256", + "checksum": "8734b13a401f4311ee418173ed6ca8662d2b0a535be8ff2a43ecb1c13cd406ea", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.12-wrapper.jar.sha256", + "wrapperChecksum": "dea5ceba47b58df0b7f69a65b24357527c1927ccc72b6d4ed90658d39e461b29" + }, + { + "version": "1.12-rc-2", + "buildTime": "20140423112055+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.12", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.12-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.12-rc-2-bin.zip.sha256", + "checksum": "886e40b53d772cacc0cf0a145d464790c125d2cf19c28d93f534eb2ae86186bc" + }, + { + "version": "1.12-rc-1", + "buildTime": "20140416084626+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.12", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.12-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.12-rc-1-bin.zip.sha256", + "checksum": "3f9f970be1b02e9d05c95344fb7fd468be7285d38f2e22ea194bc3e12207a250" + }, + { + "version": "1.11", + "buildTime": "20140211113439+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.11-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.11-bin.zip.sha256", + "checksum": "07e235df824964f0e19e73ea2327ce345c44bcd06d44a0123d29ab287fc34091", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.11-wrapper.jar.sha256", + "wrapperChecksum": "a14b54dd3790f5ce1dc08ebbf4b5bcc05f76c4554b43accb84696c970f29aba0" + }, + { + "version": "1.11-rc-1", + "buildTime": "20140131033453+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.11", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.11-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.11-rc-1-bin.zip.sha256", + "checksum": "d16d91f5081ce7665dca6562fb200d181f2abbb8c8ffef4ea8b9a3bad4079db4" + }, + { + "version": "1.10", + "buildTime": "20131217092815+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.10-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.10-bin.zip.sha256", + "checksum": "6e6db4fc595f27ceda059d23693b6f6848583950606112b37dfd0e97a0a0a4fe", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.10-wrapper.jar.sha256", + "wrapperChecksum": "6a6c15e222a0458aa33985b87f67954f4222410b43b1e26866197d0a77d93cbc" + }, + { + "version": "1.10-rc-2", + "buildTime": "20131211105454+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.10", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.10-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.10-rc-2-bin.zip.sha256", + "checksum": "6930c2882cf984a7c3ad49b31ed179224ff956d5844d228c814055ae88afa78e" + }, + { + "version": "1.10-rc-1", + "buildTime": "20131204154128+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.10", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.10-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.10-rc-1-bin.zip.sha256", + "checksum": "25ca44dbfe099013a0a94ebe098da8b8b279d2d38bcc3737039067f5fc88c1f1" + }, + { + "version": "1.9", + "buildTime": "20131119082002+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.9-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.9-bin.zip.sha256", + "checksum": "097ddc2bcbc9da2bb08cbf6bf8079585e35ad088bafd42e8716bc96405db98e9", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.9-wrapper.jar.sha256", + "wrapperChecksum": "134337ea7c13221f9d1a1c14288a5cf8af9f6060167b903b724b115cf5a0cf73" + }, + { + "version": "1.9-rc-4", + "buildTime": "20131118093242+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.9-rc-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.9-rc-4-bin.zip.sha256", + "checksum": "5bdcf356f795ee85607d6aaa5534c26423ce8bf6f2bbd1eda0fb04ae8eebd943" + }, + { + "version": "1.9-rc-3", + "buildTime": "20131107122642+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.9-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.9-rc-3-bin.zip.sha256", + "checksum": "4690509db43b713764ce869977414df97c692594c7ba2fa7e421ad5757b256a7" + }, + { + "version": "1.9-rc-2", + "buildTime": "20131028093320+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.9-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.9-rc-2-bin.zip.sha256", + "checksum": "356844c3e7f7b16d620348f64fdbc8c39455d805855f6975c6f9cc6a357cc89c" + }, + { + "version": "1.9-rc-1", + "buildTime": "20131023094618+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.9-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.9-rc-1-bin.zip.sha256", + "checksum": "667fa5360aea327f57df76a471886791756a0afb2f80fceef15efba1b1588b41" + }, + { + "version": "1.8", + "buildTime": "20130924073233+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.8-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.8-bin.zip.sha256", + "checksum": "a342bbfa15fd18e2482287da4959588f45a41b60910970a16e6d97959aea5703", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.8-wrapper.jar.sha256", + "wrapperChecksum": "13f23a24252ddca0a0fabef212e3c854f5895b081c09d015c91587a5df9bf9f7" + }, + { + "version": "1.8-rc-2", + "buildTime": "20130919053314+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.8-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.8-rc-2-bin.zip.sha256", + "checksum": "7280197f1cdfdd00616cbbbcf16b078c1ed2bc92ec00c6b3a06b790d020995f8" + }, + { + "version": "1.8-rc-1", + "buildTime": "20130910130452+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.8", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.8-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.8-rc-1-bin.zip.sha256", + "checksum": "b4aaf215b700adbe6d4057bfb86361d3d1f9edc45f8ddc5a985cd5c65a6df35f" + }, + { + "version": "1.7", + "buildTime": "20130806111956+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.7-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.7-bin.zip.sha256", + "checksum": "360c97d51621b5a1ecf66748c718594e5f790ae4fbc1499543e0c006033c9d30", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.7-wrapper.jar.sha256", + "wrapperChecksum": "7af529cc3331d38b3d8f8344ddd9b2d3744542b55b68318abd8bb1a6f3812a1c" + }, + { + "version": "1.7-rc-2", + "buildTime": "20130729120421+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.7-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.7-rc-2-bin.zip.sha256", + "checksum": "db40dbf3ac4545372fdabafbb993344a2cef44ba6ff7436573bca2aba21fc611" + }, + { + "version": "1.7-rc-1", + "buildTime": "20130702145630+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.7", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.7-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.7-rc-1-bin.zip.sha256", + "checksum": "d69df2d9b36d0a9c72b0975e791a50f0639cdca8e48e7df7e9aaf6c9d87f176f" + }, + { + "version": "1.6", + "buildTime": "20130507091214+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.6-bin.zip.sha256", + "checksum": "de3e89d2113923dcc2e0def62d69be0947ceac910abd38b75ec333230183fac4", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.6-wrapper.jar.sha256", + "wrapperChecksum": "66dbcc9f0bc33789ea0bdb4d49c8ea037047bda5647ef696c47bdca65f785159" + }, + { + "version": "1.6-rc-1", + "buildTime": "20130430131900+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.6", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.6-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.6-rc-1-bin.zip.sha256", + "checksum": "3fdbb2d087d4916cb4162a6b87d0a1ffb6efcd296d9761001646fa0e21881629" + }, + { + "version": "1.5", + "buildTime": "20130327140935+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.5-bin.zip.sha256", + "checksum": "a5511a0659caa47d9d74fd2844c9da43157d2f78e63a0223c6289d88f5aaecbe", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.5-wrapper.jar.sha256", + "wrapperChecksum": "9598ffdf7ee26949d8b861ece267c70c802f21f7fc52596693834792d155195a" + }, + { + "version": "1.5-rc-3", + "buildTime": "20130321155709+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.5-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.5-rc-3-bin.zip.sha256", + "checksum": "7c99d43ccaea8215df7c5e82a3c1378908197925f4f4748315c75f69ae1dffbe" + }, + { + "version": "1.5-rc-2", + "buildTime": "20130317011516+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.5-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.5-rc-2-bin.zip.sha256", + "checksum": "f7feac0fc31d919f4f36dc0a6b3450948c40c01e785f590e3991d4178841d415" + }, + { + "version": "1.5-rc-1", + "buildTime": "20130311120320+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.5", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.5-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.5-rc-1-bin.zip.sha256", + "checksum": "5e25bf4ac2de6fdd7b0867b14144bd29d16b1e3390f1855b55855e0d7a2f7705" + }, + { + "version": "1.4", + "buildTime": "20130128034246+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.4-bin.zip.sha256", + "checksum": "cd99e85fbcd0ae8b99e81c9992a2f10cceb7b5f009c3720ef3a0078f4f92e94e", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.4-wrapper.jar.sha256", + "wrapperChecksum": "c95985b7b5684e133c5d45044fd90faaf6c8f7cd2493d61a11c2b8c5b71ef514" + }, + { + "version": "1.4-rc-3", + "buildTime": "20130125035146+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.4-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.4-rc-3-bin.zip.sha256", + "checksum": "0b7b24ff52d56586d6d3aae6b3ffdff5de279549e3b80105d159556057b11151" + }, + { + "version": "1.4-rc-2", + "buildTime": "20130122030632+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.4-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.4-rc-2-bin.zip.sha256", + "checksum": "47a90853ac8eda1294e6dc3334448584a7e48ec2c8e76acadcd05bb6f411424f" + }, + { + "version": "1.4-rc-1", + "buildTime": "20130117001257+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.4", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.4-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.4-rc-1-bin.zip.sha256", + "checksum": "133a12cb48dc0383d83ca84e92e8c555b0fdbad8d2b8e636216f739f2ef22921" + }, + { + "version": "1.3", + "buildTime": "20121120113738+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.3-bin.zip.sha256", + "checksum": "ada68561efbb9f1cae0f9063974cbde15c180351a2f92bc2f1106e39ddcae5ba", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.3-wrapper.jar.sha256", + "wrapperChecksum": "95513eccca99e1ae1aeadc4f69cabd0e7fb64821d3f26c46a489df844c8a7353" + }, + { + "version": "1.3-rc-2", + "buildTime": "20121115155343+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.3-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.3-rc-2-bin.zip.sha256", + "checksum": "46b3ff676c2a71f8aa4d5345e0b206920d7669f9b777d346dcebd85638afd3d0" + }, + { + "version": "1.3-rc-1", + "buildTime": "20121112135252+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.3", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.3-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.3-rc-1-bin.zip.sha256", + "checksum": "f699e313f4e4681c18e1f63074af1d011dd775d8de5ec39bbaab6ce3e2a1e1ee" + }, + { + "version": "1.2", + "buildTime": "20120912104602+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.2-bin.zip.sha256", + "checksum": "eb53da3704d24cabb7565f34a3bf16bcd863c4b0c139917606fb15d4f27c7bdf", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.2-wrapper.jar.sha256", + "wrapperChecksum": "5c91fa893665f3051eae14578fac2df14e737423387e75ffbeccd35f335a3d8b" + }, + { + "version": "1.2-rc-1", + "buildTime": "20120904174954+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.2", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.2-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.2-rc-1-bin.zip.sha256", + "checksum": "167410b26ff883d6531f74c13a6c0683f3f21013c8445f35db58ccac9613b788" + }, + { + "version": "1.1", + "buildTime": "20120731132432+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.1-bin.zip.sha256", + "checksum": "552c1fc9f3a1b9668b79cc447370f0263e664ffb6d5c6e1c21e77ce0c8a20d4c", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.1-wrapper.jar.sha256", + "wrapperChecksum": "22c56a9780daeee00e5bf31621f991b68e73eff6fe8afca628a1fe2c50c6038e" + }, + { + "version": "1.1-rc-2", + "buildTime": "20120726075103+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.1-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.1-rc-2-bin.zip.sha256", + "checksum": "78d904a6f0ec3231c4d032beddcfcee27046075624d724a9d087e0ad7e58d01d" + }, + { + "version": "1.1-rc-1", + "buildTime": "20120724134404+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.1", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.1-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.1-rc-1-bin.zip.sha256", + "checksum": "655c3b09260b0db10fa0563bc72fc05d5165b67734a87baa7aa9f708eeeb71ca" + }, + { + "version": "1.0", + "buildTime": "20120612025621+0200", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-bin.zip.sha256", + "checksum": "894bca0360a7e2040815096788f118a2dd106ff6694221b274efb9c32bce0384", + "wrapperChecksumUrl": "https://services.gradle.org/distributions/gradle-1.0-wrapper.jar.sha256", + "wrapperChecksum": "87e50531ca7aab675f5bb65755ef78328afd64cf0877e37ad876047a8a014055" + }, + { + "version": "1.0-rc-3", + "buildTime": "20120430015152+0200", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-rc-3-bin.zip.sha256", + "checksum": "a4b2a83bd7c173efc8722c111347283d26774a81508a445e4f234df98f711824" + }, + { + "version": "1.0-rc-2", + "buildTime": "20120425015237+0200", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-rc-2-bin.zip.sha256", + "checksum": "3ebb5367ede52e0f21246c3d06be70b7b66a96f078b2a139fa5c8269d5076911" + }, + { + "version": "1.0-rc-1", + "buildTime": "20120411121324+0100", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "1.0", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-rc-1-bin.zip.sha256", + "checksum": "ae4ae81fb46b108f359efad5fbbcbec50940a793e5b2bfb9929d1e82f2e10c49" + }, + { + "version": "1.0-milestone-9", + "buildTime": "20120313171009+0100", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-9-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-9-bin.zip.sha256", + "checksum": "3499b262c1407d3965250aa40f5a154e77672a5f904e7d82e704ce9fa82719bc" + }, + { + "version": "1.0-milestone-8a", + "buildTime": "20120220185357+0100", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-8a-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-8a-bin.zip.sha256", + "checksum": "9dbace7ad2be4f4afdfde9aa495ff7a5f4cb2666ba5c7c21f01c119d9bbf6bc7" + }, + { + "version": "1.0-milestone-8", + "buildTime": "20120214022451+0100", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-8-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-8-bin.zip.sha256", + "checksum": "480c3fe8c832c16c0d1e0f53b33b6401827baebd73eae2d7a3e89102c1dd8603" + }, + { + "version": "1.0-milestone-7", + "buildTime": "20120105102443+0000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-7-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-7-bin.zip.sha256", + "checksum": "074c37682e560d398cefa857dcd8fc67c318297d6d5dcd25d9f090332cd7564c" + }, + { + "version": "1.0-milestone-6", + "buildTime": "20111117065412+0100", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-6-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-6-bin.zip.sha256", + "checksum": "9a2c3fca6aad82002a47cf6c721e6e5a45e0cbde3e280c8ef4eebefbe6797b1c" + }, + { + "version": "1.0-milestone-5", + "buildTime": "20111025055608+0200", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-5-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-5-bin.zip.sha256", + "checksum": "b00acd0fef3e6b014e43d62e7a3e6159eac037df28e18057a04dddc6728f2362" + }, + { + "version": "1.0-milestone-4", + "buildTime": "20110728103822+0200", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": true, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-4-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-4-bin.zip.sha256", + "checksum": "882c8115a214495f5b6b9df3ba70dec9345698651e8c320036eed272be55ae6a" + }, + { + "version": "1.0-milestone-3", + "buildTime": "20110425174011+1000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-3-bin.zip.sha256", + "checksum": "06d2ee96e45a62fce8ba1f964b083876b789c3f97932b189d57c5f545000d461" + }, + { + "version": "1.0-milestone-2", + "buildTime": "20110407163255+1000", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-2-bin.zip.sha256", + "checksum": "4fff2aa96eed3cec23537c807154ef3595ebaa99aa46d13dc479610ffcaa0574" + }, + { + "version": "1.0-milestone-1", + "buildTime": "20110227141320+1100", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-1.0-milestone-1-bin.zip.sha256", + "checksum": "c2153f01eabba7abd874e8ebad42b7cfe76c4fb978bdbe288757b522a8755d8c" + }, + { + "version": "0.9.2", + "buildTime": "20110123133421+1100", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-0.9.2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-0.9.2-bin.zip.sha256", + "checksum": "f94d7642348c558fc05ab5fd6fb947fb1ed8fed5931ddb73dd04fb0de22d669b" + }, + { + "version": "0.9.1", + "buildTime": "20110102114057+1100", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-0.9.1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-0.9.1-bin.zip.sha256", + "checksum": "5d48cba95db031ec109ae9ab60561e960b6507046036e8191aa78572ec27e2a5" + }, + { + "version": "0.9", + "buildTime": "20101219125006+1100", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-0.9-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-0.9-bin.zip.sha256", + "checksum": "994e46d4b467254a0f25ce92b602618331b9b3ac8b32a094fd84ff0e0ceec135" + }, + { + "version": "0.9-rc-3", + "buildTime": "20101120131750+1100", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "0.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-0.9-rc-3-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-0.9-rc-3-bin.zip.sha256", + "checksum": "3d07a0de2d8aa1c8ef7e6974c8eb84f47d0300d978c905d046a7d1087a0cb1a8" + }, + { + "version": "0.9-rc-2", + "buildTime": "20101027082405+1100", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "0.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-0.9-rc-2-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-0.9-rc-2-bin.zip.sha256", + "checksum": "94c0b7d51514062c8bdb7d1435a130f4eafda99214274b4330fb77a41b466a01" + }, + { + "version": "0.9-rc-1", + "buildTime": "20100804080433+1100", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "0.9", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-0.9-rc-1-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-0.9-rc-1-bin.zip.sha256", + "checksum": "344b93a2825d29ecacd8c9e9c69037b5badd87b219ef56d88b35b3ba07f9e714" + }, + { + "version": "0.8", + "buildTime": "20090928140159+0200", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-0.8-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-0.8-bin.zip.sha256", + "checksum": "940e623ea98e40ea9ad398770a6ebb91a61c0869d394dda81aa86b0f4f0025e7" + }, + { + "version": "0.7", + "buildTime": "20090720085013+0200", + "commitId": "", + "current": false, + "snapshot": false, + "nightly": false, + "releaseNightly": false, + "activeRc": false, + "rcFor": "", + "milestoneFor": "", + "broken": false, + "downloadUrl": "https://services.gradle.org/distributions/gradle-0.7-bin.zip", + "checksumUrl": "https://services.gradle.org/distributions/gradle-0.7-bin.zip.sha256", + "checksum": "4e354fcb0d5c0b0e7789cd6ee900456edaf993f6dd890c4a1c217d90d2a6a6ad" + } +] diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-all-checksum.properties b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-all-checksum.properties new file mode 100644 index 00000000000..c4a852da571 --- /dev/null +++ b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-all-checksum.properties @@ -0,0 +1,8 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionSha256Sum=443c9c8ee2ac1ee0e11881a40f2376d79c66386264a44b24a9f8ca67e633375f +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-all.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-all.properties b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-all.properties new file mode 100644 index 00000000000..be2dc79a8ad --- /dev/null +++ b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-all.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-all.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-bin-checksum.properties b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-bin-checksum.properties new file mode 100644 index 00000000000..3735f265b95 --- /dev/null +++ b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-bin-checksum.properties @@ -0,0 +1,8 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionSha256Sum=7197a12f450794931532469d4ff21a59ea2c1cd59a3ec3f89c035c3c420a6999 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-bin.properties b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-bin.properties new file mode 100644 index 00000000000..ff23a68d70f --- /dev/null +++ b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-bin.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-all-checksum.properties b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-all-checksum.properties new file mode 100644 index 00000000000..01450089d2c --- /dev/null +++ b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-all-checksum.properties @@ -0,0 +1,8 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionSha256Sum=f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365 +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-all.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-all.properties b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-all.properties new file mode 100644 index 00000000000..48b43d35063 --- /dev/null +++ b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-all.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-all.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-bin-checksum.properties b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-bin-checksum.properties new file mode 100644 index 00000000000..3e781fbad9c --- /dev/null +++ b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-bin-checksum.properties @@ -0,0 +1,8 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionSha256Sum=8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-bin.properties b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-bin.properties new file mode 100644 index 00000000000..2a84e188b85 --- /dev/null +++ b/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-bin.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists From 037bc898cc4139e49068495954972749072d2422 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Sun, 24 Aug 2025 12:47:52 +0200 Subject: [PATCH 02/18] Targeting smoke tests from fork --- .github/workflows/smoke.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index 62f425927d1..efeb060f830 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -14,7 +14,8 @@ concurrency: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SMOKE_TEST_BRANCH: main + SMOKE_TEST_OWNER: gmazzo + SMOKE_TEST_BRANCH: gradle-wrapper-support jobs: discover: runs-on: ubuntu-latest @@ -44,7 +45,7 @@ jobs: cat filtered.json # Curl the smoke-test tests directory to get a list of tests to run - URL=https://api.github.com/repos/dependabot/smoke-tests/contents/tests?ref=${{ env.SMOKE_TEST_BRANCH }} + URL=https://api.github.com/repos/${{ env.SMOKE_TEST_OWNER }}/smoke-tests/contents/tests?ref=${{ env.SMOKE_TEST_BRANCH }} curl $URL > tests.json # Select the names that match smoke-$test*.yaml, where $test is the .text value from filtered.json @@ -84,7 +85,7 @@ jobs: - name: Download test if: steps.cache-smoke-test.outputs.cache-hit != 'true' run: | - URL=https://api.github.com/repos/dependabot/smoke-tests/contents/tests/${{ matrix.suite.name }}?ref=${{ env.SMOKE_TEST_BRANCH }} + URL=https://api.github.com/repos/${{ env.SMOKE_TEST_OWNER }}/smoke-tests/contents/tests/${{ matrix.suite.name }}?ref=${{ env.SMOKE_TEST_BRANCH }} curl $(gh api $URL --jq .download_url) -o smoke.yaml - name: Cache Smoke Test From 8ec500da5719969d1f731db940258d7f6b56ac40 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Sun, 24 Aug 2025 12:57:12 +0200 Subject: [PATCH 03/18] Updated `DISTRIBUTION_URL_REGEX` with multiple literal --- .../dependabot/gradle/file_parser/distributions_finder.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb b/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb index 78f4786c3eb..8f1291e0f16 100644 --- a/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb +++ b/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb @@ -12,7 +12,11 @@ class DistributionsFinder extend T::Sig include Dependabot::Gradle::Distributions - DISTRIBUTION_URL_REGEX = %r{^#{Regexp.escape(DISTRIBUTIONS_URL)}/distributions/gradle-(?[\d.]+)-(?bin|all)\.zip$} # rubocop:disable Layout/LineLength + DISTRIBUTION_URL_REGEX = %r{ + ^#{Regexp.escape(DISTRIBUTIONS_URL)}/distributions/ + gradle-(?[\d.]+)- + (?bin|all)\.zip$ + }x sig { params(properties_file: DependencyFile).returns(T.nilable(Dependency)) } def self.resolve_dependency(properties_file) From d8d437ad858254f9164eb0fec4c421b53ec0fd8e Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Sun, 24 Aug 2025 22:16:18 +0200 Subject: [PATCH 04/18] Multi-directory support --- gradle/lib/dependabot/gradle/file_fetcher.rb | 4 +- .../update_checker/requirements_updater.rb | 49 +++++++++++-------- .../dependabot/gradle/file_fetcher_spec.rb | 16 ++++-- .../dependabot/gradle/file_parser_spec.rb | 19 ++++--- .../requirements_updater_spec.rb | 42 ++++++++++++++++ 5 files changed, 95 insertions(+), 35 deletions(-) diff --git a/gradle/lib/dependabot/gradle/file_fetcher.rb b/gradle/lib/dependabot/gradle/file_fetcher.rb index 9810a17c5ad..56606bea3a7 100644 --- a/gradle/lib/dependabot/gradle/file_fetcher.rb +++ b/gradle/lib/dependabot/gradle/file_fetcher.rb @@ -25,7 +25,7 @@ class FileFetcher < Dependabot::FileFetchers::Base T.let(%w(settings.gradle settings.gradle.kts).freeze, T::Array[String]) SUPPORTED_WRAPPER_PROPERTIES_FILE_PATH = - %w(/gradle/wrapper/gradle-wrapper.properties).freeze + %w(gradle/wrapper/gradle-wrapper.properties).freeze # For now Gradle only supports library .toml files in the main gradle folder SUPPORTED_VERSION_CATALOG_FILE_PATH = @@ -182,8 +182,6 @@ def subproject_buildfiles(root_dir) sig { params(root_dir: String).returns(T.nilable(DependencyFile)) } def wrapper_properties_file(root_dir) - return nil unless root_dir == "." - gradle_wrapper_properties_file(root_dir) rescue Dependabot::DependencyFileNotFound # Wrapper file is optional for Gradle diff --git a/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb b/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb index 988e936d60d..0f22265f866 100644 --- a/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb +++ b/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb @@ -119,27 +119,36 @@ def update_dynamic_requirement(req_string) sig { returns(T::Array[T::Hash[Symbol, T.untyped]]) } def updated_distribution_requirements - req_version = T.must(requirements[0]) + version = T.let(nil, T.nilable(String)) + distribution_url = T.let(nil, T.nilable(String)) + checksum = T.let(nil, T.nilable(String)) + checksum_url = T.let(nil, T.nilable(String)) - requirement = req_version[:requirement] - updated_requirement = update_exact_requirement(requirement) - - distribution_url = req_version[:source][:url] - updated_distribution_url = distribution_url.gsub(requirement, updated_requirement) - - req_version = req_version.merge( - requirement: updated_requirement, - source: req_version[:source].merge(url: updated_distribution_url) - ) - return [req_version] unless requirements.size > 1 - - req_checksum = T.must(requirements[1]) - checksum_url, checksum = DistributionsFinder.resolve_checksum(updated_distribution_url) - req_checksum = req_checksum.merge( - requirement: checksum, - source: req_checksum[:source].merge(url: checksum_url) - ) - [req_version, req_checksum] + requirements.map do |req| + source = req[:source] + next req unless source + + case source[:property] + when "distributionUrl" + if version.nil? + requirement = req[:requirement] + version = update_exact_requirement(requirement) + distribution_url = source[:url].gsub(requirement, version) + end + req.merge( + requirement: version, + source: source.merge(url: distribution_url) + ) + when "distributionUrlSha256Sum" + checksum_url, checksum = DistributionsFinder.resolve_checksum(T.must(distribution_url)) if checksum.nil? + req.merge( + requirement: checksum, + source: source.merge(url: checksum_url) + ) + else + next req + end + end end sig { override.returns(T::Class[Version]) } diff --git a/gradle/spec/dependabot/gradle/file_fetcher_spec.rb b/gradle/spec/dependabot/gradle/file_fetcher_spec.rb index 3f8f91ebb0e..29d32b92eeb 100644 --- a/gradle/spec/dependabot/gradle/file_fetcher_spec.rb +++ b/gradle/spec/dependabot/gradle/file_fetcher_spec.rb @@ -136,6 +136,7 @@ def stub_no_content_request(path) before do stub_content_request("buildSrc?ref=sha", "contents_java.json") stub_content_request("buildSrc/build.gradle?ref=sha", "contents_java_basic_buildfile.json") + stub_no_content_request("buildSrc/gradle/wrapper?ref=sha") stub_no_content_request("buildSrc/gradle.lockfile?ref=sha") end @@ -167,6 +168,7 @@ def stub_no_content_request(path) stub_content_request("?ref=sha", "contents_java_with_buildsrc_and_settings.json") stub_content_request("settings.gradle?ref=sha", "contents_java_settings_explicit_buildsrc.json") stub_content_request("included?ref=sha", "contents_java.json") + stub_no_content_request("included/gradle/wrapper?ref=sha") stub_content_request("included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/gradle.lockfile?ref=sha") end @@ -193,6 +195,7 @@ def stub_no_content_request(path) stub_content_request("app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("app/gradle.lockfile?ref=sha") stub_content_request("included?ref=sha", "contents_java_with_settings.json") + stub_no_content_request("included/gradle/wrapper?ref=sha") stub_content_request("included/settings.gradle?ref=sha", "contents_java_simple_settings.json") stub_content_request("included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/gradle.lockfile?ref=sha") @@ -222,12 +225,14 @@ def stub_no_content_request(path) stub_content_request("app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("app/gradle.lockfile?ref=sha") stub_content_request("included?ref=sha", "contents_java_with_settings.json") + stub_no_content_request("included/gradle/wrapper?ref=sha") stub_content_request("included/settings.gradle?ref=sha", "contents_java_simple_settings.json") stub_content_request("included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/gradle.lockfile?ref=sha") stub_content_request("included/app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/app/gradle.lockfile?ref=sha") stub_content_request("included2?ref=sha", "contents_java_with_settings.json") + stub_no_content_request("included2/gradle/wrapper?ref=sha") stub_content_request("included2/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included2/gradle.lockfile?ref=sha") stub_content_request("included2/settings.gradle?ref=sha", "contents_java_simple_settings.json") @@ -259,12 +264,14 @@ def stub_no_content_request(path) stub_content_request("app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("app/gradle.lockfile?ref=sha") stub_content_request("included?ref=sha", "contents_java_with_settings.json") + stub_no_content_request("included/gradle/wrapper?ref=sha") stub_content_request("included/settings.gradle?ref=sha", "contents_java_settings_1_included_build.json") stub_content_request("included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/gradle.lockfile?ref=sha") stub_content_request("included/app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/app/gradle.lockfile?ref=sha") stub_content_request("included/included?ref=sha", "contents_java_with_settings.json") + stub_no_content_request("included/included/gradle/wrapper?ref=sha") stub_content_request("included/included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/included/gradle.lockfile?ref=sha") stub_content_request( @@ -274,13 +281,13 @@ def stub_no_content_request(path) stub_content_request("included/included/app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/included/app/gradle.lockfile?ref=sha") stub_content_request("included/included/included?ref=sha", "contents_java_with_buildsrc.json") + stub_no_content_request("included/included/included/gradle/wrapper?ref=sha") stub_content_request("included/included/included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/included/included/gradle.lockfile?ref=sha") stub_content_request("included/included/included/buildSrc?ref=sha", "contents_java.json") - stub_content_request( - "included/included/included/buildSrc/build.gradle?ref=sha", - "contents_java_basic_buildfile.json" - ) + stub_no_content_request("included/included/included/buildSrc/gradle/wrapper?ref=sha") + stub_content_request("included/included/included/buildSrc/build.gradle?ref=sha", + "contents_java_basic_buildfile.json") end it "fetches all buildfiles transitively" do @@ -310,6 +317,7 @@ def stub_no_content_request(path) stub_content_request("app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("app/gradle.lockfile?ref=sha") stub_content_request("included?ref=sha", "contents_java.json") + stub_no_content_request("included/gradle/wrapper?ref=sha") stub_content_request("included/build.gradle?ref=sha", "contents_java_buildfile_with_script_plugins.json") stub_no_content_request("included/gradle.lockfile?ref=sha") stub_content_request("included/gradle/dependencies.gradle?ref=sha", "contents_java_simple_settings.json") diff --git a/gradle/spec/dependabot/gradle/file_parser_spec.rb b/gradle/spec/dependabot/gradle/file_parser_spec.rb index 0b1d9b0134c..6e88812bc0a 100644 --- a/gradle/spec/dependabot/gradle/file_parser_spec.rb +++ b/gradle/spec/dependabot/gradle/file_parser_spec.rb @@ -818,12 +818,12 @@ end describe "wrapper properties file" do - shared_examples "wrapper_properties_test" do |version, type, checksum| + shared_examples "wrapper_properties_test" do |folder, version, type, checksum| describe "gradle #{version}, distribution #{type}" do let(:files) do [ Dependabot::DependencyFile.new( - name: "gradle/wrapper/gradle-wrapper.properties", + name: "#{folder}gradle/wrapper/gradle-wrapper.properties", content: fixture("wrapper_properties_file", "gradle-wrapper-#{version}-#{type}#{checksum ? '-checksum' : ''}.properties") ) @@ -839,7 +839,7 @@ requirements = [ { requirement: version, - file: "gradle/wrapper/gradle-wrapper.properties", + file: "#{folder}gradle/wrapper/gradle-wrapper.properties", groups: [], source: { type: "gradle-distribution", @@ -851,7 +851,7 @@ if checksum requirements << { requirement: checksum, - file: "gradle/wrapper/gradle-wrapper.properties", + file: "#{folder}gradle/wrapper/gradle-wrapper.properties", groups: [], source: { type: "gradle-distribution", @@ -870,11 +870,14 @@ end end - it_behaves_like "wrapper_properties_test", "8.14.2", "bin", nil - it_behaves_like "wrapper_properties_test", "8.14.2", "all", nil - it_behaves_like "wrapper_properties_test", "9.0.0", "bin", + it_behaves_like "wrapper_properties_test", "/", "8.14.2", "bin", nil + it_behaves_like "wrapper_properties_test", "/", "8.14.2", "all", nil + it_behaves_like "wrapper_properties_test", "/", "9.0.0", "bin", "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b" - it_behaves_like "wrapper_properties_test", "9.0.0", "all", + it_behaves_like "wrapper_properties_test", "/", "9.0.0", "all", + "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365" + it_behaves_like "wrapper_properties_test", "/buildSrc/", "8.14.2", "bin", nil + it_behaves_like "wrapper_properties_test", "/buildSrc/", "9.0.0", "all", "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365" end diff --git a/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb b/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb index 13ff9d23520..a56224da782 100644 --- a/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb +++ b/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb @@ -233,6 +233,48 @@ ]) end end + + context "when multiple properties files" do + let(:requirements) do + [distribution_req, checksum_req, distribution_req.merge( + file: "another/gradle/wrapper/gradle-wrapper.properties" + )] + end + + it "does not update the requirement" do + expect(updater.updated_requirements).not_to eq(requirements) + expect(updater.updated_requirements).to eq([ + { + requirement: "9.0.0", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip", + property: "distributionUrl" + }, + groups: [] + }, { + requirement: "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip.sha256", + property: "distributionUrlSha256Sum" + }, + groups: [] + }, { + requirement: "9.0.0", + file: "another/gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip", + property: "distributionUrl" + }, + groups: [] + } + ]) + end + end end end end From 7c0718403334491b51a707d91368153ce88eb41d Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Sun, 24 Aug 2025 22:16:18 +0200 Subject: [PATCH 05/18] Fixed broken smoke tests --- .github/workflows/smoke.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index efeb060f830..32d917d4294 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -14,7 +14,7 @@ concurrency: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SMOKE_TEST_OWNER: gmazzo + SMOKE_TEST_REPO: gmazzo/dependabot-smoke-tests SMOKE_TEST_BRANCH: gradle-wrapper-support jobs: discover: @@ -45,7 +45,7 @@ jobs: cat filtered.json # Curl the smoke-test tests directory to get a list of tests to run - URL=https://api.github.com/repos/${{ env.SMOKE_TEST_OWNER }}/smoke-tests/contents/tests?ref=${{ env.SMOKE_TEST_BRANCH }} + URL=https://api.github.com/repos/${{ env.SMOKE_TEST_REPO }}/contents/tests?ref=${{ env.SMOKE_TEST_BRANCH }} curl $URL > tests.json # Select the names that match smoke-$test*.yaml, where $test is the .text value from filtered.json @@ -85,7 +85,7 @@ jobs: - name: Download test if: steps.cache-smoke-test.outputs.cache-hit != 'true' run: | - URL=https://api.github.com/repos/${{ env.SMOKE_TEST_OWNER }}/smoke-tests/contents/tests/${{ matrix.suite.name }}?ref=${{ env.SMOKE_TEST_BRANCH }} + URL=https://api.github.com/repos/${{ env.SMOKE_TEST_REPO }}/contents/tests/${{ matrix.suite.name }}?ref=${{ env.SMOKE_TEST_BRANCH }} curl $(gh api $URL --jq .download_url) -o smoke.yaml - name: Cache Smoke Test From a8048f8b69014c14f10e87f5cd89cfab84aa53f6 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Mon, 25 Aug 2025 20:50:45 +0200 Subject: [PATCH 06/18] Put changes under `gradle_wrapper_updater` feature flag --- gradle/lib/dependabot/gradle/file_fetcher.rb | 2 ++ .../dependabot/gradle/file_fetcher_spec.rb | 20 ++++++------------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/gradle/lib/dependabot/gradle/file_fetcher.rb b/gradle/lib/dependabot/gradle/file_fetcher.rb index 56606bea3a7..a826310d8be 100644 --- a/gradle/lib/dependabot/gradle/file_fetcher.rb +++ b/gradle/lib/dependabot/gradle/file_fetcher.rb @@ -182,6 +182,8 @@ def subproject_buildfiles(root_dir) sig { params(root_dir: String).returns(T.nilable(DependencyFile)) } def wrapper_properties_file(root_dir) + return nil unless Experiments.enabled?(:gradle_wrapper_updater) + gradle_wrapper_properties_file(root_dir) rescue Dependabot::DependencyFileNotFound # Wrapper file is optional for Gradle diff --git a/gradle/spec/dependabot/gradle/file_fetcher_spec.rb b/gradle/spec/dependabot/gradle/file_fetcher_spec.rb index 29d32b92eeb..7db2d99d6be 100644 --- a/gradle/spec/dependabot/gradle/file_fetcher_spec.rb +++ b/gradle/spec/dependabot/gradle/file_fetcher_spec.rb @@ -51,7 +51,6 @@ def stub_no_content_request(path) context "with a basic buildfile" do before do stub_no_content_request("gradle?ref=sha") - stub_no_content_request("gradle/wrapper?ref=sha") stub_content_request("?ref=sha", "contents_java.json") stub_content_request("build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("gradle.lockfile?ref=sha") @@ -65,11 +64,16 @@ def stub_no_content_request(path) context "with gradle wrapper properties" do before do + Dependabot::Experiments.register(:gradle_wrapper_updater, true) stub_content_request("gradle/wrapper?ref=sha", "content_gradle_wrapper.json") stub_content_request("gradle/wrapper/gradle-wrapper.properties?ref=sha", "gradle-wrapper.properties.json") end - it "fetches the toml file" do + after do + Dependabot::Experiments.reset! + end + + it "fetches the properties file" do expect(file_fetcher_instance.files.count).to eq(2) expect(file_fetcher_instance.files.map(&:name)) .to match_array(%w(build.gradle gradle/wrapper/gradle-wrapper.properties)) @@ -136,7 +140,6 @@ def stub_no_content_request(path) before do stub_content_request("buildSrc?ref=sha", "contents_java.json") stub_content_request("buildSrc/build.gradle?ref=sha", "contents_java_basic_buildfile.json") - stub_no_content_request("buildSrc/gradle/wrapper?ref=sha") stub_no_content_request("buildSrc/gradle.lockfile?ref=sha") end @@ -168,7 +171,6 @@ def stub_no_content_request(path) stub_content_request("?ref=sha", "contents_java_with_buildsrc_and_settings.json") stub_content_request("settings.gradle?ref=sha", "contents_java_settings_explicit_buildsrc.json") stub_content_request("included?ref=sha", "contents_java.json") - stub_no_content_request("included/gradle/wrapper?ref=sha") stub_content_request("included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/gradle.lockfile?ref=sha") end @@ -195,7 +197,6 @@ def stub_no_content_request(path) stub_content_request("app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("app/gradle.lockfile?ref=sha") stub_content_request("included?ref=sha", "contents_java_with_settings.json") - stub_no_content_request("included/gradle/wrapper?ref=sha") stub_content_request("included/settings.gradle?ref=sha", "contents_java_simple_settings.json") stub_content_request("included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/gradle.lockfile?ref=sha") @@ -225,14 +226,12 @@ def stub_no_content_request(path) stub_content_request("app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("app/gradle.lockfile?ref=sha") stub_content_request("included?ref=sha", "contents_java_with_settings.json") - stub_no_content_request("included/gradle/wrapper?ref=sha") stub_content_request("included/settings.gradle?ref=sha", "contents_java_simple_settings.json") stub_content_request("included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/gradle.lockfile?ref=sha") stub_content_request("included/app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/app/gradle.lockfile?ref=sha") stub_content_request("included2?ref=sha", "contents_java_with_settings.json") - stub_no_content_request("included2/gradle/wrapper?ref=sha") stub_content_request("included2/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included2/gradle.lockfile?ref=sha") stub_content_request("included2/settings.gradle?ref=sha", "contents_java_simple_settings.json") @@ -264,14 +263,12 @@ def stub_no_content_request(path) stub_content_request("app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("app/gradle.lockfile?ref=sha") stub_content_request("included?ref=sha", "contents_java_with_settings.json") - stub_no_content_request("included/gradle/wrapper?ref=sha") stub_content_request("included/settings.gradle?ref=sha", "contents_java_settings_1_included_build.json") stub_content_request("included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/gradle.lockfile?ref=sha") stub_content_request("included/app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/app/gradle.lockfile?ref=sha") stub_content_request("included/included?ref=sha", "contents_java_with_settings.json") - stub_no_content_request("included/included/gradle/wrapper?ref=sha") stub_content_request("included/included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/included/gradle.lockfile?ref=sha") stub_content_request( @@ -281,11 +278,9 @@ def stub_no_content_request(path) stub_content_request("included/included/app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/included/app/gradle.lockfile?ref=sha") stub_content_request("included/included/included?ref=sha", "contents_java_with_buildsrc.json") - stub_no_content_request("included/included/included/gradle/wrapper?ref=sha") stub_content_request("included/included/included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/included/included/gradle.lockfile?ref=sha") stub_content_request("included/included/included/buildSrc?ref=sha", "contents_java.json") - stub_no_content_request("included/included/included/buildSrc/gradle/wrapper?ref=sha") stub_content_request("included/included/included/buildSrc/build.gradle?ref=sha", "contents_java_basic_buildfile.json") end @@ -317,7 +312,6 @@ def stub_no_content_request(path) stub_content_request("app/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("app/gradle.lockfile?ref=sha") stub_content_request("included?ref=sha", "contents_java.json") - stub_no_content_request("included/gradle/wrapper?ref=sha") stub_content_request("included/build.gradle?ref=sha", "contents_java_buildfile_with_script_plugins.json") stub_no_content_request("included/gradle.lockfile?ref=sha") stub_content_request("included/gradle/dependencies.gradle?ref=sha", "contents_java_simple_settings.json") @@ -402,7 +396,6 @@ def stub_no_content_request(path) context "with a script plugin" do before do stub_no_content_request("gradle?ref=sha") - stub_no_content_request("gradle/wrapper?ref=sha") stub_content_request("?ref=sha", "contents_java.json") stub_content_request("build.gradle?ref=sha", "contents_java_buildfile_with_script_plugins.json") stub_content_request("gradle/dependencies.gradle?ref=sha", "contents_java_simple_settings.json") @@ -448,7 +441,6 @@ def stub_no_content_request(path) context "with no required manifest files" do before do stub_no_content_request("gradle?ref=sha") - stub_no_content_request("gradle/wrapper?ref=sha") stub_request(:get, url + "?ref=sha") .with(headers: { "Authorization" => "token token" }) .to_return( From a6ac9ee8817600b0e88923a7ecda6c75ba2bc0c0 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Mon, 25 Aug 2025 22:51:48 +0200 Subject: [PATCH 07/18] Fixed broken requirements logic when multiple wrappers --- .../update_checker/requirements_updater.rb | 14 +++---- .../requirements_updater_spec.rb | 40 +++++++++++++++---- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb b/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb index 0f22265f866..b4d022f98a6 100644 --- a/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb +++ b/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb @@ -119,10 +119,7 @@ def update_dynamic_requirement(req_string) sig { returns(T::Array[T::Hash[Symbol, T.untyped]]) } def updated_distribution_requirements - version = T.let(nil, T.nilable(String)) distribution_url = T.let(nil, T.nilable(String)) - checksum = T.let(nil, T.nilable(String)) - checksum_url = T.let(nil, T.nilable(String)) requirements.map do |req| source = req[:source] @@ -130,16 +127,15 @@ def updated_distribution_requirements case source[:property] when "distributionUrl" - if version.nil? - requirement = req[:requirement] - version = update_exact_requirement(requirement) - distribution_url = source[:url].gsub(requirement, version) - end + requirement = req[:requirement] + version = update_exact_requirement(requirement) + distribution_url = source[:url].gsub(requirement, version) + req.merge( requirement: version, source: source.merge(url: distribution_url) ) - when "distributionUrlSha256Sum" + when "distributionSha256Sum" checksum_url, checksum = DistributionsFinder.resolve_checksum(T.must(distribution_url)) if checksum.nil? req.merge( requirement: checksum, diff --git a/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb b/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb index a56224da782..26d13ba7a03 100644 --- a/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb +++ b/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb @@ -177,7 +177,7 @@ source: { type: "gradle-distribution", url: "https://services.gradle.org/distributions/gradle-8.14.2-all.zip.sha256", - property: "distributionUrlSha256Sum" + property: "distributionSha256Sum" }, groups: [] } @@ -188,7 +188,7 @@ .to_return(status: 200, body: "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365") end - it "updates the checksum" do + it "updates url and checksum" do expect(updater.updated_requirements).not_to eq(requirements) expect(updater.updated_requirements).to eq([ { @@ -207,7 +207,7 @@ source: { type: "gradle-distribution", url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip.sha256", - property: "distributionUrlSha256Sum" + property: "distributionSha256Sum" }, groups: [] } @@ -217,7 +217,7 @@ context "when no checksum is available" do let(:requirements) { [distribution_req] } - it "does not update the requirement" do + it "only updates url" do expect(updater.updated_requirements).not_to eq(requirements) expect(updater.updated_requirements).to eq([ { @@ -237,11 +237,26 @@ context "when multiple properties files" do let(:requirements) do [distribution_req, checksum_req, distribution_req.merge( - file: "another/gradle/wrapper/gradle-wrapper.properties" + requirement: "8.14.3", + file: "another/gradle/wrapper/gradle-wrapper.properties", + source: distribution_req[:source].merge({ + url: "https://services.gradle.org/distributions/gradle-8.14.3-bin.zip" + }) + ), checksum_req.merge( + requirement: "bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531", + file: "another/gradle/wrapper/gradle-wrapper.properties", + source: checksum_req[:source].merge({ + url: "https://services.gradle.org/distributions/gradle-8.14.3-bin.zip.sha256" + }) )] end - it "does not update the requirement" do + before do + stub_request(:get, "https://services.gradle.org/distributions/gradle-9.0.0-bin.zip.sha256") + .to_return(status: 200, body: "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b") + end + + it "updates all of them" do expect(updater.updated_requirements).not_to eq(requirements) expect(updater.updated_requirements).to eq([ { @@ -259,7 +274,7 @@ source: { type: "gradle-distribution", url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip.sha256", - property: "distributionUrlSha256Sum" + property: "distributionSha256Sum" }, groups: [] }, { @@ -267,10 +282,19 @@ file: "another/gradle/wrapper/gradle-wrapper.properties", source: { type: "gradle-distribution", - url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip", + url: "https://services.gradle.org/distributions/gradle-9.0.0-bin.zip", property: "distributionUrl" }, groups: [] + }, { + requirement: "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b", + file: "another/gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-bin.zip.sha256", + property: "distributionSha256Sum" + }, + groups: [] } ]) end From aafaa8af356c08414b415b475443e4865fd2df10 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Tue, 26 Aug 2025 09:58:22 +0200 Subject: [PATCH 08/18] Renamed `lockfile_updater.rb` to `gradle_updater_base.rb` --- .../file_updater/{lockfile_updater.rb => gradle_updater_base.rb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename gradle/lib/dependabot/gradle/file_updater/{lockfile_updater.rb => gradle_updater_base.rb} (100%) diff --git a/gradle/lib/dependabot/gradle/file_updater/lockfile_updater.rb b/gradle/lib/dependabot/gradle/file_updater/gradle_updater_base.rb similarity index 100% rename from gradle/lib/dependabot/gradle/file_updater/lockfile_updater.rb rename to gradle/lib/dependabot/gradle/file_updater/gradle_updater_base.rb From caaf009c70a926e4cbe3d9ed0e8977d99c149563 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Fri, 22 Aug 2025 09:50:31 +0200 Subject: [PATCH 09/18] Updating Gradle binaries support --- .github/workflows/smoke.yml | 2 +- gradle/lib/dependabot/gradle/file_fetcher.rb | 46 +++---- gradle/lib/dependabot/gradle/file_updater.rb | 35 ++++-- .../file_updater/gradle_updater_base.rb | 64 ++++++---- .../gradle/file_updater/lockfile_updater.rb | 27 +++++ .../gradle/file_updater/wrapper_updater.rb | 77 ++++++++++++ .../dependabot/gradle/file_fetcher_spec.rb | 17 ++- .../file_parser/distributions_finder_spec.rb | 2 +- .../dependabot/gradle/file_parser_spec.rb | 2 +- .../dependabot/gradle/file_updater_spec.rb | 14 +-- .../fixtures/github/contents_wrapper.json | 114 ++++++++++++++++++ .../fixtures/github/gradle-wrapper.jar.json | 18 +++ gradle/spec/fixtures/github/gradlew.bat.json | 18 +++ gradle/spec/fixtures/github/gradlew.json | 18 +++ ...dle-wrapper-8.14.2-all-checksum.properties | 0 .../gradle-wrapper-8.14.2-all.properties | 0 ...dle-wrapper-8.14.2-bin-checksum.properties | 0 .../gradle-wrapper-8.14.2-bin.properties | 0 ...adle-wrapper-9.0.0-all-checksum.properties | 0 .../gradle-wrapper-9.0.0-all.properties | 0 ...adle-wrapper-9.0.0-bin-checksum.properties | 0 .../gradle-wrapper-9.0.0-bin.properties | 0 22 files changed, 387 insertions(+), 67 deletions(-) create mode 100644 gradle/lib/dependabot/gradle/file_updater/lockfile_updater.rb create mode 100644 gradle/lib/dependabot/gradle/file_updater/wrapper_updater.rb create mode 100644 gradle/spec/fixtures/github/contents_wrapper.json create mode 100644 gradle/spec/fixtures/github/gradle-wrapper.jar.json create mode 100644 gradle/spec/fixtures/github/gradlew.bat.json create mode 100644 gradle/spec/fixtures/github/gradlew.json rename gradle/spec/fixtures/{wrapper_properties_file => wrapper_files}/gradle-wrapper-8.14.2-all-checksum.properties (100%) rename gradle/spec/fixtures/{wrapper_properties_file => wrapper_files}/gradle-wrapper-8.14.2-all.properties (100%) rename gradle/spec/fixtures/{wrapper_properties_file => wrapper_files}/gradle-wrapper-8.14.2-bin-checksum.properties (100%) rename gradle/spec/fixtures/{wrapper_properties_file => wrapper_files}/gradle-wrapper-8.14.2-bin.properties (100%) rename gradle/spec/fixtures/{wrapper_properties_file => wrapper_files}/gradle-wrapper-9.0.0-all-checksum.properties (100%) rename gradle/spec/fixtures/{wrapper_properties_file => wrapper_files}/gradle-wrapper-9.0.0-all.properties (100%) rename gradle/spec/fixtures/{wrapper_properties_file => wrapper_files}/gradle-wrapper-9.0.0-bin-checksum.properties (100%) rename gradle/spec/fixtures/{wrapper_properties_file => wrapper_files}/gradle-wrapper-9.0.0-bin.properties (100%) diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index 32d917d4294..960a817616c 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -15,7 +15,7 @@ concurrency: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} SMOKE_TEST_REPO: gmazzo/dependabot-smoke-tests - SMOKE_TEST_BRANCH: gradle-wrapper-support + SMOKE_TEST_BRANCH: gradle-wrapper-support-binaries jobs: discover: runs-on: ubuntu-latest diff --git a/gradle/lib/dependabot/gradle/file_fetcher.rb b/gradle/lib/dependabot/gradle/file_fetcher.rb index a826310d8be..b02594f4e99 100644 --- a/gradle/lib/dependabot/gradle/file_fetcher.rb +++ b/gradle/lib/dependabot/gradle/file_fetcher.rb @@ -24,8 +24,12 @@ class FileFetcher < Dependabot::FileFetchers::Base SUPPORTED_SETTINGS_FILE_NAMES = T.let(%w(settings.gradle settings.gradle.kts).freeze, T::Array[String]) - SUPPORTED_WRAPPER_PROPERTIES_FILE_PATH = - %w(gradle/wrapper/gradle-wrapper.properties).freeze + SUPPORTED_WRAPPER_FILES_PATH = %w( + gradlew + gradlew.bat + gradle/wrapper/gradle-wrapper.jar + gradle/wrapper/gradle-wrapper.properties + ).freeze # For now Gradle only supports library .toml files in the main gradle folder SUPPORTED_VERSION_CATALOG_FILE_PATH = @@ -77,13 +81,9 @@ def fetch_files sig { params(root_dir: String).returns(T::Array[DependencyFile]) } def all_buildfiles_in_build(root_dir) - files = [ - buildfile(root_dir), - settings_file(root_dir), - wrapper_properties_file(root_dir), - version_catalog_file(root_dir), - lockfile(root_dir) - ].compact + files = [buildfile(root_dir), settings_file(root_dir), version_catalog_file(root_dir), lockfile(root_dir)] + .compact + files += wrapper_files(root_dir) files += subproject_buildfiles(root_dir) files += subproject_lockfiles(root_dir) files += dependency_script_plugins(root_dir) @@ -180,14 +180,23 @@ def subproject_buildfiles(root_dir) end end - sig { params(root_dir: String).returns(T.nilable(DependencyFile)) } - def wrapper_properties_file(root_dir) - return nil unless Experiments.enabled?(:gradle_wrapper_updater) + sig { params(dir: String).returns(T::Array[DependencyFile]) } + def wrapper_files(dir) + return [] unless Experiments.enabled?(:gradle_wrapper_updater) - gradle_wrapper_properties_file(root_dir) - rescue Dependabot::DependencyFileNotFound - # Wrapper file is optional for Gradle - nil + SUPPORTED_WRAPPER_FILES_PATH.filter_map do |filename| + file = fetch_file_if_present(File.join(dir, filename)) + next unless file + + if file.name.end_with?(".jar") + file.content = Base64.encode64(T.must(file.content)) if file.content + file.content_encoding = DependencyFile::ContentEncoding::BASE64 + end + file + rescue Dependabot::DependencyFileNotFound + # Gradle itself doesn't worry about missing subprojects, so we don't + nil + end end sig { params(root_dir: String).returns(T.nilable(DependencyFile)) } @@ -249,11 +258,6 @@ def buildfile(dir) file end - sig { params(dir: String).returns(T.nilable(DependencyFile)) } - def gradle_wrapper_properties_file(dir) - find_first(dir, SUPPORTED_WRAPPER_PROPERTIES_FILE_PATH) - end - sig { params(dir: String).returns(T.nilable(DependencyFile)) } def gradle_toml_file(dir) find_first(dir, SUPPORTED_VERSION_CATALOG_FILE_PATH) diff --git a/gradle/lib/dependabot/gradle/file_updater.rb b/gradle/lib/dependabot/gradle/file_updater.rb index 71b84e188f7..d2dd016349b 100644 --- a/gradle/lib/dependabot/gradle/file_updater.rb +++ b/gradle/lib/dependabot/gradle/file_updater.rb @@ -15,6 +15,7 @@ class FileUpdater < Dependabot::FileUpdaters::Base require_relative "file_updater/dependency_set_updater" require_relative "file_updater/property_value_updater" require_relative "file_updater/lockfile_updater" + require_relative "file_updater/wrapper_updater" SUPPORTED_BUILD_FILE_NAMES = %w(build.gradle build.gradle.kts gradle.lockfile).freeze @@ -64,6 +65,10 @@ def original_file def update_buildfiles_for_dependency(buildfiles:, dependency:) files = buildfiles.dup + # dependencies may have multiple requirements targeting the same file or build dir + # we keep the last one by path to later run its native helpers + buildfiles_processed = T.let({}, T::Hash[String, Dependabot::DependencyFile]) + # The UpdateChecker ensures the order of requirements is preserved # when updating, so we can zip them together in new/old pairs. reqs = dependency.requirements.zip(T.must(dependency.previous_requirements)) @@ -93,16 +98,20 @@ def update_buildfiles_for_dependency(buildfiles:, dependency:) files[T.must(files.index(buildfile))] = update_version_in_buildfile(dependency, buildfile, old_req, new_req) end - next unless Dependabot::Experiments.enabled?(:gradle_lockfile_updater) + buildfiles_processed[buildfile.name] = buildfile + end + + # runs native updaters (e.g. wrapper, lockfile) on relevant build files updated + updaters = native_updaters(files, dependency) + buildfiles_processed.each do |_, buildfile| + updated_files = updaters.flat_map { |updater| updater.update_files(buildfile) } - lockfile_updater = LockfileUpdater.new(dependency_files: files) - lockfiles = lockfile_updater.update_lockfiles(buildfile) - lockfiles.each do |lockfile| - existing_file = files.find { |f| f.name == lockfile.name && f.directory == lockfile.directory } + updated_files.each do |file| + existing_file = files.find { |f| f.name == file.name && f.directory == file.directory } if existing_file.nil? - files << lockfile + files << file else - files[T.must(files.index(existing_file))] = lockfile + files[T.must(files.index(existing_file))] = file end end end @@ -113,6 +122,18 @@ def update_buildfiles_for_dependency(buildfiles:, dependency:) # rubocop:enable Metrics/CyclomaticComplexity # rubocop:enable Metrics/AbcSize + sig do + params(files: T::Array[Dependabot::DependencyFile], + dependency: Dependabot::Dependency).returns(T::Array[GradleUpdaterBase]) + end + def native_updaters(files, dependency) + updaters = T.let([], T::Array[GradleUpdaterBase]) + updaters << LockfileUpdater.new(dependency_files: files) if Experiments.enabled?(:gradle_lockfile_updater) + updaters << WrapperUpdater.new(dependency_files: files, dependency: dependency) if + Experiments.enabled?(:gradle_wrapper_updater) + updaters + end + sig do params( buildfiles: T::Array[Dependabot::DependencyFile], diff --git a/gradle/lib/dependabot/gradle/file_updater/gradle_updater_base.rb b/gradle/lib/dependabot/gradle/file_updater/gradle_updater_base.rb index 911356b76b0..f21c343ff4b 100644 --- a/gradle/lib/dependabot/gradle/file_updater/gradle_updater_base.rb +++ b/gradle/lib/dependabot/gradle/file_updater/gradle_updater_base.rb @@ -10,7 +10,7 @@ module Dependabot module Gradle class FileUpdater - class LockfileUpdater + class GradleUpdaterBase extend T::Sig sig { params(dependency_files: T::Array[Dependabot::DependencyFile]).void } @@ -18,64 +18,80 @@ def initialize(dependency_files:) @dependency_files = dependency_files end + sig { params(_file: Dependabot::DependencyFile).returns(T::Boolean) } + def target_file?(_file) + raise NotImplementedError + end + + sig { returns(T::Array[String]) } + def command_args + raise NotImplementedError + end + + sig { params(build_file: Dependabot::DependencyFile).returns(String) } + def base_path(build_file) + File.dirname(File.join(build_file.directory, build_file.name)) + end + sig { params(build_file: Dependabot::DependencyFile).returns(T::Array[Dependabot::DependencyFile]) } - def update_lockfiles(build_file) - local_lockfiles = dependency_files.select do |file| - file.directory == build_file.directory && file.name.end_with?(".lockfile") + def update_files(build_file) + local_files = dependency_files.select do |file| + file.directory == build_file.directory && target_file?(file) end - # If we don't have any lockfiles in the build files don't generate one - return dependency_files unless local_lockfiles.any? + # If we don't have any files in the build files don't generate one + return dependency_files unless local_files.any? updated_files = dependency_files.dup SharedHelpers.in_a_temporary_directory do |temp_dir| populate_temp_directory(temp_dir) - cwd = File.join(temp_dir, build_file.directory, build_file.name) - cwd = File.dirname(cwd) + cwd = File.join(temp_dir, base_path(build_file)) # Create gradle.properties file with proxy settings # Would prefer to use command line arguments, but they don't work. properties_filename = File.join(temp_dir, build_file.directory, "gradle.properties") write_properties_file(properties_filename) - command_parts = [ - "gradle", - "dependencies", - "--no-daemon", - "--write-locks" - ] + command_parts = %w(gradle --no-daemon --stacktrace) + command_args command = Shellwords.join(command_parts) Dir.chdir(cwd) do SharedHelpers.run_shell_command(command, cwd: cwd) - update_lockfiles_content(temp_dir, local_lockfiles, updated_files) + update_files_content(temp_dir, local_files, updated_files) rescue SharedHelpers::HelperSubprocessFailed => e - puts "Failed to update lockfiles: #{e.message}" + puts "Failed to update files: #{e.message}" return updated_files end end updated_files end + private + sig do params( temp_dir: T.any(Pathname, String), - local_lockfiles: T::Array[Dependabot::DependencyFile], - updated_lockfiles: T::Array[Dependabot::DependencyFile] + local_files: T::Array[Dependabot::DependencyFile], + updated_files: T::Array[Dependabot::DependencyFile] ).void end - def update_lockfiles_content(temp_dir, local_lockfiles, updated_lockfiles) - local_lockfiles.each do |file| + def update_files_content(temp_dir, local_files, updated_files) + local_files.each do |file| f_content = File.read(File.join(temp_dir, file.directory, file.name)) tmp_file = file.dup - tmp_file.content = f_content - updated_lockfiles[T.must(updated_lockfiles.index(file))] = tmp_file + tmp_file.content = tmp_file.binary? ? Base64.encode64(f_content) : f_content + updated_files[T.must(updated_files.index(file))] = tmp_file end end + sig { returns(T::Array[Dependabot::DependencyFile]) } + def files_to_populate + @dependency_files + end + sig { params(temp_dir: T.any(Pathname, String)).void } def populate_temp_directory(temp_dir) - @dependency_files.each do |file| + files_to_populate.each do |file| in_path_name = File.join(temp_dir, file.directory, file.name) FileUtils.mkdir_p(File.dirname(in_path_name)) File.write(in_path_name, file.content) @@ -100,8 +116,6 @@ def write_properties_file(file_name) # rubocop:disable Metrics/PerceivedComplexi File.write(file_name, properties_content) end - private - sig { returns(T::Array[Dependabot::DependencyFile]) } attr_reader :dependency_files end diff --git a/gradle/lib/dependabot/gradle/file_updater/lockfile_updater.rb b/gradle/lib/dependabot/gradle/file_updater/lockfile_updater.rb new file mode 100644 index 00000000000..826d998565e --- /dev/null +++ b/gradle/lib/dependabot/gradle/file_updater/lockfile_updater.rb @@ -0,0 +1,27 @@ +# typed: strong +# frozen_string_literal: true + +require "sorbet-runtime" +require "shellwords" + +require "dependabot/gradle/file_updater/gradle_updater_base" + +module Dependabot + module Gradle + class FileUpdater + class LockfileUpdater < GradleUpdaterBase + extend T::Sig + + sig { override.params(file: Dependabot::DependencyFile).returns(T::Boolean) } + def target_file?(file) + file.name.end_with?(".lockfile") + end + + sig { override.returns(T::Array[String]) } + def command_args + %w(dependencies --write-locks) + end + end + end + end +end diff --git a/gradle/lib/dependabot/gradle/file_updater/wrapper_updater.rb b/gradle/lib/dependabot/gradle/file_updater/wrapper_updater.rb new file mode 100644 index 00000000000..b87b66a919b --- /dev/null +++ b/gradle/lib/dependabot/gradle/file_updater/wrapper_updater.rb @@ -0,0 +1,77 @@ +# typed: strong +# frozen_string_literal: true + +require "sorbet-runtime" +require "shellwords" + +require "dependabot/gradle/distributions" +require "dependabot/gradle/file_updater/gradle_updater_base" + +module Dependabot + module Gradle + class FileUpdater + class WrapperUpdater < GradleUpdaterBase + extend T::Sig + include Dependabot::Gradle::Distributions + + sig { params(dependency_files: T::Array[Dependabot::DependencyFile], dependency: Dependabot::Dependency).void } + def initialize(dependency_files:, dependency:) + super(dependency_files: dependency_files) + @dependency = dependency + @target_files = T.let(%w( + /gradlew + /gradlew.bat + /gradle/wrapper/gradle-wrapper.properties + /gradle/wrapper/gradle-wrapper.jar + ), T::Array[String]) + @build_files = T.let(%w( + build.gradle + build.gradle.kts + settings.gradle + settings.gradle.kts + ), T::Array[String]) + end + + sig { override.params(file: Dependabot::DependencyFile).returns(T::Boolean) } + def target_file?(file) + @target_files.any? { |r| "/#{file.name}".end_with?(r) } + end + + sig { override.returns(T::Array[String]) } + def command_args + version = T.let(dependency.requirements[0]&.[](:requirement), String) + checksum = T.let(dependency.requirements[1]&.[](:requirement), String) if dependency.requirements.size > 1 + + args = %W(wrapper --no-validate-url --gradle-version #{version}) + args += %W(--gradle-distribution-sha256-sum #{checksum}) if checksum + args + end + + sig { params(build_file: Dependabot::DependencyFile).returns(String) } + def base_path(build_file) + super.delete_suffix("/gradle/wrapper") + end + + private + + # Gradle builds can be complex, to maximize the chances of a successful we just keep related wrapper files + # and produce a minimal build for it to run (losing any customisations of the `wrapper` task in the process) + sig { override.returns(T::Array[Dependabot::DependencyFile]) } + def files_to_populate + @dependency_files.filter_map do |f| + next f if target_file?(f) + next Dependabot::DependencyFile.new(directory: f.directory, name: f.name, content: "") if build_file?(f) + end + end + + sig { params(file: Dependabot::DependencyFile).returns(T::Boolean) } + def build_file?(file) + @build_files.include?(File.basename(file.name)) + end + + sig { returns(Dependabot::Dependency) } + attr_reader :dependency + end + end + end +end diff --git a/gradle/spec/dependabot/gradle/file_fetcher_spec.rb b/gradle/spec/dependabot/gradle/file_fetcher_spec.rb index 7db2d99d6be..b5cad8c93b5 100644 --- a/gradle/spec/dependabot/gradle/file_fetcher_spec.rb +++ b/gradle/spec/dependabot/gradle/file_fetcher_spec.rb @@ -65,7 +65,11 @@ def stub_no_content_request(path) context "with gradle wrapper properties" do before do Dependabot::Experiments.register(:gradle_wrapper_updater, true) + stub_content_request("?ref=sha", "contents_wrapper.json") stub_content_request("gradle/wrapper?ref=sha", "content_gradle_wrapper.json") + stub_content_request("gradlew?ref=sha", "gradlew.json") + stub_content_request("gradlew.bat?ref=sha", "gradlew.bat.json") + stub_content_request("gradle/wrapper/gradle-wrapper.jar?ref=sha", "gradle-wrapper.jar.json") stub_content_request("gradle/wrapper/gradle-wrapper.properties?ref=sha", "gradle-wrapper.properties.json") end @@ -73,10 +77,15 @@ def stub_no_content_request(path) Dependabot::Experiments.reset! end - it "fetches the properties file" do - expect(file_fetcher_instance.files.count).to eq(2) - expect(file_fetcher_instance.files.map(&:name)) - .to match_array(%w(build.gradle gradle/wrapper/gradle-wrapper.properties)) + it "fetches the wrapper files" do + expect(file_fetcher_instance.files.map(&:name)).to eq(%w( + build.gradle + gradlew + gradlew.bat + gradle/wrapper/gradle-wrapper.jar + gradle/wrapper/gradle-wrapper.properties + )) + expect(file_fetcher_instance.files.map(&:content_encoding)).to eq(%w(utf-8 utf-8 utf-8 base64 utf-8)) end end diff --git a/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb b/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb index 760a1978b41..7b8129cefed 100644 --- a/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb +++ b/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb @@ -12,7 +12,7 @@ let(:properties_file) do Dependabot::DependencyFile.new( name: "gradle/wrapper/gradle-wrapper.properties", - content: fixture("wrapper_properties_file", + content: fixture("wrapper_files", "gradle-wrapper-#{version}-#{type}#{checksum ? '-checksum' : ''}.properties") ) end diff --git a/gradle/spec/dependabot/gradle/file_parser_spec.rb b/gradle/spec/dependabot/gradle/file_parser_spec.rb index 6e88812bc0a..0eacf6c4bb1 100644 --- a/gradle/spec/dependabot/gradle/file_parser_spec.rb +++ b/gradle/spec/dependabot/gradle/file_parser_spec.rb @@ -824,7 +824,7 @@ [ Dependabot::DependencyFile.new( name: "#{folder}gradle/wrapper/gradle-wrapper.properties", - content: fixture("wrapper_properties_file", + content: fixture("wrapper_files", "gradle-wrapper-#{version}-#{type}#{checksum ? '-checksum' : ''}.properties") ) ] diff --git a/gradle/spec/dependabot/gradle/file_updater_spec.rb b/gradle/spec/dependabot/gradle/file_updater_spec.rb index 4a21c1b26cc..139433d401d 100644 --- a/gradle/spec/dependabot/gradle/file_updater_spec.rb +++ b/gradle/spec/dependabot/gradle/file_updater_spec.rb @@ -627,8 +627,8 @@ end end - context "with a wrapper properties" do - shared_examples "wrapper properties" do |version, type, checksum, updated_checksum| + context "with a wrapper" do + shared_examples "wrapper" do |version, type, checksum, updated_checksum| subject(:updated_buildfile) do updated_files.find { |f| f.name == "gradle/wrapper/gradle-wrapper.properties" } end @@ -636,7 +636,7 @@ let(:buildfile) do Dependabot::DependencyFile.new( name: "gradle/wrapper/gradle-wrapper.properties", - content: fixture("wrapper_properties_file", + content: fixture("wrapper_files", "gradle-wrapper-#{version}-#{type}#{checksum ? '-checksum' : ''}.properties") ) end @@ -695,12 +695,12 @@ end end - it_behaves_like "wrapper properties", "8.14.2", "all", nil, nil - it_behaves_like "wrapper properties", "8.14.2", "bin", nil, nil - it_behaves_like "wrapper properties", "8.14.2", "bin", + it_behaves_like "wrapper", "8.14.2", "all", nil, nil + it_behaves_like "wrapper", "8.14.2", "bin", nil, nil + it_behaves_like "wrapper", "8.14.2", "bin", "7197a12f450794931532469d4ff21a59ea2c1cd59a3ec3f89c035c3c420a6999", "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b" - it_behaves_like "wrapper properties", "8.14.2", "all", + it_behaves_like "wrapper", "8.14.2", "all", "443c9c8ee2ac1ee0e11881a40f2376d79c66386264a44b24a9f8ca67e633375f", "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365" end diff --git a/gradle/spec/fixtures/github/contents_wrapper.json b/gradle/spec/fixtures/github/contents_wrapper.json new file mode 100644 index 00000000000..7430eb6645a --- /dev/null +++ b/gradle/spec/fixtures/github/contents_wrapper.json @@ -0,0 +1,114 @@ +[ + { + "name": ".gitignore", + "path": ".gitignore", + "sha": "2bbae59162b25b07f12c516d5b283248acbfa03a", + "size": 155, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/.gitignore?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/blob/main/.gitignore", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/2bbae59162b25b07f12c516d5b283248acbfa03a", + "download_url": "https://raw.githubusercontent.com/bigandroidenergies/version_catalog/main/.gitignore", + "type": "file", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/.gitignore?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/2bbae59162b25b07f12c516d5b283248acbfa03a", + "html": "https://github.com/bigandroidenergies/version_catalog/blob/main/.gitignore" + } + }, + { + "name": "app", + "path": "app", + "sha": "f442555d05272d716cefc7825a90dbf911447626", + "size": 0, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/app?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/tree/main/app", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/trees/f442555d05272d716cefc7825a90dbf911447626", + "download_url": null, + "type": "dir", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/app?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/trees/f442555d05272d716cefc7825a90dbf911447626", + "html": "https://github.com/bigandroidenergies/version_catalog/tree/main/app" + } + }, + { + "name": "build.gradle", + "path": "build.gradle", + "sha": "c3d3e58d7fe6b5f698d3f24f2f7f4fa2d3fdfb82", + "size": 399, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/build.gradle?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/blob/main/build.gradle", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/c3d3e58d7fe6b5f698d3f24f2f7f4fa2d3fdfb82", + "download_url": "https://raw.githubusercontent.com/bigandroidenergies/version_catalog/main/build.gradle", + "type": "file", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/build.gradle?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/c3d3e58d7fe6b5f698d3f24f2f7f4fa2d3fdfb82", + "html": "https://github.com/bigandroidenergies/version_catalog/blob/main/build.gradle" + } + }, + { + "name": "gradle.properties", + "path": "gradle.properties", + "sha": "3c5031eb7d63f785752b1914cc8692a453d1cc63", + "size": 1358, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradle.properties?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradle.properties", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/3c5031eb7d63f785752b1914cc8692a453d1cc63", + "download_url": "https://raw.githubusercontent.com/bigandroidenergies/version_catalog/main/gradle.properties", + "type": "file", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradle.properties?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/3c5031eb7d63f785752b1914cc8692a453d1cc63", + "html": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradle.properties" + } + }, + { + "name": "gradle", + "path": "gradle", + "sha": "193ef2b05a8976c5ff11d575bc3f00b74dd1955e", + "size": 0, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradle?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/tree/main/gradle", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/trees/193ef2b05a8976c5ff11d575bc3f00b74dd1955e", + "download_url": null, + "type": "dir", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradle?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/trees/193ef2b05a8976c5ff11d575bc3f00b74dd1955e", + "html": "https://github.com/bigandroidenergies/version_catalog/tree/main/gradle" + } + }, + { + "name": "gradlew", + "path": "gradlew", + "sha": "4f906e0c811fc9e230eb44819f509cd0627f2600", + "size": 5766, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradlew?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradlew", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/4f906e0c811fc9e230eb44819f509cd0627f2600", + "download_url": "https://raw.githubusercontent.com/bigandroidenergies/version_catalog/main/gradlew", + "type": "file", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradlew?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/4f906e0c811fc9e230eb44819f509cd0627f2600", + "html": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradlew" + } + }, + { + "name": "gradlew.bat", + "path": "gradlew.bat", + "sha": "ac1b06f93825db68fb0c0b5150917f340eaa5d02", + "size": 2763, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradlew.bat?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradlew.bat", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/ac1b06f93825db68fb0c0b5150917f340eaa5d02", + "download_url": "https://raw.githubusercontent.com/bigandroidenergies/version_catalog/main/gradlew.bat", + "type": "file", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradlew.bat?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/ac1b06f93825db68fb0c0b5150917f340eaa5d02", + "html": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradlew.bat" + } + } +] diff --git a/gradle/spec/fixtures/github/gradle-wrapper.jar.json b/gradle/spec/fixtures/github/gradle-wrapper.jar.json new file mode 100644 index 00000000000..95aaeda79bc --- /dev/null +++ b/gradle/spec/fixtures/github/gradle-wrapper.jar.json @@ -0,0 +1,18 @@ +{ + "name": "gradle-wrapper.jar", + "path": "gradle/wrapper/gradle-wrapper.jar", + "sha": "e708b1c023ec8b20f512888fe07c5bd3ff77bb8f", + "size": 59203, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradle/wrapper/gradle-wrapper.jar?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradle/wrapper/gradle-wrapper.jar", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/e708b1c023ec8b20f512888fe07c5bd3ff77bb8f", + "download_url": "https://raw.githubusercontent.com/bigandroidenergies/version_catalog/main/gradle/wrapper/gradle-wrapper.jar", + "type": "file", + "content": "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\neADizwcmlh6dr9Nbmp6MnoHhDbBf6bINQ3QGXWIUCToVTwBJDNOTYQSjJEXK\n7AQk+gfujz7CttlD/6B3E75c2O//A4GcbzT7CMENSH9uIpQjUkfOd6gKuYpO\nYihVdG2ge8z/CNuj/ip6ov7wjirCY4FoILyTpCM5X3hXtordY8FokHkWR+h9\nz9Wo/y/0rkOO+n9DlEGA9rugU+ikcy9B3YcO9KGffjiMI44MRa9S/DdxECWK\nvULR3yMNEdykF0AtOHE7RHaYe0vjMAUawCqO0M1Hts7RD6Jj5E0lyhs4Tryb\n5ONNnKCEvVVLlcc7SbwxokSw7Qn6JcSe4oaEkISIRHZOuZgZ3qafRPTtqdXi\nZ6L56Hl8E7HccHjvBvapI1X0rWOAHv3r6BvZxP7cBuJVHJgZ/Rtdo4/9v0Aa\n9R19yB66pRVpiBEYUDidVKko1WqQQKcJ9jECKkKOk9wgunEGZyk8cucGCpIf\npgAPExgBPAT2BMcIOMlk3L44T+kDZOLvd1OF/wBQSwMECgAACAgAAABBAGhR\n/n2iAAAA0gAAACMAAABvcmcvZ3JhZGxlL3dyYXBwZXIvRG93bmxvYWQkMS5j\nbGFzc32MTQrCMBCF32g1tSp2L4IL1wa9gj/gQlx4gtiG2BKSklR7NxcewEOJ\nKeLWGeYND773Xu/HE8AaQwbGMCAkZ3tzmdwXWhLGW9sYbUW+LMVdECY7k2nr\nC6OOsr7anCEhzKxTXDmRa8kbJ6pKOv7LLVaE0cEY6TZaeC89IW2ruBZG8dOl\nlFlNmP5pSOcgdPCdblgEF6EXfoR+0DhcEhhqgTT+AFBLAwQKAAAICAAAAEEA\npQMiSTsEAADYBwAAQQAAAG9yZy9ncmFkbGUvd3JhcHBlci9Eb3dubG9hZCRE\nZWZhdWx0RG93bmxvYWRQcm9ncmVzc0xpc3RlbmVyLmNsYXNzpVXdUxtVFP/d\nbDYLywZSSCiUtoC2NQRKqla0pK1tgWhoKJVQEK06l+Q2bLvs4mYD/Rv64FNf\n+qJPTl986YwI1Zn2TWf6F/j1ojM6o+ODH+PHjDOO517CR6eA0zGZnHv3nHvO\n73c+9ubBPx/fA/AM3jIRxwv1aMEJKQalyJgkTtbhlInTeLEBCZyRmrMmzmGo\nAcMYMZA18JKJKF6OnJmB+pjIYVSK8wbGDFwwMM4QcbxyWfgMHXnPL6fLPi85\n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\nm7ZmJOds2pCzaYPcbonsPSRtEj1hnQtUvFo61t0prSVa6fVcoYrXqcKr4Xmd\nqqapcpinqOoKVQubSqVNVVJOG9XQblpBt0sbtMx6x4Yn8YOGGuHmj9NT0JVx\nc6lcWd2Uppo01R5tEHv2zm42I7gdzu5Af58U7M8syW2ump6mZ6SyavoEfRIr\nPyWVMZ1C/9msstKz5JafdFu5h1vLGq/QojQtbnVP05LhaaobhuKlU7Ssx+dO\nk6/V1dDoc03Rcvh+Ravic3lX+pQ0rfK5ajfC0DXO0+9zpemm1rLaenpFbVXF\naO12T/mOivIdlb4yn5qmm4e3l5c8T8YVWpem9Z+mJS/RBu/GNNVP06ZhL6Q3\nXqurWFJ+Xt9RUVcpn5V1lYupabz8mc+ShinP+Weeo+WSZuyobPgqqY2g1VW8\nTAE3NfvU0iXlaWp5YeZpTJV6b0nTZl/ZdVJ9ZWna0nydepvTdOsLdLBVEQqn\nadvwFG337kjTTrHPXd5W9NLU5lOm6LZrrdXFhShCiK/62iV4voreordl2r3F\nPvj5bV4hn5lE+EnaiPYgPH4IKXgYXN1I2D4kZj81UQhpO4A0GUQ0hzB7FNQ7\naRg1fzcdpzDdRSN0AnV/ErV8Cml6N9IxjGhG6HnMfIVGaZrG6A06AxsS9B26\nl75LFn0PK76PBH6bxukdisOaBK+je3kTWRwgm7dQirfTBO8Cgoj8eRZ5soV+\nlj6NNQq030/P0WeQYQno+AlgRjn0nqXPoueB9iT29DxVYC5BP4VeJfbyDfpp\n+hlk2Dt0M30OkhSRVdl8RM/JR/Qy+VjCO+nz9HNUChvYWVvG2+gF+nl4qYqb\n6BfoF5Gdoki+SRUzUFap0GqFdiv0BYW+qNCLCn1JoS8rdFJYzC5AzgzVL8jF\nkuvmuhkYrxTlA/jNYI8Fk+RMsUJbIwpdnAG21BRjcP6ABc0MNnkjHXnVqIrP\nRw7A3A8/Cxhqnqbdww1p2sNobsfvDvz24teOX8cU7bvYNU37h70HGqfo4DVZ\n5n5gXWcB8jwEysO0FtgmAlwHwWux688hZQR/M30VAclgkJtYV7C6RHx2clDo\nRQfs9zRAR7Cn+XVyXfIeaoRNaTr8HGmyKLpQFE3e7mwF9aBuGnAw9GbqB9Aw\ni4YZhH4Uuh6Dex+HJRdoKbDVDwt2A/1mT409ORDbkwOxPTSFBCnB6p10RSL0\nk/IEKfkBVSCyi3P+3ASml+lqxp8cg1I3Zi7AbX1pOtLd5O1PU8g7UPoqDaZp\nqKfJe1SM73RhPFzqHQ6B2OpqZswfS9Px1jKfy1eGyWPDpY3eu9J0AgzHv0Yn\nL2Ll3WKlXrjS5+Ji3K0uGa7TAj0RrxIEvY+OIPj9OIQfwDPjowZ4hlBOKsph\nGfYbQLR2oZSOoFD6URhjKI0HUBYPojCEv+6CB5aBY5pegYQACu9V9FygLKPX\n6BoiOAYfZ2gP4uz5Gv0Sev0Am19GT+TIhZyvL0i/4g4EiPkV+lXYKDzcSCUz\nUF8q0xgF9HVRA6dmkD2uHAkEScWS6/S6k8nPYSSCudkbxhHZ7Y2g7Wm6TmuA\nnCucfMH5trMGWGs0Z/LlIrJr5GIuY+rkeX0RAbwE219CzX0FcHk5L1M256zf\nLLMZFy5Y/GvyfqEBkn49lykVxD+kJmnvSUy+QW86dn4bSkRinvCOwsIu75i0\nNiqs9d6DttXlPSMeZd6YeLi94zWqDDDy3xUaduFRFhpGmoSG3T70FJ87NKw2\nhoZr3E1olObQFYpfnHNPeRl2XoWF07hovYJL3auogtdwSFyTezuYMcjZmxsH\nwm/IyGgIxG/KvXlxTPyW3JsPx/835D3Fjyr6JnplkLOdfhs9Nzh/R2r+XRwK\nhMtfKeBa/KO7irnVOCTE/wVYDTD3/C9QSwMECgAACAgAAABBAHmBTKKhAAAA\nygAAADEAAABvcmcvZ3JhZGxlL3dyYXBwZXIvRG93bmxvYWRQcm9ncmVzc0xp\nc3RlbmVyLmNsYXNzdY3BCoJAFEXvK9NqFUTL9kXQQNuWRZAIRVL7SR+miCMz\nY/5biz6gj4o02nYXh7s5nNf78QSwwsCD56FPmMSqLnIl49BKW5nNTRYJx4Tx\nLMjkXYqCrTif9mvfn18Iw1BVOuJdmjNhuv2pR60SzcYEqbFcsF62JmGhdCIS\nLeOcRa1lWbIW/xTC6JvLm7w4XDOOrEsgdNCOHEIXTvvQa9iB+wFQSwMECgAA\nCAgAAABBACE5fAi2BgAAhAwAADMAAABvcmcvZ3JhZGxlL3dyYXBwZXIvRXhj\nbHVzaXZlRmlsZUFjY2Vzc01hbmFnZXIuY2xhc3OVV9tzG1cZ/x1Z0tqrdXxp\nqlbNTU5aKjuxlQZKimxCHNdO5Uucxo5bl5B0LZ3YG692xWoVx9xTmkJbKLe2\n0FBgeKEPDDPtTKskeIb0qcwwwxsMfwGPfeGFGRgwv7MrOb4lTD322XO+892/\n3/ft+k///f0fABzBr3Q8imdaoONZtcxqeE5HFF/UcE5HHM+ow5fU7ryGC814\nXm1NRZxTS0EtRbVIDRebMa+2Czo6YOnUdknDYjNsHUnFnkRJRx6OunF1lPHl\nZnhKX6UZfgJPoapjFJd1LOFKDOqn7cTxBJbxFQ1f1fA1gfbxyaGxCyP58eEL\nU2dHRvLPCnSOXzIvm1nbdOazU75nOfP9Aq1DrlPxTcefMe2qFGjxrZJ0q/5E\nRUDkBXaUXdvOO770Lpu2IsYHLMfyjwnEMvl894xAdMgtUrBt3HLkqWppTnrT\n5pwtlT23YNozpmepc50Y9RcsasmOu958dt4zi7bMLnlmuSy97PCVgl2tWJfl\niGXLwUJBVioTpmPOS4+Oxs2AIDCYCeOw3Kzi6w9PVd+yswXXKVQ9Tzp+dsi0\nbWWxv3td1JNzl2TBV8rklbLlLTPEUbpku4VFgd0ho0O9hQXTcaRdCQwwikWV\nKLneOyZmoxcqMrNCNfv+jz8CzcpeqKSjsX3S8uiZq1xq90yn6JbC+EO2h9Zs\nndl0R3Va3ds101siGAoP5E1uLMlyuVGWh+/t9cD0dP8xlYQp3ywsTpjlQEzD\n1zV8Q8M3NXxLQGf5ZNm3iCfCaMqad0y/6lH3xMB0bmsRjn2iMoYOdHOlE/PS\nnyZKJyzbVlhqynSzih0lc3lODtluRT5dtaRvM5XJOzaCixAQxGxLoXEUuG8b\nHkYz5Va9Qr3W++6OzD4lbKAPVw0cxCEDvTgkYKwPzcAL+LbAA5u770TVsovS\nM/Airhl4Cd8R6P1EXUHM9dmFRQPfVQr68LKBV/Cqge+p5ft4lcC5Y/NM1VGt\nvVYkgcNDbtUuph3XTxc8afoyXTZV0tPFBhjTF10vrSCavkjbaQOvhYZ+YGAS\npwUevBssBSLekoEf4kcGfoyfGHgaZzS8buANvCmQmA5nTNq9mFaB/5TzIE0P\nCguymF4yLZ/JCUyvtVw6bP607wae5Cj2M7xl4Dquavi5gbdxWsMvDPwSV1nQ\nO0Gvi7Z9MwIF9twTco37u7VTI7vbDowNXkwveO5SqJJYnQkRfDrIdZis9kz3\n5mmikeWUWeLlzkz3doM7rtDhFImZzNbrrRJ1sKnx47shSeDAtj24QRG9jZcW\niYiw0Z4LZqdV8XlMWJV1Y6uNDg/OVVy76svTpr8gcP92jlGfTs61HHY1orvH\n1NJ8bzlM6t67ctendPuGrEuT+YlVbCnL7JXMqLK+O5O/V3ainI/25qSvvTc0\nT9rSrMgNhqaWK74sMbGO6bgK2hxGW0YK/QhmDrqgPiOAJqSQQTcEeniKIIFO\nNUC471QzhM8o7/qQ5XqYp1nyNKkXfc8NiJ5dHyDSs/sDNL0XCD8WiEW5dnHd\njxYcwA48zI8WIB2K4dP4TPilEJgRwU4ZinD/OD5LLpqJ/BkxtALiiRVEZw/W\nEFtBfPYGNG6ba2jpTHCpwbiB1lO9vM1FU9EadlzHY+rZ9hYS6tl+HV0r6Jit\ny3Z2Uojc9zVkd94WuZjIxRnK/T3vI3LNPKqJXEuq5Y8YVLSk9vrbOLqC5Gxv\n5wM38GAulorVkMrFU/EaHgoYV/+ait/ErlSMC1U0XbuJ3e+sfqhU9K43vYc2\nlYka9nbu4/7gBjcO3UJaIKenSOgKFNKrQCcdvGMgpb+bS2zPk7idM9YxGreZ\n/7/jY9HGHLaJDvVEUUREd3A+qJ7kUPV6E49wfZTVygRAOEIgHGdtzrMqJgtf\nJFeZ1Arr9gIr9Bpr9AaOctZ9Dr9GDr9BP36LAdQotYJBWh3GxziJf/DD8Z/8\nOvwXxrCKcRHBpNA4rQ0M05uTIom82IVRsRdj4gDvP4UJejUpDpPncQ5qhZlz\nRFAZt2jtCWj0oEabOdKIiwaOuOundRHsPo9jxNF+6v4CaU3IiHZ6NcBITfyN\nvp0gqor4C4bwJD9ihylurEmOUPIkKVPQ/oPjGqL83bOKnWjRoAfHp0KihqSG\nPB+jwL9xos/SMLbKLtK25QODHsN4vY8YZNAop/jHV1e9p44Ed0DzTezfiQOl\n3601Uzygnw2SYYQ89cB19S6ry5/nMxL05Edo7bmFRwTeQXT8PZKjZGyl2aZA\nXRKxoIX53wLp53lzjv35/Dr1bYx/mk+VCQ2RCY2yvDgbeDTzP1BLAwQKAAAI\nCAAAAEEAkOyELHkCAACGBAAALQAAAG9yZy9ncmFkbGUvd3JhcHBlci9HcmFk\nbGVVc2VySG9tZUxvb2t1cC5jbGFzc41T207bQBA9CyR2jIHUlEsKFEopJLTE\nBdrSC0WiYEAiXJRApDxFJlkFg7Ejx6GiX9WLBKhIfexDv6mqOuuESyAP5GFm\n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\n+roQXs+y3iDjjXgTr7y5HPfiLUz4Vp6+rRxRvL0cMbyDm9EQ7uPld8p4F94t\nY5CtSOA93LxXwvtCeH8IHwjhgyF8SEYTPswbH2FpJyR8VMY63C/TCT8m4eMS\nTkr4hEDFEdVYYVhR1RjQkzfphiawoOOwekSN6FaE5xsFypkmpqecNt0WWJSb\n2fpg2tEts9c2pphMzYn0drcT02VMFrXMQ3o8batMJ1DbYdnxSNxWY4YWGbHV\nZFKzI31e35pPSvzhYjU9Q+qqtet60gmBSk+ZoZrxSA8RmHFiCDpDemrFSoHl\npbS0mylHNQym26SburNF4K6a2QgLnVBqljvrJR9qptW1ewX8rVaMvL6wQze1\nrnRiULP3qIMch8oODste1dZ5nl308ykFlHbTJPGGmkppNL1qlpOsaKZD+0kS\nRamiprY4uIrukbUOadFhCZ90ZU+vXCRoOdn5pCRMdhLJKRz5YgwXQaPFU0rb\nd24/GtWS2RjLCdUe1myPfL6pabFUmzViGpYaI8YBwlpKPaS1FWNNcaxkh3ZE\nMwiPdPgKTzrtG5EOoiXBVYWuO5bMua+6iHZToTu2EO/8HkeNDneqSZdFwqck\nnJLwAFk7ZXpKwmmBy3POdCO6c/CwFmXd83r0uKk6aZvUbZ1JkGcAZUc0bdua\n6URayYmsroQ9co+VtqOa56RcbJqYjECz3YwaVoqg1Kk5Q1ZMwqcVPIgxBdtx\nk4JN2KxgCzfPw40KtmKbgla0KdiBDMnKV6VgHLsElhRDdFtaN2KarWACZxQ8\nhLMU1yZrWMFneL4Dn1XwMCYVfI6bz/PaF/BFBV/ClxV8BV+V8DUFX8c5Bd/A\nNyU8ouBbeFTBtzEp4TsKvovvCQSakqrtKPg+fkBG5QBAuqtZ4Q8l/EjBj5nr\nJ/iphJ8p+Dl+oeA8fqngV3hMweP4tYLfsP7fIk6YadMMzWF2wh953LKPkaAn\n8DsJv1fwB/xRwZP4k4I/4y9EXAKYhKhWK23Eqk3LqU6bt+vJakqgaseiTjQJ\nhLo1NWWZLST1r3zgv+HvCp7CpMDSae91p01HT2hTQtlXdISd7OTlsyUraS/G\njMCVs4JG4PpLTNFc0LOli8p2YTpQ0ZleaHc0KlyWnfOSa1Gel5ZeXCmhNmpr\nquPmrsCGkpW2ZI2cUZ98NVwk58c1Z5fKp/byQKJ5l5rQirNw+jZg2SaVkcaa\n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\nkI8zWEy5zIhbnVvFXA0TbVJICSMLU2RMGDk8SHcVUtsihwWKDogSnT6+XAP2\nuNkaisWlABVspQ05TxaGihJDKIguykgnXaQDhFTtILX6IdmeIN6MxKtTtKoS\nmKddzOdoFxS1RBlMhbN5V6AhcA01DYHp1msItk6vPI/aWJwSeloqJXEzYYEw\nFExRd3iIfHGGLDiL5XiYkukRoj/m8WNLUZeWoi4tri68miIE9mMj3kxnAZFk\nCqpfRVjGmWAtcZ0tejNBacy3mkQjuzfoNrLhANf+jbZe4ZfHPR5uKurS5Ooi\n4S2C/+H/AlBLAwQKAAAICAAAAEEA1GWLCx8AAAAdAAAAIwAAAGdyYWRsZS13\ncmFwcGVyLWNsYXNzcGF0aC5wcm9wZXJ0aWVzKyjKz0pNLim2TS9KTMlJ1U3O\nyeQqKs0rycxNteUCAFBLAwQKAAAICAAAAEEAAAAAAAIAAAAAAAAAKQAAAGdy\nYWRsZS13cmFwcGVyLXBhcmFtZXRlci1uYW1lcy5wcm9wZXJ0aWVzAwBQSwME\nCgAACAgAAABBAAAAAAACAAAAAAAAAA8AAABvcmcvZ3JhZGxlL2NsaS8DAFBL\nAwQKAAAICAAAAEEA1dw/rjwCAABTBQAAMQAAAG9yZy9ncmFkbGUvY2xpL0Fi\nc3RyYWN0Q29tbWFuZExpbmVDb252ZXJ0ZXIuY2xhc3OVVF1vEkEUPQMLi+va\nIra1fkM/lI9SKk+mEBLSaDQhrRHSxMdhWddtYJcMQ6N/wt+iLzTRxB/gjzLe\nHZBQlrT0YefeOXvvuXPm3t0/f3/+BlBG2UACOzp2DUSwY0DH88B7EXhZHTkd\neR0FhnjV9VxZY4hmc6cM2pHfsRlWG65nHw97bVu0eLtLSKrhW7x7yoUb7Ceg\nJj+7A4ZiwxdOyRG807VLVtct1dsDKbglj/xej3udgOzI985tIW1RYdi4zPW1\n/5+vfBOiaqtVqRGbbo0RhsNs44yf81KXe07pHYUErJUZ7KR9ZluykgtDpIUL\nh7SsLaKga5L02pbBPSzIjfe5GNiCYWtewMzB36sYil50yuoM1pTC9RylLUoa\nGYzXXyy7L13fG+jYY7jVdB2Py6GgKztYmo2ocoruQ7V1GFZRC0NXiAl1wWj6\nQ2HZb9ygj5mr+rYf1DFh4DZD+rrrMlHEvokSDkzcw0uGwg0mhCE5r4lhewlR\n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\nvqJ1uogHHd4G2o8KyFkPcsKF7BCQ0bbvGyAu+BA7KhHbHMSkx6phF1FOBB8i\nWhPxEu9c8KHJHqn21YfoqoG4RIjLdSHOenH5ezl6v6qXM3V6WWLn1rvcVX15\npc5lkfJ6r4hc/YoYDV+ROedxmHdBNJc2MQHCR3ULn00hJtawlWKZve3OY5gn\nc6+RQpaPSjHPt5j7p1B+WcROwntZ3qK04EiL/wJQSwMECgAACAgAAABBAPzt\niq+lAAAA5QAAACgAAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNl\nciQxLmNsYXNzhYxBCsIwEEX/aLW1Cnbluohrg16hKAiKgieI7VBb0gSS6uFc\neAAPJaa4dOEM84cP7//X+/EEsMY4RBhiRIjP5mZz3laKCbPMNI3Uxb7SfJLW\nsV3W8i4J043OlXGVLg/cXk0RIibMjS1FaWWhWOSqEj/hxYow2WnNNlPSOXaE\npOsTSupSHC815y0h/VeTpCD08J2+X3gXYOB/gKHXyF/sGeqAJPoAUEsDBAoA\nAAgIAAAAQQAkFWZ7SwMAAL8JAAA7AAAAb3JnL2dyYWRsZS9jbGkvQ29tbWFu\nZExpbmVQYXJzZXIkQWZ0ZXJGaXJzdFN1YkNvbW1hbmQuY2xhc3PFVutOE1EQ\n/k4pPbAtUFAQ74gVoS20BRGwgEKVixQKQUnw37Zd60LZJdtFfAWfwlfARINK\nYvyn8ZmMcc5ugWJbthgS/5zLzJxvvjk7M3t+/v7yFcAgViQ0I9JIQ1RCCyIS\nYhj0Ygj3OIY57gvNqASOMY4HHOMSvJiUIOEhxyOOKQaP+UotBKIM3UndyEVy\nhpzNK5FMXo0k9K0tWcsmVU1Zlo2CYsTJelzVVHOSYbbX2fxvC0ucLbGL960x\nuBN6VmFoEYKlna20YjyT03mStCX1jJxfkw1V7ItCt6DLcHHqpakYM6pRMFd3\n0kVIBt+8pilGIi8XCgpZjThyDFTCoTi9mWPLCldTHglDk66tmrJhprZNVdc4\nEgyt9tp2RUqTsF70Jjfk13IkL2u5yKppqFouXi7pc2Zehk0c6mQjJy6uDI++\nnG7ZE6mS0FJF2Wnf3rYRAZKXzOaivG19Co7HDJvnkgXOscasTHG9iYohJoZB\nhkAt5xikVX3HyCgzqkifjjKbAXFXPrThgg9+tHI88WEGsxxzPszjKUOX09Uw\njDkSea5tavquViEfOqupfLiKa4LYIiWyo4OFKvAd1RT9NSaYnUBUWqVbQWtJ\nDCmG4X+qsVpisj1O7cqGcjKmaorBsxcN5b5zFp2aBLYR5ZmcySiFQmA0Slk6\nVENh9NllumOq+QhVlaiwEwIq55xiMvSUdoxUekPJmIdnS0Ucy9S3ToT2tlKv\nOYdyLG06tRbvQk19r1a0H873eyJ/TwMuNrj/dTHhs6Cii37oLfTrZ36/aFe0\nqoNLdC/QT5F2c7Svo9kXDH2EKxgK76PuPe1daKexWejYLOrZHLxsHh0k6yAd\n2eMSrgDWivoOyRiukzcb9R29INw0TwQ/wPUJ7vBn1LvwDZ6l/u9oOwBfD5Gm\nIcj20bh3AGn9AN71UJi2vv5DRdOeRVbQaBNgbBGtbAntLIUAW7GoBG0nR1Qm\ncAvdREGsbtPKRQGHEcAdwukhaQPYLwQ4PH6B2VskmyKtwOFW9Ow4eo+AYjMl\nrviRK44+AmfWKmjFL1Yhcifut9/CGMBlmqfJbTM9szpJcoPmm24JdwWEv4FO\nxDAC8b6KIQ7x2IoRdfEyi2Ha7cICzUm39AdQSwMECgAACAgAAABBAKUZRKOi\nAgAAJgcAADMAAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRB\nZnRlck9wdGlvbnMuY2xhc3OtlW1PE0EQx/97Lb1yLbSoID5XBIErcICKIsZE\n8CEkFU2QRnhhsrRnOb3ume2h+BH8Lr6QRCXRxA/ghzLOXs9y0pIDY5rszszO\n/mZmd27789e3HwBmcduAjlEDaYx1kzSuo2ggiUkDU7B0TOuYYchUvHqdi2rJ\nETbDUMmTNasmedW1rYrrWE+5bNjVpX2fBYbUHUc4/l2GkbF49/EyQ3LJqxI8\npwwr2/VNWz7jmy5ZTpS8CnfLXDpKD41Jf8tpMGTvvfRt+eSN73hCqctC2HLJ\n5Y2GTap1MHIkZpCEHI7up6zzdf5+0171ufSbRob+sdIr/pZbLhc1a9WXjqgt\njG8wJLisqeTaFhl6PBFB6Jhl6GvKzai06FMNGx3IHWLFF9HGVufvhflnPLHi\niT/VZP7KYLFTbfHxopF0XGNYPsIdx2Nngj7QdqbVQF03fJQtDMaqty0r9kNH\n9cVAm8+UqjCLDLJquJ5FNwwdNxjmY+lr4rXw3okOVzd42JKKMafjZha3MM8w\neawGZJg4ztkzzB6/NejzjT9VhtG2Gz3svgpxfgwfOjX6f2iYaB/+a7ptcenz\n5dXqgx1f8jJ3t+1DXoAyCvRcpukNpUdA9RRJXdBUn5Glh7RHpGk0Z0y2B80s\nfkFil1QNvTT2IkE7n6OLrcNgG8iRbaDpjjxOAoGksIx+p9AfQudoVl5a4mOL\nlSIb2IsIQ2sxNLKcDhiDOBcyHtMOio7cdyTXi+ZnJFSGXZ8OACsBsNB0bQFz\nIVBJ50nSSL6ASyF6MazZUNTiV6TMfaqhVtgW0syJpGq0yEaTnFeFXw5598lH\nxU+ZxT2w3QMZrkUyTLU4KQwFx6akKxgOMhoJdl6lmwJMuiedxj7yOkPz2aT6\n9zNxkeaCAuTT9AdoYgLGb1BLAwQKAAAICAAAAEEAjItNE/wDAAB1CwAAPAAA\nAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyJEJlZm9yZUZpcnN0\nU3ViQ29tbWFuZC5jbGFzc8VW63LbVBD+jq3kuLLSOqZJGyDgBqdJfIlza5vY\naUuSXokbF9wGnHKTFdWosaWOLNO+Ao/AW5QZmBQy0P6D4R14FBj2SG5i107k\nMJ3hz7ns2bP77ac9q/3zn19+AzCHhzJOY/EEDUsyhrDIkZMhYVlGFpfDuIKr\nHB+KzQrHqlC7JkPGdY4bIdzkuCXjNj6SMYB1jryMKDY4Chx3Gfqdb4x6fIZh\nLG/ZlUzFVrerekarGpk1q1ZTze28Yep3Vbuu2znSXjZMw7nCcHPSX/11DVe8\n3aKXm9pkkNasbZ3hlBBsNGpl3b6nlqskieYtTa1uqrYh9k2hJOAyDK3qDy1b\nv2HYdafYKDdtMii3TVO316pqva6T2qIvyHhXQxRpWDtQ7UJOZywMA5ZZdFTb\nKTx2DMvk+IRh0Ft7vujQIVtbk/lH6rdqpqqalUzRsQ2zkuuUTPlD77BNGIKq\nXRHUddijb2e5+kSSt/AOaFto22Z6dbxveLCFqkLTx1HZ5OkIwgi1tnNHfex+\nXI4iw84bySv/EGbd3As8nRHDrBjmGOK93GOQi1bD1ihnREIOd+hMC+4VnMWI\ngmGc4bjHkD4Wp+LyfQWb+JTjMwUlbDHE/PhU8ACfMyz5erpv7pjWE7NLZp49\n7EjBOYwJVF8xJA93sGJXGjXddK4/1fRmHpxrmow1cyRdJb2Yl4CxifH6xDRD\n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\nGRK8nT2T7ikSavsD1BfsAokioZNtKqJEjcfpswGewCBPIss1TPM+5LmOEh/A\nEk9FhJY7TWNC0ruF2xHJLdwhjxO5JYzhLtXMIod75KnkgU4njU32FQbrrHp6\ni8YZj8dZJbxCNjVb/ARtjn7n6Gv/RZNUh0JaxpNxkTWyPBaUXS9opgO45J/A\nfUzRvoIHET6Hh5Gdxk2yY5TvRwHD5E1IeLqPpimgiLHvUEsDBAoAAAgIAAAA\nQQBgTX5VBAIAALgEAAAyAAAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQ\nYXJzZXIkUGFyc2VyU3RhdGUuY2xhc3OVU99v0lAU/k4pFAtzgNvUORURNxgb\n1b0ZjCYSTUzIZoLZw94u0LAu5dbcdkb/J1980cQH/wD/KOO5LZvdIEGatOdH\nv/Od75zb/v7z8xeAA7RtZFGzkUMtj8c26nhiYcdCg5B74UkveknINJrHBLMb\njFzCas+T7uH5ZOCqD2Lgc6bSC4bCPxbK0/E0aUanXkgovBcqdFU/EhEni++k\ndFXXF2Ho8st2L1BjZ6zEyHedoe853WAyEXKkOyR19VR5h1CaiC8DlyMVHX2M\nvEAS1hu9M/FJOL6QY6cfKU+OO80TQt4LLyAZocZa5QyOsBLIFJuFJqGc+Fd0\nn8xpMqft4nFmuFlDIZCHgbwQ+3rePEvvKZApyBs5srBL2Gks5nnW0UdtfH5K\nqP8PmmD3g3M1dN96+tQ3ZjBtPU0RFvIEq/EqbO63WxZaReyhbGGfsLfMbDza\nv+0cDc7cYUQ4WH7thNri4a40S46CZ5iIaHiqv97qIgazyr9WDvqyYOgVgHCD\nI4ctsc3u/oDxjR0DNj9zOkklFNgvJgC2q4DJSlCOiSpsE5IOVxmaulXJfIf5\n9RrNWkyzkUASmti7hTUQE67jTkx8F5ucJ9y7VNeKY76vK9tKKaOEsqQp708L\nn7M1pmPNFJdSerKXerJ4gIdxWTXGP8JNtpvI8JttrJg2V2zjNtstDS/l/wJQ\nSwMECgAACAgAAABBAHDNWA3dAgAAawcAAD8AAABvcmcvZ3JhZGxlL2NsaS9D\nb21tYW5kTGluZVBhcnNlciRVbmtub3duT3B0aW9uUGFyc2VyU3RhdGUuY2xh\nc3O9VctSE1EQPXeSScIwQAgQ8YWIKEkIhJcPBLGQ0tIqCq1CWbC7JFNxdDJD\n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\nF8QOkCKhH8Jw+igcPUAmgl/Q9qgy6nfsJY6gXir16CT8QepQwFBT9+mw+yA9\nMUQ6pZoh5Imp5KHTSWbFJf7esZCEHxxugomHMIE1Vyh2lb4HYp5SRArXJMjE\nAdoieNNqyhgyRKzPp+znhnhyN4JrPg26vSHi85BWLnCjXcEu1NhHsuDTsfSA\n40QTx1yT1Dgi2XkJUvCJjP8FUEsDBAoAAAgIAAAAQQBcdsZCfAEAAAsDAAA6\nAAAAb3JnL2dyYWRsZS9jbGkvUHJvamVjdFByb3BlcnRpZXNDb21tYW5kTGlu\nZUNvbnZlcnRlci5jbGFzc52SS0/CQBSFzwUERHw/UMOi7MAEmhh14yNRjCui\nJBj3QzuWMW2HDAMJ/0pXJi78Af4o4xSqMdhE4yzu6Zw53/R2pm/vL68A9rFb\nQBYbeWzmsZVHKYftHHYI2RMRCn1GSFdrd4RMU7qcsNwSIb8eBl2ublnXN85a\nSzrMv2NKRPPYzOieGBCOWlJ5tqeY63Pb8YXdVvKBO9pInyst+KApg4CFbrRr\nU4YjY3J1TFj1+GdofNPXQoaEjWqt9cBGzPZZ6NkdrUTomejOj+gl10z43CWU\nE9YGjhLxjoWOHCqHX4mo5b0/9daIOigihzyB2oRif0rVjfYJFx2urdiKdPJm\n614qS/e41R0K37WmDVhV3vAaVr0djKPcaTAeMX/Iaw3CwX8OjXA4g513B1qx\n3zhUMGfuPxoZUPRhps6bmW2UjM7tPYOezEMKBVOzE3MdC6YWpwGjixN8Ccsx\nXI/h9FrqcQYtfUPTX+hKApqeRcuJ6GoCmplFKwmo+XcnqfUPUEsDBAoAAAgI\nAAAAQQAKzzg9fAEAAPwCAAA5AAAAb3JnL2dyYWRsZS9jbGkvU3lzdGVtUHJv\ncGVydGllc0NvbW1hbmRMaW5lQ29udmVydGVyLmNsYXNznZLLSsNAFIbP2Ktt\ntbbWatVF3DVCE1DEhReQFhdSL1Dpfpoe05EkEybTQt5KV4ILH8CHEidpEKlB\nxFmcM/PP/82cubx/vL4BwAFslyAPjSJsFKFZhM0CbBWgRSB/yjwmzwlk2vqQ\nQLbLx0ig2mce3kzdEYp7OnKUUu9zizpDKlg0TsSsnLCAwFGfC9u0BR07aFoO\nMwdhING9E9xHIRkGXe661BtHi3a5N1MiihMCNRtlYgpvfcm4R6DR1vuPdEZN\nh3q2OZCCebaytn5Yeygpc3BMYDdlLrAES1YsDfhUWHjJoor1v5RmRAVUoABF\nAqRHoBzEUMdXFIHjAUptrmh+sq3GHzQ5Qe1qeK210bANrdNzw2j2zA1n1Jmi\nbhA4/Mc1qdtdoC5GgRTUkr9zsAc59eBRywKJzqLishqZKhOVc/svQJ5VZwlK\nKuZjsQ5lFStzg8orMb4K1QTuJHCmvvS0gDa/oZkvdC0FzSyiO6loLQXNLqJa\nCqo+a+xa/wRQSwMECgAACAgAAABBAP3YP6IVAAAAEwAAAB8AAABncmFkbGUt\nY2xpLWNsYXNzcGF0aC5wcm9wZXJ0aWVzKyjKz0pNLim25SoqzSvJzE215QIA\nUEsDBAoAAAgIAAAAQQAAAAAAAgAAAAAAAAAlAAAAZ3JhZGxlLWNsaS1wYXJh\nbWV0ZXItbmFtZXMucHJvcGVydGllcwMAUEsBAhQDCgAACAgAAABBAAAAAAAC\nAAAAAAAAAAkAAAAAAAAAAAAQAO1BAAAAAE1FVEEtSU5GL1BLAQIUAwoAAAgI\nAAAAQQBtsT49QAAAAD8AAAAUAAAAAAAAAAAAAACkgSkAAABNRVRBLUlORi9N\nQU5JRkVTVC5NRlBLAQIUAwoAAAgIAAAAQQAAAAAAAgAAAAAAAAAEAAAAAAAA\nAAAAEADtQZsAAABvcmcvUEsBAhQDCgAACAgAAABBAAAAAAACAAAAAAAAAAsA\nAAAAAAAAAAAQAO1BvwAAAG9yZy9ncmFkbGUvUEsBAhQDCgAACAgAAABBAAAA\nAAACAAAAAAAAABMAAAAAAAAAAAAQAO1B6gAAAG9yZy9ncmFkbGUvd3JhcHBl\nci9QSwECFAMKAAAICAAAAEEAlSXTprkBAAAZAwAALwAAAAAAAAAAAAAApIEd\nAQAAb3JnL2dyYWRsZS93cmFwcGVyL0Jvb3RzdHJhcE1haW5TdGFydGVyJDEu\nY2xhc3NQSwECFAMKAAAICAAAAEEAaQEsqx8FAAAkCgAALQAAAAAAAAAAAAAA\npIEjAwAAb3JnL2dyYWRsZS93cmFwcGVyL0Jvb3RzdHJhcE1haW5TdGFydGVy\nLmNsYXNzUEsBAhQDCgAACAgAAABBAGhR/n2iAAAA0gAAACMAAAAAAAAAAAAA\nAKSBjQgAAG9yZy9ncmFkbGUvd3JhcHBlci9Eb3dubG9hZCQxLmNsYXNzUEsB\nAhQDCgAACAgAAABBAKUDIkk7BAAA2AcAAEEAAAAAAAAAAAAAAKSBcAkAAG9y\nZy9ncmFkbGUvd3JhcHBlci9Eb3dubG9hZCREZWZhdWx0RG93bmxvYWRQcm9n\ncmVzc0xpc3RlbmVyLmNsYXNzUEsBAhQDCgAACAgAAABBANG6TuwsAwAAwAYA\nADQAAAAAAAAAAAAAAKSBCg4AAG9yZy9ncmFkbGUvd3JhcHBlci9Eb3dubG9h\nZCRQcm94eUF1dGhlbnRpY2F0b3IuY2xhc3NQSwECFAMKAAAICAAAAEEAJADJ\nfuMPAABYIAAAIQAAAAAAAAAAAAAApIGIEQAAb3JnL2dyYWRsZS93cmFwcGVy\nL0Rvd25sb2FkLmNsYXNzUEsBAhQDCgAACAgAAABBAHmBTKKhAAAAygAAADEA\nAAAAAAAAAAAAAKSBqiEAAG9yZy9ncmFkbGUvd3JhcHBlci9Eb3dubG9hZFBy\nb2dyZXNzTGlzdGVuZXIuY2xhc3NQSwECFAMKAAAICAAAAEEAITl8CLYGAACE\nDAAAMwAAAAAAAAAAAAAApIGaIgAAb3JnL2dyYWRsZS93cmFwcGVyL0V4Y2x1\nc2l2ZUZpbGVBY2Nlc3NNYW5hZ2VyLmNsYXNzUEsBAhQDCgAACAgAAABBAJDs\nhCx5AgAAhgQAAC0AAAAAAAAAAAAAAKSBoSkAAG9yZy9ncmFkbGUvd3JhcHBl\nci9HcmFkbGVVc2VySG9tZUxvb2t1cC5jbGFzc1BLAQIUAwoAAAgIAAAAQQCZ\nYzY3pwkAAA0WAAAqAAAAAAAAAAAAAACkgWUsAABvcmcvZ3JhZGxlL3dyYXBw\nZXIvR3JhZGxlV3JhcHBlck1haW4uY2xhc3NQSwECFAMKAAAICAAAAEEA+uIY\n5qoAAADbAAAAIgAAAAAAAAAAAAAApIFUNgAAb3JnL2dyYWRsZS93cmFwcGVy\nL0lEb3dubG9hZC5jbGFzc1BLAQIUAwoAAAgIAAAAQQA5bBTiVggAAIYSAAAi\nAAAAAAAAAAAAAACkgT43AABvcmcvZ3JhZGxlL3dyYXBwZXIvSW5zdGFsbCQx\nLmNsYXNzUEsBAhQDCgAACAgAAABBANgMkiR8AgAAGQYAAC0AAAAAAAAAAAAA\nAKSB1D8AAG9yZy9ncmFkbGUvd3JhcHBlci9JbnN0YWxsJEluc3RhbGxDaGVj\nay5jbGFzc1BLAQIUAwoAAAgIAAAAQQDkdgJwoxQAAC4tAAAgAAAAAAAAAAAA\nAACkgZtCAABvcmcvZ3JhZGxlL3dyYXBwZXIvSW5zdGFsbC5jbGFzc1BLAQIU\nAwoAAAgIAAAAQQDwvzr2bwIAADQFAAAfAAAAAAAAAAAAAACkgXxXAABvcmcv\nZ3JhZGxlL3dyYXBwZXIvTG9nZ2VyLmNsYXNzUEsBAhQDCgAACAgAAABBAEpK\nryeNAQAA7wIAADgAAAAAAAAAAAAAAKSBKFoAAG9yZy9ncmFkbGUvd3JhcHBl\nci9QYXRoQXNzZW1ibGVyJExvY2FsRGlzdHJpYnV0aW9uLmNsYXNzUEsBAhQD\nCgAACAgAAABBALTndHg3BwAAkQ4AACYAAAAAAAAAAAAAAKSBC1wAAG9yZy9n\ncmFkbGUvd3JhcHBlci9QYXRoQXNzZW1ibGVyLmNsYXNzUEsBAhQDCgAACAgA\nAABBAIR/zevCBAAAfAkAADAAAAAAAAAAAAAAAKSBhmMAAG9yZy9ncmFkbGUv\nd3JhcHBlci9TeXN0ZW1Qcm9wZXJ0aWVzSGFuZGxlci5jbGFzc1BLAQIUAwoA\nAAgIAAAAQQCqPakPsAIAAD8HAAAtAAAAAAAAAAAAAACkgZZoAABvcmcvZ3Jh\nZGxlL3dyYXBwZXIvV3JhcHBlckNvbmZpZ3VyYXRpb24uY2xhc3NQSwECFAMK\nAAAICAAAAEEAR/yoDxUJAAAcFAAAKAAAAAAAAAAAAAAApIGRawAAb3JnL2dy\nYWRsZS93cmFwcGVyL1dyYXBwZXJFeGVjdXRvci5jbGFzc1BLAQIUAwoAAAgI\nAAAAQQDUZYsLHwAAAB0AAAAjAAAAAAAAAAAAAACkgex0AABncmFkbGUtd3Jh\ncHBlci1jbGFzc3BhdGgucHJvcGVydGllc1BLAQIUAwoAAAgIAAAAQQAAAAAA\nAgAAAAAAAAApAAAAAAAAAAAAAACkgUx1AABncmFkbGUtd3JhcHBlci1wYXJh\nbWV0ZXItbmFtZXMucHJvcGVydGllc1BLAQIUAwoAAAgIAAAAQQAAAAAAAgAA\nAAAAAAAPAAAAAAAAAAAAEADtQZV1AABvcmcvZ3JhZGxlL2NsaS9QSwECFAMK\nAAAICAAAAEEA1dw/rjwCAABTBQAAMQAAAAAAAAAAAAAApIHEdQAAb3JnL2dy\nYWRsZS9jbGkvQWJzdHJhY3RDb21tYW5kTGluZUNvbnZlcnRlci5jbGFzc1BL\nAQIUAwoAAAgIAAAAQQDXg7WzWAQAAOwKAAA7AAAAAAAAAAAAAACkgU94AABv\ncmcvZ3JhZGxlL2NsaS9BYnN0cmFjdFByb3BlcnRpZXNDb21tYW5kTGluZUNv\nbnZlcnRlci5jbGFzc1BLAQIUAwoAAAgIAAAAQQB9rc55RwEAAEsCAAAxAAAA\nAAAAAAAAAACkgQB9AABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZUFyZ3Vt\nZW50RXhjZXB0aW9uLmNsYXNzUEsBAhQDCgAACAgAAABBALPf4voZAQAAZwIA\nACkAAAAAAAAAAAAAAKSBln4AAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5l\nQ29udmVydGVyLmNsYXNzUEsBAhQDCgAACAgAAABBAFNmCtUCBgAAZw4AACYA\nAAAAAAAAAAAAAKSB9n8AAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lT3B0\naW9uLmNsYXNzUEsBAhQDCgAACAgAAABBAPztiq+lAAAA5QAAACgAAAAAAAAA\nAAAAAKSBPIYAAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyJDEu\nY2xhc3NQSwECFAMKAAAICAAAAEEAJBVme0sDAAC/CQAAOwAAAAAAAAAAAAAA\npIEnhwAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkQWZ0ZXJG\naXJzdFN1YkNvbW1hbmQuY2xhc3NQSwECFAMKAAAICAAAAEEApRlEo6ICAAAm\nBwAAMwAAAAAAAAAAAAAApIHLigAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExp\nbmVQYXJzZXIkQWZ0ZXJPcHRpb25zLmNsYXNzUEsBAhQDCgAACAgAAABBAIyL\nTRP8AwAAdQsAADwAAAAAAAAAAAAAAKSBvo0AAG9yZy9ncmFkbGUvY2xpL0Nv\nbW1hbmRMaW5lUGFyc2VyJEJlZm9yZUZpcnN0U3ViQ29tbWFuZC5jbGFzc1BL\nAQIUAwoAAAgIAAAAQQC0KqtaTQIAAO8EAABGAAAAAAAAAAAAAACkgRSSAABv\ncmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRDYXNlSW5zZW5zaXRp\ndmVTdHJpbmdDb21wYXJhdG9yLmNsYXNzUEsBAhQDCgAACAgAAABBAHzsUs7Q\nBgAAJhEAAD0AAAAAAAAAAAAAAKSBxZQAAG9yZy9ncmFkbGUvY2xpL0NvbW1h\nbmRMaW5lUGFyc2VyJEtub3duT3B0aW9uUGFyc2VyU3RhdGUuY2xhc3NQSwEC\nFAMKAAAICAAAAEEAJMS+oqUCAAD0BgAAPAAAAAAAAAAAAAAApIHwmwAAb3Jn\nL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkTWlzc2luZ09wdGlvbkFy\nZ1N0YXRlLmNsYXNzUEsBAhQDCgAACAgAAABBAFQESz6qAgAAxAYAAD0AAAAA\nAAAAAAAAAKSB754AAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2Vy\nJE9wdGlvbkF3YXJlUGFyc2VyU3RhdGUuY2xhc3NQSwECFAMKAAAICAAAAEEA\nmCXgzLsCAACqBgAANwAAAAAAAAAAAAAApIH0oQAAb3JnL2dyYWRsZS9jbGkv\nQ29tbWFuZExpbmVQYXJzZXIkT3B0aW9uQ29tcGFyYXRvci5jbGFzc1BLAQIU\nAwoAAAgIAAAAQQDkZkOYpwEAAKMDAAA4AAAAAAAAAAAAAACkgQSlAABvcmcv\nZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRPcHRpb25QYXJzZXJTdGF0\nZS5jbGFzc1BLAQIUAwoAAAgIAAAAQQCixvdFqwIAALYFAAAzAAAAAAAAAAAA\nAACkgQGnAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRPcHRp\nb25TdHJpbmcuY2xhc3NQSwECFAMKAAAICAAAAEEAZ0FxspQCAAB4BQAAPQAA\nAAAAAAAAAAAApIH9qQAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJz\nZXIkT3B0aW9uU3RyaW5nQ29tcGFyYXRvci5jbGFzc1BLAQIUAwoAAAgIAAAA\nQQBgTX5VBAIAALgEAAAyAAAAAAAAAAAAAACkgeysAABvcmcvZ3JhZGxlL2Ns\naS9Db21tYW5kTGluZVBhcnNlciRQYXJzZXJTdGF0ZS5jbGFzc1BLAQIUAwoA\nAAgIAAAAQQBwzVgN3QIAAGsHAAA/AAAAAAAAAAAAAACkgUCvAABvcmcvZ3Jh\nZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRVbmtub3duT3B0aW9uUGFyc2Vy\nU3RhdGUuY2xhc3NQSwECFAMKAAAICAAAAEEAEKM9BxYSAABsKQAAJgAAAAAA\nAAAAAAAApIF6sgAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIu\nY2xhc3NQSwECFAMKAAAICAAAAEEAGovlPskHAAAAEgAAJgAAAAAAAAAAAAAA\npIHUxAAAb3JnL2dyYWRsZS9jbGkvUGFyc2VkQ29tbWFuZExpbmUuY2xhc3NQ\nSwECFAMKAAAICAAAAEEAed8FdNoCAABFBQAALAAAAAAAAAAAAAAApIHhzAAA\nb3JnL2dyYWRsZS9jbGkvUGFyc2VkQ29tbWFuZExpbmVPcHRpb24uY2xhc3NQ\nSwECFAMKAAAICAAAAEEAXHbGQnwBAAALAwAAOgAAAAAAAAAAAAAApIEF0AAA\nb3JnL2dyYWRsZS9jbGkvUHJvamVjdFByb3BlcnRpZXNDb21tYW5kTGluZUNv\nbnZlcnRlci5jbGFzc1BLAQIUAwoAAAgIAAAAQQAKzzg9fAEAAPwCAAA5AAAA\nAAAAAAAAAACkgdnRAABvcmcvZ3JhZGxlL2NsaS9TeXN0ZW1Qcm9wZXJ0aWVz\nQ29tbWFuZExpbmVDb252ZXJ0ZXIuY2xhc3NQSwECFAMKAAAICAAAAEEA/dg/\nohUAAAATAAAAHwAAAAAAAAAAAAAApIGs0wAAZ3JhZGxlLWNsaS1jbGFzc3Bh\ndGgucHJvcGVydGllc1BLAQIUAwoAAAgIAAAAQQAAAAAAAgAAAAAAAAAlAAAA\nAAAAAAAAAACkgf7TAABncmFkbGUtY2xpLXBhcmFtZXRlci1uYW1lcy5wcm9w\nZXJ0aWVzUEsFBgAAAAA2ADYA6hIAAEPUAAAAAA==\n", + "encoding": "base64", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradle/wrapper/gradle-wrapper.jar?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/e708b1c023ec8b20f512888fe07c5bd3ff77bb8f", + "html": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradle/wrapper/gradle-wrapper.jar" + } +} diff --git a/gradle/spec/fixtures/github/gradlew.bat.json b/gradle/spec/fixtures/github/gradlew.bat.json new file mode 100644 index 00000000000..b30ce1da95e --- /dev/null +++ b/gradle/spec/fixtures/github/gradlew.bat.json @@ -0,0 +1,18 @@ +{ + "name": "gradlew.bat", + "path": "gradlew.bat", + "sha": "ac1b06f93825db68fb0c0b5150917f340eaa5d02", + "size": 2763, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradlew.bat?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradlew.bat", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/ac1b06f93825db68fb0c0b5150917f340eaa5d02", + "download_url": "https://raw.githubusercontent.com/bigandroidenergies/version_catalog/main/gradlew.bat", + "type": "file", + "content": "QHJlbQ0KQHJlbSBDb3B5cmlnaHQgMjAxNSB0aGUgb3JpZ2luYWwgYXV0aG9y\nIG9yIGF1dGhvcnMuDQpAcmVtDQpAcmVtIExpY2Vuc2VkIHVuZGVyIHRoZSBB\ncGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0K\nQHJlbSB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w\nbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQpAcmVtIFlvdSBtYXkgb2J0YWlu\nIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KQHJlbQ0KQHJlbSAgICAgIGh0\ndHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCkBy\nZW0NCkByZW0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y\nIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KQHJlbSBkaXN0cmli\ndXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi\nQVMgSVMiIEJBU0lTLA0KQHJlbSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O\nRElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll\nZC4NCkByZW0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu\nZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KQHJlbSBsaW1pdGF0\naW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCkByZW0NCg0KQGlmICIlREVCVUcl\nIiA9PSAiIiBAZWNobyBvZmYNCkByZW0gIyMjIyMjIyMjIyMjIyMjIyMjIyMj\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj\nIyMjIyMjIyMNCkByZW0NCkByZW0gIEdyYWRsZSBzdGFydHVwIHNjcmlwdCBm\nb3IgV2luZG93cw0KQHJlbQ0KQHJlbSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj\nIyMjIyMjIw0KDQpAcmVtIFNldCBsb2NhbCBzY29wZSBmb3IgdGhlIHZhcmlh\nYmxlcyB3aXRoIHdpbmRvd3MgTlQgc2hlbGwNCmlmICIlT1MlIj09IldpbmRv\nd3NfTlQiIHNldGxvY2FsDQoNCnNldCBESVJOQU1FPSV+ZHAwDQppZiAiJURJ\nUk5BTUUlIiA9PSAiIiBzZXQgRElSTkFNRT0uDQpzZXQgQVBQX0JBU0VfTkFN\nRT0lfm4wDQpzZXQgQVBQX0hPTUU9JURJUk5BTUUlDQoNCkByZW0gUmVzb2x2\nZSBhbnkgIi4iIGFuZCAiLi4iIGluIEFQUF9IT01FIHRvIG1ha2UgaXQgc2hv\ncnRlci4NCmZvciAlJWkgaW4gKCIlQVBQX0hPTUUlIikgZG8gc2V0IEFQUF9I\nT01FPSUlfmZpDQoNCkByZW0gQWRkIGRlZmF1bHQgSlZNIG9wdGlvbnMgaGVy\nZS4gWW91IGNhbiBhbHNvIHVzZSBKQVZBX09QVFMgYW5kIEdSQURMRV9PUFRT\nIHRvIHBhc3MgSlZNIG9wdGlvbnMgdG8gdGhpcyBzY3JpcHQuDQpzZXQgREVG\nQVVMVF9KVk1fT1BUUz0iLVhteDY0bSIgIi1YbXM2NG0iDQoNCkByZW0gRmlu\nZCBqYXZhLmV4ZQ0KaWYgZGVmaW5lZCBKQVZBX0hPTUUgZ290byBmaW5kSmF2\nYUZyb21KYXZhSG9tZQ0KDQpzZXQgSkFWQV9FWEU9amF2YS5leGUNCiVKQVZB\nX0VYRSUgLXZlcnNpb24gPk5VTCAyPiYxDQppZiAiJUVSUk9STEVWRUwlIiA9\nPSAiMCIgZ290byBleGVjdXRlDQoNCmVjaG8uDQplY2hvIEVSUk9SOiBKQVZB\nX0hPTUUgaXMgbm90IHNldCBhbmQgbm8gJ2phdmEnIGNvbW1hbmQgY291bGQg\nYmUgZm91bmQgaW4geW91ciBQQVRILg0KZWNoby4NCmVjaG8gUGxlYXNlIHNl\ndCB0aGUgSkFWQV9IT01FIHZhcmlhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQg\ndG8gbWF0Y2ggdGhlDQplY2hvIGxvY2F0aW9uIG9mIHlvdXIgSmF2YSBpbnN0\nYWxsYXRpb24uDQoNCmdvdG8gZmFpbA0KDQo6ZmluZEphdmFGcm9tSmF2YUhv\nbWUNCnNldCBKQVZBX0hPTUU9JUpBVkFfSE9NRToiPSUNCnNldCBKQVZBX0VY\nRT0lSkFWQV9IT01FJS9iaW4vamF2YS5leGUNCg0KaWYgZXhpc3QgIiVKQVZB\nX0VYRSUiIGdvdG8gZXhlY3V0ZQ0KDQplY2hvLg0KZWNobyBFUlJPUjogSkFW\nQV9IT01FIGlzIHNldCB0byBhbiBpbnZhbGlkIGRpcmVjdG9yeTogJUpBVkFf\nSE9NRSUNCmVjaG8uDQplY2hvIFBsZWFzZSBzZXQgdGhlIEpBVkFfSE9NRSB2\nYXJpYWJsZSBpbiB5b3VyIGVudmlyb25tZW50IHRvIG1hdGNoIHRoZQ0KZWNo\nbyBsb2NhdGlvbiBvZiB5b3VyIEphdmEgaW5zdGFsbGF0aW9uLg0KDQpnb3Rv\nIGZhaWwNCg0KOmV4ZWN1dGUNCkByZW0gU2V0dXAgdGhlIGNvbW1hbmQgbGlu\nZQ0KDQpzZXQgQ0xBU1NQQVRIPSVBUFBfSE9NRSVcZ3JhZGxlXHdyYXBwZXJc\nZ3JhZGxlLXdyYXBwZXIuamFyDQoNCg0KQHJlbSBFeGVjdXRlIEdyYWRsZQ0K\nIiVKQVZBX0VYRSUiICVERUZBVUxUX0pWTV9PUFRTJSAlSkFWQV9PUFRTJSAl\nR1JBRExFX09QVFMlICItRG9yZy5ncmFkbGUuYXBwbmFtZT0lQVBQX0JBU0Vf\nTkFNRSUiIC1jbGFzc3BhdGggIiVDTEFTU1BBVEglIiBvcmcuZ3JhZGxlLndy\nYXBwZXIuR3JhZGxlV3JhcHBlck1haW4gJSoNCg0KOmVuZA0KQHJlbSBFbmQg\nbG9jYWwgc2NvcGUgZm9yIHRoZSB2YXJpYWJsZXMgd2l0aCB3aW5kb3dzIE5U\nIHNoZWxsDQppZiAiJUVSUk9STEVWRUwlIj09IjAiIGdvdG8gbWFpbkVuZA0K\nDQo6ZmFpbA0KcmVtIFNldCB2YXJpYWJsZSBHUkFETEVfRVhJVF9DT05TT0xF\nIGlmIHlvdSBuZWVkIHRoZSBfc2NyaXB0XyByZXR1cm4gY29kZSBpbnN0ZWFk\nIG9mDQpyZW0gdGhlIF9jbWQuZXhlIC9jXyByZXR1cm4gY29kZSENCmlmICBu\nb3QgIiIgPT0gIiVHUkFETEVfRVhJVF9DT05TT0xFJSIgZXhpdCAxDQpleGl0\nIC9iIDENCg0KOm1haW5FbmQNCmlmICIlT1MlIj09IldpbmRvd3NfTlQiIGVu\nZGxvY2FsDQoNCjpvbWVnYQ0K\n", + "encoding": "base64", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradlew.bat?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/ac1b06f93825db68fb0c0b5150917f340eaa5d02", + "html": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradlew.bat" + } +} diff --git a/gradle/spec/fixtures/github/gradlew.json b/gradle/spec/fixtures/github/gradlew.json new file mode 100644 index 00000000000..74c9d4071d2 --- /dev/null +++ b/gradle/spec/fixtures/github/gradlew.json @@ -0,0 +1,18 @@ +{ + "name": "gradlew", + "path": "gradlew", + "sha": "4f906e0c811fc9e230eb44819f509cd0627f2600", + "size": 5766, + "url": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradlew?ref=main", + "html_url": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradlew", + "git_url": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/4f906e0c811fc9e230eb44819f509cd0627f2600", + "download_url": "https://raw.githubusercontent.com/bigandroidenergies/version_catalog/main/gradlew", + "type": "file", + "content": "IyEvdXNyL2Jpbi9lbnYgc2gKCiMKIyBDb3B5cmlnaHQgMjAxNSB0aGUgb3Jp\nZ2luYWwgYXV0aG9yIG9yIGF1dGhvcnMuCiMKIyBMaWNlbnNlZCB1bmRlciB0\naGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui\nKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w\nbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBj\nb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHBzOi8vd3d3LmFw\nYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1\naXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu\nZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp\ncyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQg\nV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg\nZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl\nIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK\nIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIyMjIyMjIyMj\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjCiMjICBHcmFkbGUgc3RhcnQg\ndXAgc2NyaXB0IGZvciBVTipYCiMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj\nIyMjIyMjIyMjIwoKIyBBdHRlbXB0IHRvIHNldCBBUFBfSE9NRQojIFJlc29s\ndmUgbGlua3M6ICQwIG1heSBiZSBhIGxpbmsKUFJHPSIkMCIKIyBOZWVkIHRo\naXMgZm9yIHJlbGF0aXZlIHN5bWxpbmtzLgp3aGlsZSBbIC1oICIkUFJHIiBd\nIDsgZG8KICAgIGxzPWBscyAtbGQgIiRQUkciYAogICAgbGluaz1gZXhwciAi\nJGxzIiA6ICcuKi0+IFwoLipcKSQnYAogICAgaWYgZXhwciAiJGxpbmsiIDog\nJy8uKicgPiAvZGV2L251bGw7IHRoZW4KICAgICAgICBQUkc9IiRsaW5rIgog\nICAgZWxzZQogICAgICAgIFBSRz1gZGlybmFtZSAiJFBSRyJgIi8kbGluayIK\nICAgIGZpCmRvbmUKU0FWRUQ9ImBwd2RgIgpjZCAiYGRpcm5hbWUgXCIkUFJH\nXCJgLyIgPi9kZXYvbnVsbApBUFBfSE9NRT0iYHB3ZCAtUGAiCmNkICIkU0FW\nRUQiID4vZGV2L251bGwKCkFQUF9OQU1FPSJHcmFkbGUiCkFQUF9CQVNFX05B\nTUU9YGJhc2VuYW1lICIkMCJgCgojIEFkZCBkZWZhdWx0IEpWTSBvcHRpb25z\nIGhlcmUuIFlvdSBjYW4gYWxzbyB1c2UgSkFWQV9PUFRTIGFuZCBHUkFETEVf\nT1BUUyB0byBwYXNzIEpWTSBvcHRpb25zIHRvIHRoaXMgc2NyaXB0LgpERUZB\nVUxUX0pWTV9PUFRTPSciLVhteDY0bSIgIi1YbXM2NG0iJwoKIyBVc2UgdGhl\nIG1heGltdW0gYXZhaWxhYmxlLCBvciBzZXQgTUFYX0ZEICE9IC0xIHRvIHVz\nZSB0aGF0IHZhbHVlLgpNQVhfRkQ9Im1heGltdW0iCgp3YXJuICgpIHsKICAg\nIGVjaG8gIiQqIgp9CgpkaWUgKCkgewogICAgZWNobwogICAgZWNobyAiJCoi\nCiAgICBlY2hvCiAgICBleGl0IDEKfQoKIyBPUyBzcGVjaWZpYyBzdXBwb3J0\nIChtdXN0IGJlICd0cnVlJyBvciAnZmFsc2UnKS4KY3lnd2luPWZhbHNlCm1z\neXM9ZmFsc2UKZGFyd2luPWZhbHNlCm5vbnN0b3A9ZmFsc2UKY2FzZSAiYHVu\nYW1lYCIgaW4KICBDWUdXSU4qICkKICAgIGN5Z3dpbj10cnVlCiAgICA7Owog\nIERhcndpbiogKQogICAgZGFyd2luPXRydWUKICAgIDs7CiAgTUlOR1cqICkK\nICAgIG1zeXM9dHJ1ZQogICAgOzsKICBOT05TVE9QKiApCiAgICBub25zdG9w\nPXRydWUKICAgIDs7CmVzYWMKCkNMQVNTUEFUSD0kQVBQX0hPTUUvZ3JhZGxl\nL3dyYXBwZXIvZ3JhZGxlLXdyYXBwZXIuamFyCgoKIyBEZXRlcm1pbmUgdGhl\nIEphdmEgY29tbWFuZCB0byB1c2UgdG8gc3RhcnQgdGhlIEpWTS4KaWYgWyAt\nbiAiJEpBVkFfSE9NRSIgXSA7IHRoZW4KICAgIGlmIFsgLXggIiRKQVZBX0hP\nTUUvanJlL3NoL2phdmEiIF0gOyB0aGVuCiAgICAgICAgIyBJQk0ncyBKREsg\nb24gQUlYIHVzZXMgc3RyYW5nZSBsb2NhdGlvbnMgZm9yIHRoZSBleGVjdXRh\nYmxlcwogICAgICAgIEpBVkFDTUQ9IiRKQVZBX0hPTUUvanJlL3NoL2phdmEi\nCiAgICBlbHNlCiAgICAgICAgSkFWQUNNRD0iJEpBVkFfSE9NRS9iaW4vamF2\nYSIKICAgIGZpCiAgICBpZiBbICEgLXggIiRKQVZBQ01EIiBdIDsgdGhlbgog\nICAgICAgIGRpZSAiRVJST1I6IEpBVkFfSE9NRSBpcyBzZXQgdG8gYW4gaW52\nYWxpZCBkaXJlY3Rvcnk6ICRKQVZBX0hPTUUKClBsZWFzZSBzZXQgdGhlIEpB\nVkFfSE9NRSB2YXJpYWJsZSBpbiB5b3VyIGVudmlyb25tZW50IHRvIG1hdGNo\nIHRoZQpsb2NhdGlvbiBvZiB5b3VyIEphdmEgaW5zdGFsbGF0aW9uLiIKICAg\nIGZpCmVsc2UKICAgIEpBVkFDTUQ9ImphdmEiCiAgICB3aGljaCBqYXZhID4v\nZGV2L251bGwgMj4mMSB8fCBkaWUgIkVSUk9SOiBKQVZBX0hPTUUgaXMgbm90\nIHNldCBhbmQgbm8gJ2phdmEnIGNvbW1hbmQgY291bGQgYmUgZm91bmQgaW4g\neW91ciBQQVRILgoKUGxlYXNlIHNldCB0aGUgSkFWQV9IT01FIHZhcmlhYmxl\nIGluIHlvdXIgZW52aXJvbm1lbnQgdG8gbWF0Y2ggdGhlCmxvY2F0aW9uIG9m\nIHlvdXIgSmF2YSBpbnN0YWxsYXRpb24uIgpmaQoKIyBJbmNyZWFzZSB0aGUg\nbWF4aW11bSBmaWxlIGRlc2NyaXB0b3JzIGlmIHdlIGNhbi4KaWYgWyAiJGN5\nZ3dpbiIgPSAiZmFsc2UiIC1hICIkZGFyd2luIiA9ICJmYWxzZSIgLWEgIiRu\nb25zdG9wIiA9ICJmYWxzZSIgXSA7IHRoZW4KICAgIE1BWF9GRF9MSU1JVD1g\ndWxpbWl0IC1IIC1uYAogICAgaWYgWyAkPyAtZXEgMCBdIDsgdGhlbgogICAg\nICAgIGlmIFsgIiRNQVhfRkQiID0gIm1heGltdW0iIC1vICIkTUFYX0ZEIiA9\nICJtYXgiIF0gOyB0aGVuCiAgICAgICAgICAgIE1BWF9GRD0iJE1BWF9GRF9M\nSU1JVCIKICAgICAgICBmaQogICAgICAgIHVsaW1pdCAtbiAkTUFYX0ZECiAg\nICAgICAgaWYgWyAkPyAtbmUgMCBdIDsgdGhlbgogICAgICAgICAgICB3YXJu\nICJDb3VsZCBub3Qgc2V0IG1heGltdW0gZmlsZSBkZXNjcmlwdG9yIGxpbWl0\nOiAkTUFYX0ZEIgogICAgICAgIGZpCiAgICBlbHNlCiAgICAgICAgd2FybiAi\nQ291bGQgbm90IHF1ZXJ5IG1heGltdW0gZmlsZSBkZXNjcmlwdG9yIGxpbWl0\nOiAkTUFYX0ZEX0xJTUlUIgogICAgZmkKZmkKCiMgRm9yIERhcndpbiwgYWRk\nIG9wdGlvbnMgdG8gc3BlY2lmeSBob3cgdGhlIGFwcGxpY2F0aW9uIGFwcGVh\ncnMgaW4gdGhlIGRvY2sKaWYgJGRhcndpbjsgdGhlbgogICAgR1JBRExFX09Q\nVFM9IiRHUkFETEVfT1BUUyBcIi1YZG9jazpuYW1lPSRBUFBfTkFNRVwiIFwi\nLVhkb2NrOmljb249JEFQUF9IT01FL21lZGlhL2dyYWRsZS5pY25zXCIiCmZp\nCgojIEZvciBDeWd3aW4gb3IgTVNZUywgc3dpdGNoIHBhdGhzIHRvIFdpbmRv\nd3MgZm9ybWF0IGJlZm9yZSBydW5uaW5nIGphdmEKaWYgWyAiJGN5Z3dpbiIg\nPSAidHJ1ZSIgLW8gIiRtc3lzIiA9ICJ0cnVlIiBdIDsgdGhlbgogICAgQVBQ\nX0hPTUU9YGN5Z3BhdGggLS1wYXRoIC0tbWl4ZWQgIiRBUFBfSE9NRSJgCiAg\nICBDTEFTU1BBVEg9YGN5Z3BhdGggLS1wYXRoIC0tbWl4ZWQgIiRDTEFTU1BB\nVEgiYAoKICAgIEpBVkFDTUQ9YGN5Z3BhdGggLS11bml4ICIkSkFWQUNNRCJg\nCgogICAgIyBXZSBidWlsZCB0aGUgcGF0dGVybiBmb3IgYXJndW1lbnRzIHRv\nIGJlIGNvbnZlcnRlZCB2aWEgY3lncGF0aAogICAgUk9PVERJUlNSQVc9YGZp\nbmQgLUwgLyAtbWF4ZGVwdGggMSAtbWluZGVwdGggMSAtdHlwZSBkIDI+L2Rl\ndi9udWxsYAogICAgU0VQPSIiCiAgICBmb3IgZGlyIGluICRST09URElSU1JB\nVyA7IGRvCiAgICAgICAgUk9PVERJUlM9IiRST09URElSUyRTRVAkZGlyIgog\nICAgICAgIFNFUD0ifCIKICAgIGRvbmUKICAgIE9VUkNZR1BBVFRFUk49Iihe\nKCRST09URElSUykpIgogICAgIyBBZGQgYSB1c2VyLWRlZmluZWQgcGF0dGVy\nbiB0byB0aGUgY3lncGF0aCBhcmd1bWVudHMKICAgIGlmIFsgIiRHUkFETEVf\nQ1lHUEFUVEVSTiIgIT0gIiIgXSA7IHRoZW4KICAgICAgICBPVVJDWUdQQVRU\nRVJOPSIkT1VSQ1lHUEFUVEVSTnwoJEdSQURMRV9DWUdQQVRURVJOKSIKICAg\nIGZpCiAgICAjIE5vdyBjb252ZXJ0IHRoZSBhcmd1bWVudHMgLSBrbHVkZ2Ug\ndG8gbGltaXQgb3Vyc2VsdmVzIHRvIC9iaW4vc2gKICAgIGk9MAogICAgZm9y\nIGFyZyBpbiAiJEAiIDsgZG8KICAgICAgICBDSEVDSz1gZWNobyAiJGFyZyJ8\nZWdyZXAgLWMgIiRPVVJDWUdQQVRURVJOIiAtYAogICAgICAgIENIRUNLMj1g\nZWNobyAiJGFyZyJ8ZWdyZXAgLWMgIl4tImAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAjIyMgRGV0ZXJtaW5lIGlmIGFuIG9wdGlvbgoKICAg\nICAgICBpZiBbICRDSEVDSyAtbmUgMCBdICYmIFsgJENIRUNLMiAtZXEgMCBd\nIDsgdGhlbiAgICAgICAgICAgICAgICAgICAgIyMjIEFkZGVkIGEgY29uZGl0\naW9uCiAgICAgICAgICAgIGV2YWwgYGVjaG8gYXJncyRpYD1gY3lncGF0aCAt\nLXBhdGggLS1pZ25vcmUgLS1taXhlZCAiJGFyZyJgCiAgICAgICAgZWxzZQog\nICAgICAgICAgICBldmFsIGBlY2hvIGFyZ3MkaWA9IlwiJGFyZ1wiIgogICAg\nICAgIGZpCiAgICAgICAgaT1gZXhwciAkaSArIDFgCiAgICBkb25lCiAgICBj\nYXNlICRpIGluCiAgICAgICAgMCkgc2V0IC0tIDs7CiAgICAgICAgMSkgc2V0\nIC0tICIkYXJnczAiIDs7CiAgICAgICAgMikgc2V0IC0tICIkYXJnczAiICIk\nYXJnczEiIDs7CiAgICAgICAgMykgc2V0IC0tICIkYXJnczAiICIkYXJnczEi\nICIkYXJnczIiIDs7CiAgICAgICAgNCkgc2V0IC0tICIkYXJnczAiICIkYXJn\nczEiICIkYXJnczIiICIkYXJnczMiIDs7CiAgICAgICAgNSkgc2V0IC0tICIk\nYXJnczAiICIkYXJnczEiICIkYXJnczIiICIkYXJnczMiICIkYXJnczQiIDs7\nCiAgICAgICAgNikgc2V0IC0tICIkYXJnczAiICIkYXJnczEiICIkYXJnczIi\nICIkYXJnczMiICIkYXJnczQiICIkYXJnczUiIDs7CiAgICAgICAgNykgc2V0\nIC0tICIkYXJnczAiICIkYXJnczEiICIkYXJnczIiICIkYXJnczMiICIkYXJn\nczQiICIkYXJnczUiICIkYXJnczYiIDs7CiAgICAgICAgOCkgc2V0IC0tICIk\nYXJnczAiICIkYXJnczEiICIkYXJnczIiICIkYXJnczMiICIkYXJnczQiICIk\nYXJnczUiICIkYXJnczYiICIkYXJnczciIDs7CiAgICAgICAgOSkgc2V0IC0t\nICIkYXJnczAiICIkYXJnczEiICIkYXJnczIiICIkYXJnczMiICIkYXJnczQi\nICIkYXJnczUiICIkYXJnczYiICIkYXJnczciICIkYXJnczgiIDs7CiAgICBl\nc2FjCmZpCgojIEVzY2FwZSBhcHBsaWNhdGlvbiBhcmdzCnNhdmUgKCkgewog\nICAgZm9yIGkgZG8gcHJpbnRmICVzXFxuICIkaSIgfCBzZWQgInMvJy8nXFxc\nXCcnL2c7MXMvXi8nLztcJHMvXCQvJyBcXFxcLyIgOyBkb25lCiAgICBlY2hv\nICIgIgp9CkFQUF9BUkdTPWBzYXZlICIkQCJgCgojIENvbGxlY3QgYWxsIGFy\nZ3VtZW50cyBmb3IgdGhlIGphdmEgY29tbWFuZCwgZm9sbG93aW5nIHRoZSBz\naGVsbCBxdW90aW5nIGFuZCBzdWJzdGl0dXRpb24gcnVsZXMKZXZhbCBzZXQg\nLS0gJERFRkFVTFRfSlZNX09QVFMgJEpBVkFfT1BUUyAkR1JBRExFX09QVFMg\nIlwiLURvcmcuZ3JhZGxlLmFwcG5hbWU9JEFQUF9CQVNFX05BTUVcIiIgLWNs\nYXNzcGF0aCAiXCIkQ0xBU1NQQVRIXCIiIG9yZy5ncmFkbGUud3JhcHBlci5H\ncmFkbGVXcmFwcGVyTWFpbiAiJEFQUF9BUkdTIgoKZXhlYyAiJEpBVkFDTUQi\nICIkQCIK\n", + "encoding": "base64", + "_links": { + "self": "https://api.github.com/repos/bigandroidenergies/version_catalog/contents/gradlew?ref=main", + "git": "https://api.github.com/repos/bigandroidenergies/version_catalog/git/blobs/4f906e0c811fc9e230eb44819f509cd0627f2600", + "html": "https://github.com/bigandroidenergies/version_catalog/blob/main/gradlew" + } +} diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-all-checksum.properties b/gradle/spec/fixtures/wrapper_files/gradle-wrapper-8.14.2-all-checksum.properties similarity index 100% rename from gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-all-checksum.properties rename to gradle/spec/fixtures/wrapper_files/gradle-wrapper-8.14.2-all-checksum.properties diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-all.properties b/gradle/spec/fixtures/wrapper_files/gradle-wrapper-8.14.2-all.properties similarity index 100% rename from gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-all.properties rename to gradle/spec/fixtures/wrapper_files/gradle-wrapper-8.14.2-all.properties diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-bin-checksum.properties b/gradle/spec/fixtures/wrapper_files/gradle-wrapper-8.14.2-bin-checksum.properties similarity index 100% rename from gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-bin-checksum.properties rename to gradle/spec/fixtures/wrapper_files/gradle-wrapper-8.14.2-bin-checksum.properties diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-bin.properties b/gradle/spec/fixtures/wrapper_files/gradle-wrapper-8.14.2-bin.properties similarity index 100% rename from gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-8.14.2-bin.properties rename to gradle/spec/fixtures/wrapper_files/gradle-wrapper-8.14.2-bin.properties diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-all-checksum.properties b/gradle/spec/fixtures/wrapper_files/gradle-wrapper-9.0.0-all-checksum.properties similarity index 100% rename from gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-all-checksum.properties rename to gradle/spec/fixtures/wrapper_files/gradle-wrapper-9.0.0-all-checksum.properties diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-all.properties b/gradle/spec/fixtures/wrapper_files/gradle-wrapper-9.0.0-all.properties similarity index 100% rename from gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-all.properties rename to gradle/spec/fixtures/wrapper_files/gradle-wrapper-9.0.0-all.properties diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-bin-checksum.properties b/gradle/spec/fixtures/wrapper_files/gradle-wrapper-9.0.0-bin-checksum.properties similarity index 100% rename from gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-bin-checksum.properties rename to gradle/spec/fixtures/wrapper_files/gradle-wrapper-9.0.0-bin-checksum.properties diff --git a/gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-bin.properties b/gradle/spec/fixtures/wrapper_files/gradle-wrapper-9.0.0-bin.properties similarity index 100% rename from gradle/spec/fixtures/wrapper_properties_file/gradle-wrapper-9.0.0-bin.properties rename to gradle/spec/fixtures/wrapper_files/gradle-wrapper-9.0.0-bin.properties From 09a8761a7caa853b37e95f851e6052bb86df2c35 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Sat, 30 Aug 2025 02:53:25 +0200 Subject: [PATCH 10/18] Iterated distributions regex to catch any url --- .github/workflows/smoke.yml | 2 +- gradle/lib/dependabot/gradle/distributions.rb | 3 --- .../file_parser/distributions_finder.rb | 12 ++++------ .../update_checker/distributions_finder.rb | 6 ++--- .../file_parser/distributions_finder_spec.rb | 22 +++++++++++++++++++ .../distributions_finder_spec.rb | 1 + 6 files changed, 30 insertions(+), 16 deletions(-) diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index 960a817616c..32d917d4294 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -15,7 +15,7 @@ concurrency: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} SMOKE_TEST_REPO: gmazzo/dependabot-smoke-tests - SMOKE_TEST_BRANCH: gradle-wrapper-support-binaries + SMOKE_TEST_BRANCH: gradle-wrapper-support jobs: discover: runs-on: ubuntu-latest diff --git a/gradle/lib/dependabot/gradle/distributions.rb b/gradle/lib/dependabot/gradle/distributions.rb index ea224a5fd36..0f57d9e82a2 100644 --- a/gradle/lib/dependabot/gradle/distributions.rb +++ b/gradle/lib/dependabot/gradle/distributions.rb @@ -1,14 +1,11 @@ # typed: strict # frozen_string_literal: true -require "dependabot/registry_client" - module Dependabot module Gradle module Distributions extend T::Sig - DISTRIBUTIONS_URL = "https://services.gradle.org" DISTRIBUTION_DEPENDENCY_TYPE = "gradle-distribution" sig { params(requirements: T::Array[T::Hash[Symbol, T.untyped]]).returns(T::Boolean) } diff --git a/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb b/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb index 8f1291e0f16..7a7a69e9c6e 100644 --- a/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb +++ b/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb @@ -10,13 +10,9 @@ module Gradle class FileParser class DistributionsFinder extend T::Sig - include Dependabot::Gradle::Distributions - DISTRIBUTION_URL_REGEX = %r{ - ^#{Regexp.escape(DISTRIBUTIONS_URL)}/distributions/ - gradle-(?[\d.]+)- - (?bin|all)\.zip$ - }x + DISTRIBUTION_URL_REGEX = + /.*?(?(\d+(?:\.\d+){1,3}(?:-(?!bin|all)\w++)*(?:\+\w++)*))(?:-bin|-all)?.*?/ sig { params(properties_file: DependencyFile).returns(T.nilable(Dependency)) } def self.resolve_dependency(properties_file) @@ -33,7 +29,7 @@ def self.resolve_dependency(properties_file) requirement: version, file: properties_file.name, source: { - type: DISTRIBUTION_DEPENDENCY_TYPE, + type: Distributions::DISTRIBUTION_DEPENDENCY_TYPE, url: distribution_url, property: "distributionUrl" }, @@ -45,7 +41,7 @@ def self.resolve_dependency(properties_file) requirement: checksum, file: properties_file.name, source: { - type: DISTRIBUTION_DEPENDENCY_TYPE, + type: Distributions::DISTRIBUTION_DEPENDENCY_TYPE, url: "#{distribution_url}.sha256", property: "distributionSha256Sum" }, diff --git a/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb b/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb index 3e24a5a9be0..1e15a5cf14c 100644 --- a/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb +++ b/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb @@ -1,7 +1,6 @@ # typed: strong # frozen_string_literal: true -require "dependabot/gradle/distributions" require "dependabot/gradle/version" require "sorbet-runtime" @@ -10,7 +9,6 @@ module Gradle class UpdateChecker class DistributionsFinder extend T::Sig - include Dependabot::Gradle::Distributions @available_versions = T.let([], T::Array[T::Hash[String, T.untyped]]) @distributions_checksums = T.let({}, T::Hash[String, T::Array[String]]) @@ -19,7 +17,7 @@ class DistributionsFinder def self.available_versions return @available_versions if @available_versions.any? - response = Dependabot::RegistryClient.get(url: "#{DISTRIBUTIONS_URL}/versions/all") + response = Dependabot::RegistryClient.get(url: "https://services.gradle.org/versions/all") versions = T.let(JSON.parse(T.let(response.body, String), object_class: OpenStruct), T::Array[OpenStruct]) @available_versions += versions @@ -29,7 +27,7 @@ def self.available_versions .select { |v| Gradle::Version.correct?(v) } .map { |v| Gradle::Version.new(v) } .sort - .map { |version| { version: version, source_url: DISTRIBUTIONS_URL } } + .map { |version| { version: version, source_url: "https://services.gradle.org" } } end sig { params(version: OpenStruct).returns(T::Boolean) } diff --git a/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb b/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb index 7b8129cefed..fb6fad5c257 100644 --- a/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb +++ b/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb @@ -5,6 +5,28 @@ require "dependabot/gradle/file_parser/distributions_finder" RSpec.describe Dependabot::Gradle::FileParser::DistributionsFinder do + describe "regex matches distribution version" do + [ + %w(https://services.gradle.org/distributions/gradle-8.14.2-bin.zip 8.14.2), + %w(https://services.gradle.org/distributions/gradle-8.14.2-all.zip 8.14.2), + %w(https://services.gradle.org/distributions/gradle-9.0.0-bin.zip 9.0.0), + %w(https://services.gradle.org/distributions/gradle-9.0.0-all.zip 9.0.0), + %w(https://services.gradle.org/distributions/gradle-9.1.0-20250829161021+0000-all.zip 9.1.0-20250829161021+0000), + %w(https://services.gradle.org/distributions/gradle-9.1.0-rc-1-bin.zip 9.1.0-rc-1), + %w(https://my.company.org/dists/my-gradle-9.1.0-rc-1-bin.zip 9.1.0-rc-1), + %w(https://my.company.org/dists/my-gradle-9.1.0-rc-2-bin-customized.zip 9.1.0-rc-2), + %w(https://my.company.org/dists/my-gradle-8.1.tar 8.1), + %w(file://gradle-cache/gradle-8.1.zip 8.1) + ].each do |(url, version)| + it "matches #{url} and gets version #{version}" do + match = url.match(Dependabot::Gradle::FileParser::DistributionsFinder::DISTRIBUTION_URL_REGEX)&.named_captures + + expect(match).not_to be_nil + expect(match&.fetch("version", nil)).to eq(version) + end + end + end + describe ".resolve_dependency" do shared_examples "distribution dependency" do |version, type, checksum| subject { described_class.resolve_dependency(properties_file) } diff --git a/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb b/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb index 023033afc03..d6736358e8e 100644 --- a/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb +++ b/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb @@ -4,6 +4,7 @@ # rubocop:disable RSpec/ExampleLength require "spec_helper" +require "dependabot/gradle/update_checker" require "dependabot/gradle/update_checker/distributions_finder" RSpec.describe Dependabot::Gradle::UpdateChecker::DistributionsFinder do From 06d21c86dd2d23e346b289b8b1dc2dc7cbefca65 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Wed, 24 Sep 2025 02:34:34 +0200 Subject: [PATCH 11/18] Applied new RuboCop rules --- gradle/lib/dependabot/gradle/file_parser.rb | 2 +- .../file_parser/distributions_finder.rb | 25 +- gradle/lib/dependabot/gradle/file_updater.rb | 6 +- .../gradle/file_updater/wrapper_updater.rb | 30 +- .../update_checker/distributions_finder.rb | 9 +- .../dependabot/gradle/file_fetcher_spec.rb | 22 +- .../file_parser/distributions_finder_spec.rb | 10 +- .../dependabot/gradle/file_parser_spec.rb | 21 +- .../dependabot/gradle/file_updater_spec.rb | 14 +- .../distributions_finder_spec.rb | 326 +++++++++--------- .../requirements_updater_spec.rb | 162 +++++---- 11 files changed, 340 insertions(+), 287 deletions(-) diff --git a/gradle/lib/dependabot/gradle/file_parser.rb b/gradle/lib/dependabot/gradle/file_parser.rb index f2b9ba2dc0e..9a78da9246f 100644 --- a/gradle/lib/dependabot/gradle/file_parser.rb +++ b/gradle/lib/dependabot/gradle/file_parser.rb @@ -25,7 +25,7 @@ class FileParser < Dependabot::FileParsers::Base # rubocop:disable Metrics/Class extend T::Sig require "dependabot/file_parsers/base/dependency_set" - require_relative "file_parser/distributions_finder.rb" + require_relative "file_parser/distributions_finder" require_relative "file_parser/property_value_finder" SUPPORTED_BUILD_FILE_NAMES = T.let( diff --git a/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb b/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb index 7a7a69e9c6e..da07a7319ff 100644 --- a/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb +++ b/gradle/lib/dependabot/gradle/file_parser/distributions_finder.rb @@ -15,7 +15,7 @@ class DistributionsFinder /.*?(?(\d+(?:\.\d+){1,3}(?:-(?!bin|all)\w++)*(?:\+\w++)*))(?:-bin|-all)?.*?/ sig { params(properties_file: DependencyFile).returns(T.nilable(Dependency)) } - def self.resolve_dependency(properties_file) + def self.resolve_dependency(properties_file) # rubocop:disable Metrics/MethodLength content = properties_file.content return nil unless content @@ -25,16 +25,19 @@ def self.resolve_dependency(properties_file) version = match.fetch("version") - requirements = T.let([{ - requirement: version, - file: properties_file.name, - source: { - type: Distributions::DISTRIBUTION_DEPENDENCY_TYPE, - url: distribution_url, - property: "distributionUrl" - }, - groups: [] - }], T::Array[T::Hash[Symbol, T.untyped]]) + requirements = T.let( + [{ + requirement: version, + file: properties_file.name, + source: { + type: Distributions::DISTRIBUTION_DEPENDENCY_TYPE, + url: distribution_url, + property: "distributionUrl" + }, + groups: [] + }], + T::Array[T::Hash[Symbol, T.untyped]] + ) if checksum requirements << { diff --git a/gradle/lib/dependabot/gradle/file_updater.rb b/gradle/lib/dependabot/gradle/file_updater.rb index d2dd016349b..5c90c9e7403 100644 --- a/gradle/lib/dependabot/gradle/file_updater.rb +++ b/gradle/lib/dependabot/gradle/file_updater.rb @@ -123,8 +123,10 @@ def update_buildfiles_for_dependency(buildfiles:, dependency:) # rubocop:enable Metrics/AbcSize sig do - params(files: T::Array[Dependabot::DependencyFile], - dependency: Dependabot::Dependency).returns(T::Array[GradleUpdaterBase]) + params( + files: T::Array[Dependabot::DependencyFile], + dependency: Dependabot::Dependency + ).returns(T::Array[GradleUpdaterBase]) end def native_updaters(files, dependency) updaters = T.let([], T::Array[GradleUpdaterBase]) diff --git a/gradle/lib/dependabot/gradle/file_updater/wrapper_updater.rb b/gradle/lib/dependabot/gradle/file_updater/wrapper_updater.rb index b87b66a919b..7e5e91da885 100644 --- a/gradle/lib/dependabot/gradle/file_updater/wrapper_updater.rb +++ b/gradle/lib/dependabot/gradle/file_updater/wrapper_updater.rb @@ -18,18 +18,24 @@ class WrapperUpdater < GradleUpdaterBase def initialize(dependency_files:, dependency:) super(dependency_files: dependency_files) @dependency = dependency - @target_files = T.let(%w( - /gradlew - /gradlew.bat - /gradle/wrapper/gradle-wrapper.properties - /gradle/wrapper/gradle-wrapper.jar - ), T::Array[String]) - @build_files = T.let(%w( - build.gradle - build.gradle.kts - settings.gradle - settings.gradle.kts - ), T::Array[String]) + @target_files = T.let( + %w( + /gradlew + /gradlew.bat + /gradle/wrapper/gradle-wrapper.properties + /gradle/wrapper/gradle-wrapper.jar + ), + T::Array[String] + ) + @build_files = T.let( + %w( + build.gradle + build.gradle.kts + settings.gradle + settings.gradle.kts + ), + T::Array[String] + ) end sig { override.params(file: Dependabot::DependencyFile).returns(T::Boolean) } diff --git a/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb b/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb index 1e15a5cf14c..67f8f2161ba 100644 --- a/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb +++ b/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb @@ -18,8 +18,13 @@ def self.available_versions return @available_versions if @available_versions.any? response = Dependabot::RegistryClient.get(url: "https://services.gradle.org/versions/all") - versions = T.let(JSON.parse(T.let(response.body, String), - object_class: OpenStruct), T::Array[OpenStruct]) + versions = T.let( + JSON.parse( + T.let(response.body, String), + object_class: OpenStruct + ), + T::Array[OpenStruct] + ) @available_versions += versions .select { |v| release_version?(version: v) } .map { |v| T.let(v["version"], String) } diff --git a/gradle/spec/dependabot/gradle/file_fetcher_spec.rb b/gradle/spec/dependabot/gradle/file_fetcher_spec.rb index b5cad8c93b5..8b1dc23e0ee 100644 --- a/gradle/spec/dependabot/gradle/file_fetcher_spec.rb +++ b/gradle/spec/dependabot/gradle/file_fetcher_spec.rb @@ -78,13 +78,15 @@ def stub_no_content_request(path) end it "fetches the wrapper files" do - expect(file_fetcher_instance.files.map(&:name)).to eq(%w( - build.gradle - gradlew - gradlew.bat - gradle/wrapper/gradle-wrapper.jar - gradle/wrapper/gradle-wrapper.properties - )) + expect(file_fetcher_instance.files.map(&:name)).to eq( + %w( + build.gradle + gradlew + gradlew.bat + gradle/wrapper/gradle-wrapper.jar + gradle/wrapper/gradle-wrapper.properties + ) + ) expect(file_fetcher_instance.files.map(&:content_encoding)).to eq(%w(utf-8 utf-8 utf-8 base64 utf-8)) end end @@ -290,8 +292,10 @@ def stub_no_content_request(path) stub_content_request("included/included/included/build.gradle?ref=sha", "contents_java_basic_buildfile.json") stub_no_content_request("included/included/included/gradle.lockfile?ref=sha") stub_content_request("included/included/included/buildSrc?ref=sha", "contents_java.json") - stub_content_request("included/included/included/buildSrc/build.gradle?ref=sha", - "contents_java_basic_buildfile.json") + stub_content_request( + "included/included/included/buildSrc/build.gradle?ref=sha", + "contents_java_basic_buildfile.json" + ) end it "fetches all buildfiles transitively" do diff --git a/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb b/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb index fb6fad5c257..f2058387b9a 100644 --- a/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb +++ b/gradle/spec/dependabot/gradle/file_parser/distributions_finder_spec.rb @@ -34,8 +34,10 @@ let(:properties_file) do Dependabot::DependencyFile.new( name: "gradle/wrapper/gradle-wrapper.properties", - content: fixture("wrapper_files", - "gradle-wrapper-#{version}-#{type}#{checksum ? '-checksum' : ''}.properties") + content: fixture( + "wrapper_files", + "gradle-wrapper-#{version}-#{type}#{'-checksum' if checksum}.properties" + ) ) end @@ -78,7 +80,9 @@ end it_behaves_like "distribution dependency", "8.14.2", "all", nil - it_behaves_like "distribution dependency", "9.0.0", "bin", + it_behaves_like "distribution dependency", + "9.0.0", + "bin", "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b" end end diff --git a/gradle/spec/dependabot/gradle/file_parser_spec.rb b/gradle/spec/dependabot/gradle/file_parser_spec.rb index 0eacf6c4bb1..32f655c2f06 100644 --- a/gradle/spec/dependabot/gradle/file_parser_spec.rb +++ b/gradle/spec/dependabot/gradle/file_parser_spec.rb @@ -824,8 +824,10 @@ [ Dependabot::DependencyFile.new( name: "#{folder}gradle/wrapper/gradle-wrapper.properties", - content: fixture("wrapper_files", - "gradle-wrapper-#{version}-#{type}#{checksum ? '-checksum' : ''}.properties") + content: fixture( + "wrapper_files", + "gradle-wrapper-#{version}-#{type}#{'-checksum' if checksum}.properties" + ) ) ] end @@ -872,12 +874,21 @@ it_behaves_like "wrapper_properties_test", "/", "8.14.2", "bin", nil it_behaves_like "wrapper_properties_test", "/", "8.14.2", "all", nil - it_behaves_like "wrapper_properties_test", "/", "9.0.0", "bin", + it_behaves_like "wrapper_properties_test", + "/", + "9.0.0", + "bin", "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b" - it_behaves_like "wrapper_properties_test", "/", "9.0.0", "all", + it_behaves_like "wrapper_properties_test", + "/", + "9.0.0", + "all", "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365" it_behaves_like "wrapper_properties_test", "/buildSrc/", "8.14.2", "bin", nil - it_behaves_like "wrapper_properties_test", "/buildSrc/", "9.0.0", "all", + it_behaves_like "wrapper_properties_test", + "/buildSrc/", + "9.0.0", + "all", "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365" end diff --git a/gradle/spec/dependabot/gradle/file_updater_spec.rb b/gradle/spec/dependabot/gradle/file_updater_spec.rb index 139433d401d..b7b315bdf8b 100644 --- a/gradle/spec/dependabot/gradle/file_updater_spec.rb +++ b/gradle/spec/dependabot/gradle/file_updater_spec.rb @@ -636,8 +636,10 @@ let(:buildfile) do Dependabot::DependencyFile.new( name: "gradle/wrapper/gradle-wrapper.properties", - content: fixture("wrapper_files", - "gradle-wrapper-#{version}-#{type}#{checksum ? '-checksum' : ''}.properties") + content: fixture( + "wrapper_files", + "gradle-wrapper-#{version}-#{type}#{'-checksum' if checksum}.properties" + ) ) end @@ -697,10 +699,14 @@ it_behaves_like "wrapper", "8.14.2", "all", nil, nil it_behaves_like "wrapper", "8.14.2", "bin", nil, nil - it_behaves_like "wrapper", "8.14.2", "bin", + it_behaves_like "wrapper", + "8.14.2", + "bin", "7197a12f450794931532469d4ff21a59ea2c1cd59a3ec3f89c035c3c420a6999", "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b" - it_behaves_like "wrapper", "8.14.2", "all", + it_behaves_like "wrapper", + "8.14.2", + "all", "443c9c8ee2ac1ee0e11881a40f2376d79c66386264a44b24a9f8ca67e633375f", "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365" end diff --git a/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb b/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb index d6736358e8e..e3a6860b804 100644 --- a/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb +++ b/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb @@ -18,168 +18,170 @@ describe "#available_versions" do it { - expect(described_class.available_versions).to eq(%w( - 0.7 - 0.8 - 0.9 - 0.9.1 - 0.9.2 - 1.0 - 1.1 - 1.2 - 1.3 - 1.4 - 1.5 - 1.6 - 1.7 - 1.8 - 1.9 - 1.10 - 1.11 - 1.12 - 2.0 - 2.1 - 2.2 - 2.2.1 - 2.3 - 2.4 - 2.5 - 2.6 - 2.7 - 2.8 - 2.9 - 2.10 - 2.11 - 2.12 - 2.13 - 2.14 - 2.14.1 - 3.0 - 3.1 - 3.2 - 3.2.1 - 3.3 - 3.4 - 3.4.1 - 3.5 - 3.5.1 - 4.0 - 4.0.1 - 4.0.2 - 4.1 - 4.2 - 4.2.1 - 4.3 - 4.3.1 - 4.4 - 4.4.1 - 4.5 - 4.5.1 - 4.6 - 4.7 - 4.8 - 4.8.1 - 4.9 - 4.10 - 4.10.1 - 4.10.2 - 4.10.3 - 5.0 - 5.1 - 5.1.1 - 5.2 - 5.2.1 - 5.3 - 5.3.1 - 5.4 - 5.4.1 - 5.5 - 5.5.1 - 5.6 - 5.6.1 - 5.6.2 - 5.6.3 - 5.6.4 - 6.0 - 6.0.1 - 6.1 - 6.1.1 - 6.2 - 6.2.1 - 6.2.2 - 6.3 - 6.4 - 6.4.1 - 6.5 - 6.5.1 - 6.6 - 6.6.1 - 6.7 - 6.7.1 - 6.8 - 6.8.1 - 6.8.2 - 6.8.3 - 6.9 - 6.9.1 - 6.9.2 - 6.9.3 - 6.9.4 - 7.0 - 7.0.1 - 7.0.2 - 7.1 - 7.1.1 - 7.2 - 7.3 - 7.3.1 - 7.3.2 - 7.3.3 - 7.4 - 7.4.1 - 7.4.2 - 7.5 - 7.5.1 - 7.6 - 7.6.1 - 7.6.2 - 7.6.3 - 7.6.4 - 7.6.5 - 7.6.6 - 8.0 - 8.0.1 - 8.0.2 - 8.1 - 8.1.1 - 8.2 - 8.2.1 - 8.3 - 8.4 - 8.5 - 8.6 - 8.7 - 8.8 - 8.9 - 8.10 - 8.10.1 - 8.10.2 - 8.11 - 8.11.1 - 8.12 - 8.12.1 - 8.13 - 8.14 - 8.14.1 - 8.14.2 - 8.14.3 - 9.0.0 - ).map do |version| - { - version: Dependabot::Gradle::Version.new(version), - source_url: "https://services.gradle.org" - } - end) + expect(described_class.available_versions).to eq( + %w( + 0.7 + 0.8 + 0.9 + 0.9.1 + 0.9.2 + 1.0 + 1.1 + 1.2 + 1.3 + 1.4 + 1.5 + 1.6 + 1.7 + 1.8 + 1.9 + 1.10 + 1.11 + 1.12 + 2.0 + 2.1 + 2.2 + 2.2.1 + 2.3 + 2.4 + 2.5 + 2.6 + 2.7 + 2.8 + 2.9 + 2.10 + 2.11 + 2.12 + 2.13 + 2.14 + 2.14.1 + 3.0 + 3.1 + 3.2 + 3.2.1 + 3.3 + 3.4 + 3.4.1 + 3.5 + 3.5.1 + 4.0 + 4.0.1 + 4.0.2 + 4.1 + 4.2 + 4.2.1 + 4.3 + 4.3.1 + 4.4 + 4.4.1 + 4.5 + 4.5.1 + 4.6 + 4.7 + 4.8 + 4.8.1 + 4.9 + 4.10 + 4.10.1 + 4.10.2 + 4.10.3 + 5.0 + 5.1 + 5.1.1 + 5.2 + 5.2.1 + 5.3 + 5.3.1 + 5.4 + 5.4.1 + 5.5 + 5.5.1 + 5.6 + 5.6.1 + 5.6.2 + 5.6.3 + 5.6.4 + 6.0 + 6.0.1 + 6.1 + 6.1.1 + 6.2 + 6.2.1 + 6.2.2 + 6.3 + 6.4 + 6.4.1 + 6.5 + 6.5.1 + 6.6 + 6.6.1 + 6.7 + 6.7.1 + 6.8 + 6.8.1 + 6.8.2 + 6.8.3 + 6.9 + 6.9.1 + 6.9.2 + 6.9.3 + 6.9.4 + 7.0 + 7.0.1 + 7.0.2 + 7.1 + 7.1.1 + 7.2 + 7.3 + 7.3.1 + 7.3.2 + 7.3.3 + 7.4 + 7.4.1 + 7.4.2 + 7.5 + 7.5.1 + 7.6 + 7.6.1 + 7.6.2 + 7.6.3 + 7.6.4 + 7.6.5 + 7.6.6 + 8.0 + 8.0.1 + 8.0.2 + 8.1 + 8.1.1 + 8.2 + 8.2.1 + 8.3 + 8.4 + 8.5 + 8.6 + 8.7 + 8.8 + 8.9 + 8.10 + 8.10.1 + 8.10.2 + 8.11 + 8.11.1 + 8.12 + 8.12.1 + 8.13 + 8.14 + 8.14.1 + 8.14.2 + 8.14.3 + 9.0.0 + ).map do |version| + { + version: Dependabot::Gradle::Version.new(version), + source_url: "https://services.gradle.org" + } + end + ) } end end diff --git a/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb b/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb index 26d13ba7a03..d3fb63299d9 100644 --- a/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb +++ b/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb @@ -190,36 +190,8 @@ it "updates url and checksum" do expect(updater.updated_requirements).not_to eq(requirements) - expect(updater.updated_requirements).to eq([ - { - requirement: "9.0.0", - file: "gradle/wrapper/gradle-wrapper.properties", - source: { - type: "gradle-distribution", - url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip", - property: "distributionUrl" - }, - groups: [] - }, - { - requirement: "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365", - file: "gradle/wrapper/gradle-wrapper.properties", - source: { - type: "gradle-distribution", - url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip.sha256", - property: "distributionSha256Sum" - }, - groups: [] - } - ]) - end - - context "when no checksum is available" do - let(:requirements) { [distribution_req] } - - it "only updates url" do - expect(updater.updated_requirements).not_to eq(requirements) - expect(updater.updated_requirements).to eq([ + expect(updater.updated_requirements).to eq( + [ { requirement: "9.0.0", file: "gradle/wrapper/gradle-wrapper.properties", @@ -229,8 +201,40 @@ property: "distributionUrl" }, groups: [] + }, + { + requirement: "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip.sha256", + property: "distributionSha256Sum" + }, + groups: [] } - ]) + ] + ) + end + + context "when no checksum is available" do + let(:requirements) { [distribution_req] } + + it "only updates url" do + expect(updater.updated_requirements).not_to eq(requirements) + expect(updater.updated_requirements).to eq( + [ + { + requirement: "9.0.0", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip", + property: "distributionUrl" + }, + groups: [] + } + ] + ) end end @@ -239,15 +243,19 @@ [distribution_req, checksum_req, distribution_req.merge( requirement: "8.14.3", file: "another/gradle/wrapper/gradle-wrapper.properties", - source: distribution_req[:source].merge({ - url: "https://services.gradle.org/distributions/gradle-8.14.3-bin.zip" - }) + source: distribution_req[:source].merge( + { + url: "https://services.gradle.org/distributions/gradle-8.14.3-bin.zip" + } + ) ), checksum_req.merge( requirement: "bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531", file: "another/gradle/wrapper/gradle-wrapper.properties", - source: checksum_req[:source].merge({ - url: "https://services.gradle.org/distributions/gradle-8.14.3-bin.zip.sha256" - }) + source: checksum_req[:source].merge( + { + url: "https://services.gradle.org/distributions/gradle-8.14.3-bin.zip.sha256" + } + ) )] end @@ -258,45 +266,47 @@ it "updates all of them" do expect(updater.updated_requirements).not_to eq(requirements) - expect(updater.updated_requirements).to eq([ - { - requirement: "9.0.0", - file: "gradle/wrapper/gradle-wrapper.properties", - source: { - type: "gradle-distribution", - url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip", - property: "distributionUrl" - }, - groups: [] - }, { - requirement: "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365", - file: "gradle/wrapper/gradle-wrapper.properties", - source: { - type: "gradle-distribution", - url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip.sha256", - property: "distributionSha256Sum" - }, - groups: [] - }, { - requirement: "9.0.0", - file: "another/gradle/wrapper/gradle-wrapper.properties", - source: { - type: "gradle-distribution", - url: "https://services.gradle.org/distributions/gradle-9.0.0-bin.zip", - property: "distributionUrl" - }, - groups: [] - }, { - requirement: "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b", - file: "another/gradle/wrapper/gradle-wrapper.properties", - source: { - type: "gradle-distribution", - url: "https://services.gradle.org/distributions/gradle-9.0.0-bin.zip.sha256", - property: "distributionSha256Sum" - }, - groups: [] - } - ]) + expect(updater.updated_requirements).to eq( + [ + { + requirement: "9.0.0", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip", + property: "distributionUrl" + }, + groups: [] + }, { + requirement: "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-all.zip.sha256", + property: "distributionSha256Sum" + }, + groups: [] + }, { + requirement: "9.0.0", + file: "another/gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-bin.zip", + property: "distributionUrl" + }, + groups: [] + }, { + requirement: "8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b", + file: "another/gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-9.0.0-bin.zip.sha256", + property: "distributionSha256Sum" + }, + groups: [] + } + ] + ) end end end From 8d34b8a08fce4bbfc2b1592b6d7720d9d78f23a2 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Tue, 28 Oct 2025 19:06:07 +0100 Subject: [PATCH 12/18] Allow repo variables to target forks on smoke tests --- .github/workflows/smoke.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index 32d917d4294..0b21a141463 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -14,8 +14,7 @@ concurrency: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SMOKE_TEST_REPO: gmazzo/dependabot-smoke-tests - SMOKE_TEST_BRANCH: gradle-wrapper-support + SMOKE_TEST_BRANCH: ${{ vars.SMOKE_TEST_BRANCH || 'main' }} jobs: discover: runs-on: ubuntu-latest @@ -45,7 +44,7 @@ jobs: cat filtered.json # Curl the smoke-test tests directory to get a list of tests to run - URL=https://api.github.com/repos/${{ env.SMOKE_TEST_REPO }}/contents/tests?ref=${{ env.SMOKE_TEST_BRANCH }} + URL=https://api.github.com/repos/${{ vars.SMOKE_TEST_REPO || 'dependabot/smoke-tests' }}/contents/tests?ref=${{ env.SMOKE_TEST_BRANCH }} curl $URL > tests.json # Select the names that match smoke-$test*.yaml, where $test is the .text value from filtered.json @@ -85,7 +84,7 @@ jobs: - name: Download test if: steps.cache-smoke-test.outputs.cache-hit != 'true' run: | - URL=https://api.github.com/repos/${{ env.SMOKE_TEST_REPO }}/contents/tests/${{ matrix.suite.name }}?ref=${{ env.SMOKE_TEST_BRANCH }} + URL=https://api.github.com/repos/${{ vars.SMOKE_TEST_REPO || 'dependabot/smoke-tests' }}/contents/tests/${{ matrix.suite.name }}?ref=${{ env.SMOKE_TEST_BRANCH }} curl $(gh api $URL --jq .download_url) -o smoke.yaml - name: Cache Smoke Test From d6fbfde6ee9eee4ae745f82f36ea41e92f021349 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Tue, 28 Oct 2025 23:12:26 +0100 Subject: [PATCH 13/18] Reverted the changes on `smoke.yml` workflow --- .github/workflows/smoke.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index 0b21a141463..62f425927d1 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -14,7 +14,7 @@ concurrency: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SMOKE_TEST_BRANCH: ${{ vars.SMOKE_TEST_BRANCH || 'main' }} + SMOKE_TEST_BRANCH: main jobs: discover: runs-on: ubuntu-latest @@ -44,7 +44,7 @@ jobs: cat filtered.json # Curl the smoke-test tests directory to get a list of tests to run - URL=https://api.github.com/repos/${{ vars.SMOKE_TEST_REPO || 'dependabot/smoke-tests' }}/contents/tests?ref=${{ env.SMOKE_TEST_BRANCH }} + URL=https://api.github.com/repos/dependabot/smoke-tests/contents/tests?ref=${{ env.SMOKE_TEST_BRANCH }} curl $URL > tests.json # Select the names that match smoke-$test*.yaml, where $test is the .text value from filtered.json @@ -84,7 +84,7 @@ jobs: - name: Download test if: steps.cache-smoke-test.outputs.cache-hit != 'true' run: | - URL=https://api.github.com/repos/${{ vars.SMOKE_TEST_REPO || 'dependabot/smoke-tests' }}/contents/tests/${{ matrix.suite.name }}?ref=${{ env.SMOKE_TEST_BRANCH }} + URL=https://api.github.com/repos/dependabot/smoke-tests/contents/tests/${{ matrix.suite.name }}?ref=${{ env.SMOKE_TEST_BRANCH }} curl $(gh api $URL --jq .download_url) -o smoke.yaml - name: Cache Smoke Test From d676815ae612e7effa1a68d9f8c3eae37ffa5415 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Wed, 29 Oct 2025 11:19:06 +0100 Subject: [PATCH 14/18] Added `released_at` field to Gradle Distribution versions --- .../update_checker/distributions_finder.rb | 24 +- .../distributions_finder_spec.rb | 935 +++++++++++++++--- 2 files changed, 790 insertions(+), 169 deletions(-) diff --git a/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb b/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb index 67f8f2161ba..3425a2c7f62 100644 --- a/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb +++ b/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb @@ -25,19 +25,25 @@ def self.available_versions ), T::Array[OpenStruct] ) - @available_versions += versions - .select { |v| release_version?(version: v) } - .map { |v| T.let(v["version"], String) } - .uniq - .select { |v| Gradle::Version.correct?(v) } - .map { |v| Gradle::Version.new(v) } - .sort - .map { |version| { version: version, source_url: "https://services.gradle.org" } } + @available_versions += + versions + .select { |v| release_version?(version: v) } + .uniq(&:version) + .map { |v| extract_version(v) } + .sort_by { |v| v[:version] } + end + + sig { params(version: OpenStruct).returns(T::Hash[Symbol, T.untyped]) } + def self.extract_version(version) + { version: Gradle::Version.new(T.let(version["version"], String)), + released_at: Time.parse(T.let(version["buildTime"], String)), + source_url: "https://services.gradle.org" } end sig { params(version: OpenStruct).returns(T::Boolean) } def self.release_version?(version:) - T.let(version[:broken], T::Boolean) == false && + Gradle::Version.correct?(T.let(version[:version], String)) && + T.let(version[:broken], T::Boolean) == false && T.let(version[:snapshot], T::Boolean) == false && T.let(version[:rcFor], String) == "" && T.let(version[:milestoneFor], String) == "" && diff --git a/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb b/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb index e3a6860b804..ed28ce61483 100644 --- a/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb +++ b/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb @@ -19,168 +19,783 @@ describe "#available_versions" do it { expect(described_class.available_versions).to eq( - %w( - 0.7 - 0.8 - 0.9 - 0.9.1 - 0.9.2 - 1.0 - 1.1 - 1.2 - 1.3 - 1.4 - 1.5 - 1.6 - 1.7 - 1.8 - 1.9 - 1.10 - 1.11 - 1.12 - 2.0 - 2.1 - 2.2 - 2.2.1 - 2.3 - 2.4 - 2.5 - 2.6 - 2.7 - 2.8 - 2.9 - 2.10 - 2.11 - 2.12 - 2.13 - 2.14 - 2.14.1 - 3.0 - 3.1 - 3.2 - 3.2.1 - 3.3 - 3.4 - 3.4.1 - 3.5 - 3.5.1 - 4.0 - 4.0.1 - 4.0.2 - 4.1 - 4.2 - 4.2.1 - 4.3 - 4.3.1 - 4.4 - 4.4.1 - 4.5 - 4.5.1 - 4.6 - 4.7 - 4.8 - 4.8.1 - 4.9 - 4.10 - 4.10.1 - 4.10.2 - 4.10.3 - 5.0 - 5.1 - 5.1.1 - 5.2 - 5.2.1 - 5.3 - 5.3.1 - 5.4 - 5.4.1 - 5.5 - 5.5.1 - 5.6 - 5.6.1 - 5.6.2 - 5.6.3 - 5.6.4 - 6.0 - 6.0.1 - 6.1 - 6.1.1 - 6.2 - 6.2.1 - 6.2.2 - 6.3 - 6.4 - 6.4.1 - 6.5 - 6.5.1 - 6.6 - 6.6.1 - 6.7 - 6.7.1 - 6.8 - 6.8.1 - 6.8.2 - 6.8.3 - 6.9 - 6.9.1 - 6.9.2 - 6.9.3 - 6.9.4 - 7.0 - 7.0.1 - 7.0.2 - 7.1 - 7.1.1 - 7.2 - 7.3 - 7.3.1 - 7.3.2 - 7.3.3 - 7.4 - 7.4.1 - 7.4.2 - 7.5 - 7.5.1 - 7.6 - 7.6.1 - 7.6.2 - 7.6.3 - 7.6.4 - 7.6.5 - 7.6.6 - 8.0 - 8.0.1 - 8.0.2 - 8.1 - 8.1.1 - 8.2 - 8.2.1 - 8.3 - 8.4 - 8.5 - 8.6 - 8.7 - 8.8 - 8.9 - 8.10 - 8.10.1 - 8.10.2 - 8.11 - 8.11.1 - 8.12 - 8.12.1 - 8.13 - 8.14 - 8.14.1 - 8.14.2 - 8.14.3 - 9.0.0 - ).map do |version| - { - version: Dependabot::Gradle::Version.new(version), + [ + { + version: Dependabot::Gradle::Version.new("9.0.0"), + released_at: Time.parse("20250731163512+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.14.3"), + released_at: Time.parse("20250704131544+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.6.6"), + released_at: Time.parse("20250704103426+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.14.2"), + released_at: Time.parse("20250605133201+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.6.5"), + released_at: Time.parse("20250604130222+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.14.1"), + released_at: Time.parse("20250522134409+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.14"), + released_at: Time.parse("20250425092908+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.13"), + released_at: Time.parse("20250225092214+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.12.1"), + released_at: Time.parse("20250124125512+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.12"), + released_at: Time.parse("20241220154653+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.11.1"), + released_at: Time.parse("20241120165646+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.11"), + released_at: Time.parse("20241111135801+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.10.2"), + released_at: Time.parse("20240923212839+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.10.1"), + released_at: Time.parse("20240909074256+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.10"), + released_at: Time.parse("20240814110745+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.9"), + released_at: Time.parse("20240711143741+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.8"), + released_at: Time.parse("20240531214656+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.7"), + released_at: Time.parse("20240322155246+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.6.4"), + released_at: Time.parse("20240205142918+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.6"), + released_at: Time.parse("20240202164716+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.5"), + released_at: Time.parse("20231129140857+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.4"), + released_at: Time.parse("20231004205213+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.6.3"), + released_at: Time.parse("20231004155947+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.3"), + released_at: Time.parse("20230817070647+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.2.1"), + released_at: Time.parse("20230710121235+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.2"), + released_at: Time.parse("20230630180230+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.6.2"), + released_at: Time.parse("20230630154251+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.1.1"), + released_at: Time.parse("20230421123126+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.1"), + released_at: Time.parse("20230412120745+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.0.2"), + released_at: Time.parse("20230303164137+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.6.1"), + released_at: Time.parse("20230224135442+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.9.4"), + released_at: Time.parse("20230222084312+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.0.1"), + released_at: Time.parse("20230217200948+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("8.0"), + released_at: Time.parse("20230213131521+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.6"), + released_at: Time.parse("20221125133510+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.9.3"), + released_at: Time.parse("20221017074402+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.5.1"), + released_at: Time.parse("20220805211756+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.5"), + released_at: Time.parse("20220714124815+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.4.2"), + released_at: Time.parse("20220331152529+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.4.1"), + released_at: Time.parse("20220309150447+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.4"), + released_at: Time.parse("20220208095838+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.3.3"), + released_at: Time.parse("20211222123754+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.9.2"), + released_at: Time.parse("20211221172537+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.3.2"), + released_at: Time.parse("20211215112231+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.3.1"), + released_at: Time.parse("20211201154220+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.3"), + released_at: Time.parse("20211109204036+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.9.1"), + released_at: Time.parse("20210820111518+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.2"), + released_at: Time.parse("20210817095903+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.1.1"), + released_at: Time.parse("20210702121643+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.1"), + released_at: Time.parse("20210614144726+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.0.2"), + released_at: Time.parse("20210514120231+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.0.1"), + released_at: Time.parse("20210510160858+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.9"), + released_at: Time.parse("20210507072853+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("7.0"), + released_at: Time.parse("20210409222731+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.8.3"), + released_at: Time.parse("20210222161328+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.8.2"), + released_at: Time.parse("20210205125300+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.8.1"), + released_at: Time.parse("20210122132008+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.8"), + released_at: Time.parse("20210108163846+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.7.1"), + released_at: Time.parse("20201116170924+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.7"), + released_at: Time.parse("20201014161312+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.6.1"), + released_at: Time.parse("20200825162912+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.6"), + released_at: Time.parse("20200810220619+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.5.1"), + released_at: Time.parse("20200630063247+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.5"), + released_at: Time.parse("20200602204621+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.4.1"), + released_at: Time.parse("20200515194340+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.4"), + released_at: Time.parse("20200505191855+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.3"), + released_at: Time.parse("20200324195207+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.2.2"), + released_at: Time.parse("20200304084931+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.2.1"), + released_at: Time.parse("20200224202410+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.2"), + released_at: Time.parse("20200217083201+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.1.1"), + released_at: Time.parse("20200124223024+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.1"), + released_at: Time.parse("20200115235646+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.0.1"), + released_at: Time.parse("20191118202501+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("6.0"), + released_at: Time.parse("20191108181212+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.6.4"), + released_at: Time.parse("20191101204200+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.6.3"), + released_at: Time.parse("20191018002836+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.6.2"), + released_at: Time.parse("20190905161354+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.6.1"), + released_at: Time.parse("20190828024934+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.6"), + released_at: Time.parse("20190814210525+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.5.1"), + released_at: Time.parse("20190710203812+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.5"), + released_at: Time.parse("20190628173605+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.4.1"), + released_at: Time.parse("20190426081442+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.4"), + released_at: Time.parse("20190416024416+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.3.1"), + released_at: Time.parse("20190328090923+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.3"), + released_at: Time.parse("20190320110329+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.2.1"), + released_at: Time.parse("20190208190010+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.2"), + released_at: Time.parse("20190204111648+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.1.1"), + released_at: Time.parse("20190110230502+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.1"), + released_at: Time.parse("20190102185747+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.10.3"), + released_at: Time.parse("20181205005054+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("5.0"), + released_at: Time.parse("20181126114843+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.10.2"), + released_at: Time.parse("20180919181015+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.10.1"), + released_at: Time.parse("20180912113327+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.10"), + released_at: Time.parse("20180827183506+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.9"), + released_at: Time.parse("20180716081403+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.8.1"), + released_at: Time.parse("20180621075306+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.8"), + released_at: Time.parse("20180604103958+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.7"), + released_at: Time.parse("20180418090912+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.6"), + released_at: Time.parse("20180228133636+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.5.1"), + released_at: Time.parse("20180205132249+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.5"), + released_at: Time.parse("20180124170452+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.4.1"), + released_at: Time.parse("20171220154523+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.4"), + released_at: Time.parse("20171206090506+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.3.1"), + released_at: Time.parse("20171108085945+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.3"), + released_at: Time.parse("20171030154329+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.2.1"), + released_at: Time.parse("20171002153621+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.2"), + released_at: Time.parse("20170920144823+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.1"), + released_at: Time.parse("20170807143848+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.0.2"), + released_at: Time.parse("20170726161918+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.0.1"), + released_at: Time.parse("20170707140241+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("3.5.1"), + released_at: Time.parse("20170616143627+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("4.0"), + released_at: Time.parse("20170614151108+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("3.5"), + released_at: Time.parse("20170410133725+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("3.4.1"), + released_at: Time.parse("20170303194541+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("3.4"), + released_at: Time.parse("20170220144926+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("3.3"), + released_at: Time.parse("20170103153104+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("3.2.1"), + released_at: Time.parse("20161122151954+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("3.2"), + released_at: Time.parse("20161114123259+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("3.1"), + released_at: Time.parse("20160919105353+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("3.0"), + released_at: Time.parse("20160815131501+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.14.1"), + released_at: Time.parse("20160718063837+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.14"), + released_at: Time.parse("20160614071637+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.13"), + released_at: Time.parse("20160425041010+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.12"), + released_at: Time.parse("20160314083203+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.11"), + released_at: Time.parse("20160208075916+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.10"), + released_at: Time.parse("20151221211504+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.9"), + released_at: Time.parse("20151117070217+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.8"), + released_at: Time.parse("20151020034636+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.7"), + released_at: Time.parse("20150914072616+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.6"), + released_at: Time.parse("20150810131506+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.5"), + released_at: Time.parse("20150708073837+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.4"), + released_at: Time.parse("20150505080924+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.3"), + released_at: Time.parse("20150216050933+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.2.1"), + released_at: Time.parse("20141124094535+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.2"), + released_at: Time.parse("20141110133144+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.1"), + released_at: Time.parse("20140908104039+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("2.0"), + released_at: Time.parse("20140701074534+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.12"), + released_at: Time.parse("20140429092431+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.11"), + released_at: Time.parse("20140211113439+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.10"), + released_at: Time.parse("20131217092815+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.9"), + released_at: Time.parse("20131119082002+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.8"), + released_at: Time.parse("20130924073233+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.7"), + released_at: Time.parse("20130806111956+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.6"), + released_at: Time.parse("20130507091214+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.5"), + released_at: Time.parse("20130327140935+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.4"), + released_at: Time.parse("20130128034246+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.3"), + released_at: Time.parse("20121120113738+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.2"), + released_at: Time.parse("20120912104602+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.1"), + released_at: Time.parse("20120731132432+0000"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("1.0"), + released_at: Time.parse("20120612025621+0200"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("0.9.2"), + released_at: Time.parse("20110123133421+1100"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("0.9.1"), + released_at: Time.parse("20110102114057+1100"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("0.9"), + released_at: Time.parse("20101219125006+1100"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("0.8"), + released_at: Time.parse("20090928140159+0200"), + source_url: "https://services.gradle.org" + }, + { + version: Dependabot::Gradle::Version.new("0.7"), + released_at: Time.parse("20090720085013+0200"), source_url: "https://services.gradle.org" } - end + ].sort_by { |v| v[:version] } ) } end From 39ad03151724804b204d20ddac9fb2cc86639b67 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Wed, 29 Oct 2025 17:18:35 +0100 Subject: [PATCH 15/18] Reverted changes on `lockfile_updater.rb` --- .../gradle/file_updater/lockfile_updater.rb | 99 +++++++++++++++++-- 1 file changed, 91 insertions(+), 8 deletions(-) diff --git a/gradle/lib/dependabot/gradle/file_updater/lockfile_updater.rb b/gradle/lib/dependabot/gradle/file_updater/lockfile_updater.rb index 826d998565e..911356b76b0 100644 --- a/gradle/lib/dependabot/gradle/file_updater/lockfile_updater.rb +++ b/gradle/lib/dependabot/gradle/file_updater/lockfile_updater.rb @@ -4,23 +4,106 @@ require "sorbet-runtime" require "shellwords" -require "dependabot/gradle/file_updater/gradle_updater_base" +require "dependabot/gradle/file_parser" +require "dependabot/gradle/file_updater" module Dependabot module Gradle class FileUpdater - class LockfileUpdater < GradleUpdaterBase + class LockfileUpdater extend T::Sig - sig { override.params(file: Dependabot::DependencyFile).returns(T::Boolean) } - def target_file?(file) - file.name.end_with?(".lockfile") + sig { params(dependency_files: T::Array[Dependabot::DependencyFile]).void } + def initialize(dependency_files:) + @dependency_files = dependency_files end - sig { override.returns(T::Array[String]) } - def command_args - %w(dependencies --write-locks) + sig { params(build_file: Dependabot::DependencyFile).returns(T::Array[Dependabot::DependencyFile]) } + def update_lockfiles(build_file) + local_lockfiles = dependency_files.select do |file| + file.directory == build_file.directory && file.name.end_with?(".lockfile") + end + + # If we don't have any lockfiles in the build files don't generate one + return dependency_files unless local_lockfiles.any? + + updated_files = dependency_files.dup + SharedHelpers.in_a_temporary_directory do |temp_dir| + populate_temp_directory(temp_dir) + cwd = File.join(temp_dir, build_file.directory, build_file.name) + cwd = File.dirname(cwd) + + # Create gradle.properties file with proxy settings + # Would prefer to use command line arguments, but they don't work. + properties_filename = File.join(temp_dir, build_file.directory, "gradle.properties") + write_properties_file(properties_filename) + + command_parts = [ + "gradle", + "dependencies", + "--no-daemon", + "--write-locks" + ] + command = Shellwords.join(command_parts) + + Dir.chdir(cwd) do + SharedHelpers.run_shell_command(command, cwd: cwd) + update_lockfiles_content(temp_dir, local_lockfiles, updated_files) + rescue SharedHelpers::HelperSubprocessFailed => e + puts "Failed to update lockfiles: #{e.message}" + return updated_files + end + end + updated_files + end + + sig do + params( + temp_dir: T.any(Pathname, String), + local_lockfiles: T::Array[Dependabot::DependencyFile], + updated_lockfiles: T::Array[Dependabot::DependencyFile] + ).void end + def update_lockfiles_content(temp_dir, local_lockfiles, updated_lockfiles) + local_lockfiles.each do |file| + f_content = File.read(File.join(temp_dir, file.directory, file.name)) + tmp_file = file.dup + tmp_file.content = f_content + updated_lockfiles[T.must(updated_lockfiles.index(file))] = tmp_file + end + end + + sig { params(temp_dir: T.any(Pathname, String)).void } + def populate_temp_directory(temp_dir) + @dependency_files.each do |file| + in_path_name = File.join(temp_dir, file.directory, file.name) + FileUtils.mkdir_p(File.dirname(in_path_name)) + File.write(in_path_name, file.content) + end + end + + sig { params(file_name: String).void } + def write_properties_file(file_name) # rubocop:disable Metrics/PerceivedComplexity + http_proxy = ENV.fetch("HTTP_PROXY", nil) + https_proxy = ENV.fetch("HTTPS_PROXY", nil) + http_split = http_proxy&.split(":") + https_split = https_proxy&.split(":") + http_proxy_host = http_split&.fetch(1, nil)&.gsub("//", "") || "host.docker.internal" + https_proxy_host = https_split&.fetch(1, nil)&.gsub("//", "") || "host.docker.internal" + http_proxy_port = http_split&.fetch(2) || "1080" + https_proxy_port = https_split&.fetch(2) || "1080" + properties_content = " +systemProp.http.proxyHost=#{http_proxy_host} +systemProp.http.proxyPort=#{http_proxy_port} +systemProp.https.proxyHost=#{https_proxy_host} +systemProp.https.proxyPort=#{https_proxy_port}" + File.write(file_name, properties_content) + end + + private + + sig { returns(T::Array[Dependabot::DependencyFile]) } + attr_reader :dependency_files end end end From 71f0cebef1664dcaff36ef6f623e516aaea17199 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Wed, 29 Oct 2025 17:52:22 +0100 Subject: [PATCH 16/18] Unified `wrapper_updater.rb` --- gradle/lib/dependabot/gradle/file_parser.rb | 6 +- gradle/lib/dependabot/gradle/file_updater.rb | 43 +++--- .../file_updater/gradle_updater_base.rb | 124 ------------------ .../gradle/file_updater/wrapper_updater.rb | 104 +++++++++++++-- .../update_checker/requirements_updater.rb | 2 + .../dependabot/gradle/file_parser_spec.rb | 8 ++ .../requirements_updater_spec.rb | 6 + 7 files changed, 130 insertions(+), 163 deletions(-) delete mode 100644 gradle/lib/dependabot/gradle/file_updater/gradle_updater_base.rb diff --git a/gradle/lib/dependabot/gradle/file_parser.rb b/gradle/lib/dependabot/gradle/file_parser.rb index 9a78da9246f..081933df550 100644 --- a/gradle/lib/dependabot/gradle/file_parser.rb +++ b/gradle/lib/dependabot/gradle/file_parser.rb @@ -60,8 +60,10 @@ def parse script_plugin_files.each do |plugin_file| dependency_set += buildfile_dependencies(plugin_file) end - wrapper_properties_file.each do |properties_file| - dependency_set += wrapper_properties_dependencies(properties_file) + if Experiments.enabled?(:gradle_wrapper_updater) + wrapper_properties_file.each do |properties_file| + dependency_set += wrapper_properties_dependencies(properties_file) + end end version_catalog_file.each do |toml_file| dependency_set += version_catalog_dependencies(toml_file) diff --git a/gradle/lib/dependabot/gradle/file_updater.rb b/gradle/lib/dependabot/gradle/file_updater.rb index 5c90c9e7403..1442e37799f 100644 --- a/gradle/lib/dependabot/gradle/file_updater.rb +++ b/gradle/lib/dependabot/gradle/file_updater.rb @@ -58,6 +58,7 @@ def original_file # rubocop:disable Metrics/AbcSize # rubocop:disable Metrics/CyclomaticComplexity # rubocop:disable Metrics/PerceivedComplexity + # rubocop:disable Metrics/MethodLength sig do params(buildfiles: T::Array[Dependabot::DependencyFile], dependency: Dependabot::Dependency) .returns(T::Array[Dependabot::DependencyFile]) @@ -102,17 +103,24 @@ def update_buildfiles_for_dependency(buildfiles:, dependency:) end # runs native updaters (e.g. wrapper, lockfile) on relevant build files updated - updaters = native_updaters(files, dependency) + updated_files = T.let([], T::Array[Dependabot::DependencyFile]) buildfiles_processed.each do |_, buildfile| - updated_files = updaters.flat_map { |updater| updater.update_files(buildfile) } - - updated_files.each do |file| - existing_file = files.find { |f| f.name == file.name && f.directory == file.directory } - if existing_file.nil? - files << file - else - files[T.must(files.index(existing_file))] = file - end + if Dependabot::Experiments.enabled?(:gradle_lockfile_updater) + lockfile_updater = LockfileUpdater.new(dependency_files: files) + updated_files << lockfile_updater.update_lockfiles(buildfile) + end + if Dependabot::Experiments.enabled?(:gradle_wrapper_updater) + wrapper_updater = WrapperUpdater.new(dependency_files: files, dependency: dependency) + updated_files << wrapper_updater.update_files(buildfile) + end + end + + updated_files.each do |file| + existing_file = files.find { |f| f.name == file.name && f.directory == file.directory } + if existing_file.nil? + files << file + else + files[T.must(files.index(existing_file))] = file end end @@ -121,20 +129,7 @@ def update_buildfiles_for_dependency(buildfiles:, dependency:) # rubocop:enable Metrics/PerceivedComplexity # rubocop:enable Metrics/CyclomaticComplexity # rubocop:enable Metrics/AbcSize - - sig do - params( - files: T::Array[Dependabot::DependencyFile], - dependency: Dependabot::Dependency - ).returns(T::Array[GradleUpdaterBase]) - end - def native_updaters(files, dependency) - updaters = T.let([], T::Array[GradleUpdaterBase]) - updaters << LockfileUpdater.new(dependency_files: files) if Experiments.enabled?(:gradle_lockfile_updater) - updaters << WrapperUpdater.new(dependency_files: files, dependency: dependency) if - Experiments.enabled?(:gradle_wrapper_updater) - updaters - end + # rubocop:enable Metrics/MethodLength sig do params( diff --git a/gradle/lib/dependabot/gradle/file_updater/gradle_updater_base.rb b/gradle/lib/dependabot/gradle/file_updater/gradle_updater_base.rb deleted file mode 100644 index f21c343ff4b..00000000000 --- a/gradle/lib/dependabot/gradle/file_updater/gradle_updater_base.rb +++ /dev/null @@ -1,124 +0,0 @@ -# typed: strong -# frozen_string_literal: true - -require "sorbet-runtime" -require "shellwords" - -require "dependabot/gradle/file_parser" -require "dependabot/gradle/file_updater" - -module Dependabot - module Gradle - class FileUpdater - class GradleUpdaterBase - extend T::Sig - - sig { params(dependency_files: T::Array[Dependabot::DependencyFile]).void } - def initialize(dependency_files:) - @dependency_files = dependency_files - end - - sig { params(_file: Dependabot::DependencyFile).returns(T::Boolean) } - def target_file?(_file) - raise NotImplementedError - end - - sig { returns(T::Array[String]) } - def command_args - raise NotImplementedError - end - - sig { params(build_file: Dependabot::DependencyFile).returns(String) } - def base_path(build_file) - File.dirname(File.join(build_file.directory, build_file.name)) - end - - sig { params(build_file: Dependabot::DependencyFile).returns(T::Array[Dependabot::DependencyFile]) } - def update_files(build_file) - local_files = dependency_files.select do |file| - file.directory == build_file.directory && target_file?(file) - end - - # If we don't have any files in the build files don't generate one - return dependency_files unless local_files.any? - - updated_files = dependency_files.dup - SharedHelpers.in_a_temporary_directory do |temp_dir| - populate_temp_directory(temp_dir) - cwd = File.join(temp_dir, base_path(build_file)) - - # Create gradle.properties file with proxy settings - # Would prefer to use command line arguments, but they don't work. - properties_filename = File.join(temp_dir, build_file.directory, "gradle.properties") - write_properties_file(properties_filename) - - command_parts = %w(gradle --no-daemon --stacktrace) + command_args - command = Shellwords.join(command_parts) - - Dir.chdir(cwd) do - SharedHelpers.run_shell_command(command, cwd: cwd) - update_files_content(temp_dir, local_files, updated_files) - rescue SharedHelpers::HelperSubprocessFailed => e - puts "Failed to update files: #{e.message}" - return updated_files - end - end - updated_files - end - - private - - sig do - params( - temp_dir: T.any(Pathname, String), - local_files: T::Array[Dependabot::DependencyFile], - updated_files: T::Array[Dependabot::DependencyFile] - ).void - end - def update_files_content(temp_dir, local_files, updated_files) - local_files.each do |file| - f_content = File.read(File.join(temp_dir, file.directory, file.name)) - tmp_file = file.dup - tmp_file.content = tmp_file.binary? ? Base64.encode64(f_content) : f_content - updated_files[T.must(updated_files.index(file))] = tmp_file - end - end - - sig { returns(T::Array[Dependabot::DependencyFile]) } - def files_to_populate - @dependency_files - end - - sig { params(temp_dir: T.any(Pathname, String)).void } - def populate_temp_directory(temp_dir) - files_to_populate.each do |file| - in_path_name = File.join(temp_dir, file.directory, file.name) - FileUtils.mkdir_p(File.dirname(in_path_name)) - File.write(in_path_name, file.content) - end - end - - sig { params(file_name: String).void } - def write_properties_file(file_name) # rubocop:disable Metrics/PerceivedComplexity - http_proxy = ENV.fetch("HTTP_PROXY", nil) - https_proxy = ENV.fetch("HTTPS_PROXY", nil) - http_split = http_proxy&.split(":") - https_split = https_proxy&.split(":") - http_proxy_host = http_split&.fetch(1, nil)&.gsub("//", "") || "host.docker.internal" - https_proxy_host = https_split&.fetch(1, nil)&.gsub("//", "") || "host.docker.internal" - http_proxy_port = http_split&.fetch(2) || "1080" - https_proxy_port = https_split&.fetch(2) || "1080" - properties_content = " -systemProp.http.proxyHost=#{http_proxy_host} -systemProp.http.proxyPort=#{http_proxy_port} -systemProp.https.proxyHost=#{https_proxy_host} -systemProp.https.proxyPort=#{https_proxy_port}" - File.write(file_name, properties_content) - end - - sig { returns(T::Array[Dependabot::DependencyFile]) } - attr_reader :dependency_files - end - end - end -end diff --git a/gradle/lib/dependabot/gradle/file_updater/wrapper_updater.rb b/gradle/lib/dependabot/gradle/file_updater/wrapper_updater.rb index 7e5e91da885..41bcf09067a 100644 --- a/gradle/lib/dependabot/gradle/file_updater/wrapper_updater.rb +++ b/gradle/lib/dependabot/gradle/file_updater/wrapper_updater.rb @@ -5,18 +5,17 @@ require "shellwords" require "dependabot/gradle/distributions" -require "dependabot/gradle/file_updater/gradle_updater_base" module Dependabot module Gradle class FileUpdater - class WrapperUpdater < GradleUpdaterBase + class WrapperUpdater extend T::Sig include Dependabot::Gradle::Distributions sig { params(dependency_files: T::Array[Dependabot::DependencyFile], dependency: Dependabot::Dependency).void } def initialize(dependency_files:, dependency:) - super(dependency_files: dependency_files) + @dependency_files = dependency_files @dependency = dependency @target_files = T.let( %w( @@ -38,12 +37,47 @@ def initialize(dependency_files:, dependency:) ) end - sig { override.params(file: Dependabot::DependencyFile).returns(T::Boolean) } + sig { params(build_file: Dependabot::DependencyFile).returns(T::Array[Dependabot::DependencyFile]) } + def update_files(build_file) + local_files = dependency_files.select do |file| + file.directory == build_file.directory && target_file?(file) + end + + # If we don't have any files in the build files don't generate one + return dependency_files unless local_files.any? + + updated_files = dependency_files.dup + SharedHelpers.in_a_temporary_directory do |temp_dir| + populate_temp_directory(temp_dir) + cwd = File.join(temp_dir, base_path(build_file)) + + # Create gradle.properties file with proxy settings + # Would prefer to use command line arguments, but they don't work. + properties_filename = File.join(temp_dir, build_file.directory, "gradle.properties") + write_properties_file(properties_filename) + + command_parts = %w(gradle --no-daemon --stacktrace) + command_args + command = Shellwords.join(command_parts) + + Dir.chdir(cwd) do + SharedHelpers.run_shell_command(command, cwd: cwd) + update_files_content(temp_dir, local_files, updated_files) + rescue SharedHelpers::HelperSubprocessFailed => e + puts "Failed to update files: #{e.message}" + return updated_files + end + end + updated_files + end + + private + + sig { params(file: Dependabot::DependencyFile).returns(T::Boolean) } def target_file?(file) @target_files.any? { |r| "/#{file.name}".end_with?(r) } end - sig { override.returns(T::Array[String]) } + sig { returns(T::Array[String]) } def command_args version = T.let(dependency.requirements[0]&.[](:requirement), String) checksum = T.let(dependency.requirements[1]&.[](:requirement), String) if dependency.requirements.size > 1 @@ -53,16 +87,9 @@ def command_args args end - sig { params(build_file: Dependabot::DependencyFile).returns(String) } - def base_path(build_file) - super.delete_suffix("/gradle/wrapper") - end - - private - # Gradle builds can be complex, to maximize the chances of a successful we just keep related wrapper files # and produce a minimal build for it to run (losing any customisations of the `wrapper` task in the process) - sig { override.returns(T::Array[Dependabot::DependencyFile]) } + sig { returns(T::Array[Dependabot::DependencyFile]) } def files_to_populate @dependency_files.filter_map do |f| next f if target_file?(f) @@ -75,6 +102,57 @@ def build_file?(file) @build_files.include?(File.basename(file.name)) end + sig { params(build_file: Dependabot::DependencyFile).returns(String) } + def base_path(build_file) + File.dirname(File.join(build_file.directory, build_file.name)).delete_suffix("/gradle/wrapper") + end + + sig do + params( + temp_dir: T.any(Pathname, String), + local_files: T::Array[Dependabot::DependencyFile], + updated_files: T::Array[Dependabot::DependencyFile] + ).void + end + def update_files_content(temp_dir, local_files, updated_files) + local_files.each do |file| + f_content = File.read(File.join(temp_dir, file.directory, file.name)) + tmp_file = file.dup + tmp_file.content = tmp_file.binary? ? Base64.encode64(f_content) : f_content + updated_files[T.must(updated_files.index(file))] = tmp_file + end + end + + sig { params(temp_dir: T.any(Pathname, String)).void } + def populate_temp_directory(temp_dir) + files_to_populate.each do |file| + in_path_name = File.join(temp_dir, file.directory, file.name) + FileUtils.mkdir_p(File.dirname(in_path_name)) + File.write(in_path_name, file.content) + end + end + + sig { params(file_name: String).void } + def write_properties_file(file_name) # rubocop:disable Metrics/PerceivedComplexity + http_proxy = ENV.fetch("HTTP_PROXY", nil) + https_proxy = ENV.fetch("HTTPS_PROXY", nil) + http_split = http_proxy&.split(":") + https_split = https_proxy&.split(":") + http_proxy_host = http_split&.fetch(1, nil)&.gsub("//", "") || "host.docker.internal" + https_proxy_host = https_split&.fetch(1, nil)&.gsub("//", "") || "host.docker.internal" + http_proxy_port = http_split&.fetch(2) || "1080" + https_proxy_port = https_split&.fetch(2) || "1080" + properties_content = " +systemProp.http.proxyHost=#{http_proxy_host} +systemProp.http.proxyPort=#{http_proxy_port} +systemProp.https.proxyHost=#{https_proxy_host} +systemProp.https.proxyPort=#{https_proxy_port}" + File.write(file_name, properties_content) + end + + sig { returns(T::Array[Dependabot::DependencyFile]) } + attr_reader :dependency_files + sig { returns(Dependabot::Dependency) } attr_reader :dependency end diff --git a/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb b/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb index b4d022f98a6..7cbafdf5250 100644 --- a/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb +++ b/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb @@ -119,6 +119,8 @@ def update_dynamic_requirement(req_string) sig { returns(T::Array[T::Hash[Symbol, T.untyped]]) } def updated_distribution_requirements + return requirements unless Experiments.enabled?(:gradle_wrapper_updater) + distribution_url = T.let(nil, T.nilable(String)) requirements.map do |req| diff --git a/gradle/spec/dependabot/gradle/file_parser_spec.rb b/gradle/spec/dependabot/gradle/file_parser_spec.rb index 32f655c2f06..9c96879107d 100644 --- a/gradle/spec/dependabot/gradle/file_parser_spec.rb +++ b/gradle/spec/dependabot/gradle/file_parser_spec.rb @@ -832,6 +832,14 @@ ] end + before do + Dependabot::Experiments.register(:gradle_wrapper_updater, true) + end + + after do + Dependabot::Experiments.reset! + end + its(:length) { is_expected.to eq(1) } describe "check dependency" do diff --git a/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb b/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb index d3fb63299d9..6345c7c7205 100644 --- a/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb +++ b/gradle/spec/dependabot/gradle/update_checker/requirements_updater_spec.rb @@ -184,10 +184,16 @@ end before do + Dependabot::Experiments.register(:gradle_wrapper_updater, true) + stub_request(:get, "https://services.gradle.org/distributions/gradle-9.0.0-all.zip.sha256") .to_return(status: 200, body: "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365") end + after do + Dependabot::Experiments.reset! + end + it "updates url and checksum" do expect(updater.updated_requirements).not_to eq(requirements) expect(updater.updated_requirements).to eq( From d4259fb2ac54571cd3ecc6e698978ff89c53ebc6 Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Thu, 30 Oct 2025 14:15:39 +0100 Subject: [PATCH 17/18] Integrated available distributions into `package_details_fetcher.rb` --- gradle/lib/dependabot/gradle/distributions.rb | 1 + gradle/lib/dependabot/gradle/file_updater.rb | 4 +- .../distributions_fetcher.rb} | 22 +- .../gradle/package/package_details_fetcher.rb | 42 +- .../update_checker/requirements_updater.rb | 3 +- .../gradle/update_checker/version_finder.rb | 6 - .../package/distributions_fetcher_spec.rb | 648 ++++++++++++++ .../package/package_details_fetcher_spec.rb | 46 + .../distributions_finder_spec.rb | 804 ------------------ .../update_checker/version_finder_spec.rb | 36 - 10 files changed, 749 insertions(+), 863 deletions(-) rename gradle/lib/dependabot/gradle/{update_checker/distributions_finder.rb => package/distributions_fetcher.rb} (80%) create mode 100644 gradle/spec/dependabot/gradle/package/distributions_fetcher_spec.rb delete mode 100644 gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb diff --git a/gradle/lib/dependabot/gradle/distributions.rb b/gradle/lib/dependabot/gradle/distributions.rb index 0f57d9e82a2..ba0836d0386 100644 --- a/gradle/lib/dependabot/gradle/distributions.rb +++ b/gradle/lib/dependabot/gradle/distributions.rb @@ -6,6 +6,7 @@ module Gradle module Distributions extend T::Sig + DISTRIBUTION_REPOSITORY_URL = "https://services.gradle.org" DISTRIBUTION_DEPENDENCY_TYPE = "gradle-distribution" sig { params(requirements: T::Array[T::Hash[Symbol, T.untyped]]).returns(T::Boolean) } diff --git a/gradle/lib/dependabot/gradle/file_updater.rb b/gradle/lib/dependabot/gradle/file_updater.rb index 1442e37799f..81a3b287bfb 100644 --- a/gradle/lib/dependabot/gradle/file_updater.rb +++ b/gradle/lib/dependabot/gradle/file_updater.rb @@ -107,11 +107,11 @@ def update_buildfiles_for_dependency(buildfiles:, dependency:) buildfiles_processed.each do |_, buildfile| if Dependabot::Experiments.enabled?(:gradle_lockfile_updater) lockfile_updater = LockfileUpdater.new(dependency_files: files) - updated_files << lockfile_updater.update_lockfiles(buildfile) + updated_files += lockfile_updater.update_lockfiles(buildfile) end if Dependabot::Experiments.enabled?(:gradle_wrapper_updater) wrapper_updater = WrapperUpdater.new(dependency_files: files, dependency: dependency) - updated_files << wrapper_updater.update_files(buildfile) + updated_files += wrapper_updater.update_files(buildfile) end end diff --git a/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb b/gradle/lib/dependabot/gradle/package/distributions_fetcher.rb similarity index 80% rename from gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb rename to gradle/lib/dependabot/gradle/package/distributions_fetcher.rb index 3425a2c7f62..72cb74b82e3 100644 --- a/gradle/lib/dependabot/gradle/update_checker/distributions_finder.rb +++ b/gradle/lib/dependabot/gradle/package/distributions_fetcher.rb @@ -2,12 +2,13 @@ # frozen_string_literal: true require "dependabot/gradle/version" +require "dependabot/gradle/distributions" require "sorbet-runtime" module Dependabot module Gradle - class UpdateChecker - class DistributionsFinder + module Package + class DistributionsFetcher extend T::Sig @available_versions = T.let([], T::Array[T::Hash[String, T.untyped]]) @@ -28,16 +29,13 @@ def self.available_versions @available_versions += versions .select { |v| release_version?(version: v) } - .uniq(&:version) - .map { |v| extract_version(v) } - .sort_by { |v| v[:version] } - end - - sig { params(version: OpenStruct).returns(T::Hash[Symbol, T.untyped]) } - def self.extract_version(version) - { version: Gradle::Version.new(T.let(version["version"], String)), - released_at: Time.parse(T.let(version["buildTime"], String)), - source_url: "https://services.gradle.org" } + .uniq { |v| v[:version] } + .map do |v| + { + version: v[:version], + build_time: v[:buildTime] + } + end end sig { params(version: OpenStruct).returns(T::Boolean) } diff --git a/gradle/lib/dependabot/gradle/package/package_details_fetcher.rb b/gradle/lib/dependabot/gradle/package/package_details_fetcher.rb index 4b5dcffdda8..c0fd554e5f2 100644 --- a/gradle/lib/dependabot/gradle/package/package_details_fetcher.rb +++ b/gradle/lib/dependabot/gradle/package/package_details_fetcher.rb @@ -8,6 +8,7 @@ require "dependabot/gradle/update_checker" require "dependabot/gradle/version" require "dependabot/gradle/requirement" +require "dependabot/gradle/distributions" require "dependabot/maven/utils/auth_headers_finder" require "sorbet-runtime" require "dependabot/gradle/metadata_finder" @@ -65,6 +66,7 @@ def fetch_available_versions repositories.map do |repository_details| url = repository_details.fetch("url") + next distribution_version_details if url == Gradle::Distributions::DISTRIBUTION_REPOSITORY_URL next google_version_details if url == Gradle::FileParser::RepositoriesFinder::GOOGLE_MAVEN_REPO dependency_metadata(repository_details).css("versions > version") @@ -83,7 +85,7 @@ def fetch_available_versions package_releases << { version: Gradle::Version.new(version), - released_at: release_date_info.none? ? nil : (release_date_info[version]&.fetch(:release_date) || nil), + released_at: info[:released_at] || release_date_info[version]&.fetch(:release_date), source_url: info[:source_url] } end @@ -136,7 +138,9 @@ def release_details def repositories return @repositories if @repositories - details = if plugin? + details = if distribution? + distribution_repository_details + elsif plugin? plugin_repository_details + credentials_repository_details else dependency_repository_details + credentials_repository_details @@ -151,6 +155,27 @@ def repositories end end + sig { returns(T.nilable(T::Array[T::Hash[String, T.untyped]])) } + def distribution_version_details + return nil unless Experiments.enabled?(:gradle_wrapper_updater) + + DistributionsFetcher.available_versions.map do |info| + release_date = begin + Time.parse(info[:build_time]) + rescue StandardError + nil + end + + { + version: info[:version], + released_at: release_date, + source_url: Distributions::DISTRIBUTION_REPOSITORY_URL + } + end + rescue StandardError + nil + end + sig { returns(T.nilable(T::Array[T::Hash[String, T.untyped]])) } def google_version_details url = Gradle::FileParser::RepositoriesFinder::GOOGLE_MAVEN_REPO @@ -276,6 +301,14 @@ def plugin_repository_details }] + dependency_repository_details end + sig { returns(T::Array[T::Hash[String, T.untyped]]) } + def distribution_repository_details + [{ + "url" => Gradle::Distributions::DISTRIBUTION_REPOSITORY_URL, + "auth_headers" => {} + }] + end + sig { params(comparison_version: T.untyped).returns(T::Boolean) } def matches_dependency_version_type?(comparison_version) return true unless dependency.version @@ -336,6 +369,11 @@ def kotlin_plugin? plugin? && dependency.requirements.any? { |r| r.fetch(:groups).include? "kotlin" } end + sig { returns(T::Boolean) } + def distribution? + Distributions.distribution_requirements?(dependency.requirements) + end + sig { returns(T::Array[String]) } def central_repo_urls central_url_without_protocol = diff --git a/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb b/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb index 7cbafdf5250..750afcbc3ba 100644 --- a/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb +++ b/gradle/lib/dependabot/gradle/update_checker/requirements_updater.rb @@ -10,6 +10,7 @@ require "dependabot/requirements_updater/base" require "dependabot/gradle/distributions" +require "dependabot/gradle/package/distributions_fetcher" require "dependabot/gradle/update_checker" require "dependabot/gradle/version" require "dependabot/gradle/requirement" @@ -138,7 +139,7 @@ def updated_distribution_requirements source: source.merge(url: distribution_url) ) when "distributionSha256Sum" - checksum_url, checksum = DistributionsFinder.resolve_checksum(T.must(distribution_url)) if checksum.nil? + checksum_url, checksum = Gradle::Package::DistributionsFetcher.resolve_checksum(T.must(distribution_url)) req.merge( requirement: checksum, source: source.merge(url: checksum_url) diff --git a/gradle/lib/dependabot/gradle/update_checker/version_finder.rb b/gradle/lib/dependabot/gradle/update_checker/version_finder.rb index 6e6ae4930c5..b3db344e180 100644 --- a/gradle/lib/dependabot/gradle/update_checker/version_finder.rb +++ b/gradle/lib/dependabot/gradle/update_checker/version_finder.rb @@ -4,10 +4,8 @@ require "nokogiri" require "dependabot/shared_helpers" require "dependabot/update_checkers/version_filters" -require "dependabot/gradle/distributions" require "dependabot/gradle/file_parser/repositories_finder" require "dependabot/gradle/update_checker" -require "dependabot/gradle/update_checker/distributions_finder" require "dependabot/gradle/version" require "dependabot/gradle/requirement" require "dependabot/maven/utils/auth_headers_finder" @@ -120,10 +118,6 @@ def lowest_security_fix_version_details sig { returns(T.any(T::Array[T::Hash[String, T.untyped]], T::Array[T::Hash[Symbol, T.untyped]])) } def versions - if Distributions.distribution_requirements?(dependency.requirements) - return DistributionsFinder.available_versions - end - Package::PackageDetailsFetcher.new( dependency: dependency, dependency_files: dependency_files, diff --git a/gradle/spec/dependabot/gradle/package/distributions_fetcher_spec.rb b/gradle/spec/dependabot/gradle/package/distributions_fetcher_spec.rb new file mode 100644 index 00000000000..a27eebb39d5 --- /dev/null +++ b/gradle/spec/dependabot/gradle/package/distributions_fetcher_spec.rb @@ -0,0 +1,648 @@ +# typed: false +# frozen_string_literal: true + +# rubocop:disable RSpec/ExampleLength + +require "spec_helper" +require "dependabot/gradle/package/distributions_fetcher" + +RSpec.describe Dependabot::Gradle::Package::DistributionsFetcher do + before do + stub_request(:get, "https://services.gradle.org/versions/all") + .to_return( + status: 200, + body: fixture("gradle_distributions_metadata", "versions_all.json") + ) + end + + describe "#available_versions" do + it { + expect(described_class.available_versions.sort_by { |v| v[:version] }).to eq( + [ + { + version: "9.0.0", + build_time: "20250731163512+0000" + }, + { + version: "8.14.3", + build_time: "20250704131544+0000" + }, + { + version: "7.6.6", + build_time: "20250704103426+0000" + }, + { + version: "8.14.2", + build_time: "20250605133201+0000" + }, + { + version: "7.6.5", + build_time: "20250604130222+0000" + }, + { + version: "8.14.1", + build_time: "20250522134409+0000" + }, + { + version: "8.14", + build_time: "20250425092908+0000" + }, + { + version: "8.13", + build_time: "20250225092214+0000" + }, + { + version: "8.12.1", + build_time: "20250124125512+0000" + }, + { + version: "8.12", + build_time: "20241220154653+0000" + }, + { + version: "8.11.1", + build_time: "20241120165646+0000" + }, + { + version: "8.11", + build_time: "20241111135801+0000" + }, + { + version: "8.10.2", + build_time: "20240923212839+0000" + }, + { + version: "8.10.1", + build_time: "20240909074256+0000" + }, + { + version: "8.10", + build_time: "20240814110745+0000" + }, + { + version: "8.9", + build_time: "20240711143741+0000" + }, + { + version: "8.8", + build_time: "20240531214656+0000" + }, + { + version: "8.7", + build_time: "20240322155246+0000" + }, + { + version: "7.6.4", + build_time: "20240205142918+0000" + }, + { + version: "8.6", + build_time: "20240202164716+0000" + }, + { + version: "8.5", + build_time: "20231129140857+0000" + }, + { + version: "8.4", + build_time: "20231004205213+0000" + }, + { + version: "7.6.3", + build_time: "20231004155947+0000" + }, + { + version: "8.3", + build_time: "20230817070647+0000" + }, + { + version: "8.2.1", + build_time: "20230710121235+0000" + }, + { + version: "8.2", + build_time: "20230630180230+0000" + }, + { + version: "7.6.2", + build_time: "20230630154251+0000" + }, + { + version: "8.1.1", + build_time: "20230421123126+0000" + }, + { + version: "8.1", + build_time: "20230412120745+0000" + }, + { + version: "8.0.2", + build_time: "20230303164137+0000" + }, + { + version: "7.6.1", + build_time: "20230224135442+0000" + }, + { + version: "6.9.4", + build_time: "20230222084312+0000" + }, + { + version: "8.0.1", + build_time: "20230217200948+0000" + }, + { + version: "8.0", + build_time: "20230213131521+0000" + }, + { + version: "7.6", + build_time: "20221125133510+0000" + }, + { + version: "6.9.3", + build_time: "20221017074402+0000" + }, + { + version: "7.5.1", + build_time: "20220805211756+0000" + }, + { + version: "7.5", + build_time: "20220714124815+0000" + }, + { + version: "7.4.2", + build_time: "20220331152529+0000" + }, + { + version: "7.4.1", + build_time: "20220309150447+0000" + }, + { + version: "7.4", + build_time: "20220208095838+0000" + }, + { + version: "7.3.3", + build_time: "20211222123754+0000" + }, + { + version: "6.9.2", + build_time: "20211221172537+0000" + }, + { + version: "7.3.2", + build_time: "20211215112231+0000" + }, + { + version: "7.3.1", + build_time: "20211201154220+0000" + }, + { + version: "7.3", + build_time: "20211109204036+0000" + }, + { + version: "6.9.1", + build_time: "20210820111518+0000" + }, + { + version: "7.2", + build_time: "20210817095903+0000" + }, + { + version: "7.1.1", + build_time: "20210702121643+0000" + }, + { + version: "7.1", + build_time: "20210614144726+0000" + }, + { + version: "7.0.2", + build_time: "20210514120231+0000" + }, + { + version: "7.0.1", + build_time: "20210510160858+0000" + }, + { + version: "6.9", + build_time: "20210507072853+0000" + }, + { + version: "7.0", + build_time: "20210409222731+0000" + }, + { + version: "6.8.3", + build_time: "20210222161328+0000" + }, + { + version: "6.8.2", + build_time: "20210205125300+0000" + }, + { + version: "6.8.1", + build_time: "20210122132008+0000" + }, + { + version: "6.8", + build_time: "20210108163846+0000" + }, + { + version: "6.7.1", + build_time: "20201116170924+0000" + }, + { + version: "6.7", + build_time: "20201014161312+0000" + }, + { + version: "6.6.1", + build_time: "20200825162912+0000" + }, + { + version: "6.6", + build_time: "20200810220619+0000" + }, + { + version: "6.5.1", + build_time: "20200630063247+0000" + }, + { + version: "6.5", + build_time: "20200602204621+0000" + }, + { + version: "6.4.1", + build_time: "20200515194340+0000" + }, + { + version: "6.4", + build_time: "20200505191855+0000" + }, + { + version: "6.3", + build_time: "20200324195207+0000" + }, + { + version: "6.2.2", + build_time: "20200304084931+0000" + }, + { + version: "6.2.1", + build_time: "20200224202410+0000" + }, + { + version: "6.2", + build_time: "20200217083201+0000" + }, + { + version: "6.1.1", + build_time: "20200124223024+0000" + }, + { + version: "6.1", + build_time: "20200115235646+0000" + }, + { + version: "6.0.1", + build_time: "20191118202501+0000" + }, + { + version: "6.0", + build_time: "20191108181212+0000" + }, + { + version: "5.6.4", + build_time: "20191101204200+0000" + }, + { + version: "5.6.3", + build_time: "20191018002836+0000" + }, + { + version: "5.6.2", + build_time: "20190905161354+0000" + }, + { + version: "5.6.1", + build_time: "20190828024934+0000" + }, + { + version: "5.6", + build_time: "20190814210525+0000" + }, + { + version: "5.5.1", + build_time: "20190710203812+0000" + }, + { + version: "5.5", + build_time: "20190628173605+0000" + }, + { + version: "5.4.1", + build_time: "20190426081442+0000" + }, + { + version: "5.4", + build_time: "20190416024416+0000" + }, + { + version: "5.3.1", + build_time: "20190328090923+0000" + }, + { + version: "5.3", + build_time: "20190320110329+0000" + }, + { + version: "5.2.1", + build_time: "20190208190010+0000" + }, + { + version: "5.2", + build_time: "20190204111648+0000" + }, + { + version: "5.1.1", + build_time: "20190110230502+0000" + }, + { + version: "5.1", + build_time: "20190102185747+0000" + }, + { + version: "4.10.3", + build_time: "20181205005054+0000" + }, + { + version: "5.0", + build_time: "20181126114843+0000" + }, + { + version: "4.10.2", + build_time: "20180919181015+0000" + }, + { + version: "4.10.1", + build_time: "20180912113327+0000" + }, + { + version: "4.10", + build_time: "20180827183506+0000" + }, + { + version: "4.9", + build_time: "20180716081403+0000" + }, + { + version: "4.8.1", + build_time: "20180621075306+0000" + }, + { + version: "4.8", + build_time: "20180604103958+0000" + }, + { + version: "4.7", + build_time: "20180418090912+0000" + }, + { + version: "4.6", + build_time: "20180228133636+0000" + }, + { + version: "4.5.1", + build_time: "20180205132249+0000" + }, + { + version: "4.5", + build_time: "20180124170452+0000" + }, + { + version: "4.4.1", + build_time: "20171220154523+0000" + }, + { + version: "4.4", + build_time: "20171206090506+0000" + }, + { + version: "4.3.1", + build_time: "20171108085945+0000" + }, + { + version: "4.3", + build_time: "20171030154329+0000" + }, + { + version: "4.2.1", + build_time: "20171002153621+0000" + }, + { + version: "4.2", + build_time: "20170920144823+0000" + }, + { + version: "4.1", + build_time: "20170807143848+0000" + }, + { + version: "4.0.2", + build_time: "20170726161918+0000" + }, + { + version: "4.0.1", + build_time: "20170707140241+0000" + }, + { + version: "3.5.1", + build_time: "20170616143627+0000" + }, + { + version: "4.0", + build_time: "20170614151108+0000" + }, + { + version: "3.5", + build_time: "20170410133725+0000" + }, + { + version: "3.4.1", + build_time: "20170303194541+0000" + }, + { + version: "3.4", + build_time: "20170220144926+0000" + }, + { + version: "3.3", + build_time: "20170103153104+0000" + }, + { + version: "3.2.1", + build_time: "20161122151954+0000" + }, + { + version: "3.2", + build_time: "20161114123259+0000" + }, + { + version: "3.1", + build_time: "20160919105353+0000" + }, + { + version: "3.0", + build_time: "20160815131501+0000" + }, + { + version: "2.14.1", + build_time: "20160718063837+0000" + }, + { + version: "2.14", + build_time: "20160614071637+0000" + }, + { + version: "2.13", + build_time: "20160425041010+0000" + }, + { + version: "2.12", + build_time: "20160314083203+0000" + }, + { + version: "2.11", + build_time: "20160208075916+0000" + }, + { + version: "2.10", + build_time: "20151221211504+0000" + }, + { + version: "2.9", + build_time: "20151117070217+0000" + }, + { + version: "2.8", + build_time: "20151020034636+0000" + }, + { + version: "2.7", + build_time: "20150914072616+0000" + }, + { + version: "2.6", + build_time: "20150810131506+0000" + }, + { + version: "2.5", + build_time: "20150708073837+0000" + }, + { + version: "2.4", + build_time: "20150505080924+0000" + }, + { + version: "2.3", + build_time: "20150216050933+0000" + }, + { + version: "2.2.1", + build_time: "20141124094535+0000" + }, + { + version: "2.2", + build_time: "20141110133144+0000" + }, + { + version: "2.1", + build_time: "20140908104039+0000" + }, + { + version: "2.0", + build_time: "20140701074534+0000" + }, + { + version: "1.12", + build_time: "20140429092431+0000" + }, + { + version: "1.11", + build_time: "20140211113439+0000" + }, + { + version: "1.10", + build_time: "20131217092815+0000" + }, + { + version: "1.9", + build_time: "20131119082002+0000" + }, + { + version: "1.8", + build_time: "20130924073233+0000" + }, + { + version: "1.7", + build_time: "20130806111956+0000" + }, + { + version: "1.6", + build_time: "20130507091214+0000" + }, + { + version: "1.5", + build_time: "20130327140935+0000" + }, + { + version: "1.4", + build_time: "20130128034246+0000" + }, + { + version: "1.3", + build_time: "20121120113738+0000" + }, + { + version: "1.2", + build_time: "20120912104602+0000" + }, + { + version: "1.1", + build_time: "20120731132432+0000" + }, + { + version: "1.0", + build_time: "20120612025621+0200" + }, + { + version: "0.9.2", + build_time: "20110123133421+1100" + }, + { + version: "0.9.1", + build_time: "20110102114057+1100" + }, + { + version: "0.9", + build_time: "20101219125006+1100" + }, + { + version: "0.8", + build_time: "20090928140159+0200" + }, + { + version: "0.7", + build_time: "20090720085013+0200" + } + ].sort_by { |v| v[:version] } + ) + } + end +end + +# rubocop:enable RSpec/ExampleLength diff --git a/gradle/spec/dependabot/gradle/package/package_details_fetcher_spec.rb b/gradle/spec/dependabot/gradle/package/package_details_fetcher_spec.rb index d0dfe2a0ad6..83d11a14d5c 100644 --- a/gradle/spec/dependabot/gradle/package/package_details_fetcher_spec.rb +++ b/gradle/spec/dependabot/gradle/package/package_details_fetcher_spec.rb @@ -289,6 +289,52 @@ end end end + + context "when the details come from gradle distributions" do + before do + Dependabot::Experiments.register(:gradle_wrapper_updater, true) + + stub_request(:get, "https://services.gradle.org/versions/all") + .to_return( + status: 200, + body: fixture("gradle_distributions_metadata", "versions_all.json") + ) + end + + after do + Dependabot::Experiments.reset! + end + + describe "the last version" do + subject { versions.last } + + let(:dependency_name) { "gradle-distribution" } + let(:dependency_version) { "8.5-rc-3" } + let(:dependency_requirements) do + [{ + requirement: "8.5-rc-3", + file: "gradle/wrapper/gradle-wrapper.properties", + source: { + type: "gradle-distribution", + url: "https://services.gradle.org/distributions/gradle-8.5-rc-3-bin.zip" + }, + groups: [] + }] + end + + its([:version]) do + is_expected.to eq(version_class.new("9.0.0")) + end + + its([:released_at]) do + is_expected.to eq(Time.new(2025, 7, 31, 16, 35, 12)) + end + + its([:source_url]) do + is_expected.to eq("https://services.gradle.org") + end + end + end end end end diff --git a/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb b/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb deleted file mode 100644 index ed28ce61483..00000000000 --- a/gradle/spec/dependabot/gradle/update_checker/distributions_finder_spec.rb +++ /dev/null @@ -1,804 +0,0 @@ -# typed: false -# frozen_string_literal: true - -# rubocop:disable RSpec/ExampleLength - -require "spec_helper" -require "dependabot/gradle/update_checker" -require "dependabot/gradle/update_checker/distributions_finder" - -RSpec.describe Dependabot::Gradle::UpdateChecker::DistributionsFinder do - before do - stub_request(:get, "https://services.gradle.org/versions/all") - .to_return( - status: 200, - body: fixture("gradle_distributions_metadata", "versions_all.json") - ) - end - - describe "#available_versions" do - it { - expect(described_class.available_versions).to eq( - [ - { - version: Dependabot::Gradle::Version.new("9.0.0"), - released_at: Time.parse("20250731163512+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.14.3"), - released_at: Time.parse("20250704131544+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.6.6"), - released_at: Time.parse("20250704103426+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.14.2"), - released_at: Time.parse("20250605133201+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.6.5"), - released_at: Time.parse("20250604130222+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.14.1"), - released_at: Time.parse("20250522134409+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.14"), - released_at: Time.parse("20250425092908+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.13"), - released_at: Time.parse("20250225092214+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.12.1"), - released_at: Time.parse("20250124125512+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.12"), - released_at: Time.parse("20241220154653+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.11.1"), - released_at: Time.parse("20241120165646+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.11"), - released_at: Time.parse("20241111135801+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.10.2"), - released_at: Time.parse("20240923212839+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.10.1"), - released_at: Time.parse("20240909074256+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.10"), - released_at: Time.parse("20240814110745+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.9"), - released_at: Time.parse("20240711143741+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.8"), - released_at: Time.parse("20240531214656+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.7"), - released_at: Time.parse("20240322155246+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.6.4"), - released_at: Time.parse("20240205142918+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.6"), - released_at: Time.parse("20240202164716+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.5"), - released_at: Time.parse("20231129140857+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.4"), - released_at: Time.parse("20231004205213+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.6.3"), - released_at: Time.parse("20231004155947+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.3"), - released_at: Time.parse("20230817070647+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.2.1"), - released_at: Time.parse("20230710121235+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.2"), - released_at: Time.parse("20230630180230+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.6.2"), - released_at: Time.parse("20230630154251+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.1.1"), - released_at: Time.parse("20230421123126+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.1"), - released_at: Time.parse("20230412120745+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.0.2"), - released_at: Time.parse("20230303164137+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.6.1"), - released_at: Time.parse("20230224135442+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.9.4"), - released_at: Time.parse("20230222084312+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.0.1"), - released_at: Time.parse("20230217200948+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("8.0"), - released_at: Time.parse("20230213131521+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.6"), - released_at: Time.parse("20221125133510+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.9.3"), - released_at: Time.parse("20221017074402+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.5.1"), - released_at: Time.parse("20220805211756+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.5"), - released_at: Time.parse("20220714124815+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.4.2"), - released_at: Time.parse("20220331152529+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.4.1"), - released_at: Time.parse("20220309150447+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.4"), - released_at: Time.parse("20220208095838+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.3.3"), - released_at: Time.parse("20211222123754+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.9.2"), - released_at: Time.parse("20211221172537+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.3.2"), - released_at: Time.parse("20211215112231+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.3.1"), - released_at: Time.parse("20211201154220+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.3"), - released_at: Time.parse("20211109204036+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.9.1"), - released_at: Time.parse("20210820111518+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.2"), - released_at: Time.parse("20210817095903+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.1.1"), - released_at: Time.parse("20210702121643+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.1"), - released_at: Time.parse("20210614144726+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.0.2"), - released_at: Time.parse("20210514120231+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.0.1"), - released_at: Time.parse("20210510160858+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.9"), - released_at: Time.parse("20210507072853+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("7.0"), - released_at: Time.parse("20210409222731+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.8.3"), - released_at: Time.parse("20210222161328+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.8.2"), - released_at: Time.parse("20210205125300+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.8.1"), - released_at: Time.parse("20210122132008+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.8"), - released_at: Time.parse("20210108163846+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.7.1"), - released_at: Time.parse("20201116170924+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.7"), - released_at: Time.parse("20201014161312+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.6.1"), - released_at: Time.parse("20200825162912+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.6"), - released_at: Time.parse("20200810220619+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.5.1"), - released_at: Time.parse("20200630063247+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.5"), - released_at: Time.parse("20200602204621+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.4.1"), - released_at: Time.parse("20200515194340+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.4"), - released_at: Time.parse("20200505191855+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.3"), - released_at: Time.parse("20200324195207+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.2.2"), - released_at: Time.parse("20200304084931+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.2.1"), - released_at: Time.parse("20200224202410+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.2"), - released_at: Time.parse("20200217083201+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.1.1"), - released_at: Time.parse("20200124223024+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.1"), - released_at: Time.parse("20200115235646+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.0.1"), - released_at: Time.parse("20191118202501+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("6.0"), - released_at: Time.parse("20191108181212+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.6.4"), - released_at: Time.parse("20191101204200+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.6.3"), - released_at: Time.parse("20191018002836+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.6.2"), - released_at: Time.parse("20190905161354+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.6.1"), - released_at: Time.parse("20190828024934+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.6"), - released_at: Time.parse("20190814210525+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.5.1"), - released_at: Time.parse("20190710203812+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.5"), - released_at: Time.parse("20190628173605+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.4.1"), - released_at: Time.parse("20190426081442+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.4"), - released_at: Time.parse("20190416024416+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.3.1"), - released_at: Time.parse("20190328090923+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.3"), - released_at: Time.parse("20190320110329+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.2.1"), - released_at: Time.parse("20190208190010+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.2"), - released_at: Time.parse("20190204111648+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.1.1"), - released_at: Time.parse("20190110230502+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.1"), - released_at: Time.parse("20190102185747+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.10.3"), - released_at: Time.parse("20181205005054+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("5.0"), - released_at: Time.parse("20181126114843+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.10.2"), - released_at: Time.parse("20180919181015+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.10.1"), - released_at: Time.parse("20180912113327+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.10"), - released_at: Time.parse("20180827183506+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.9"), - released_at: Time.parse("20180716081403+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.8.1"), - released_at: Time.parse("20180621075306+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.8"), - released_at: Time.parse("20180604103958+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.7"), - released_at: Time.parse("20180418090912+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.6"), - released_at: Time.parse("20180228133636+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.5.1"), - released_at: Time.parse("20180205132249+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.5"), - released_at: Time.parse("20180124170452+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.4.1"), - released_at: Time.parse("20171220154523+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.4"), - released_at: Time.parse("20171206090506+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.3.1"), - released_at: Time.parse("20171108085945+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.3"), - released_at: Time.parse("20171030154329+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.2.1"), - released_at: Time.parse("20171002153621+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.2"), - released_at: Time.parse("20170920144823+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.1"), - released_at: Time.parse("20170807143848+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.0.2"), - released_at: Time.parse("20170726161918+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.0.1"), - released_at: Time.parse("20170707140241+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("3.5.1"), - released_at: Time.parse("20170616143627+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("4.0"), - released_at: Time.parse("20170614151108+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("3.5"), - released_at: Time.parse("20170410133725+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("3.4.1"), - released_at: Time.parse("20170303194541+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("3.4"), - released_at: Time.parse("20170220144926+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("3.3"), - released_at: Time.parse("20170103153104+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("3.2.1"), - released_at: Time.parse("20161122151954+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("3.2"), - released_at: Time.parse("20161114123259+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("3.1"), - released_at: Time.parse("20160919105353+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("3.0"), - released_at: Time.parse("20160815131501+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.14.1"), - released_at: Time.parse("20160718063837+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.14"), - released_at: Time.parse("20160614071637+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.13"), - released_at: Time.parse("20160425041010+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.12"), - released_at: Time.parse("20160314083203+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.11"), - released_at: Time.parse("20160208075916+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.10"), - released_at: Time.parse("20151221211504+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.9"), - released_at: Time.parse("20151117070217+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.8"), - released_at: Time.parse("20151020034636+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.7"), - released_at: Time.parse("20150914072616+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.6"), - released_at: Time.parse("20150810131506+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.5"), - released_at: Time.parse("20150708073837+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.4"), - released_at: Time.parse("20150505080924+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.3"), - released_at: Time.parse("20150216050933+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.2.1"), - released_at: Time.parse("20141124094535+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.2"), - released_at: Time.parse("20141110133144+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.1"), - released_at: Time.parse("20140908104039+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("2.0"), - released_at: Time.parse("20140701074534+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.12"), - released_at: Time.parse("20140429092431+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.11"), - released_at: Time.parse("20140211113439+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.10"), - released_at: Time.parse("20131217092815+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.9"), - released_at: Time.parse("20131119082002+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.8"), - released_at: Time.parse("20130924073233+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.7"), - released_at: Time.parse("20130806111956+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.6"), - released_at: Time.parse("20130507091214+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.5"), - released_at: Time.parse("20130327140935+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.4"), - released_at: Time.parse("20130128034246+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.3"), - released_at: Time.parse("20121120113738+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.2"), - released_at: Time.parse("20120912104602+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.1"), - released_at: Time.parse("20120731132432+0000"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("1.0"), - released_at: Time.parse("20120612025621+0200"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("0.9.2"), - released_at: Time.parse("20110123133421+1100"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("0.9.1"), - released_at: Time.parse("20110102114057+1100"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("0.9"), - released_at: Time.parse("20101219125006+1100"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("0.8"), - released_at: Time.parse("20090928140159+0200"), - source_url: "https://services.gradle.org" - }, - { - version: Dependabot::Gradle::Version.new("0.7"), - released_at: Time.parse("20090720085013+0200"), - source_url: "https://services.gradle.org" - } - ].sort_by { |v| v[:version] } - ) - } - end -end - -# rubocop:enable RSpec/ExampleLength diff --git a/gradle/spec/dependabot/gradle/update_checker/version_finder_spec.rb b/gradle/spec/dependabot/gradle/update_checker/version_finder_spec.rb index 7b51536517c..4c5ee89c6f3 100644 --- a/gradle/spec/dependabot/gradle/update_checker/version_finder_spec.rb +++ b/gradle/spec/dependabot/gradle/update_checker/version_finder_spec.rb @@ -825,41 +825,5 @@ end end end - - context "when the details come from gradle distributions" do - before do - stub_request(:get, "https://services.gradle.org/versions/all") - .to_return( - status: 200, - body: fixture("gradle_distributions_metadata", "versions_all.json") - ) - end - - describe "the last version" do - subject { versions.last } - - let(:dependency_name) { "gradle-distribution" } - let(:dependency_version) { "8.5-rc-3" } - let(:dependency_requirements) do - [{ - requirement: "8.5-rc-3", - file: "gradle/wrapper/gradle-wrapper.properties", - source: { - type: "gradle-distribution", - url: "https://services.gradle.org/distributions/gradle-8.5-rc-3-bin.zip" - }, - groups: [] - }] - end - - its([:version]) do - is_expected.to eq(version_class.new("9.0.0")) - end - - its([:source_url]) do - is_expected.to eq("https://services.gradle.org") - end - end - end end end From 52fdd02dab98f154de29718d70fdea1d4d3181bc Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Tue, 4 Nov 2025 20:46:07 +0100 Subject: [PATCH 18/18] Moved expected resolved versions to a fixture file --- .../package/distributions_fetcher_spec.rb | 635 +----------------- .../resolved_versions.json | 622 +++++++++++++++++ 2 files changed, 629 insertions(+), 628 deletions(-) create mode 100644 gradle/spec/fixtures/gradle_distributions_metadata/resolved_versions.json diff --git a/gradle/spec/dependabot/gradle/package/distributions_fetcher_spec.rb b/gradle/spec/dependabot/gradle/package/distributions_fetcher_spec.rb index a27eebb39d5..4b6d29a9d4f 100644 --- a/gradle/spec/dependabot/gradle/package/distributions_fetcher_spec.rb +++ b/gradle/spec/dependabot/gradle/package/distributions_fetcher_spec.rb @@ -1,8 +1,6 @@ # typed: false # frozen_string_literal: true -# rubocop:disable RSpec/ExampleLength - require "spec_helper" require "dependabot/gradle/package/distributions_fetcher" @@ -17,632 +15,13 @@ describe "#available_versions" do it { - expect(described_class.available_versions.sort_by { |v| v[:version] }).to eq( - [ - { - version: "9.0.0", - build_time: "20250731163512+0000" - }, - { - version: "8.14.3", - build_time: "20250704131544+0000" - }, - { - version: "7.6.6", - build_time: "20250704103426+0000" - }, - { - version: "8.14.2", - build_time: "20250605133201+0000" - }, - { - version: "7.6.5", - build_time: "20250604130222+0000" - }, - { - version: "8.14.1", - build_time: "20250522134409+0000" - }, - { - version: "8.14", - build_time: "20250425092908+0000" - }, - { - version: "8.13", - build_time: "20250225092214+0000" - }, - { - version: "8.12.1", - build_time: "20250124125512+0000" - }, - { - version: "8.12", - build_time: "20241220154653+0000" - }, - { - version: "8.11.1", - build_time: "20241120165646+0000" - }, - { - version: "8.11", - build_time: "20241111135801+0000" - }, - { - version: "8.10.2", - build_time: "20240923212839+0000" - }, - { - version: "8.10.1", - build_time: "20240909074256+0000" - }, - { - version: "8.10", - build_time: "20240814110745+0000" - }, - { - version: "8.9", - build_time: "20240711143741+0000" - }, - { - version: "8.8", - build_time: "20240531214656+0000" - }, - { - version: "8.7", - build_time: "20240322155246+0000" - }, - { - version: "7.6.4", - build_time: "20240205142918+0000" - }, - { - version: "8.6", - build_time: "20240202164716+0000" - }, - { - version: "8.5", - build_time: "20231129140857+0000" - }, - { - version: "8.4", - build_time: "20231004205213+0000" - }, - { - version: "7.6.3", - build_time: "20231004155947+0000" - }, - { - version: "8.3", - build_time: "20230817070647+0000" - }, - { - version: "8.2.1", - build_time: "20230710121235+0000" - }, - { - version: "8.2", - build_time: "20230630180230+0000" - }, - { - version: "7.6.2", - build_time: "20230630154251+0000" - }, - { - version: "8.1.1", - build_time: "20230421123126+0000" - }, - { - version: "8.1", - build_time: "20230412120745+0000" - }, - { - version: "8.0.2", - build_time: "20230303164137+0000" - }, - { - version: "7.6.1", - build_time: "20230224135442+0000" - }, - { - version: "6.9.4", - build_time: "20230222084312+0000" - }, - { - version: "8.0.1", - build_time: "20230217200948+0000" - }, - { - version: "8.0", - build_time: "20230213131521+0000" - }, - { - version: "7.6", - build_time: "20221125133510+0000" - }, - { - version: "6.9.3", - build_time: "20221017074402+0000" - }, - { - version: "7.5.1", - build_time: "20220805211756+0000" - }, - { - version: "7.5", - build_time: "20220714124815+0000" - }, - { - version: "7.4.2", - build_time: "20220331152529+0000" - }, - { - version: "7.4.1", - build_time: "20220309150447+0000" - }, - { - version: "7.4", - build_time: "20220208095838+0000" - }, - { - version: "7.3.3", - build_time: "20211222123754+0000" - }, - { - version: "6.9.2", - build_time: "20211221172537+0000" - }, - { - version: "7.3.2", - build_time: "20211215112231+0000" - }, - { - version: "7.3.1", - build_time: "20211201154220+0000" - }, - { - version: "7.3", - build_time: "20211109204036+0000" - }, - { - version: "6.9.1", - build_time: "20210820111518+0000" - }, - { - version: "7.2", - build_time: "20210817095903+0000" - }, - { - version: "7.1.1", - build_time: "20210702121643+0000" - }, - { - version: "7.1", - build_time: "20210614144726+0000" - }, - { - version: "7.0.2", - build_time: "20210514120231+0000" - }, - { - version: "7.0.1", - build_time: "20210510160858+0000" - }, - { - version: "6.9", - build_time: "20210507072853+0000" - }, - { - version: "7.0", - build_time: "20210409222731+0000" - }, - { - version: "6.8.3", - build_time: "20210222161328+0000" - }, - { - version: "6.8.2", - build_time: "20210205125300+0000" - }, - { - version: "6.8.1", - build_time: "20210122132008+0000" - }, - { - version: "6.8", - build_time: "20210108163846+0000" - }, - { - version: "6.7.1", - build_time: "20201116170924+0000" - }, - { - version: "6.7", - build_time: "20201014161312+0000" - }, - { - version: "6.6.1", - build_time: "20200825162912+0000" - }, - { - version: "6.6", - build_time: "20200810220619+0000" - }, - { - version: "6.5.1", - build_time: "20200630063247+0000" - }, - { - version: "6.5", - build_time: "20200602204621+0000" - }, - { - version: "6.4.1", - build_time: "20200515194340+0000" - }, - { - version: "6.4", - build_time: "20200505191855+0000" - }, - { - version: "6.3", - build_time: "20200324195207+0000" - }, - { - version: "6.2.2", - build_time: "20200304084931+0000" - }, - { - version: "6.2.1", - build_time: "20200224202410+0000" - }, - { - version: "6.2", - build_time: "20200217083201+0000" - }, - { - version: "6.1.1", - build_time: "20200124223024+0000" - }, - { - version: "6.1", - build_time: "20200115235646+0000" - }, - { - version: "6.0.1", - build_time: "20191118202501+0000" - }, - { - version: "6.0", - build_time: "20191108181212+0000" - }, - { - version: "5.6.4", - build_time: "20191101204200+0000" - }, - { - version: "5.6.3", - build_time: "20191018002836+0000" - }, - { - version: "5.6.2", - build_time: "20190905161354+0000" - }, - { - version: "5.6.1", - build_time: "20190828024934+0000" - }, - { - version: "5.6", - build_time: "20190814210525+0000" - }, - { - version: "5.5.1", - build_time: "20190710203812+0000" - }, - { - version: "5.5", - build_time: "20190628173605+0000" - }, - { - version: "5.4.1", - build_time: "20190426081442+0000" - }, - { - version: "5.4", - build_time: "20190416024416+0000" - }, - { - version: "5.3.1", - build_time: "20190328090923+0000" - }, - { - version: "5.3", - build_time: "20190320110329+0000" - }, - { - version: "5.2.1", - build_time: "20190208190010+0000" - }, - { - version: "5.2", - build_time: "20190204111648+0000" - }, - { - version: "5.1.1", - build_time: "20190110230502+0000" - }, - { - version: "5.1", - build_time: "20190102185747+0000" - }, - { - version: "4.10.3", - build_time: "20181205005054+0000" - }, - { - version: "5.0", - build_time: "20181126114843+0000" - }, - { - version: "4.10.2", - build_time: "20180919181015+0000" - }, - { - version: "4.10.1", - build_time: "20180912113327+0000" - }, - { - version: "4.10", - build_time: "20180827183506+0000" - }, - { - version: "4.9", - build_time: "20180716081403+0000" - }, - { - version: "4.8.1", - build_time: "20180621075306+0000" - }, - { - version: "4.8", - build_time: "20180604103958+0000" - }, - { - version: "4.7", - build_time: "20180418090912+0000" - }, - { - version: "4.6", - build_time: "20180228133636+0000" - }, - { - version: "4.5.1", - build_time: "20180205132249+0000" - }, - { - version: "4.5", - build_time: "20180124170452+0000" - }, - { - version: "4.4.1", - build_time: "20171220154523+0000" - }, - { - version: "4.4", - build_time: "20171206090506+0000" - }, - { - version: "4.3.1", - build_time: "20171108085945+0000" - }, - { - version: "4.3", - build_time: "20171030154329+0000" - }, - { - version: "4.2.1", - build_time: "20171002153621+0000" - }, - { - version: "4.2", - build_time: "20170920144823+0000" - }, - { - version: "4.1", - build_time: "20170807143848+0000" - }, - { - version: "4.0.2", - build_time: "20170726161918+0000" - }, - { - version: "4.0.1", - build_time: "20170707140241+0000" - }, - { - version: "3.5.1", - build_time: "20170616143627+0000" - }, - { - version: "4.0", - build_time: "20170614151108+0000" - }, - { - version: "3.5", - build_time: "20170410133725+0000" - }, - { - version: "3.4.1", - build_time: "20170303194541+0000" - }, - { - version: "3.4", - build_time: "20170220144926+0000" - }, - { - version: "3.3", - build_time: "20170103153104+0000" - }, - { - version: "3.2.1", - build_time: "20161122151954+0000" - }, - { - version: "3.2", - build_time: "20161114123259+0000" - }, - { - version: "3.1", - build_time: "20160919105353+0000" - }, - { - version: "3.0", - build_time: "20160815131501+0000" - }, - { - version: "2.14.1", - build_time: "20160718063837+0000" - }, - { - version: "2.14", - build_time: "20160614071637+0000" - }, - { - version: "2.13", - build_time: "20160425041010+0000" - }, - { - version: "2.12", - build_time: "20160314083203+0000" - }, - { - version: "2.11", - build_time: "20160208075916+0000" - }, - { - version: "2.10", - build_time: "20151221211504+0000" - }, - { - version: "2.9", - build_time: "20151117070217+0000" - }, - { - version: "2.8", - build_time: "20151020034636+0000" - }, - { - version: "2.7", - build_time: "20150914072616+0000" - }, - { - version: "2.6", - build_time: "20150810131506+0000" - }, - { - version: "2.5", - build_time: "20150708073837+0000" - }, - { - version: "2.4", - build_time: "20150505080924+0000" - }, - { - version: "2.3", - build_time: "20150216050933+0000" - }, - { - version: "2.2.1", - build_time: "20141124094535+0000" - }, - { - version: "2.2", - build_time: "20141110133144+0000" - }, - { - version: "2.1", - build_time: "20140908104039+0000" - }, - { - version: "2.0", - build_time: "20140701074534+0000" - }, - { - version: "1.12", - build_time: "20140429092431+0000" - }, - { - version: "1.11", - build_time: "20140211113439+0000" - }, - { - version: "1.10", - build_time: "20131217092815+0000" - }, - { - version: "1.9", - build_time: "20131119082002+0000" - }, - { - version: "1.8", - build_time: "20130924073233+0000" - }, - { - version: "1.7", - build_time: "20130806111956+0000" - }, - { - version: "1.6", - build_time: "20130507091214+0000" - }, - { - version: "1.5", - build_time: "20130327140935+0000" - }, - { - version: "1.4", - build_time: "20130128034246+0000" - }, - { - version: "1.3", - build_time: "20121120113738+0000" - }, - { - version: "1.2", - build_time: "20120912104602+0000" - }, - { - version: "1.1", - build_time: "20120731132432+0000" - }, - { - version: "1.0", - build_time: "20120612025621+0200" - }, - { - version: "0.9.2", - build_time: "20110123133421+1100" - }, - { - version: "0.9.1", - build_time: "20110102114057+1100" - }, - { - version: "0.9", - build_time: "20101219125006+1100" - }, - { - version: "0.8", - build_time: "20090928140159+0200" - }, - { - version: "0.7", - build_time: "20090720085013+0200" - } - ].sort_by { |v| v[:version] } - ) + expected_versions = + JSON.parse(fixture("gradle_distributions_metadata", "resolved_versions.json"), { symbolize_names: true }) + .sort_by { |v| v[:version] } + + actual_versions = described_class.available_versions.sort_by { |v| v[:version] } + + expect(actual_versions).to eq(expected_versions) } end end - -# rubocop:enable RSpec/ExampleLength diff --git a/gradle/spec/fixtures/gradle_distributions_metadata/resolved_versions.json b/gradle/spec/fixtures/gradle_distributions_metadata/resolved_versions.json new file mode 100644 index 00000000000..fe867ba116d --- /dev/null +++ b/gradle/spec/fixtures/gradle_distributions_metadata/resolved_versions.json @@ -0,0 +1,622 @@ +[ + { + "version": "9.0.0", + "build_time": "20250731163512+0000" + }, + { + "version": "8.14.3", + "build_time": "20250704131544+0000" + }, + { + "version": "7.6.6", + "build_time": "20250704103426+0000" + }, + { + "version": "8.14.2", + "build_time": "20250605133201+0000" + }, + { + "version": "7.6.5", + "build_time": "20250604130222+0000" + }, + { + "version": "8.14.1", + "build_time": "20250522134409+0000" + }, + { + "version": "8.14", + "build_time": "20250425092908+0000" + }, + { + "version": "8.13", + "build_time": "20250225092214+0000" + }, + { + "version": "8.12.1", + "build_time": "20250124125512+0000" + }, + { + "version": "8.12", + "build_time": "20241220154653+0000" + }, + { + "version": "8.11.1", + "build_time": "20241120165646+0000" + }, + { + "version": "8.11", + "build_time": "20241111135801+0000" + }, + { + "version": "8.10.2", + "build_time": "20240923212839+0000" + }, + { + "version": "8.10.1", + "build_time": "20240909074256+0000" + }, + { + "version": "8.10", + "build_time": "20240814110745+0000" + }, + { + "version": "8.9", + "build_time": "20240711143741+0000" + }, + { + "version": "8.8", + "build_time": "20240531214656+0000" + }, + { + "version": "8.7", + "build_time": "20240322155246+0000" + }, + { + "version": "7.6.4", + "build_time": "20240205142918+0000" + }, + { + "version": "8.6", + "build_time": "20240202164716+0000" + }, + { + "version": "8.5", + "build_time": "20231129140857+0000" + }, + { + "version": "8.4", + "build_time": "20231004205213+0000" + }, + { + "version": "7.6.3", + "build_time": "20231004155947+0000" + }, + { + "version": "8.3", + "build_time": "20230817070647+0000" + }, + { + "version": "8.2.1", + "build_time": "20230710121235+0000" + }, + { + "version": "8.2", + "build_time": "20230630180230+0000" + }, + { + "version": "7.6.2", + "build_time": "20230630154251+0000" + }, + { + "version": "8.1.1", + "build_time": "20230421123126+0000" + }, + { + "version": "8.1", + "build_time": "20230412120745+0000" + }, + { + "version": "8.0.2", + "build_time": "20230303164137+0000" + }, + { + "version": "7.6.1", + "build_time": "20230224135442+0000" + }, + { + "version": "6.9.4", + "build_time": "20230222084312+0000" + }, + { + "version": "8.0.1", + "build_time": "20230217200948+0000" + }, + { + "version": "8.0", + "build_time": "20230213131521+0000" + }, + { + "version": "7.6", + "build_time": "20221125133510+0000" + }, + { + "version": "6.9.3", + "build_time": "20221017074402+0000" + }, + { + "version": "7.5.1", + "build_time": "20220805211756+0000" + }, + { + "version": "7.5", + "build_time": "20220714124815+0000" + }, + { + "version": "7.4.2", + "build_time": "20220331152529+0000" + }, + { + "version": "7.4.1", + "build_time": "20220309150447+0000" + }, + { + "version": "7.4", + "build_time": "20220208095838+0000" + }, + { + "version": "7.3.3", + "build_time": "20211222123754+0000" + }, + { + "version": "6.9.2", + "build_time": "20211221172537+0000" + }, + { + "version": "7.3.2", + "build_time": "20211215112231+0000" + }, + { + "version": "7.3.1", + "build_time": "20211201154220+0000" + }, + { + "version": "7.3", + "build_time": "20211109204036+0000" + }, + { + "version": "6.9.1", + "build_time": "20210820111518+0000" + }, + { + "version": "7.2", + "build_time": "20210817095903+0000" + }, + { + "version": "7.1.1", + "build_time": "20210702121643+0000" + }, + { + "version": "7.1", + "build_time": "20210614144726+0000" + }, + { + "version": "7.0.2", + "build_time": "20210514120231+0000" + }, + { + "version": "7.0.1", + "build_time": "20210510160858+0000" + }, + { + "version": "6.9", + "build_time": "20210507072853+0000" + }, + { + "version": "7.0", + "build_time": "20210409222731+0000" + }, + { + "version": "6.8.3", + "build_time": "20210222161328+0000" + }, + { + "version": "6.8.2", + "build_time": "20210205125300+0000" + }, + { + "version": "6.8.1", + "build_time": "20210122132008+0000" + }, + { + "version": "6.8", + "build_time": "20210108163846+0000" + }, + { + "version": "6.7.1", + "build_time": "20201116170924+0000" + }, + { + "version": "6.7", + "build_time": "20201014161312+0000" + }, + { + "version": "6.6.1", + "build_time": "20200825162912+0000" + }, + { + "version": "6.6", + "build_time": "20200810220619+0000" + }, + { + "version": "6.5.1", + "build_time": "20200630063247+0000" + }, + { + "version": "6.5", + "build_time": "20200602204621+0000" + }, + { + "version": "6.4.1", + "build_time": "20200515194340+0000" + }, + { + "version": "6.4", + "build_time": "20200505191855+0000" + }, + { + "version": "6.3", + "build_time": "20200324195207+0000" + }, + { + "version": "6.2.2", + "build_time": "20200304084931+0000" + }, + { + "version": "6.2.1", + "build_time": "20200224202410+0000" + }, + { + "version": "6.2", + "build_time": "20200217083201+0000" + }, + { + "version": "6.1.1", + "build_time": "20200124223024+0000" + }, + { + "version": "6.1", + "build_time": "20200115235646+0000" + }, + { + "version": "6.0.1", + "build_time": "20191118202501+0000" + }, + { + "version": "6.0", + "build_time": "20191108181212+0000" + }, + { + "version": "5.6.4", + "build_time": "20191101204200+0000" + }, + { + "version": "5.6.3", + "build_time": "20191018002836+0000" + }, + { + "version": "5.6.2", + "build_time": "20190905161354+0000" + }, + { + "version": "5.6.1", + "build_time": "20190828024934+0000" + }, + { + "version": "5.6", + "build_time": "20190814210525+0000" + }, + { + "version": "5.5.1", + "build_time": "20190710203812+0000" + }, + { + "version": "5.5", + "build_time": "20190628173605+0000" + }, + { + "version": "5.4.1", + "build_time": "20190426081442+0000" + }, + { + "version": "5.4", + "build_time": "20190416024416+0000" + }, + { + "version": "5.3.1", + "build_time": "20190328090923+0000" + }, + { + "version": "5.3", + "build_time": "20190320110329+0000" + }, + { + "version": "5.2.1", + "build_time": "20190208190010+0000" + }, + { + "version": "5.2", + "build_time": "20190204111648+0000" + }, + { + "version": "5.1.1", + "build_time": "20190110230502+0000" + }, + { + "version": "5.1", + "build_time": "20190102185747+0000" + }, + { + "version": "4.10.3", + "build_time": "20181205005054+0000" + }, + { + "version": "5.0", + "build_time": "20181126114843+0000" + }, + { + "version": "4.10.2", + "build_time": "20180919181015+0000" + }, + { + "version": "4.10.1", + "build_time": "20180912113327+0000" + }, + { + "version": "4.10", + "build_time": "20180827183506+0000" + }, + { + "version": "4.9", + "build_time": "20180716081403+0000" + }, + { + "version": "4.8.1", + "build_time": "20180621075306+0000" + }, + { + "version": "4.8", + "build_time": "20180604103958+0000" + }, + { + "version": "4.7", + "build_time": "20180418090912+0000" + }, + { + "version": "4.6", + "build_time": "20180228133636+0000" + }, + { + "version": "4.5.1", + "build_time": "20180205132249+0000" + }, + { + "version": "4.5", + "build_time": "20180124170452+0000" + }, + { + "version": "4.4.1", + "build_time": "20171220154523+0000" + }, + { + "version": "4.4", + "build_time": "20171206090506+0000" + }, + { + "version": "4.3.1", + "build_time": "20171108085945+0000" + }, + { + "version": "4.3", + "build_time": "20171030154329+0000" + }, + { + "version": "4.2.1", + "build_time": "20171002153621+0000" + }, + { + "version": "4.2", + "build_time": "20170920144823+0000" + }, + { + "version": "4.1", + "build_time": "20170807143848+0000" + }, + { + "version": "4.0.2", + "build_time": "20170726161918+0000" + }, + { + "version": "4.0.1", + "build_time": "20170707140241+0000" + }, + { + "version": "3.5.1", + "build_time": "20170616143627+0000" + }, + { + "version": "4.0", + "build_time": "20170614151108+0000" + }, + { + "version": "3.5", + "build_time": "20170410133725+0000" + }, + { + "version": "3.4.1", + "build_time": "20170303194541+0000" + }, + { + "version": "3.4", + "build_time": "20170220144926+0000" + }, + { + "version": "3.3", + "build_time": "20170103153104+0000" + }, + { + "version": "3.2.1", + "build_time": "20161122151954+0000" + }, + { + "version": "3.2", + "build_time": "20161114123259+0000" + }, + { + "version": "3.1", + "build_time": "20160919105353+0000" + }, + { + "version": "3.0", + "build_time": "20160815131501+0000" + }, + { + "version": "2.14.1", + "build_time": "20160718063837+0000" + }, + { + "version": "2.14", + "build_time": "20160614071637+0000" + }, + { + "version": "2.13", + "build_time": "20160425041010+0000" + }, + { + "version": "2.12", + "build_time": "20160314083203+0000" + }, + { + "version": "2.11", + "build_time": "20160208075916+0000" + }, + { + "version": "2.10", + "build_time": "20151221211504+0000" + }, + { + "version": "2.9", + "build_time": "20151117070217+0000" + }, + { + "version": "2.8", + "build_time": "20151020034636+0000" + }, + { + "version": "2.7", + "build_time": "20150914072616+0000" + }, + { + "version": "2.6", + "build_time": "20150810131506+0000" + }, + { + "version": "2.5", + "build_time": "20150708073837+0000" + }, + { + "version": "2.4", + "build_time": "20150505080924+0000" + }, + { + "version": "2.3", + "build_time": "20150216050933+0000" + }, + { + "version": "2.2.1", + "build_time": "20141124094535+0000" + }, + { + "version": "2.2", + "build_time": "20141110133144+0000" + }, + { + "version": "2.1", + "build_time": "20140908104039+0000" + }, + { + "version": "2.0", + "build_time": "20140701074534+0000" + }, + { + "version": "1.12", + "build_time": "20140429092431+0000" + }, + { + "version": "1.11", + "build_time": "20140211113439+0000" + }, + { + "version": "1.10", + "build_time": "20131217092815+0000" + }, + { + "version": "1.9", + "build_time": "20131119082002+0000" + }, + { + "version": "1.8", + "build_time": "20130924073233+0000" + }, + { + "version": "1.7", + "build_time": "20130806111956+0000" + }, + { + "version": "1.6", + "build_time": "20130507091214+0000" + }, + { + "version": "1.5", + "build_time": "20130327140935+0000" + }, + { + "version": "1.4", + "build_time": "20130128034246+0000" + }, + { + "version": "1.3", + "build_time": "20121120113738+0000" + }, + { + "version": "1.2", + "build_time": "20120912104602+0000" + }, + { + "version": "1.1", + "build_time": "20120731132432+0000" + }, + { + "version": "1.0", + "build_time": "20120612025621+0200" + }, + { + "version": "0.9.2", + "build_time": "20110123133421+1100" + }, + { + "version": "0.9.1", + "build_time": "20110102114057+1100" + }, + { + "version": "0.9", + "build_time": "20101219125006+1100" + }, + { + "version": "0.8", + "build_time": "20090928140159+0200" + }, + { + "version": "0.7", + "build_time": "20090720085013+0200" + } +]