|
1 | 1 | import * as c from './constants.js' |
2 | | -import * as httpClient from '@actions/http-client' |
3 | | -import { downloadExtractAndCacheJDK } from './utils.js' |
| 2 | +import { downloadExtractAndCacheJDK, findLatestReleaseWithAsset } from './utils.js' |
4 | 3 | import { downloadTool } from '@actions/tool-cache' |
5 | 4 | import { basename } from 'path' |
6 | 5 |
|
7 | 6 | export const MANDREL_REPO = 'mandrel' |
8 | 7 | export const MANDREL_TAG_PREFIX = c.MANDREL_NAMESPACE |
9 | 8 | const MANDREL_DL_BASE = 'https://github.com/graalvm/mandrel/releases/download' |
10 | | -const DISCO_API_BASE = 'https://api.foojay.io/disco/v3.0/packages/jdks' |
11 | | - |
12 | | -interface JdkData { |
13 | | - message: string |
14 | | - /* eslint-disable @typescript-eslint/no-explicit-any */ |
15 | | - result: any |
16 | | - /* eslint-enable @typescript-eslint/no-explicit-any */ |
17 | | -} |
18 | 9 |
|
19 | 10 | export async function setUpMandrel(mandrelVersion: string, javaVersion: string): Promise<string> { |
20 | 11 | const version = stripMandrelNamespace(mandrelVersion) |
@@ -55,38 +46,16 @@ function getTagFromURI(uri: string): string { |
55 | 46 | } |
56 | 47 |
|
57 | 48 | export async function getLatestMandrelReleaseUrl(javaVersion: string): Promise<string> { |
58 | | - const url = `${DISCO_API_BASE}?jdk_version=${javaVersion}&distribution=${c.DISTRIBUTION_MANDREL}&architecture=${c.JDK_ARCH}&operating_system=${c.JDK_PLATFORM}&latest=per_distro` |
59 | | - const _http = new httpClient.HttpClient() |
60 | | - const response = await _http.getJson<JdkData>(url) |
61 | | - if (response.statusCode !== 200) { |
62 | | - throw new Error(`Failed to fetch latest Mandrel release for Java ${javaVersion} from DISCO API: ${response.result}`) |
63 | | - } |
64 | | - const result = response.result?.result[0] |
| 49 | + const expectedPrefix = `mandrel-java${javaVersion}-${c.GRAALVM_PLATFORM}-${c.GRAALVM_ARCH}-` |
| 50 | + const expectedSuffix = c.GRAALVM_FILE_EXTENSION |
65 | 51 | try { |
66 | | - const pkg_info_uri = result.links.pkg_info_uri |
67 | | - return await getLatestMandrelReleaseUrlHelper(_http, javaVersion, pkg_info_uri) |
68 | | - } catch (error) { |
69 | | - throw new Error(`Failed to get latest Mandrel release for Java ${javaVersion} from DISCO API: ${error}`) |
70 | | - } |
71 | | -} |
72 | | - |
73 | | -async function getLatestMandrelReleaseUrlHelper( |
74 | | - _http: httpClient.HttpClient, |
75 | | - java_version: string, |
76 | | - pkg_info_uri: string |
77 | | -): Promise<string> { |
78 | | - const response = await _http.getJson<JdkData>(pkg_info_uri) |
79 | | - if (response.statusCode !== 200) { |
80 | | - throw new Error( |
81 | | - `Failed to fetch package info of latest Mandrel release for Java ${java_version} from DISCO API: ${response.result}` |
| 52 | + return await findLatestReleaseWithAsset( |
| 53 | + MANDREL_REPO, |
| 54 | + (name) => name.startsWith(expectedPrefix) && name.endsWith(expectedSuffix) |
82 | 55 | ) |
83 | | - } |
84 | | - const result = response.result?.result[0] |
85 | | - try { |
86 | | - return result.direct_download_uri |
87 | 56 | } catch (error) { |
88 | 57 | throw new Error( |
89 | | - `Failed to get download URI of latest Mandrel release for Java ${java_version} from DISCO API: ${error}` |
| 58 | + `Failed to find latest Mandrel release for Java ${javaVersion}. Are you sure java-version: '${javaVersion}' is correct? ${error}` |
90 | 59 | ) |
91 | 60 | } |
92 | 61 | } |
|
0 commit comments