blob: 337d6c87ad34bf1d820c5e3d2156bfa62410e917 [file] [log] [blame]
Ian Zernydcb172e2022-02-22 15:36:45 +01001#!/usr/bin/env python3
Morten Krogh-Jespersenc69a5542021-09-23 08:10:23 +02002# 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-Jespersen5b557362022-02-16 11:41:48 +01006import utils
7if utils.is_python3():
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +02008 from html.parser import HTMLParser
9 import urllib.request
10 url_request = urllib.request
Morten Krogh-Jespersen5b557362022-02-16 11:41:48 +010011else:
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020012 from HTMLParser import HTMLParser
13 import urllib
14 url_request = urllib
Morten Krogh-Jespersenc69a5542021-09-23 08:10:23 +020015import os
16import sys
Søren Gjesse31397dd2024-06-20 13:40:51 +020017import xml.etree.ElementTree
18
Morten Krogh-Jespersenc69a5542021-09-23 08:10:23 +020019
20JETBRAINS_KOTLIN_MAVEN_URL = "https://maven.pkg.jetbrains.space/kotlin/p/" \
21 "kotlin/bootstrap/org/jetbrains/kotlin/"
22KOTLIN_RELEASE_URL = JETBRAINS_KOTLIN_MAVEN_URL + "kotlin-compiler/"
Søren Gjesse31397dd2024-06-20 13:40:51 +020023KOTLINC_LIB = os.path.join(utils.THIRD_PARTY, "kotlin",
24 "kotlin-compiler-dev", "kotlinc", "lib")
Morten Krogh-Jespersenc69a5542021-09-23 08:10:23 +020025
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020026
Morten Krogh-Jespersenc69a5542021-09-23 08:10:23 +020027def download_newest():
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020028 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-Jespersenc69a5542021-09-23 08:10:23 +020034
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020035 class HTMLContentParser(HTMLParser):
Morten Krogh-Jespersenc69a5542021-09-23 08:10:23 +020036
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020037 def handle_data(self, data):
38 if ('-dev-' in data):
39 release_candidates.append(data)
Morten Krogh-Jespersenc69a5542021-09-23 08:10:23 +020040
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020041 parser = HTMLContentParser()
42 parser.feed(content)
Morten Krogh-Jespersenc69a5542021-09-23 08:10:23 +020043
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020044 top_most_version = (0, 0, 0, 0)
45 top_most_version_and_build = None
Morten Krogh-Jespersenc69a5542021-09-23 08:10:23 +020046
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020047 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-Jespersenc69a5542021-09-23 08:10:23 +020057
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020058 if (top_most_version_and_build is None):
59 raise Exception('Url: %s \n returned %s' %
60 (KOTLIN_RELEASE_URL, response.getcode()))
Morten Krogh-Jespersenc69a5542021-09-23 08:10:23 +020061
Søren Gjessee56a30b2024-06-20 15:29:38 +020062 # 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 Gjesse31397dd2024-06-20 13:40:51 +020069 # Check POM for expected dependencies.
70 check_pom(top_most_version_and_build)
71
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020072 # We can now download all files related to the kotlin compiler version.
73 print("Downloading version: " + top_most_version_and_build)
Morten Krogh-Jespersenc69a5542021-09-23 08:10:23 +020074
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020075 download_and_save(
76 JETBRAINS_KOTLIN_MAVEN_URL +
77 "kotlin-compiler/{0}/kotlin-compiler-{0}.jar".format(
Søren Gjesse31397dd2024-06-20 13:40:51 +020078 top_most_version_and_build), KOTLINC_LIB, "kotlin-compiler.jar")
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020079 download_and_save(
80 JETBRAINS_KOTLIN_MAVEN_URL +
81 "kotlin-stdlib/{0}/kotlin-stdlib-{0}.jar".format(
Søren Gjesse31397dd2024-06-20 13:40:51 +020082 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 Adamsen2434a4d2023-10-16 11:29:03 +020088 download_and_save(
89 JETBRAINS_KOTLIN_MAVEN_URL +
90 "kotlin-reflect/{0}/kotlin-reflect-{0}.jar".format(
Søren Gjesse31397dd2024-06-20 13:40:51 +020091 top_most_version_and_build), KOTLINC_LIB, "kotlin-reflect.jar")
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020092 download_and_save(
93 JETBRAINS_KOTLIN_MAVEN_URL +
94 "kotlin-script-runtime/{0}/kotlin-script-runtime-{0}.jar".format(
Søren Gjesse31397dd2024-06-20 13:40:51 +020095 top_most_version_and_build), KOTLINC_LIB,
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020096 "kotlin-script-runtime.jar")
Søren Gjesse31397dd2024-06-20 13:40:51 +020097 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
103def 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-Jespersenc69a5542021-09-23 08:10:23 +0200133
134
135def download_and_save(url, path, name):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200136 print('Downloading: ' + url)
137 url_request.urlretrieve(url, os.path.join(path, name))
Morten Krogh-Jespersenc69a5542021-09-23 08:10:23 +0200138
139
140if __name__ == '__main__':
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200141 sys.exit(download_newest())