Skip to content

Commit 9b94ad5

Browse files
authored
feat(action): Windows support (#128)
1 parent 5721ba1 commit 9b94ad5

8 files changed

Lines changed: 58 additions & 276 deletions

File tree

.github/workflows/lifecycle.yml

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,10 @@ jobs:
8282
8383
- id: matrices # TODO: build origin matrices dynamically, consider collapsing this into a .py
8484
name: Construct matrices
85-
env:
86-
PR_COMMENT_BODY: ${{ github.event.pull_request.body }}
8785
run: |
8886
import os
8987
import json
90-
import re
88+
import copy
9189
9290
build_matrix = {"include": []}
9391
run_matrix = {"version": []}
@@ -106,17 +104,6 @@ jobs:
106104
if "${{ steps.filter.outcome }}" == "success":
107105
# Filter matrices based on the detected changes
108106
dirs_to_filter = json.loads('${{ steps.filter.outputs.changes }}')
109-
comment_body = os.getenv('PR_COMMENT_BODY')
110-
print("PR-comment:", comment_body)
111-
if comment_body:
112-
pattern = r'Automatic commit: build and run ([0-9\.]*[0-9]*) in ([0-9_]*[0-9]*)'
113-
match = re.search(pattern, comment_body)
114-
if match:
115-
mc_versions = [ match.group(1) ]
116-
dirs_to_filter = [ match.group(2) ]
117-
print('Matched PR body', mc_versions, dirs_to_filter)
118-
else:
119-
print('PR body did not match')
120107
121108
case 'workflow_dispatch':
122109
input_dirs = '${{ github.event.inputs.dirs }}'
@@ -136,10 +123,30 @@ jobs:
136123
build_matrix['include'], run_matrix['version'] = build_data, run_data
137124
138125
if dirs_to_filter:
139-
build_matrix['include'].extend([item for item in build_data if item["dir"] in dirs_to_filter and (item["mc"] in mc_versions or not mc_versions)])
126+
build_matrix['include'].extend([item for item in build_data if item["dir"] in dirs_to_filter and ("mc" not in item or (item["mc"] in mc_versions or not mc_versions))])
140127
mc_versions = mc_versions if mc_versions else [item.get("mc") for item in build_matrix["include"] if "mc" in item]
141128
run_matrix['version'].extend([item for item in run_data if item["mc"] in mc_versions])
142129
130+
for entry in run_matrix['version']:
131+
entry['runner'] = 'ubuntu-latest' #'blacksmith-2vcpu-ubuntu-2204'
132+
entry['cache'] = 'github' #'blacksmith'
133+
entry['xvfb'] = True
134+
135+
additional_runs = []
136+
for item in run_matrix['version']:
137+
#runners = [ ('blacksmith-2vcpu-ubuntu-2204', 'blacksmith') ] # also add non-xvfb runs for ubuntu
138+
runners = [ ('ubuntu-latest', 'github') ] # also add non-xvfb runs for ubuntu
139+
if len(additional_runs) < 9: # add other runners only for the latest version * 3 modloaders * 3 runners
140+
runners += [ ('windows-latest', 'github'), ('macos-latest', 'github') ]
141+
for runner, cache in runners:
142+
entry = copy.deepcopy(item)
143+
entry['runner'] = runner
144+
entry['cache'] = cache
145+
entry['xvfb'] = False
146+
additional_runs.append(entry)
147+
148+
run_matrix['version'] += additional_runs
149+
143150
with open(os.environ['GITHUB_OUTPUT'], 'a') as fh:
144151
print(json.dumps(build_matrix, indent=2))
145152
fh.write(f'build-matrix={json.dumps(build_matrix)}\n')
@@ -164,17 +171,16 @@ jobs:
164171
java: ${{ matrix.java }}
165172

166173
run:
167-
if: github.event_name != 'push'
174+
if: github.event_name != 'push' && fromJSON(needs.matrices.outputs.run-matrix).version[0] != null
168175
name: Run tests
169176
needs:
170177
- matrices
171178
- build
172-
runs-on: ubuntu-latest
179+
runs-on: ${{ matrix.version.runner }}
173180
strategy:
174181
fail-fast: false
175182
matrix:
176183
${{ insert }}: ${{ fromJSON(needs.matrices.outputs.run-matrix) }}
177-
xvfb: [true, false]
178184
steps:
179185
- name: Checkout # TODO: simplify away this step, currently needed for `uses: ./`
180186
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
@@ -191,24 +197,32 @@ jobs:
191197
mkdir -p run/mods
192198
cp mc-runtime-test-*-${{ matrix.version.type }}-release.jar run/mods
193199
194-
- name: Setup Java temurin-${{ matrix.version.java }}
200+
- name: Setup Github Java temurin-${{ matrix.version.java }}
201+
if: matrix.version.cache == 'github'
195202
uses: actions/setup-java@v5
196203
with:
197204
java-version: ${{ matrix.version.java }}
198205
distribution: temurin
199206

207+
- name: Setup Blacksmith Java temurin-${{ matrix.version.java }}
208+
if: matrix.version.cache == 'blacksmith'
209+
uses: useblacksmith/setup-java@4ef812391eff6e9737ba13bf0356d0f702877a64 # v5
210+
with:
211+
java-version: ${{ matrix.version.java }}
212+
distribution: temurin
213+
200214
- name: Run game
201215
timeout-minutes: 3
202216
uses: ./
203217
with:
204-
cache-mc: "github"
218+
cache-mc: ${{ matrix.version.cache }}
205219
mc: ${{ matrix.version.mc }}
206220
mc-runtime-test: none
207221
modloader: ${{ matrix.version.modloader }}
208222
regex: ${{ matrix.version.regex }}
209223
java: ${{ matrix.version.java }}
210-
xvfb: ${{ matrix.xvfb }}
211-
headlessmc-command: ${{ !matrix.xvfb && '-lwjgl' || '' }} --retries 3 --jvm -Djava.awt.headless=true
224+
xvfb: ${{ matrix.version.xvfb }}
225+
headlessmc-command: ${{ !matrix.version.xvfb && '-lwjgl' || '' }} --retries 3 --jvm -Djava.awt.headless=true
212226

213227
release:
214228
if: needs.release-please.outputs.release_created == 'true'

.github/workflows/new-mc-version.yml

Lines changed: 0 additions & 52 deletions
This file was deleted.

26_1/gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ lexforge_version = 62.0.9
88
fabric_version = 0.15.9
99
# Whether to use the headlessmc lwjgl agent or not
1010
hmc.lwjgl=false
11+

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ on:
6161
workflow_dispatch:
6262

6363
env:
64-
java_version: 21
64+
java_version: 25
6565

6666
jobs:
6767
run:
@@ -84,7 +84,7 @@ jobs:
8484
- name: Run MC test client
8585
uses: headlesshq/mc-runtime-test@4.2.0 <!-- x-release-please-version -->
8686
with:
87-
mc: 26.1
87+
mc: 26.1.1
8888
modloader: fabric
8989
regex: .*fabric.*
9090
mc-runtime-test: fabric

action.yml

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ inputs:
1616
description: Regex to match the modloader jar (i.e. .*fabric.*)
1717
required: true
1818
java:
19-
description: Java version to use (8, 16, 17, 21)
19+
description: Java version to use (8, 16, 17, 21, 25)
2020
required: true
2121
dummy-assets:
2222
description: Use dummy assets during testing
@@ -49,7 +49,8 @@ inputs:
4949
runs:
5050
using: composite
5151
steps:
52-
- name: Bootstrap HeadlessMC
52+
- name: Bootstrap HeadlessMc (Linux)
53+
if: runner.os != 'Windows'
5354
run: |
5455
mkdir -p HeadlessMC run/mods
5556
cat <<EOF >> HeadlessMC/config.properties
@@ -61,6 +62,22 @@ runs:
6162
EOF
6263
shell: bash
6364

65+
- name: Bootstrap HeadlessMc (Windows)
66+
if: runner.os == 'Windows'
67+
run: |
68+
New-Item -ItemType Directory -Force -Path HeadlessMC, run/mods | Out-Null
69+
$currentDir = (Get-Location).Path -replace '\\', '\\\\'
70+
$javaPath = "$env:JAVA_HOME\bin\java.exe" -replace '\\', '\\\\'
71+
$config = @(
72+
"hmc.java.versions=$javaPath",
73+
"hmc.gamedir=$currentDir\\run",
74+
"hmc.offline=true",
75+
"hmc.rethrow.launch.exceptions=true",
76+
"hmc.exit.on.failed.command=true"
77+
)
78+
$config | Set-Content -Path HeadlessMC\config.properties -Encoding utf8
79+
shell: pwsh
80+
6481
- if: inputs.dummy-assets == 'true'
6582
name: Configure Dummy Assets
6683
run: echo hmc.assets.dummy=true >> HeadlessMC/config.properties

0 commit comments

Comments
 (0)