Repository navigation
Expand file tree
/
Copy pathbuild.gradle
More file actions
136 lines (119 loc) · 5.92 KB
/
Copy pathbuild.gradle
File metadata and controls
136 lines (119 loc) · 5.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
plugins {
id 'java'
}
group = 'io.github.deussixik'
version = findProperty('javatogpu.version') ?: '0.1.0-alpha.5'
def secretValue = { String gradlePropertyName, String environmentVariableName ->
providers.gradleProperty(gradlePropertyName)
.orElse(providers.environmentVariable(environmentVariableName))
}
def centralUsernameProvider = secretValue('mavenCentralUsername', 'MAVEN_CENTRAL_USERNAME')
def centralPasswordProvider = secretValue('mavenCentralPassword', 'MAVEN_CENTRAL_PASSWORD')
def centralNamespaceProvider = secretValue('mavenCentralNamespace', 'MAVEN_CENTRAL_NAMESPACE')
.orElse(providers.provider { rootProject.group.toString() })
def centralPublishingTypeProvider = secretValue('mavenCentralPublishingType', 'MAVEN_CENTRAL_PUBLISHING_TYPE')
.orElse('automatic')
ext.javatogpuPublishedArtifacts = [
':processor' : 'javatogpu',
':ir-validation' : 'javatogpu-ir-validation',
':ir-optimizer' : 'javatogpu-ir-optimizer',
':ir-vendor-optimizer' : 'javatogpu-ir-vendor-optimizer'
]
allprojects {
group = rootProject.group
version = rootProject.version
repositories {
mavenCentral()
}
}
test {
useJUnitPlatform()
}
tasks.register('printJavaToGpuPublicationCoordinates') {
group = 'publishing'
description = 'Prints the JavaToGpu Maven coordinates prepared for publication.'
doLast {
javatogpuPublishedArtifacts.each { projectPath, artifactId ->
println "${projectPath} -> ${rootProject.group}:${artifactId}:${rootProject.version}"
}
}
}
tasks.register('validateJavaToGpuMavenCentralReleaseReadiness') {
group = 'publishing'
description = 'Runs Maven Central release-readiness guards for all published JavaToGpu artifacts.'
dependsOn javatogpuPublishedArtifacts.keySet().collect { projectPath ->
"${projectPath}:validateMavenCentralReleaseReadiness"
}
}
tasks.register('publishJavaToGpuToLocalStaging') {
group = 'publishing'
description = 'Publishes all JavaToGpu Maven artifacts to their local staging repositories.'
dependsOn javatogpuPublishedArtifacts.keySet().collect { projectPath ->
"${projectPath}:publishMavenJavaPublicationToLocalStagingRepository"
}
}
tasks.register('publishJavaToGpuSnapshotsToCentral') {
group = 'publishing'
description = 'Publishes all JavaToGpu Maven artifacts to the Maven Central snapshot repository.'
dependsOn javatogpuPublishedArtifacts.keySet().collect { projectPath ->
"${projectPath}:publishMavenJavaPublicationToCentralSnapshotsRepository"
}
doFirst {
if (!rootProject.version.toString().endsWith('-SNAPSHOT')) {
throw new GradleException('Snapshot publishing requires -Pjavatogpu.version=<version>-SNAPSHOT')
}
}
}
tasks.register('publishJavaToGpuReleasesToCentral') {
group = 'publishing'
description = 'Publishes all JavaToGpu Maven artifacts to Maven Central and transfers the release to the Publisher Portal.'
dependsOn javatogpuPublishedArtifacts.keySet().collect { projectPath ->
"${projectPath}:publishMavenJavaPublicationToCentralReleasesRepository"
}
doFirst {
if (rootProject.version.toString().endsWith('-SNAPSHOT')) {
throw new GradleException('Release publishing requires a non-SNAPSHOT javatogpu.version')
}
}
doLast {
String username = centralUsernameProvider.orNull
String password = centralPasswordProvider.orNull
String namespace = centralNamespaceProvider.get()
String publishingType = centralPublishingTypeProvider.get()
if (username == null || username.isBlank() || password == null || password.isBlank()) {
throw new GradleException('Maven Central release transfer requires mavenCentralUsername/mavenCentralPassword or MAVEN_CENTRAL_USERNAME/MAVEN_CENTRAL_PASSWORD')
}
if (namespace == null || namespace.isBlank()) {
throw new GradleException('Maven Central release transfer requires a non-empty mavenCentralNamespace or MAVEN_CENTRAL_NAMESPACE')
}
if (!['user_managed', 'automatic', 'portal_api'].contains(publishingType)) {
throw new GradleException('Unsupported mavenCentralPublishingType: ' + publishingType
+ '. Use user_managed, automatic, or portal_api.')
}
String encodedNamespace = java.net.URLEncoder.encode(namespace, 'UTF-8')
String encodedPublishingType = java.net.URLEncoder.encode(publishingType, 'UTF-8')
URL uploadUrl = new URL('https://ossrh-staging-api.central.sonatype.com/manual/upload/defaultRepository/'
+ encodedNamespace + '?publishing_type=' + encodedPublishingType)
HttpURLConnection connection = (HttpURLConnection) uploadUrl.openConnection()
connection.setRequestMethod('POST')
connection.setRequestProperty('Accept', 'application/json')
connection.setRequestProperty('Authorization', 'Bearer ' + java.util.Base64.encoder.encodeToString(
(username + ':' + password).getBytes(java.nio.charset.StandardCharsets.UTF_8)
))
connection.setConnectTimeout(30_000)
connection.setReadTimeout(120_000)
connection.setDoOutput(true)
connection.outputStream.close()
int responseCode = connection.responseCode
InputStream responseStream = responseCode >= 400 ? connection.errorStream : connection.inputStream
String responseBody = responseStream == null ? '' : responseStream.getText('UTF-8')
if (responseCode >= 400) {
throw new GradleException('Maven Central Portal transfer failed with HTTP ' + responseCode + ': ' + responseBody)
}
println 'Maven Central Portal transfer requested for namespace ' + namespace + ' with publishing_type=' + publishingType
if (!responseBody.isBlank()) {
println responseBody
}
}
}
apply from: 'gradle/ir-validation-dogfooding.gradle'