Skip to content

Commit 7538d95

Browse files
committed
Refactor GDS integration.
1 parent 6ceeefe commit 7538d95

4 files changed

Lines changed: 84 additions & 88 deletions

File tree

__tests__/gds.test.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,32 +28,31 @@ test('fetch artifacts', async () => {
2828
})
2929

3030
test('fetch artifacts by java version', async () => {
31-
let artifact = await fetchArtifactByJavaVersion(TEST_USER_AGENT, 'isBase:True', '17.0.12')
31+
let artifact = await fetchArtifactByJavaVersion(TEST_USER_AGENT, '17.0.12')
3232
expect(artifact.id).toBe('1C351E8F41BB8E9EE0631518000AE5F2')
3333
expect(artifact.checksum).toBe('b6f3dace24cf1960ec790216f4c86f00d4f43df64e4e8b548f6382f04894713f')
34-
artifact = await fetchArtifactByJavaVersion(TEST_USER_AGENT, 'isBase:True', '17')
34+
artifact = await fetchArtifactByJavaVersion(TEST_USER_AGENT, '17')
3535
expect(artifact.checksum).toHaveLength('b6f3dace24cf1960ec790216f4c86f00d4f43df64e4e8b548f6382f04894713f'.length)
3636
})
3737

3838
test('errors when downloading artifacts', async () => {
3939
await expect(downloadGraalVMViaGDSByJavaVersion('invalid', '17')).rejects.toThrow(
4040
'The provided "gds-token" was rejected (reason: "Invalid download token", opc-request-id: '
4141
)
42-
await expect(downloadGraalVMViaGDSByJavaVersion('invalid', '1')).rejects.toThrow('Unable to find GraalVM for JDK 1')
42+
await expect(downloadGraalVMViaGDSByJavaVersion('invalid', '1')).rejects.toThrow(
43+
"Unable to find GDS artifact. Are you sure java-version: '1' is correct?"
44+
)
4345
})
4446

4547
test('fetch legacy artifacts', async () => {
46-
let artifact = await fetchArtifactEE(TEST_USER_AGENT, 'isBase:True', '22.1.0', '11')
48+
let artifact = await fetchArtifactEE(TEST_USER_AGENT, '22.1.0', '11')
4749
expect(artifact.id).toBe('DCECD1C1B0B5B8DBE0536E16000A5C74')
4850
expect(artifact.checksum).toBe('4280782f6c7fcabe0ba707e8389cbfaf7bbe6b0cf634d309e6efcd1b172e3ce6')
49-
artifact = await fetchArtifactEE(TEST_USER_AGENT, 'isBase:True', '22.1.0', '17')
51+
artifact = await fetchArtifactEE(TEST_USER_AGENT, '22.1.0', '17')
5052
expect(artifact.id).toBe('DCECD2068882A0E9E0536E16000A9504')
5153
expect(artifact.checksum).toBe('e897add7d94bc456a61e6f927e831dff759efa3392a4b69c720dd3debc8f947d')
5254

53-
await expect(fetchArtifactEE(TEST_USER_AGENT, 'isBase:False', '22.1.0', '11')).rejects.toThrow(
54-
'Found more than one GDS artifact'
55-
)
56-
await expect(fetchArtifactEE(TEST_USER_AGENT, 'isBase:True', '1.0.0', '11')).rejects.toThrow(
55+
await expect(fetchArtifactEE(TEST_USER_AGENT, '1.0.0', '11')).rejects.toThrow(
5756
'Unable to find JDK11-based GraalVM EE 1.0.0'
5857
)
5958
})

dist/main.js

Lines changed: 36 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/constants.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,18 @@ export const GRAALVM_RELEASES_REPO = 'graalvm-ce-builds'
4242

4343
export const MANDREL_NAMESPACE = 'mandrel-'
4444

45-
export const GDS_BASE = 'https://gds.oracle.com/api/20220101'
46-
export const GDS_GRAALVM_PRODUCT_ID = 'D53FAE8052773FFAE0530F15000AA6C6'
45+
const GDS_BASE = 'https://gds.oracle.com/api/20220101'
46+
const GDS_GRAALVM_PRODUCT_ID = 'D53FAE8052773FFAE0530F15000AA6C6'
47+
const GDS_ARTIFACTS_BASE = `${GDS_BASE}/artifacts?productId=${GDS_GRAALVM_PRODUCT_ID}&metadata=edition:ee&metadata=isBase:True&status=PUBLISHED&responseFields=id&responseFields=checksum`
48+
/* Latest is currently based on timeCreated. Eventually, we should sortBy=m:version when version sorting is fixed. */
49+
export const GDS_LATEST_FILTER = '&sortBy=timeCreated&sortOrder=DESC&limit=1'
50+
export const GDS_USER_AGENT = `GraalVMGitHubAction/${ACTION_VERSION} (arch:${GRAALVM_ARCH}; os:${GRAALVM_PLATFORM})`
51+
52+
const gdsJDKFilter = (jdkMajorVersion: string | number) =>
53+
`&metadata=java:jdk${jdkMajorVersion}&metadata=os:${IS_MACOS ? 'macos' : GRAALVM_PLATFORM}&metadata=arch:${GRAALVM_ARCH}`
54+
export const gdsArtifactQueryUrl = (jdkMajorVersion: string | number, filter: string) =>
55+
`${GDS_ARTIFACTS_BASE}${gdsJDKFilter(jdkMajorVersion)}${filter}`
56+
export const gdsArtifactDownloadUrl = (artifactId: string) => `${GDS_BASE}/artifacts/${artifactId}/content`
4757

4858
export const ENV_GITHUB_EVENT_NAME = 'GITHUB_EVENT_NAME'
4959
export const EVENT_NAME_PULL_REQUEST = 'pull_request'

src/gds.ts

Lines changed: 28 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,8 @@ export async function downloadGraalVMViaGDS(
4141
graalVMVersion: string,
4242
jdkVersion: string
4343
): Promise<string> {
44-
const userAgent = `GraalVMGitHubAction/${c.ACTION_VERSION} (arch:${c.GRAALVM_ARCH}; os:${c.GRAALVM_PLATFORM}; jdk:${jdkVersion})`
45-
const baseArtifact = await fetchArtifact(userAgent, graalVMVersion, jdkVersion)
46-
return downloadArtifact(gdsToken, userAgent, baseArtifact)
44+
const baseArtifact = await fetchArtifact(c.GDS_USER_AGENT, graalVMVersion, jdkVersion)
45+
return downloadArtifact(gdsToken, baseArtifact)
4746
}
4847

4948
export async function fetchArtifact(
@@ -60,8 +59,7 @@ export async function fetchArtifact(
6059
majorJavaVersion = jdkVersion
6160
}
6261

63-
const catalogOS = c.IS_MACOS ? 'macos' : c.GRAALVM_PLATFORM
64-
const requestUrl = `${c.GDS_BASE}/artifacts?productId=${c.GDS_GRAALVM_PRODUCT_ID}&displayName=Oracle%20GraalVM&metadata=java:jdk${majorJavaVersion}&metadata=os:${catalogOS}&metadata=arch:${c.GRAALVM_ARCH}&metadata=isBase:True&status=PUBLISHED&responseFields=id&responseFields=checksum&responseFields=metadata&sortBy=m:version&sortOrder=DESC`
62+
const requestUrl = c.gdsArtifactQueryUrl(majorJavaVersion, `${c.GDS_LATEST_FILTER}&responseFields=metadata`)
6563
core.debug(`Requesting ${requestUrl}`)
6664
const response = await http.get(requestUrl, { accept: 'application/json' })
6765
if (response.message.statusCode !== 200) {
@@ -91,79 +89,64 @@ export async function fetchArtifact(
9189
// Support for GraalVM EE
9290

9391
export async function downloadGraalVMViaGDSByJavaVersion(gdsToken: string, javaVersion: string): Promise<string> {
94-
const userAgent = `GraalVMGitHubAction/${c.ACTION_VERSION} (arch:${c.GRAALVM_ARCH}; os:${c.GRAALVM_PLATFORM}; java:${javaVersion})`
95-
const baseArtifact = await fetchArtifactByJavaVersion(userAgent, 'isBase:True', javaVersion)
96-
return downloadArtifact(gdsToken, userAgent, baseArtifact)
92+
const baseArtifact = await fetchArtifactByJavaVersion(c.GDS_USER_AGENT, javaVersion)
93+
return downloadArtifact(gdsToken, baseArtifact)
9794
}
9895

9996
export async function downloadGraalVMViaGDSByJavaVersionEELegacy(
10097
gdsToken: string,
10198
version: string,
10299
javaVersion: string
103100
): Promise<string> {
104-
const userAgent = `GraalVMGitHubAction/${c.ACTION_VERSION} (arch:${c.GRAALVM_ARCH}; os:${c.GRAALVM_PLATFORM}; java:${javaVersion})`
105-
const baseArtifact = await fetchArtifactEE(userAgent, 'isBase:True', version, javaVersion)
106-
return downloadArtifact(gdsToken, userAgent, baseArtifact)
101+
const baseArtifact = await fetchArtifactEE(c.GDS_USER_AGENT, version, javaVersion)
102+
return downloadArtifact(gdsToken, baseArtifact)
107103
}
108104

109-
export async function fetchArtifactByJavaVersion(
110-
userAgent: string,
111-
metadata: string,
112-
javaVersion: string
113-
): Promise<GDSArtifact> {
105+
export async function fetchArtifactByJavaVersion(userAgent: string, javaVersion: string): Promise<GDSArtifact> {
114106
const http = new httpClient.HttpClient(userAgent)
115107

116-
let filter
117-
if (javaVersion.includes('.')) {
118-
filter = `metadata=version:${javaVersion}`
119-
} else {
120-
filter = `sortBy=m:java&sortOrder=DESC&limit=1` // latest and only one item
121-
}
122-
123108
let majorJavaVersion
124109
if (semver.valid(javaVersion)) {
125110
majorJavaVersion = semver.major(javaVersion)
126111
} else {
127112
majorJavaVersion = javaVersion
128113
}
129114

130-
const catalogOS = c.IS_MACOS ? 'macos' : c.GRAALVM_PLATFORM
131-
const requestUrl = `${c.GDS_BASE}/artifacts?productId=${c.GDS_GRAALVM_PRODUCT_ID}&displayName=Oracle%20GraalVM&${filter}&metadata=java:jdk${majorJavaVersion}&metadata=os:${catalogOS}&metadata=arch:${c.GRAALVM_ARCH}&metadata=${metadata}&status=PUBLISHED&responseFields=id&responseFields=checksum`
115+
let filter
116+
if (javaVersion.includes('.')) {
117+
filter = `&metadata=version:${javaVersion}`
118+
} else {
119+
filter = c.GDS_LATEST_FILTER
120+
}
121+
122+
const requestUrl = c.gdsArtifactQueryUrl(majorJavaVersion, filter)
132123
core.debug(`Requesting ${requestUrl}`)
133124
const response = await http.get(requestUrl, { accept: 'application/json' })
134125
if (response.message.statusCode !== 200) {
135-
throw new Error(
136-
`Unable to find GraalVM for JDK ${javaVersion}. Are you sure java-version: '${javaVersion}' is correct?`
137-
)
126+
throw new Error(`Unable to find GDS artifact. Are you sure java-version: '${javaVersion}' is correct?`)
138127
}
139128
const artifactResponse = JSON.parse(await response.readBody()) as GDSArtifactsResponse
140129
if (artifactResponse.items.length !== 1) {
141-
throw new Error(
142-
artifactResponse.items.length > 1
143-
? `Found more than one GDS artifact. ${c.ERROR_HINT}`
144-
: `Unable to find GDS artifact. Are you sure java-version: '${javaVersion}' is correct?`
145-
)
130+
if (artifactResponse.items.length > 1) {
131+
core.warning(`Found more than one GDS artifact. ${c.ERROR_HINT}`)
132+
} else {
133+
throw new Error(`Unable to find GDS artifact. Are you sure java-version: '${javaVersion}' is correct?`)
134+
}
146135
}
147136
return artifactResponse.items[0]
148137
}
149138

150-
export async function fetchArtifactEE(
151-
userAgent: string,
152-
metadata: string,
153-
version: string,
154-
javaVersion: string
155-
): Promise<GDSArtifact> {
139+
export async function fetchArtifactEE(userAgent: string, version: string, javaVersion: string): Promise<GDSArtifact> {
156140
const http = new httpClient.HttpClient(userAgent)
157141

158142
let filter
159143
if (version === c.VERSION_LATEST) {
160-
filter = `sortBy=displayName&sortOrder=DESC&limit=1` // latest and only one item
144+
filter = c.GDS_LATEST_FILTER
161145
} else {
162-
filter = `metadata=version:${version}`
146+
filter = `&metadata=version:${version}`
163147
}
164148

165-
const catalogOS = c.IS_MACOS ? 'macos' : c.GRAALVM_PLATFORM
166-
const requestUrl = `${c.GDS_BASE}/artifacts?productId=${c.GDS_GRAALVM_PRODUCT_ID}&${filter}&metadata=edition:ee&metadata=java:jdk${javaVersion}&metadata=os:${catalogOS}&metadata=arch:${c.GRAALVM_ARCH}&metadata=${metadata}&status=PUBLISHED&responseFields=id&responseFields=checksum`
149+
const requestUrl = c.gdsArtifactQueryUrl(javaVersion, filter)
167150
core.debug(`Requesting ${requestUrl}`)
168151
const response = await http.get(requestUrl, { accept: 'application/json' })
169152
if (response.message.statusCode !== 200) {
@@ -180,10 +163,10 @@ export async function fetchArtifactEE(
180163
return artifactResponse.items[0]
181164
}
182165

183-
async function downloadArtifact(gdsToken: string, userAgent: string, artifact: GDSArtifact): Promise<string> {
166+
async function downloadArtifact(gdsToken: string, artifact: GDSArtifact): Promise<string> {
184167
let downloadPath
185168
try {
186-
downloadPath = await downloadTool(`${c.GDS_BASE}/artifacts/${artifact.id}/content`, userAgent, {
169+
downloadPath = await downloadTool(c.gdsArtifactDownloadUrl(artifact.id), c.GDS_USER_AGENT, {
187170
accept: 'application/x-yaml',
188171
'x-download-token': gdsToken
189172
})

0 commit comments

Comments
 (0)