Skip to content

Commit b6199e1

Browse files
author
Vincent Potucek
committed
[picnic] Add StreamRulesRecipes
Changes have been made to junit-platform-commons/src/main/java/org/junit/platform/commons/support/ModifierSupport.java by: org.openrewrite.java.migrate.UpgradeToJava17 org.openrewrite.java.migrate.RemovedModifierAndConstantBootstrapsConstructors org.openrewrite.java.ChangeMethodTargetToStatic: {methodPattern=java.lang.reflect.Modifier *(..), fullyQualifiedTargetTypeName=java.lang.reflect.Modifier} Signed-off-by: Vincent Potucek <[email protected]>
1 parent 786aa07 commit b6199e1

File tree

13 files changed

+345
-28
lines changed

13 files changed

+345
-28
lines changed

.github/workflows/sanity-check.yml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: "Sanity Check"
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- 'releases/**'
8+
pull_request:
9+
# The branches below must be a subset of the branches above
10+
branches:
11+
- main
12+
- 'releases/**'
13+
schedule:
14+
- cron: '0 19 * * 3'
15+
16+
concurrency:
17+
# Cancels in-progress runs only for pull requests
18+
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
19+
cancel-in-progress: true
20+
21+
permissions: {}
22+
23+
env:
24+
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
25+
26+
jobs:
27+
analyze:
28+
name: Analyze (${{ matrix.language }})
29+
runs-on: ubuntu-latest
30+
permissions:
31+
security-events: write
32+
strategy:
33+
fail-fast: false
34+
matrix:
35+
include:
36+
- language: actions
37+
build-mode: none
38+
- language: java-kotlin
39+
build-mode: manual
40+
steps:
41+
- name: Check out repository
42+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
43+
with:
44+
persist-credentials: false
45+
- name: Sanity Check
46+
if: matrix.build-mode == 'manual'
47+
uses: ./.github/actions/run-gradle
48+
with:
49+
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
50+
arguments: rewriteDryRun
51+
# arguments: rewriteDryRun -Dorg.gradle.jvmargs=-Xmx8G

build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@ plugins {
77
id("junitbuild.jacoco-aggregation-conventions")
88
id("junitbuild.maven-central-publishing")
99
id("junitbuild.temp-maven-repo")
10+
id("org.openrewrite.rewrite") version("7.19.0") apply false
1011
}
1112

13+
apply(from = "gradle/rewrite.gradle")
14+
1215
description = "JUnit"
1316
group = "org.junit"
1417

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
plugins {
2+
id("org.openrewrite.rewrite") version("7.19.0")
3+
}
4+
5+
rewrite {
6+
activeRecipe("org.junit.openrewrite.SanityCheck")
7+
exclusion("**CollectionUtils.java")
8+
setExportDatatables(true)
9+
setFailOnDryRunResults(true)
10+
}
11+
12+
dependencies {
13+
rewrite(platform("org.openrewrite.recipe:rewrite-recipe-bom:3.17.0"))
14+
rewrite("org.openrewrite.recipe:rewrite-migrate-java:3.20.0")
15+
rewrite("org.openrewrite.recipe:rewrite-java-security:3.19.2")
16+
rewrite("org.openrewrite.recipe:rewrite-rewrite:0.14.1")
17+
rewrite("org.openrewrite.recipe:rewrite-static-analysis:2.20.0")
18+
rewrite("org.openrewrite.recipe:rewrite-third-party:0.30.0")
19+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import org.jreleaser.model.Active.RELEASE
2+
import org.jreleaser.model.api.deploy.maven.MavenCentralMavenDeployer.Stage
3+
import java.util.Properties
4+
5+
plugins {
6+
id("org.jreleaser")
7+
id("junitbuild.temp-maven-repo")
8+
}
9+
10+
val tempRepoDir: File by extra
11+
12+
tasks.jreleaserDeploy {
13+
dependsOn("publishAllSubprojectsToTempRepository")
14+
outputs.upToDateWhen { false }
15+
doLast {
16+
val outputProperties = Properties()
17+
layout.buildDirectory.file("jreleaser/output.properties").get().asFile.inputStream().use { input ->
18+
outputProperties.load(input)
19+
}
20+
val deploymentId = outputProperties.getProperty("deploymentId")
21+
if (deploymentId != null) {
22+
println("Deployment ID: $deploymentId")
23+
println("Staging Repo URL: https://central.sonatype.com/api/v1/publisher/deployment/$deploymentId/download")
24+
}
25+
}
26+
}
27+
28+
val mavenCentralUsername = providers.gradleProperty("mavenCentralUsername")
29+
val mavenCentralPassword = providers.gradleProperty("mavenCentralPassword")
30+
31+
jreleaser {
32+
deploy {
33+
maven {
34+
mavenCentral {
35+
register("artifacts") {
36+
active = RELEASE
37+
url = "https://central.sonatype.com/api/v1/publisher"
38+
username = mavenCentralUsername
39+
password = mavenCentralPassword
40+
stagingRepository(tempRepoDir.absolutePath)
41+
applyMavenCentralRules = false
42+
sourceJar = false
43+
javadocJar = false
44+
sign = false
45+
checksums = false
46+
verifyPom = false
47+
namespace = "org.junit"
48+
stage = providers.environmentVariable("JRELEASER_MAVENCENTRAL_STAGE")
49+
.map(Stage::of)
50+
.orElse(Stage.UPLOAD)
51+
}
52+
}
53+
}
54+
}
55+
}
56+
57+
subprojects {
58+
pluginManager.withPlugin("rewrite") {
59+
// activeRecipe("org.junit.openrewrite.SanityCheck")
60+
// exclusion("**CollectionUtils.java")
61+
// setExportDatatables(true)
62+
// setFailOnDryRunResults(true)
63+
}
64+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import junitbuild.extensions.capitalized
2+
import junitbuild.release.VerifyBinaryArtifactsAreIdentical
3+
4+
val tempRepoName by extra("temp")
5+
val tempRepoDir by extra {
6+
layout.buildDirectory.dir("repo").get().asFile
7+
}
8+
9+
val clearTempRepoDir by tasks.registering {
10+
val dir = tempRepoDir
11+
doFirst {
12+
dir.deleteRecursively()
13+
}
14+
}
15+
16+
val publishAllSubprojectsToTempRepository by tasks.registering
17+
18+
tasks.register<VerifyBinaryArtifactsAreIdentical>("verifyArtifactsInStagingRepositoryAreReproducible") {
19+
dependsOn(publishAllSubprojectsToTempRepository)
20+
localRepoDir.set(tempRepoDir)
21+
}
22+
23+
subprojects {
24+
pluginManager.withPlugin("maven-publish") {
25+
configure<PublishingExtension> {
26+
repositories {
27+
maven {
28+
name = tempRepoName
29+
url = uri(tempRepoDir)
30+
}
31+
}
32+
}
33+
val publishingTasks = tasks.withType<PublishToMavenRepository>()
34+
.named { it.endsWith("To${tempRepoName.capitalized()}Repository") }
35+
publishingTasks.configureEach {
36+
dependsOn(clearTempRepoDir)
37+
}
38+
publishAllSubprojectsToTempRepository {
39+
dependsOn(publishingTasks)
40+
}
41+
}
42+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package junitbuild.release
2+
3+
import org.gradle.api.DefaultTask
4+
import org.gradle.api.file.DirectoryProperty
5+
import org.gradle.api.provider.Property
6+
import org.gradle.api.provider.ProviderFactory
7+
import org.gradle.api.tasks.Input
8+
import org.gradle.api.tasks.InputDirectory
9+
import org.gradle.api.tasks.Internal
10+
import org.gradle.api.tasks.PathSensitive
11+
import org.gradle.api.tasks.PathSensitivity
12+
import org.gradle.api.tasks.TaskAction
13+
import org.gradle.api.tasks.options.Option
14+
import java.io.File
15+
import java.net.URI
16+
import java.net.http.HttpClient
17+
import java.net.http.HttpRequest
18+
import java.net.http.HttpResponse.BodyHandlers
19+
import javax.inject.Inject
20+
21+
abstract class VerifyBinaryArtifactsAreIdentical @Inject constructor(providers: ProviderFactory): DefaultTask() {
22+
23+
@get:InputDirectory
24+
@get:PathSensitive(PathSensitivity.RELATIVE)
25+
abstract val localRepoDir: DirectoryProperty
26+
27+
@get:Input
28+
abstract val remoteRepoUrl: Property<String>
29+
30+
@get:Internal
31+
abstract val remoteRepoBearerToken: Property<String>
32+
33+
init {
34+
// Depends on contents of remote repository
35+
outputs.upToDateWhen { false }
36+
remoteRepoBearerToken.convention(providers.environmentVariable("MAVEN_CENTRAL_USER_TOKEN"))
37+
}
38+
39+
@Suppress("unused")
40+
@Option(
41+
option = "remote-repo-url",
42+
description = "The URL of the remote repository to compare the local repository against"
43+
)
44+
fun remoteRepo(url: String) {
45+
remoteRepoUrl.set(url)
46+
}
47+
48+
@TaskAction
49+
fun execute() {
50+
val localRootDir = localRepoDir.get().asFile
51+
val baseUrl = remoteRepoUrl.get()
52+
val mismatches = mutableListOf<Mismatch>()
53+
var numChecks = 0
54+
HttpClient.newHttpClient().use { httpClient ->
55+
localRootDir.walk().forEach { file ->
56+
if (file.isFile && file.name.endsWith(".jar.sha512") && !file.name.endsWith("-javadoc.jar.sha512")) {
57+
val localSha512 = file.readText()
58+
val relativeFile = file.relativeTo(localRootDir)
59+
val url = URI.create("${baseUrl}/${relativeFile.path}")
60+
logger.info("Checking {}...", url)
61+
val request = HttpRequest.newBuilder().GET()
62+
.uri(url)
63+
.header("Authorization", "Bearer ${remoteRepoBearerToken.get()}")
64+
.build()
65+
val response = httpClient.send(request, BodyHandlers.ofString())
66+
val remoteSha512 = if (response.statusCode() == 200) response.body() else "status=${response.statusCode()}"
67+
if (localSha512 != remoteSha512) {
68+
mismatches.add(Mismatch(relativeFile, localSha512, remoteSha512))
69+
}
70+
numChecks++
71+
}
72+
}
73+
}
74+
require(numChecks > 0) {
75+
"No files found to compare"
76+
}
77+
require(mismatches.isEmpty()) {
78+
"The following files have different SHA-512 checksums in the local and remote repositories:\n\n" +
79+
mismatches.joinToString("\n\n") {
80+
"""
81+
${it.file}
82+
local: ${it.localSha512}
83+
remote: ${it.remoteSha512}
84+
""".trimIndent()
85+
}
86+
}
87+
}
88+
89+
private data class Mismatch(val file: File, val localSha512: String, val remoteSha512: String)
90+
}

gradle/plugins/settings.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ rootProject.name = "plugins"
2121

2222
include("backward-compatibility")
2323
include("build-parameters")
24-
include("common")
2524
include("code-generator")
25+
include("common")
2626
include("publishing")
27+
include("rewrite")
2728

2829
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")

gradle/rewrite.gradle

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
*
4+
* The OpenSearch Contributors require contributions made to
5+
* this file be licensed under the Apache-2.0 license or a
6+
* compatible open source license.
7+
*/
8+
9+
project.apply plugin: 'org.openrewrite.rewrite'
10+
11+
rewrite {
12+
activeRecipe('org.junit.openrewrite.SanityCheck')
13+
exclusion('**CollectionUtils.java')
14+
setExportDatatables(true)
15+
setFailOnDryRunResults(true)
16+
}
17+
18+
dependencies {
19+
rewrite(platform('org.openrewrite.recipe:rewrite-recipe-bom:3.17.0'))
20+
rewrite('org.openrewrite.recipe:rewrite-migrate-java:3.20.0')
21+
rewrite('org.openrewrite.recipe:rewrite-java-security:3.19.2')
22+
rewrite('org.openrewrite.recipe:rewrite-rewrite:0.14.1')
23+
rewrite('org.openrewrite.recipe:rewrite-static-analysis:2.20.0')
24+
rewrite('org.openrewrite.recipe:rewrite-third-party:0.30.0')
25+
}

0 commit comments

Comments
 (0)