Skip to content

Split workflow

Split workflow #48

Workflow file for this run

name: Windows CI
on:
push:
branches:
- master
pull_request:
env:
OPAMROOT: D:\opamroot
OPAMSOLVERTIMEOUT: 120
MSYS: winsymlinks:native
jobs:
analyse:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.matrix.outputs.result }}
steps:
- name: Checkout tree
uses: actions/checkout@v6
with:
fetch-depth: 2
- name: Get changed files
id: changed-files
if: github.event_name != 'push'
uses: tj-actions/changed-files@v47
- name: Compute build matrix
id: matrix
uses: actions/github-script@v7
with:

Check failure on line 30 in .github/workflows/windows.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/windows.yml

Invalid workflow file

You have an error in your yaml syntax on line 30
script: |
let changed_files = '${{ steps.changed-files.outputs.all_changed_files }}';
let packages = [];
for (file of changed_files.split(' ')) {
console.log("Changed: " + file);
const package = file.match(/^packages\/[^/]+\/([^/]+)/);
if (package)
packages.push(package[1]);
}
return {build_env: ['cygwin', 'msys2']};
build:
name: "target/host: x86_64-w64-mingw32, build: ${{ matrix.build_env }}"
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.analyse.outputs.matrix) }}
runs-on: windows-latest
needs: analyse
steps:
- name: Checkout tree
uses: actions/checkout@v6
with:
fetch-depth: 2
- name: Download install.ps1
run: |
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
(New-Object System.Net.WebClient).DownloadFile("https://raw.githubusercontent.com/ocaml/opam/master/shell/install.ps1", ".\install.ps1")
- name: Restore opam cache
id: cache-opam
uses: actions/cache/restore@v4
with:
path: |
D:\opam\bin
D:\opamroot
key: ${{ runner.os }}-${{ matrix.build_env }}-opam-${{ hashFiles('install.ps1') }}
- name: Add MSYS2 to PATH and install prerequisites
if: matrix.build_env == 'msys2'
run: |
"C:\msys64" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
C:\msys64\usr\bin\pacman.exe --noconfirm -Syuu # Core update (in case any core packages are outdated)
C:\msys64\usr\bin\pacman.exe --noconfirm -Syuu m4 make mingw-w64-i686-gcc mingw-w64-x86_64-gcc rsync unzip
- name: Install opam
if: steps.cache-opam.outputs.cache-hit != 'true'
run: |
Invoke-Expression "& ./install.ps1 -OpamBinDir 'D:\opam\bin'"
- name: Add opam to PATH
run: |
D:\opam\bin\opam --version
"D:\opam\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Init opam
if: steps.cache-opam.outputs.cache-hit != 'true'
run: opam init --yes --no-setup ${{ matrix.build_env == 'msys2' && '--cygwin-local-install' || '' }} .
- name: Restrict testing to available compilers
if: steps.cache-opam.outputs.cache-hit != 'true'
# TODO Amend this lowerbound as older compiler packages are updated
run: opam switch set-invariant --formula "`"ocaml`" {>= `"4.13`"}"
- name: Save opam cache
if: steps.cache-opam.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: |
D:\opam\bin
D:\opamroot
key: ${{ steps.cache-opam.outputs.cache-primary-key }}
- name: Print version and configuration information
run: |
opam --version
opam exec -- ocaml -version
opam exec -- ocamlopt -config
opam var
- name: Install packages
env:
ALL_CHANGED_PACKAGES: ${{ steps.changed-packages.outputs.data }}
if: github.event_name != 'push'
run: |
$failed = $false
opam update
Foreach ($pkg in '${{ matrix.packages }}' -split ' ') {
Write-Host "::group::Testing `e[1;34m$pkg`e[0m"
opam install --color=always --confirm-level=unsafe-yes "$pkg"
Write-Host "::endgroup::"
switch ($LASTEXITCODE) {
0 { Write-Host "`e[1;32m$pkg installed successfully`e[0m."; Break }
5 { Write-Host "$pkg is not installable. `e[1;33mSkip`e[0m."; Break } # TODO: Remove when https://github.com/ocaml/opam/issues/6017 is fixed
20 { Write-Host "$pkg is not installable. `e[1;33mSkip`e[0m."; Break }
31 { Write-Host "`e[1;31m$pkg failed to build`e[0m."; $failed = $true; Break }
default { throw "Unexpected error $_" }
}
Write-Host
}
if ($failed) {
throw "One or more packages failed to build"
}
Exit