···
+
runs-on: ${{ matrix.os }}
+
uses: actions/checkout@v4
+
- name: Restore opam cache
+
uses: actions/cache/restore@v4
+
key: ${{ runner.os }}-opam
+
if: steps.cache-opam.outputs.cache-hit != 'true'
+
Invoke-Expression "& { $(Invoke-RestMethod https://raw.githubusercontent.com/kit-ty-kate/opam/windows-installer.debug/shell/install.ps1) } -OpamBinDir 'D:\opam\bin' -NoSetPath -NoAdmin"
+
if: steps.cache-opam.outputs.cache-hit != 'true'
+
run: opam init --yes --no-setup .
+
- name: Save opam cache
+
if: steps.cache-opam.outputs.cache-hit != 'true'
+
uses: actions/cache/save@v4
+
key: ${{ steps.cache-opam.outputs.cache-primary-key }}
+
- name: Add opam to PATH
+
"D:\opam\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
+
- name: Get changed files
+
uses: tj-actions/changed-files@v44
+
- name: List all changed packages
+
ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
+
Foreach ($file in ($env:ALL_CHANGED_FILES).Split(" ")) {
+
switch -Regex ($file) {
+
'^packages\\[^\\]*\\([^\\]*)\\.*' { $output += "$($matches[1])"; Break }
+
default { Write-Host "$file skipped"; Break }
+
$outputJson = $output | ConvertTo-Json
+
"data<<@@@" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
+
$outputJson | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
+
"@@@" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
+
- name: Install packages
+
ALL_CHANGED_PACKAGES: ${{ steps.changed-packages.outputs.data }}
+
$pkgs = $env:ALL_CHANGED_PACKAGES | ConvertFrom-Json
+
Foreach ($pkg in $pkgs) {
+
opam install --confirm-level=unsafe-yes "$pkg"
+
switch ($LASTEXITCODE) {
+
20 { Write-Host "$pkg is not installable. Skip."; Break }
+
31 { Write-Host "$pkg failed to build."; $failed = $true; Break }
+
default { throw "Unexpected error $_" }