Skip to content

Commit c6a5990

Browse files
committed
Restructure project to subprojects and implement proper modular setups and tests.
1 parent 7b1a146 commit c6a5990

File tree

106 files changed

+1585
-1606
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+1585
-1606
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import groovy.json.JsonSlurper
2+
import net.steppschuh.markdowngenerator.table.Table
3+
4+
import java.nio.file.Files
5+
import java.nio.file.Path
6+
import java.math.RoundingMode
7+
8+
@GrabResolver(name='jitpack.io', root='https://jitpack.io/')
9+
@GrabResolver(name = 'central', root='https://repo1.maven.org/maven2/')
10+
@Grapes([
11+
@Grab('org.apache.groovy:groovy-json:4.0.13'),
12+
@Grab('com.github.Steppschuh:Java-Markdown-Generator:1.3.2')
13+
])
14+
15+
final versions = [] as SortedSet
16+
final javas = [:] as TreeMap
17+
final results = [:] as TreeMap
18+
19+
final resultsPath = Path.of('build/test_artifacts')
20+
for (def dir : Files.list(Path.of('build/test_artifacts'))) {
21+
def dirName = dir.fileName.toString()
22+
def file = dir.resolve('jmh_results.json')
23+
if (!dirName.startsWith('jmh-') || !Files.exists(file))
24+
continue
25+
(javaName,javaVersion) = dirName.substring('jmh-'.length()).split('-')
26+
javas.computeIfAbsent(javaName, { [] }).add(javaVersion)
27+
versions.add(javaVersion)
28+
29+
def json = new JsonSlurper().parse(file.toFile())
30+
for (def bench : json) {
31+
def byJava = results.computeIfAbsent(bench.benchmark, { [:] })
32+
def byVersion = byJava.computeIfAbsent(javaName, { [:] })
33+
34+
def result = bench.primaryMetric.score.setScale(3, RoundingMode.CEILING)
35+
if (!bench.primaryMetric.scoreError.equals('NaN'))
36+
result += ' ± ' + bench.primaryMetric.scoreError.setScale(3, RoundingMode.CEILING)
37+
//result += bench.primaryMetric.scoreUnit
38+
39+
byVersion.put(javaVersion, result)
40+
}
41+
}
42+
def output = ""
43+
results.forEach { bench, byJava ->
44+
final table = new Table.Builder()
45+
.withAlignments(Table.ALIGN_RIGHT, Table.ALIGN_RIGHT)
46+
.addRow((['Vendor'] + versions).toArray())
47+
48+
javas.forEach { javaName, javaVersions ->
49+
def row = [javaName]
50+
if (!byJava.containsKey(javaName)) {
51+
versions.forEach { javaVersion ->
52+
row.add(javaVersions.contains(javaVersion) ? "MISSING" : "")
53+
}
54+
} else {
55+
def byVersion = byJava.get(javaName)
56+
versions.forEach { javaVersion ->
57+
if (javaVersions.contains(javaVersion)) {
58+
row.add(byVersion.containsKey(javaVersion) ? byVersion.get(javaVersion) : "MISSING")
59+
} else {
60+
row.add("")
61+
}
62+
}
63+
}
64+
table.addRow(row.toArray())
65+
}
66+
67+
output += '### `' + bench + '` results\n' +
68+
table.build() + '\n' +
69+
'\n'
70+
}
71+
72+
new File('jmh_results.md').text = output
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
import groovy.xml.DOMBuilder
2+
import groovy.xml.dom.DOMCategory
3+
4+
import java.nio.file.Files
5+
import java.nio.file.Path
6+
import java.math.RoundingMode
7+
8+
@GrabResolver(name='jitpack.io', root='https://jitpack.io/')
9+
@GrabResolver(name = 'central', root='https://repo1.maven.org/maven2/')
10+
@Grapes([
11+
//@Grab('org.codehaus.groovy:groovy-xml:3.0.19')
12+
@Grab('org.apache.groovy:groovy-json:4.0.13')
13+
])
14+
15+
final javas = [:] as TreeMap
16+
final results = [:] as TreeMap
17+
18+
for (def dir : Files.list(Path.of('build/test_artifacts'))) {
19+
def javaName = dir.fileName.toString()
20+
if (!javaName.startsWith('test-results-'))
21+
continue
22+
23+
(javaName,javaVersion) = javaName.substring('test-results-'.length()).split('-')
24+
javas.computeIfAbsent(javaName, { [] as SortedSet }).add(javaVersion)
25+
26+
for (def file : Files.list(dir)) {
27+
def fileName = file.fileName.toString()
28+
if (!fileName.startsWith('TEST-') || !fileName.endsWith('.xml'))
29+
continue
30+
31+
def data = DOMBuilder.parse(new StringReader(file.toFile().text)).documentElement
32+
use(DOMCategory) {
33+
def byTest = results.computeIfAbsent(data['@name'], { [:] })
34+
for (def testcase : data.testcase) {
35+
def byJava = byTest.computeIfAbsent(testcase['@name'], { [:] })
36+
def byVersion = byJava.computeIfAbsent(javaName, { [:] })
37+
byVersion.put(javaVersion, testcase.failure.isEmpty())
38+
}
39+
}
40+
}
41+
}
42+
43+
def output = new StringBuilder("<html><body>")
44+
output.append("""
45+
<html>
46+
<style>
47+
.tooltip-text {
48+
visibility: hidden;
49+
position: absolute;
50+
z-index: 1;
51+
width: 100px;
52+
color: white;
53+
font-size: 12px;
54+
background-color: #192733;
55+
border-radius: 10px;
56+
padding: 10px 15px 10px 15px;
57+
top: -40px;
58+
left: -50%;
59+
}
60+
61+
.hover-text:hover .tooltip-text {
62+
visibility: visible;
63+
}
64+
65+
.success {
66+
background-color: #008000;
67+
}
68+
69+
.failure {
70+
background-color: #b60808;
71+
}
72+
73+
.hover-text {
74+
font-size: 16px;
75+
position: relative;
76+
display: inline;
77+
font-family: monospace;
78+
text-align: center;
79+
}
80+
81+
table, th, td {
82+
border: 1px solid black;
83+
border-collapse: collapse;
84+
}
85+
86+
th, td {
87+
padding-left: 3px;
88+
padding-right: 3px;
89+
}
90+
91+
.result {
92+
font-size: 0px;
93+
}
94+
</style>
95+
<body>
96+
""")
97+
results.forEach{ suite, byTest ->
98+
output.append("<h1>${suite}</h1>\n")
99+
output.append("<table>\n")
100+
output.append(" <thead>\n")
101+
output.append(" <th>Test</th>\n")
102+
javas.keySet().forEach{ javaName ->
103+
output.append(" <th>${javaName}</th>\n")
104+
}
105+
output.append(" </thead>\n")
106+
output.append(" <tbody>\n")
107+
byTest.forEach{ testName, byJava ->
108+
output.append(" <tr>\n")
109+
output.append(" <td>${testName}</td>\n")
110+
javas.forEach{ javaName, versions ->
111+
output.append(" <td class=\"result\">\n")
112+
def byVersion = byJava.get(javaName)
113+
versions.forEach { ver ->
114+
if (byVersion.containsKey(ver) && byVersion.get(ver)) {
115+
output.append(" <span class=\"hover-text success\">O<span class=\"tooltip-text success\" id=\"failure\">${javaName} v${ver}</span></span>\n")
116+
} else {
117+
output.append(" <span class=\"hover-text failure\">X<span class=\"tooltip-text failure\">${javaName} v${ver}</span></span>\n")
118+
}
119+
}
120+
output.append(" </td>\n")
121+
}
122+
output.append(" </tr>\n")
123+
}
124+
output.append(" </tbody>\n")
125+
output.append("</table>\n")
126+
127+
}
128+
output += "</body></html>"
129+
130+
131+
new File('test_results.html').text = output

.github/workflows/publish.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: Publish
2+
3+
on:
4+
push:
5+
branches: [ "master" ]
6+
7+
permissions:
8+
contents: read
9+
10+
jobs:
11+
build:
12+
uses: MinecraftForge/SharedActions/.github/workflows/gradle.yml@main
13+
with:
14+
java: 17
15+
gradle_tasks: "publish"
16+
artifact_name: "modlauncher"
17+
secrets:
18+
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
19+
PROMOTE_ARTIFACT_WEBHOOK: ${{ secrets.PROMOTE_ARTIFACT_WEBHOOK }}
20+
PROMOTE_ARTIFACT_USERNAME: ${{ secrets.PROMOTE_ARTIFACT_USERNAME }}
21+
PROMOTE_ARTIFACT_PASSWORD: ${{ secrets.PROMOTE_ARTIFACT_PASSWORD }}
22+
MAVEN_USER: ${{ secrets.MAVEN_USER }}
23+
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}

.github/workflows/test_jvms.yml

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
name: Test JVMs and publish Jmh results
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
workflow_dispatch:
8+
pull_request:
9+
types: [opened, synchronize]
10+
11+
jobs:
12+
testjdks:
13+
if: ${{ env.ACT }} # Only run when testing locally
14+
name: Test JDK ${{ matrix.jdk }} version ${{ matrix.jvm_version }}
15+
runs-on: ubuntu-latest
16+
strategy:
17+
max-parallel: 10
18+
fail-fast: false
19+
matrix:
20+
jvm_version: [ 16, 17, 18, 19, 20, 21 ]
21+
jdk: [ Adoptium, Amazon, Azul, BellSoft, Graal_VM, IBM, Oracle, Microsoft, SAP ]
22+
exclude: # Cases where the Distro doesn't have a version
23+
- jdk: Graal_VM
24+
jvm_version: 18
25+
- jdk: IBM
26+
jvm_version: 21
27+
- jdk: SAP
28+
jvm_version: 21
29+
- jdk: Microsoft
30+
jvm_version: 18
31+
- jdk: Microsoft
32+
jvm_version: 19
33+
- jdk: Microsoft
34+
jvm_version: 20
35+
steps:
36+
- name: Checkout repository
37+
uses: actions/checkout@main
38+
with:
39+
fetch-depth: 0
40+
41+
- name: Setup Gradle
42+
uses: gradle/gradle-build-action@v2
43+
with:
44+
cache-disabled: true
45+
generate-job-summary: false
46+
47+
- name: Make gradlew executable
48+
run: chmod +x ./gradlew
49+
50+
- name: Run Jmh
51+
run: ./gradlew --console=plain --continue :ml-jmh:jmh -PjavaVendor=${{ matrix.jdk }} -PjavaVersion=${{ matrix.jvm_version }}
52+
53+
- name: Upload JMH Results
54+
uses: actions/upload-artifact@v3
55+
with:
56+
name: jmh-${{ matrix.jdk }}-${{ matrix.jvm_version }}
57+
path: build/jmh_results.json
58+
59+
# It's faster to just run the tests locally.
60+
#- name: Run Tests
61+
# run: ./gradlew --console=plain --continue :ml-test:test -PjavaVendor=${{ matrix.jdk }} -PjavaVersion=${{ matrix.jvm_version }}
62+
#
63+
#- name: Upload Test Reports
64+
# uses: actions/upload-artifact@v3
65+
# with:
66+
# name: test-reports-${{ matrix.jdk }}-${{ matrix.jvm_version }}
67+
# path: build/reports/
68+
#
69+
#- name: Upload Test Results
70+
# uses: actions/upload-artifact@v3
71+
# with:
72+
# name: test-results-${{ matrix.jdk }}-${{ matrix.jvm_version }}
73+
# path: build/test-results/
74+
75+
upload_results:
76+
name: Upload Jmh results
77+
needs: [testjdks]
78+
runs-on: ubuntu-latest
79+
if: ${{ env.ACT }} # Only run when testing locally
80+
steps:
81+
- name: Setup Groovy
82+
uses: wtfjoke/setup-groovy@v1
83+
with:
84+
groovy-version: '4.x'
85+
86+
- name: Checkout repository
87+
uses: actions/checkout@main
88+
89+
- name: Downloads results
90+
uses: actions/download-artifact@v3
91+
id: download
92+
with:
93+
path: build/test_artifacts
94+
95+
- name: Collect JMH results
96+
run: groovy .github/workflows/aggregate-jmh-results.groovy
97+
98+
#- name: Collect JUnit results
99+
# run: groovy .github/workflows/aggregate-junit-tests.groovy
100+
101+
- name: Upload Final Results
102+
uses: actions/upload-artifact@v3
103+
with:
104+
name: aggregate-results
105+
path: jmh_results.md
106+
#path: |
107+
# jmh_results.md
108+
# test_results.html
109+

0 commit comments

Comments
 (0)