Skip to content

Commit 108ded5

Browse files
⚡ Optimize file I/O in update.ps1
Refactored the Dockerfile processing loop in update.ps1 to implement a read-modify-write pattern. Instead of multiple sequential reads and writes for each replacement, the file is now read once into a variable, all replacements are performed in memory, and the final content is written back once. Additionally, optimized directory name retrieval by using the existing FileInfo object's Directory property instead of calling Get-Item. This change reduces the number of file I/O operations from up to 8 reads and 8 writes down to 1 read and 1 write per file, significantly improving the performance of the update script. Co-authored-by: keeganwitt <[email protected]>
1 parent ad71465 commit 108ded5

1 file changed

Lines changed: 24 additions & 21 deletions

File tree

update.ps1

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -35,35 +35,38 @@ Write-Host "Graal 25 AMD64 hash is $graal25amd64Hash"
3535
Write-Host "Graal 25 AARCH64 hash is $graal25aarch64Hash"
3636

3737
dir -Recurse -Filter Dockerfile | ForEach-Object {
38-
(Get-Content -Path $_.FullName) -replace "ENV GRADLE_VERSION=.+$", "ENV GRADLE_VERSION=${gradleVersion}" | Set-Content $_.FullName
39-
(Get-Content -Path $_.FullName) -replace "GRADLE_DOWNLOAD_SHA256=.+$", "GRADLE_DOWNLOAD_SHA256=${sha}" | Set-Content $_.FullName
40-
if ($((Get-Item $_.FullName).Directory.Name) -eq "jdk17-noble-graal" -Or $((Get-Item $_.FullName).Directory.Name) -eq "jdk17-jammy-graal")
38+
$content = Get-Content -Path $_.FullName
39+
$content = $content -replace "ENV GRADLE_VERSION=.+$", "ENV GRADLE_VERSION=${gradleVersion}"
40+
$content = $content -replace "GRADLE_DOWNLOAD_SHA256=.+$", "GRADLE_DOWNLOAD_SHA256=${sha}"
41+
$dirName = $_.Directory.Name
42+
if ($dirName -eq "jdk17-noble-graal" -Or $dirName -eq "jdk17-jammy-graal")
4143
{
42-
(Get-Content -Path $_.FullName) -replace "JAVA_VERSION=[^ ]+", "JAVA_VERSION=${graal17Version}" | Set-Content $_.FullName
43-
(Get-Content -Path $_.FullName) -replace "GRAALVM_AMD64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AMD64_DOWNLOAD_SHA256=${graal17amd64Hash}" | Set-Content $_.FullName
44-
(Get-Content -Path $_.FullName) -replace "GRAALVM_AARCH64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AARCH64_DOWNLOAD_SHA256=${graal17aarch64Hash}" | Set-Content $_.FullName
44+
$content = $content -replace "JAVA_VERSION=[^ ]+", "JAVA_VERSION=${graal17Version}"
45+
$content = $content -replace "GRAALVM_AMD64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AMD64_DOWNLOAD_SHA256=${graal17amd64Hash}"
46+
$content = $content -replace "GRAALVM_AARCH64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AARCH64_DOWNLOAD_SHA256=${graal17aarch64Hash}"
4547
}
46-
elseif ($((Get-Item $_.FullName).Directory.Name) -eq "jdk21-noble-graal" -Or $((Get-Item $_.FullName).Directory.Name) -eq "jdk21-jammy-graal")
48+
elseif ($dirName -eq "jdk21-noble-graal" -Or $dirName -eq "jdk21-jammy-graal")
4749
{
48-
(Get-Content -Path $_.FullName) -replace "JAVA_VERSION=[^ ]+", "JAVA_VERSION=${graal21Version}" | Set-Content $_.FullName
49-
(Get-Content -Path $_.FullName) -replace "GRAALVM_AMD64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AMD64_DOWNLOAD_SHA256=${graal21amd64Hash}" | Set-Content $_.FullName
50-
(Get-Content -Path $_.FullName) -replace "GRAALVM_AARCH64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AARCH64_DOWNLOAD_SHA256=${graal21aarch64Hash}" | Set-Content $_.FullName
50+
$content = $content -replace "JAVA_VERSION=[^ ]+", "JAVA_VERSION=${graal21Version}"
51+
$content = $content -replace "GRAALVM_AMD64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AMD64_DOWNLOAD_SHA256=${graal21amd64Hash}"
52+
$content = $content -replace "GRAALVM_AARCH64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AARCH64_DOWNLOAD_SHA256=${graal21aarch64Hash}"
5153
}
52-
elseif ($((Get-Item $_.FullName).Directory.Name) -eq "jdk25-noble-graal")
54+
elseif ($dirName -eq "jdk25-noble-graal")
5355
{
54-
(Get-Content -Path $_.FullName) -replace "JAVA_VERSION=[^ ]+", "JAVA_VERSION=${graal25Version}" | Set-Content $_.FullName
55-
(Get-Content -Path $_.FullName) -replace "GRAALVM_AMD64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AMD64_DOWNLOAD_SHA256=${graal25amd64Hash}" | Set-Content $_.FullName
56-
(Get-Content -Path $_.FullName) -replace "GRAALVM_AARCH64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AARCH64_DOWNLOAD_SHA256=${graal25aarch64Hash}" | Set-Content $_.FullName
56+
$content = $content -replace "JAVA_VERSION=[^ ]+", "JAVA_VERSION=${graal25Version}"
57+
$content = $content -replace "GRAALVM_AMD64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AMD64_DOWNLOAD_SHA256=${graal25amd64Hash}"
58+
$content = $content -replace "GRAALVM_AARCH64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AARCH64_DOWNLOAD_SHA256=${graal25aarch64Hash}"
5759
}
58-
elseif ($((Get-Item $_.FullName).Directory.Name) -eq "jdk-lts-and-current-graal")
60+
elseif ($dirName -eq "jdk-lts-and-current-graal")
5961
{
60-
(Get-Content -Path $_.FullName) -replace "JAVA_LTS_VERSION=[^ ]+", "JAVA_LTS_VERSION=${graal25Version}" | Set-Content $_.FullName
61-
(Get-Content -Path $_.FullName) -replace "GRAALVM_LTS_AMD64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_LTS_AMD64_DOWNLOAD_SHA256=${graal25amd64Hash}" | Set-Content $_.FullName
62-
(Get-Content -Path $_.FullName) -replace "GRAALVM_LTS_AARCH64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_LTS_AARCH64_DOWNLOAD_SHA256=${graal25aarch64Hash}" | Set-Content $_.FullName
63-
(Get-Content -Path $_.FullName) -replace "JAVA_CURRENT_VERSION=[^ ]+", "JAVA_CURRENT_VERSION=${graal25Version}" | Set-Content $_.FullName
64-
(Get-Content -Path $_.FullName) -replace "GRAALVM_CURRENT_AMD64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_CURRENT_AMD64_DOWNLOAD_SHA256=${graal25amd64Hash}" | Set-Content $_.FullName
65-
(Get-Content -Path $_.FullName) -replace "GRAALVM_CURRENT_AARCH64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_CURRENT_AARCH64_DOWNLOAD_SHA256=${graal25aarch64Hash}" | Set-Content $_.FullName
62+
$content = $content -replace "JAVA_LTS_VERSION=[^ ]+", "JAVA_LTS_VERSION=${graal25Version}"
63+
$content = $content -replace "GRAALVM_LTS_AMD64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_LTS_AMD64_DOWNLOAD_SHA256=${graal25amd64Hash}"
64+
$content = $content -replace "GRAALVM_LTS_AARCH64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_LTS_AARCH64_DOWNLOAD_SHA256=${graal25aarch64Hash}"
65+
$content = $content -replace "JAVA_CURRENT_VERSION=[^ ]+", "JAVA_CURRENT_VERSION=${graal25Version}"
66+
$content = $content -replace "GRAALVM_CURRENT_AMD64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_CURRENT_AMD64_DOWNLOAD_SHA256=${graal25amd64Hash}"
67+
$content = $content -replace "GRAALVM_CURRENT_AARCH64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_CURRENT_AARCH64_DOWNLOAD_SHA256=${graal25aarch64Hash}"
6668
}
69+
$content | Set-Content $_.FullName
6770
}
6871

6972
(Get-Content -Path .github/workflows/ci.yaml) -replace "expectedGradleVersion: .+", "expectedGradleVersion: '${gradleVersion}'" | Set-Content .github/workflows/ci.yaml

0 commit comments

Comments
 (0)