Ian Zerny | dcb172e | 2022-02-22 15:36:45 +0100 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 2 | # Copyright (c) 2021, the R8 project authors. Please see the AUTHORS file |
| 3 | # for details. All rights reserved. Use of this source code is governed by a |
| 4 | # BSD-style license that can be found in the LICENSE file. |
| 5 | |
Morten Krogh-Jespersen | 5b55736 | 2022-02-16 11:41:48 +0100 | [diff] [blame] | 6 | import utils |
| 7 | if utils.is_python3(): |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 8 | from html.parser import HTMLParser |
| 9 | import urllib.request |
| 10 | url_request = urllib.request |
Morten Krogh-Jespersen | 5b55736 | 2022-02-16 11:41:48 +0100 | [diff] [blame] | 11 | else: |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 12 | from HTMLParser import HTMLParser |
| 13 | import urllib |
| 14 | url_request = urllib |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 15 | import os |
| 16 | import sys |
Søren Gjesse | 31397dd | 2024-06-20 13:40:51 +0200 | [diff] [blame] | 17 | import xml.etree.ElementTree |
| 18 | |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 19 | |
| 20 | JETBRAINS_KOTLIN_MAVEN_URL = "https://maven.pkg.jetbrains.space/kotlin/p/" \ |
| 21 | "kotlin/bootstrap/org/jetbrains/kotlin/" |
| 22 | KOTLIN_RELEASE_URL = JETBRAINS_KOTLIN_MAVEN_URL + "kotlin-compiler/" |
Søren Gjesse | 31397dd | 2024-06-20 13:40:51 +0200 | [diff] [blame] | 23 | KOTLINC_LIB = os.path.join(utils.THIRD_PARTY, "kotlin", |
| 24 | "kotlin-compiler-dev", "kotlinc", "lib") |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 25 | |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 26 | |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 27 | def download_newest(): |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 28 | response = url_request.urlopen(KOTLIN_RELEASE_URL) |
| 29 | if response.getcode() != 200: |
| 30 | raise Exception('Url: %s \n returned %s' % |
| 31 | (KOTLIN_RELEASE_URL, response.getcode())) |
| 32 | content = str(response.read()) |
| 33 | release_candidates = [] |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 34 | |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 35 | class HTMLContentParser(HTMLParser): |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 36 | |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 37 | def handle_data(self, data): |
| 38 | if ('-dev-' in data): |
| 39 | release_candidates.append(data) |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 40 | |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 41 | parser = HTMLContentParser() |
| 42 | parser.feed(content) |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 43 | |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 44 | top_most_version = (0, 0, 0, 0) |
| 45 | top_most_version_and_build = None |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 46 | |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 47 | for version in release_candidates: |
| 48 | # The compiler version is on the form <major>.<minor>.<revision>-dev-<build>/ |
| 49 | version = version.replace('/', '') |
| 50 | version_build_args = version.split('-') |
| 51 | version_components = version_build_args[0].split('.') |
| 52 | version_components.append(version_build_args[2]) |
| 53 | current_version = tuple(map(int, version_components)) |
| 54 | if (current_version > top_most_version): |
| 55 | top_most_version = current_version |
| 56 | top_most_version_and_build = version |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 57 | |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 58 | if (top_most_version_and_build is None): |
| 59 | raise Exception('Url: %s \n returned %s' % |
| 60 | (KOTLIN_RELEASE_URL, response.getcode())) |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 61 | |
Søren Gjesse | e56a30b | 2024-06-20 15:29:38 +0200 | [diff] [blame] | 62 | # Download checked in kotlin dev compiler before owerlaying with the new. |
| 63 | # TODO(sgjesse): This should just ensure an empty directory instead of |
| 64 | # relying on overlaying and reusing some jars. |
| 65 | utils.DownloadFromGoogleCloudStorage( |
| 66 | os.path.join(utils.THIRD_PARTY, "kotlin", |
| 67 | "kotlin-compiler-dev.tar.gz.sha1")) |
| 68 | |
Søren Gjesse | 31397dd | 2024-06-20 13:40:51 +0200 | [diff] [blame] | 69 | # Check POM for expected dependencies. |
| 70 | check_pom(top_most_version_and_build) |
| 71 | |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 72 | # We can now download all files related to the kotlin compiler version. |
| 73 | print("Downloading version: " + top_most_version_and_build) |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 74 | |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 75 | download_and_save( |
| 76 | JETBRAINS_KOTLIN_MAVEN_URL + |
| 77 | "kotlin-compiler/{0}/kotlin-compiler-{0}.jar".format( |
Søren Gjesse | 31397dd | 2024-06-20 13:40:51 +0200 | [diff] [blame] | 78 | top_most_version_and_build), KOTLINC_LIB, "kotlin-compiler.jar") |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 79 | download_and_save( |
| 80 | JETBRAINS_KOTLIN_MAVEN_URL + |
| 81 | "kotlin-stdlib/{0}/kotlin-stdlib-{0}.jar".format( |
Søren Gjesse | 31397dd | 2024-06-20 13:40:51 +0200 | [diff] [blame] | 82 | top_most_version_and_build), KOTLINC_LIB, "kotlin-stdlib.jar") |
| 83 | download_and_save( |
| 84 | JETBRAINS_KOTLIN_MAVEN_URL + |
| 85 | "kotlin-stdlib-jdk8/{0}/kotlin-stdlib-jdk8-{0}.jar".format( |
| 86 | top_most_version_and_build), KOTLINC_LIB, "kotlin-stdlib-jdk8.jar") |
| 87 | # POM file has dependency on version 1.6.10 - download latest anyway. |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 88 | download_and_save( |
| 89 | JETBRAINS_KOTLIN_MAVEN_URL + |
| 90 | "kotlin-reflect/{0}/kotlin-reflect-{0}.jar".format( |
Søren Gjesse | 31397dd | 2024-06-20 13:40:51 +0200 | [diff] [blame] | 91 | top_most_version_and_build), KOTLINC_LIB, "kotlin-reflect.jar") |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 92 | download_and_save( |
| 93 | JETBRAINS_KOTLIN_MAVEN_URL + |
| 94 | "kotlin-script-runtime/{0}/kotlin-script-runtime-{0}.jar".format( |
Søren Gjesse | 31397dd | 2024-06-20 13:40:51 +0200 | [diff] [blame] | 95 | top_most_version_and_build), KOTLINC_LIB, |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 96 | "kotlin-script-runtime.jar") |
Søren Gjesse | 31397dd | 2024-06-20 13:40:51 +0200 | [diff] [blame] | 97 | download_and_save( |
| 98 | "https://repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.6.4/kotlinx-coroutines-core-jvm-1.6.4.jar", KOTLINC_LIB, "kotlinx-coroutines-core-jvm.jar") |
| 99 | download_and_save( |
| 100 | "https://repo1.maven.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20200330/trove4j-1.0.20200330.jar", KOTLINC_LIB, "trove4j.jar") |
| 101 | |
| 102 | |
| 103 | def check_pom(top_most_version_and_build): |
| 104 | # Download POM, and check the expected dependencies. |
| 105 | download_and_save( |
| 106 | JETBRAINS_KOTLIN_MAVEN_URL + |
| 107 | "kotlin-compiler/{0}/kotlin-compiler-{0}.pom".format( |
| 108 | top_most_version_and_build), KOTLINC_LIB, "kotlin-compiler.pom") |
| 109 | pom_file = os.path.join(KOTLINC_LIB, "kotlin-compiler.pom") |
| 110 | ns = "http://maven.apache.org/POM/4.0.0" |
| 111 | xml.etree.ElementTree.register_namespace('', ns) |
| 112 | tree = xml.etree.ElementTree.ElementTree() |
| 113 | tree.parse(pom_file) |
| 114 | #return tree.getroot().find("{%s}dependencies" % ns).text |
| 115 | for dependency in tree.getroot().find("{%s}dependencies" % ns): |
| 116 | groupId = dependency.find("{%s}groupId" % ns).text |
| 117 | artifactId = dependency.find("{%s}artifactId" % ns).text |
| 118 | version = dependency.find("{%s}version" % ns).text |
| 119 | coordinates = ( |
| 120 | '{groupId}:{artifactId}:{version}' |
| 121 | .format(groupId=groupId, artifactId=artifactId, version=version)) |
| 122 | print('Dependecy: ' + coordinates) |
| 123 | expected_dependencies = set() |
| 124 | for artifactId in ("kotlin-stdlib", "kotlin-stdlib-jdk8", "kotlin-script-runtime"): |
| 125 | expected_dependencies.add( |
| 126 | 'org.jetbrains.kotlin:{artifactId}:{version}' |
| 127 | .format(artifactId=artifactId, version=top_most_version_and_build)) |
| 128 | expected_dependencies.add('org.jetbrains.kotlin:kotlin-reflect:1.6.10') |
| 129 | expected_dependencies.add('org.jetbrains.intellij.deps:trove4j:1.0.20200330') |
| 130 | expected_dependencies.add('org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4') |
| 131 | if not coordinates in expected_dependencies: |
| 132 | raise Exception('Unexpected dependency: ' + coordinates) |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 133 | |
| 134 | |
| 135 | def download_and_save(url, path, name): |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 136 | print('Downloading: ' + url) |
| 137 | url_request.urlretrieve(url, os.path.join(path, name)) |
Morten Krogh-Jespersen | c69a554 | 2021-09-23 08:10:23 +0200 | [diff] [blame] | 138 | |
| 139 | |
| 140 | if __name__ == '__main__': |
Christoffer Quist Adamsen | 2434a4d | 2023-10-16 11:29:03 +0200 | [diff] [blame] | 141 | sys.exit(download_newest()) |