Skip to content

Commit

Permalink
Add support for windows-2025 runner images (#65)
Browse files Browse the repository at this point in the history
  • Loading branch information
Vampire committed Jan 2, 2025
1 parent 10b7b9a commit e86ecc6
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 12 deletions.
1 change: 1 addition & 0 deletions .github/workflows/test.main.kts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ import kotlin.math.min
val environments = listOf(
"windows-2019",
"windows-2022",
"windows-2025",
"windows-latest"
)

Expand Down
35 changes: 35 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ jobs:
environment:
- 'windows-2019'
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
distribution:
- user-id: 'invalid'
Expand Down Expand Up @@ -127,6 +128,7 @@ jobs:
environment:
- 'windows-2019'
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
wsl-version:
- '-1'
Expand Down Expand Up @@ -167,6 +169,7 @@ jobs:
environment:
- 'windows-2019'
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
distribution:
- wsl-id: 'Debian'
Expand Down Expand Up @@ -372,6 +375,7 @@ jobs:
environment:
- 'windows-2019'
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
distribution:
- wsl-id: 'Debian'
Expand Down Expand Up @@ -936,6 +940,7 @@ jobs:
environment:
- 'windows-2019'
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
distribution:
- wsl-id: 'Debian'
Expand Down Expand Up @@ -1045,6 +1050,7 @@ jobs:
environment:
- 'windows-2019'
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
distribution:
- wsl-id: 'Debian'
Expand Down Expand Up @@ -1190,6 +1196,7 @@ jobs:
environment:
- 'windows-2019'
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
distribution:
- wsl-id: 'Debian'
Expand Down Expand Up @@ -1326,6 +1333,7 @@ jobs:
matrix:
environment:
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
distribution:
- wsl-id: 'Debian'
Expand Down Expand Up @@ -1407,6 +1415,7 @@ jobs:
matrix:
environment:
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
steps:
- id: 'step-0'
Expand Down Expand Up @@ -1457,6 +1466,7 @@ jobs:
environment:
- 'windows-2019'
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
distribution:
- wsl-id: 'Debian'
Expand Down Expand Up @@ -1538,6 +1548,7 @@ jobs:
environment:
- 'windows-2019'
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
distributions:
- distribution1:
Expand Down Expand Up @@ -1694,6 +1705,7 @@ jobs:
environment:
- 'windows-2019'
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
distribution:
- wsl-id: 'Debian'
Expand Down Expand Up @@ -1760,6 +1772,17 @@ jobs:
user-id: 'Debian'
match-pattern: '*Debian*'
default-absent-tool: 'dos2unix'
- environment: 'windows-2025'
distribution:
wsl-id: 'Debian'
user-id: 'Debian'
match-pattern: '*Debian*'
default-absent-tool: 'dos2unix'
distribution2:
wsl-id: 'Debian'
user-id: 'Debian'
match-pattern: '*Debian*'
default-absent-tool: 'dos2unix'
- environment: 'windows-latest'
distribution:
wsl-id: 'Debian'
Expand Down Expand Up @@ -1794,6 +1817,17 @@ jobs:
user-id: 'Ubuntu-20.04'
match-pattern: '*Ubuntu*20.04*'
default-absent-tool: 'dos2unix'
- environment: 'windows-2025'
distribution:
wsl-id: 'Debian'
user-id: 'Debian'
match-pattern: '*Debian*'
default-absent-tool: 'dos2unix'
distribution2:
wsl-id: 'Ubuntu'
user-id: 'Ubuntu-20.04'
match-pattern: '*Ubuntu*20.04*'
default-absent-tool: 'dos2unix'
- environment: 'windows-latest'
distribution:
wsl-id: 'Debian'
Expand Down Expand Up @@ -1981,6 +2015,7 @@ jobs:
environment:
- 'windows-2019'
- 'windows-2022'
- 'windows-2025'
- 'windows-latest'
distributions:
- incompatibleUbuntu: 'Ubuntu-22.04'
Expand Down
58 changes: 46 additions & 12 deletions src/jsMain/kotlin/net/kautler/github/action/setup_wsl/SetupWsl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,6 @@ val wslHelp = GlobalScope.async(start = LAZY) {
wslOutput("--help")
}

val wslStatus = GlobalScope.async(start = LAZY) {
wslOutput("--status")
}

val distribution by lazy {
val distributionId = getInput("distribution", InputOptions(required = true))

Expand Down Expand Up @@ -371,22 +367,51 @@ suspend fun verifyWindowsEnvironment() {
}

suspend fun installDistribution() {
// on windows-2025 WSL is not installed at all currently, so install it without distribution
// work-around for https://github.com/actions/runner-images/issues/11265
if (wslOutput("--status").contains("is not installed")) {
retry(5) {
exec(
commandLine = "wsl",
args = arrayOf("--status"),
options = ExecOptions(ignoreReturnCode = true)
)
exec(
commandLine = "wsl",
args = arrayOf("--help"),
options = ExecOptions(ignoreReturnCode = true)
)
// do not use executeWslCommand() here as `wsl --help` does not yet work
exec(
commandLine = "wsl",
args = arrayOf("--install", "--no-distribution"),
options = ExecOptions(ignoreReturnCode = true)
).also { check(it != 0) }
exec(
commandLine = "wsl",
args = arrayOf("--install", "--no-distribution"),
options = ExecOptions(ignoreReturnCode = true, input = Buffer.from(""))
).also { check(it != 0) }
exec(
commandLine = "wsl",
args = arrayOf("--install"),
options = ExecOptions(ignoreReturnCode = true, input = Buffer.from(""))
).also { check(it != 0) }
}
waitForWslStatusNotContaining(" ", 5u)
error("just because")
}

executeWslCommand(
wslArguments = arrayOf("--set-default-version", "${wslVersion()}")
)
if (wslVersion() != 1u) {
retry(5) {
retry(10) {
executeWslCommand(
wslArguments = arrayOf("--update")
)
}

(2..30)
.asFlow()
.onEach { delay(1.seconds) }
.onStart { emit(1) }
.map { wslStatus() }
.firstOrNull { !it.contains("WSL is finishing an upgrade...") }
waitForWslStatusNotContaining("WSL is finishing an upgrade...")
}
exec(
commandLine = """"${path.join(distributionDirectory(), distribution.installerFile)}"""",
Expand All @@ -395,6 +420,15 @@ suspend fun installDistribution() {
)
}

suspend fun waitForWslStatusNotContaining(text: String, duration: UInt = 30u) {
(2u..duration)
.asFlow()
.onEach { delay(1.seconds) }
.onStart { emit(1u) }
.map { warning("Querying WSL Status"); wslOutput("--status").also { warning(it) } }
.firstOrNull { !it.contains(text) }
}

suspend fun adjustWslConf() {
exec(
commandLine = "wsl",
Expand Down

0 comments on commit e86ecc6

Please sign in to comment.