diff --git a/Dockerfile b/Dockerfile index 128be18f..ed3db106 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM ocaml/opam:debian-10-ocaml-4.12@sha256:80e2b0337fe1c44d2f95ac35589b0a2eed4c65d8f12c3e33c12262065106c0c1 AS build -RUN sudo apt-get update && sudo apt-get install capnproto graphviz m4 pkg-config libsqlite3-dev libgmp-dev libssl-dev libffi-dev -y --no-install-recommends +RUN sudo apt-get update && sudo apt-get install libev-dev capnproto graphviz m4 pkg-config libsqlite3-dev libgmp-dev libssl-dev libffi-dev -y --no-install-recommends RUN cd ~/opam-repository && git pull origin -q master && git reset --hard 1a8b75438a8a47be909af0e6c0768c25384697c6 && opam update COPY --chown=opam \ ocurrent/current.opam \ @@ -31,7 +31,7 @@ ADD --chown=opam . . RUN opam config exec -- dune build ./src/base_images.exe FROM debian:10 -RUN apt-get update && apt-get install curl git graphviz libsqlite3-dev ca-certificates netbase gnupg2 -y --no-install-recommends +RUN apt-get update && apt-get install libev4 curl git graphviz libsqlite3-dev ca-certificates netbase gnupg2 -y --no-install-recommends RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - RUN echo 'deb [arch=amd64] https://download.docker.com/linux/debian buster stable' >> /etc/apt/sources.list RUN apt-get update && apt-get install docker-ce -y --no-install-recommends diff --git a/README.md b/README.md index 89ae862c..5833f569 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ This is an [OCurrent][] pipeline that builds Docker images for OCaml, for -various combinations of Linux distribution, OCaml version and architecture. +various combinations of Linux distribution, Windows version, OCaml version +and architecture. The resulting images can be run as e.g. diff --git a/base-images.opam b/base-images.opam index 7b046184..abcdfaa4 100644 --- a/base-images.opam +++ b/base-images.opam @@ -8,6 +8,7 @@ bug-reports: "https://github.com/ocurrent/docker-base-images/issues" depends: [ "dune" {>= "2.5"} "ocaml" {>= "4.12"} + "conf-libev" {os != "win32"} "prometheus-app" {>= "1.0"} "ppx_sexp_conv" "ppx_deriving_yojson" diff --git a/builds.expected b/builds.expected index ee4c32fc..c4ec07c8 100644 --- a/builds.expected +++ b/builds.expected @@ -7482,3 +7482,1221 @@ ocurrent/opam-staging:ubuntu-21.04-ocaml-4.13-ppc64le, ocurrent/opam-staging:ubu COPY [ "Dockerfile", "/Dockerfile.ocaml" ] ocurrent/opam-staging:ubuntu-21.04-ocaml-4.14-ppc64le, ocurrent/opam-staging:ubuntu-21.04-ocaml-4.14-arm64, ocurrent/opam-staging:ubuntu-21.04-ocaml-4.14-amd64 -> ocaml/opam:ubuntu-21.04-ocaml-4.14 ocurrent/opam-staging:ubuntu-21.04-ocaml-4.14-ppc64le, ocurrent/opam-staging:ubuntu-21.04-ocaml-4.14-arm64, ocurrent/opam-staging:ubuntu-21.04-ocaml-4.14-amd64 -> ocaml/opam:ubuntu-ocaml-4.14 +windows-mingw +windows-mingw-1809/amd64 + # escape=` + FROM mcr.microsoft.com/windows:1809 as winget-builder + USER ContainerAdministrator + ADD [ "https://github.com/microsoft/winget-cli/releases/latest/download/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle", "C:\\TEMP\\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip" ] + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip -DestinationPath C:\TEMP\winget-cli -Force" + RUN ren C:\TEMP\winget-cli\AppInstaller_x64.msix AppInstaller_x64.zip + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\winget-cli\AppInstaller_x64.zip -DestinationPath C:\TEMP\winget-cli\ -Force" + RUN mkdir "C:\Program Files\winget-cli" && ` + move "C:\TEMP\winget-cli\\AppInstallerCLI.exe" "C:\Program Files\winget-cli\winget.exe" && ` + move "C:\TEMP\winget-cli\\resources.pri" "C:\Program Files\winget-cli\" + # escape=` + # Autogenerated by OCaml-Dockerfile scripts + FROM mcr.microsoft.com/windows:1809 + LABEL distro_style="windows" + USER ContainerAdministrator + ADD [ "https://aka.ms/vs/16/release/vc_redist.x64.exe", "C:\\TEMP\\" ] + RUN C:\TEMP\vc_redist.x64.exe /install /passive /norestart /log C:\TEMP\vc_redist.log + ENV CYGWIN="winsymlinks:native" + ADD [ "https://www.cygwin.com/setup-x86_64.exe", "C:\\cygwin-setup-x86_64.exe" ] + RUN mkdir C:\cygwin64\lib\cygsympathy && mkdir C:\cygwin64\etc\postinstall + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.cmd", "C:\\cygwin64\\lib\\cygsympathy\\" ] + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.sh", "C:\\cygwin64\\lib\\cygsympathy\\cygsympathy" ] + RUN mklink C:\cygwin64\etc\postinstall\zp_zcygsympathy.sh C:\cygwin64\lib\cygsympathy\cygsympathy + RUN C:\cygwin-setup-x86_64.exe --quiet-mode --no-shortcuts --no-startmenu --no-desktop --only-site --local-package-dir C:\TEMP\cache --root C:\cygwin64 --site http://mirrors.kernel.org/sourceware/cygwin/ --packages curl,diffutils,git,m4,make,mingw64-x86_64-binutils=2.35.2-1,mingw64-x86_64-gcc-core,mingw64-x86_64-gcc-g++,patch,rsync,unzip,vim + ADD [ "https://github.com/metastack/msvs-tools/archive/0.4.1.tar.gz", "C:\\TEMP\\msvs-tools.tar.gz" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/msvs-tools.tar.gz && cp msvs-tools-0.4.1/msvs-detect msvs-tools-0.4.1/msvs-promote-path /bin" + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\cygwin64\bin;%c" + RUN awk -i inplace "/(^#)|(^$)/{print;next}{$4=""noacl,""$4; print}" C:\cygwin64\etc\fstab + WORKDIR C:\cygwin64\home\opam + ADD [ "https://github.com/fdopen/opam-repository-mingw/releases/download/0.0.0.2/opam64.tar.xz", "C:\\TEMP\\" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/opam64.tar.xz && ./opam64/install.sh --prefix=/usr && rm -rf opam64 opam64.tar.xz" + COPY --from=winget-builder [ "C:\\Program Files\\winget-cli", "C:\\Program Files\\winget-cli" ] + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\Program Files\winget-cli;%c" + RUN powershell -Command "winget settings ; ` + $path=""""${Env:LocalAppData}\Microsoft\WinGet\Settings\settings.json"""" ; ` + $json=(Get-Content -Encoding ascii $path | Select -SkipLast 1) -Join """"`n"""" ; ` + $json=($json, ' """"telemetry"""": { """"disable"""": true },', """"}"""") -Join """"`n"""" ; ` + $json | Set-Content -Encoding ascii -NoNewLine $path ; ` + winget settings" + ENV HOME="C:\cygwin64\home\opam" + RUN C:\cygwin64\bin\bash.exe --login -c "git config --global user.email 'docker@example.com' && git config --global user.name 'Docker' && git config --system core.longpaths true" + RUN powershell -Command "Remove-Item 'C:\TEMP' -Recurse" + COPY [ ".", "C:\\cygwin64\\home\\opam\\opam-repository" ] + ENV OPAMROOT="C:\opam\.opam" + RUN opam init -k local -a "C:\cygwin64\home\opam\opam-repository" --bare --disable-sandboxing + RUN C:\cygwin64\bin\bash.exe --login -c "rm -rf /cygdrive/c/opam/.opam/repo/default/.git" + COPY [ "Dockerfile", "/Dockerfile.opam" ] +4.12.0/amd64 + FROM ocurrent/opam-staging:windows-mingw-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.12 --packages=ocaml-variants.4.12.0+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.12.0+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +windows-mingw-1909/amd64 + # escape=` + FROM mcr.microsoft.com/windows:1909 as winget-builder + USER ContainerAdministrator + ADD [ "https://github.com/microsoft/winget-cli/releases/latest/download/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle", "C:\\TEMP\\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip" ] + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip -DestinationPath C:\TEMP\winget-cli -Force" + RUN ren C:\TEMP\winget-cli\AppInstaller_x64.msix AppInstaller_x64.zip + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\winget-cli\AppInstaller_x64.zip -DestinationPath C:\TEMP\winget-cli\ -Force" + RUN mkdir "C:\Program Files\winget-cli" && ` + move "C:\TEMP\winget-cli\\AppInstallerCLI.exe" "C:\Program Files\winget-cli\winget.exe" && ` + move "C:\TEMP\winget-cli\\resources.pri" "C:\Program Files\winget-cli\" + # escape=` + # Autogenerated by OCaml-Dockerfile scripts + FROM mcr.microsoft.com/windows:1909 + LABEL distro_style="windows" + USER ContainerAdministrator + ADD [ "https://aka.ms/vs/16/release/vc_redist.x64.exe", "C:\\TEMP\\" ] + RUN C:\TEMP\vc_redist.x64.exe /install /passive /norestart /log C:\TEMP\vc_redist.log + ENV CYGWIN="winsymlinks:native" + ADD [ "https://www.cygwin.com/setup-x86_64.exe", "C:\\cygwin-setup-x86_64.exe" ] + RUN mkdir C:\cygwin64\lib\cygsympathy && mkdir C:\cygwin64\etc\postinstall + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.cmd", "C:\\cygwin64\\lib\\cygsympathy\\" ] + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.sh", "C:\\cygwin64\\lib\\cygsympathy\\cygsympathy" ] + RUN mklink C:\cygwin64\etc\postinstall\zp_zcygsympathy.sh C:\cygwin64\lib\cygsympathy\cygsympathy + RUN C:\cygwin-setup-x86_64.exe --quiet-mode --no-shortcuts --no-startmenu --no-desktop --only-site --local-package-dir C:\TEMP\cache --root C:\cygwin64 --site http://mirrors.kernel.org/sourceware/cygwin/ --packages curl,diffutils,git,m4,make,mingw64-x86_64-binutils=2.35.2-1,mingw64-x86_64-gcc-core,mingw64-x86_64-gcc-g++,patch,rsync,unzip,vim + ADD [ "https://github.com/metastack/msvs-tools/archive/0.4.1.tar.gz", "C:\\TEMP\\msvs-tools.tar.gz" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/msvs-tools.tar.gz && cp msvs-tools-0.4.1/msvs-detect msvs-tools-0.4.1/msvs-promote-path /bin" + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\cygwin64\bin;%c" + RUN awk -i inplace "/(^#)|(^$)/{print;next}{$4=""noacl,""$4; print}" C:\cygwin64\etc\fstab + WORKDIR C:\cygwin64\home\opam + ADD [ "https://github.com/fdopen/opam-repository-mingw/releases/download/0.0.0.2/opam64.tar.xz", "C:\\TEMP\\" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/opam64.tar.xz && ./opam64/install.sh --prefix=/usr && rm -rf opam64 opam64.tar.xz" + COPY --from=winget-builder [ "C:\\Program Files\\winget-cli", "C:\\Program Files\\winget-cli" ] + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\Program Files\winget-cli;%c" + RUN powershell -Command "winget settings ; ` + $path=""""${Env:LocalAppData}\Microsoft\WinGet\Settings\settings.json"""" ; ` + $json=(Get-Content -Encoding ascii $path | Select -SkipLast 1) -Join """"`n"""" ; ` + $json=($json, ' """"telemetry"""": { """"disable"""": true },', """"}"""") -Join """"`n"""" ; ` + $json | Set-Content -Encoding ascii -NoNewLine $path ; ` + winget settings" + RUN winget install git + ENV HOME="C:\cygwin64\home\opam" + RUN C:\cygwin64\bin\bash.exe --login -c "git config --global user.email 'docker@example.com' && git config --global user.name 'Docker' && git config --system core.longpaths true" + RUN powershell -Command "Remove-Item 'C:\TEMP' -Recurse" + COPY [ ".", "C:\\cygwin64\\home\\opam\\opam-repository" ] + ENV OPAMROOT="C:\opam\.opam" + RUN opam init -k local -a "C:\cygwin64\home\opam\opam-repository" --bare --disable-sandboxing + RUN C:\cygwin64\bin\bash.exe --login -c "rm -rf /cygdrive/c/opam/.opam/repo/default/.git" + COPY [ "Dockerfile", "/Dockerfile.opam" ] +4.12.0/amd64 + FROM ocurrent/opam-staging:windows-mingw-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.12 --packages=ocaml-variants.4.12.0+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.12.0+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +windows-mingw-2004/amd64 + # escape=` + FROM mcr.microsoft.com/windows:2004 as winget-builder + USER ContainerAdministrator + ADD [ "https://github.com/microsoft/winget-cli/releases/latest/download/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle", "C:\\TEMP\\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip" ] + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip -DestinationPath C:\TEMP\winget-cli -Force" + RUN ren C:\TEMP\winget-cli\AppInstaller_x64.msix AppInstaller_x64.zip + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\winget-cli\AppInstaller_x64.zip -DestinationPath C:\TEMP\winget-cli\ -Force" + RUN mkdir "C:\Program Files\winget-cli" && ` + move "C:\TEMP\winget-cli\\AppInstallerCLI.exe" "C:\Program Files\winget-cli\winget.exe" && ` + move "C:\TEMP\winget-cli\\resources.pri" "C:\Program Files\winget-cli\" + # escape=` + # Autogenerated by OCaml-Dockerfile scripts + FROM mcr.microsoft.com/windows:2004 + LABEL distro_style="windows" + USER ContainerAdministrator + ADD [ "https://aka.ms/vs/16/release/vc_redist.x64.exe", "C:\\TEMP\\" ] + RUN C:\TEMP\vc_redist.x64.exe /install /passive /norestart /log C:\TEMP\vc_redist.log + ENV CYGWIN="winsymlinks:native" + ADD [ "https://www.cygwin.com/setup-x86_64.exe", "C:\\cygwin-setup-x86_64.exe" ] + RUN mkdir C:\cygwin64\lib\cygsympathy && mkdir C:\cygwin64\etc\postinstall + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.cmd", "C:\\cygwin64\\lib\\cygsympathy\\" ] + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.sh", "C:\\cygwin64\\lib\\cygsympathy\\cygsympathy" ] + RUN mklink C:\cygwin64\etc\postinstall\zp_zcygsympathy.sh C:\cygwin64\lib\cygsympathy\cygsympathy + RUN C:\cygwin-setup-x86_64.exe --quiet-mode --no-shortcuts --no-startmenu --no-desktop --only-site --local-package-dir C:\TEMP\cache --root C:\cygwin64 --site http://mirrors.kernel.org/sourceware/cygwin/ --packages curl,diffutils,git,m4,make,mingw64-x86_64-binutils=2.35.2-1,mingw64-x86_64-gcc-core,mingw64-x86_64-gcc-g++,patch,rsync,unzip,vim + ADD [ "https://github.com/metastack/msvs-tools/archive/0.4.1.tar.gz", "C:\\TEMP\\msvs-tools.tar.gz" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/msvs-tools.tar.gz && cp msvs-tools-0.4.1/msvs-detect msvs-tools-0.4.1/msvs-promote-path /bin" + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\cygwin64\bin;%c" + RUN awk -i inplace "/(^#)|(^$)/{print;next}{$4=""noacl,""$4; print}" C:\cygwin64\etc\fstab + WORKDIR C:\cygwin64\home\opam + ADD [ "https://github.com/fdopen/opam-repository-mingw/releases/download/0.0.0.2/opam64.tar.xz", "C:\\TEMP\\" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/opam64.tar.xz && ./opam64/install.sh --prefix=/usr && rm -rf opam64 opam64.tar.xz" + COPY --from=winget-builder [ "C:\\Program Files\\winget-cli", "C:\\Program Files\\winget-cli" ] + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\Program Files\winget-cli;%c" + RUN powershell -Command "winget settings ; ` + $path=""""${Env:LocalAppData}\Microsoft\WinGet\Settings\settings.json"""" ; ` + $json=(Get-Content -Encoding ascii $path | Select -SkipLast 1) -Join """"`n"""" ; ` + $json=($json, ' """"telemetry"""": { """"disable"""": true },', """"}"""") -Join """"`n"""" ; ` + $json | Set-Content -Encoding ascii -NoNewLine $path ; ` + winget settings" + RUN winget install git + ENV HOME="C:\cygwin64\home\opam" + RUN C:\cygwin64\bin\bash.exe --login -c "git config --global user.email 'docker@example.com' && git config --global user.name 'Docker' && git config --system core.longpaths true" + RUN powershell -Command "Remove-Item 'C:\TEMP' -Recurse" + COPY [ ".", "C:\\cygwin64\\home\\opam\\opam-repository" ] + ENV OPAMROOT="C:\opam\.opam" + RUN opam init -k local -a "C:\cygwin64\home\opam\opam-repository" --bare --disable-sandboxing + RUN C:\cygwin64\bin\bash.exe --login -c "rm -rf /cygdrive/c/opam/.opam/repo/default/.git" + COPY [ "Dockerfile", "/Dockerfile.opam" ] +4.12.0/amd64 + FROM ocurrent/opam-staging:windows-mingw-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.12 --packages=ocaml-variants.4.12.0+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.12.0+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +windows-mingw-20H2/amd64 + # escape=` + FROM mcr.microsoft.com/windows:20H2 as winget-builder + USER ContainerAdministrator + ADD [ "https://github.com/microsoft/winget-cli/releases/latest/download/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle", "C:\\TEMP\\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip" ] + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip -DestinationPath C:\TEMP\winget-cli -Force" + RUN ren C:\TEMP\winget-cli\AppInstaller_x64.msix AppInstaller_x64.zip + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\winget-cli\AppInstaller_x64.zip -DestinationPath C:\TEMP\winget-cli\ -Force" + RUN mkdir "C:\Program Files\winget-cli" && ` + move "C:\TEMP\winget-cli\\AppInstallerCLI.exe" "C:\Program Files\winget-cli\winget.exe" && ` + move "C:\TEMP\winget-cli\\resources.pri" "C:\Program Files\winget-cli\" + # escape=` + # Autogenerated by OCaml-Dockerfile scripts + FROM mcr.microsoft.com/windows:20H2 + LABEL distro_style="windows" + USER ContainerAdministrator + ADD [ "https://aka.ms/vs/16/release/vc_redist.x64.exe", "C:\\TEMP\\" ] + RUN C:\TEMP\vc_redist.x64.exe /install /passive /norestart /log C:\TEMP\vc_redist.log + ENV CYGWIN="winsymlinks:native" + ADD [ "https://www.cygwin.com/setup-x86_64.exe", "C:\\cygwin-setup-x86_64.exe" ] + RUN mkdir C:\cygwin64\lib\cygsympathy && mkdir C:\cygwin64\etc\postinstall + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.cmd", "C:\\cygwin64\\lib\\cygsympathy\\" ] + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.sh", "C:\\cygwin64\\lib\\cygsympathy\\cygsympathy" ] + RUN mklink C:\cygwin64\etc\postinstall\zp_zcygsympathy.sh C:\cygwin64\lib\cygsympathy\cygsympathy + RUN C:\cygwin-setup-x86_64.exe --quiet-mode --no-shortcuts --no-startmenu --no-desktop --only-site --local-package-dir C:\TEMP\cache --root C:\cygwin64 --site http://mirrors.kernel.org/sourceware/cygwin/ --packages curl,diffutils,git,m4,make,mingw64-x86_64-binutils=2.35.2-1,mingw64-x86_64-gcc-core,mingw64-x86_64-gcc-g++,patch,rsync,unzip,vim + ADD [ "https://github.com/metastack/msvs-tools/archive/0.4.1.tar.gz", "C:\\TEMP\\msvs-tools.tar.gz" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/msvs-tools.tar.gz && cp msvs-tools-0.4.1/msvs-detect msvs-tools-0.4.1/msvs-promote-path /bin" + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\cygwin64\bin;%c" + RUN awk -i inplace "/(^#)|(^$)/{print;next}{$4=""noacl,""$4; print}" C:\cygwin64\etc\fstab + WORKDIR C:\cygwin64\home\opam + ADD [ "https://github.com/fdopen/opam-repository-mingw/releases/download/0.0.0.2/opam64.tar.xz", "C:\\TEMP\\" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/opam64.tar.xz && ./opam64/install.sh --prefix=/usr && rm -rf opam64 opam64.tar.xz" + COPY --from=winget-builder [ "C:\\Program Files\\winget-cli", "C:\\Program Files\\winget-cli" ] + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\Program Files\winget-cli;%c" + RUN powershell -Command "winget settings ; ` + $path=""""${Env:LocalAppData}\Microsoft\WinGet\Settings\settings.json"""" ; ` + $json=(Get-Content -Encoding ascii $path | Select -SkipLast 1) -Join """"`n"""" ; ` + $json=($json, ' """"telemetry"""": { """"disable"""": true },', """"}"""") -Join """"`n"""" ; ` + $json | Set-Content -Encoding ascii -NoNewLine $path ; ` + winget settings" + RUN winget install git + ENV HOME="C:\cygwin64\home\opam" + RUN C:\cygwin64\bin\bash.exe --login -c "git config --global user.email 'docker@example.com' && git config --global user.name 'Docker' && git config --system core.longpaths true" + RUN powershell -Command "Remove-Item 'C:\TEMP' -Recurse" + COPY [ ".", "C:\\cygwin64\\home\\opam\\opam-repository" ] + ENV OPAMROOT="C:\opam\.opam" + RUN opam init -k local -a "C:\cygwin64\home\opam\opam-repository" --bare --disable-sandboxing + RUN C:\cygwin64\bin\bash.exe --login -c "rm -rf /cygdrive/c/opam/.opam/repo/default/.git" + COPY [ "Dockerfile", "/Dockerfile.opam" ] +4.12.0/amd64 + FROM ocurrent/opam-staging:windows-mingw-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.12 --packages=ocaml-variants.4.12.0+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.12.0+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.12-amd64, ocurrent/opam-staging:windows-mingw-1909-ocaml-4.12-amd64, ocurrent/opam-staging:windows-mingw-2004-ocaml-4.12-amd64, ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.12-amd64 -> ocaml/opam:windows-mingw +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.12-amd64, ocurrent/opam-staging:windows-mingw-1909-ocaml-4.12-amd64, ocurrent/opam-staging:windows-mingw-2004-ocaml-4.12-amd64, ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.12-amd64 -> ocaml/opam:windows-mingw-ocaml-4.12 +4.11.2/amd64 + FROM ocurrent/opam-staging:windows-mingw-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.11 --packages=ocaml-variants.4.11.2+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.11.2+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.11.2/amd64 + FROM ocurrent/opam-staging:windows-mingw-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.11 --packages=ocaml-variants.4.11.2+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.11.2+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.11.2/amd64 + FROM ocurrent/opam-staging:windows-mingw-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.11 --packages=ocaml-variants.4.11.2+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.11.2+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.11.2/amd64 + FROM ocurrent/opam-staging:windows-mingw-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.11 --packages=ocaml-variants.4.11.2+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.11.2+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.11-amd64, ocurrent/opam-staging:windows-mingw-1909-ocaml-4.11-amd64, ocurrent/opam-staging:windows-mingw-2004-ocaml-4.11-amd64, ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.11-amd64 -> ocaml/opam:windows-mingw-ocaml-4.11 +4.10.2/amd64 + FROM ocurrent/opam-staging:windows-mingw-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.10 --packages=ocaml-variants.4.10.2+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.10.2+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.10.2/amd64 + FROM ocurrent/opam-staging:windows-mingw-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.10 --packages=ocaml-variants.4.10.2+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.10.2+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.10.2/amd64 + FROM ocurrent/opam-staging:windows-mingw-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.10 --packages=ocaml-variants.4.10.2+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.10.2+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.10.2/amd64 + FROM ocurrent/opam-staging:windows-mingw-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.10 --packages=ocaml-variants.4.10.2+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.10.2+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.10-amd64, ocurrent/opam-staging:windows-mingw-1909-ocaml-4.10-amd64, ocurrent/opam-staging:windows-mingw-2004-ocaml-4.10-amd64, ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.10-amd64 -> ocaml/opam:windows-mingw-ocaml-4.10 +4.09.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.09 --packages=ocaml-variants.4.09.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.09.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.09.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.09 --packages=ocaml-variants.4.09.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.09.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.09.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.09 --packages=ocaml-variants.4.09.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.09.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.09.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.09 --packages=ocaml-variants.4.09.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.09.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.09-amd64, ocurrent/opam-staging:windows-mingw-1909-ocaml-4.09-amd64, ocurrent/opam-staging:windows-mingw-2004-ocaml-4.09-amd64, ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.09-amd64 -> ocaml/opam:windows-mingw-ocaml-4.09 +4.08.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.08 --packages=ocaml-variants.4.08.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.08.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.08.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.08 --packages=ocaml-variants.4.08.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.08.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.08.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.08 --packages=ocaml-variants.4.08.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.08.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.08.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.08 --packages=ocaml-variants.4.08.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.08.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.08-amd64, ocurrent/opam-staging:windows-mingw-1909-ocaml-4.08-amd64, ocurrent/opam-staging:windows-mingw-2004-ocaml-4.08-amd64, ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.08-amd64 -> ocaml/opam:windows-mingw-ocaml-4.08 +4.07.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.07 --packages=ocaml-variants.4.07.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.07.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.07.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.07 --packages=ocaml-variants.4.07.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.07.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.07.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.07 --packages=ocaml-variants.4.07.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.07.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.07.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.07 --packages=ocaml-variants.4.07.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.07.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.07-amd64, ocurrent/opam-staging:windows-mingw-1909-ocaml-4.07-amd64, ocurrent/opam-staging:windows-mingw-2004-ocaml-4.07-amd64, ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.07-amd64 -> ocaml/opam:windows-mingw-ocaml-4.07 +4.06.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.06 --packages=ocaml-variants.4.06.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.06.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.06.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.06 --packages=ocaml-variants.4.06.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.06.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.06.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.06 --packages=ocaml-variants.4.06.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.06.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.06.1/amd64 + FROM ocurrent/opam-staging:windows-mingw-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.06 --packages=ocaml-variants.4.06.1+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.06.1+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.06-amd64, ocurrent/opam-staging:windows-mingw-1909-ocaml-4.06-amd64, ocurrent/opam-staging:windows-mingw-2004-ocaml-4.06-amd64, ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.06-amd64 -> ocaml/opam:windows-mingw-ocaml-4.06 +4.05.0/amd64 + FROM ocurrent/opam-staging:windows-mingw-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.05 --packages=ocaml-variants.4.05.0+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.05.0+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.05.0/amd64 + FROM ocurrent/opam-staging:windows-mingw-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.05 --packages=ocaml-variants.4.05.0+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.05.0+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.05.0/amd64 + FROM ocurrent/opam-staging:windows-mingw-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.05 --packages=ocaml-variants.4.05.0+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.05.0+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.05.0/amd64 + FROM ocurrent/opam-staging:windows-mingw-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.05 --packages=ocaml-variants.4.05.0+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.05.0+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.05-amd64, ocurrent/opam-staging:windows-mingw-1909-ocaml-4.05-amd64, ocurrent/opam-staging:windows-mingw-2004-ocaml-4.05-amd64, ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.05-amd64 -> ocaml/opam:windows-mingw-ocaml-4.05 +4.04.2/amd64 + FROM ocurrent/opam-staging:windows-mingw-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.04 --packages=ocaml-variants.4.04.2+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.04.2+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.04.2/amd64 + FROM ocurrent/opam-staging:windows-mingw-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.04 --packages=ocaml-variants.4.04.2+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.04.2+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.04.2/amd64 + FROM ocurrent/opam-staging:windows-mingw-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.04 --packages=ocaml-variants.4.04.2+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.04.2+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.04.2/amd64 + FROM ocurrent/opam-staging:windows-mingw-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.04 --packages=ocaml-variants.4.04.2+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.04.2+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.04-amd64, ocurrent/opam-staging:windows-mingw-1909-ocaml-4.04-amd64, ocurrent/opam-staging:windows-mingw-2004-ocaml-4.04-amd64, ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.04-amd64 -> ocaml/opam:windows-mingw-ocaml-4.04 +4.03.0/amd64 + FROM ocurrent/opam-staging:windows-mingw-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.03 --packages=ocaml-variants.4.03.0+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.03.0+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.03.0/amd64 + FROM ocurrent/opam-staging:windows-mingw-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.03 --packages=ocaml-variants.4.03.0+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.03.0+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.03.0/amd64 + FROM ocurrent/opam-staging:windows-mingw-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.03 --packages=ocaml-variants.4.03.0+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.03.0+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.03.0/amd64 + FROM ocurrent/opam-staging:windows-mingw-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.03 --packages=ocaml-variants.4.03.0+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.03.0+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.03-amd64, ocurrent/opam-staging:windows-mingw-1909-ocaml-4.03-amd64, ocurrent/opam-staging:windows-mingw-2004-ocaml-4.03-amd64, ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.03-amd64 -> ocaml/opam:windows-mingw-ocaml-4.03 +4.02.3/amd64 + FROM ocurrent/opam-staging:windows-mingw-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.02 --packages=ocaml-variants.4.02.3+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.02.3+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.02.3/amd64 + FROM ocurrent/opam-staging:windows-mingw-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.02 --packages=ocaml-variants.4.02.3+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.02.3+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.02.3/amd64 + FROM ocurrent/opam-staging:windows-mingw-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.02 --packages=ocaml-variants.4.02.3+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.02.3+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.02.3/amd64 + FROM ocurrent/opam-staging:windows-mingw-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --no-opam -- opam switch create 4.02 --packages=ocaml-variants.4.02.3+mingw64 + RUN ocaml-env exec --64 -- opam pin add -k version ocaml-variants 4.02.3+mingw64 + RUN ocaml-env exec --64 -- opam install -y depext depext-cygwinports + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.02-amd64, ocurrent/opam-staging:windows-mingw-1909-ocaml-4.02-amd64, ocurrent/opam-staging:windows-mingw-2004-ocaml-4.02-amd64, ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.02-amd64 -> ocaml/opam:windows-mingw-ocaml-4.02 +ocurrent/opam-staging:windows-mingw-1809-opam-amd64 -> ocaml/opam:windows-mingw-1809-opam +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.02-amd64 -> ocaml/opam:windows-mingw-1809-ocaml-4.02 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.02-amd64 -> ocaml/opam:windows-mingw-ltsc2019-ocaml-4.02 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.03-amd64 -> ocaml/opam:windows-mingw-1809-ocaml-4.03 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.03-amd64 -> ocaml/opam:windows-mingw-ltsc2019-ocaml-4.03 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.04-amd64 -> ocaml/opam:windows-mingw-1809-ocaml-4.04 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.04-amd64 -> ocaml/opam:windows-mingw-ltsc2019-ocaml-4.04 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.05-amd64 -> ocaml/opam:windows-mingw-1809-ocaml-4.05 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.05-amd64 -> ocaml/opam:windows-mingw-ltsc2019-ocaml-4.05 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.06-amd64 -> ocaml/opam:windows-mingw-1809-ocaml-4.06 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.06-amd64 -> ocaml/opam:windows-mingw-ltsc2019-ocaml-4.06 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.07-amd64 -> ocaml/opam:windows-mingw-1809-ocaml-4.07 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.07-amd64 -> ocaml/opam:windows-mingw-ltsc2019-ocaml-4.07 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.08-amd64 -> ocaml/opam:windows-mingw-1809-ocaml-4.08 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.08-amd64 -> ocaml/opam:windows-mingw-ltsc2019-ocaml-4.08 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.09-amd64 -> ocaml/opam:windows-mingw-1809-ocaml-4.09 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.09-amd64 -> ocaml/opam:windows-mingw-ltsc2019-ocaml-4.09 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.10-amd64 -> ocaml/opam:windows-mingw-1809-ocaml-4.10 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.10-amd64 -> ocaml/opam:windows-mingw-ltsc2019-ocaml-4.10 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.11-amd64 -> ocaml/opam:windows-mingw-1809-ocaml-4.11 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.11-amd64 -> ocaml/opam:windows-mingw-ltsc2019-ocaml-4.11 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.12-amd64 -> ocaml/opam:windows-mingw-1809 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.12-amd64 -> ocaml/opam:windows-mingw-1809-ocaml-4.12 +ocurrent/opam-staging:windows-mingw-1809-ocaml-4.12-amd64 -> ocaml/opam:windows-mingw-ltsc2019-ocaml-4.12 +ocurrent/opam-staging:windows-mingw-1909-opam-amd64 -> ocaml/opam:windows-mingw-1909-opam +ocurrent/opam-staging:windows-mingw-1909-ocaml-4.02-amd64 -> ocaml/opam:windows-mingw-1909-ocaml-4.02 +ocurrent/opam-staging:windows-mingw-1909-ocaml-4.03-amd64 -> ocaml/opam:windows-mingw-1909-ocaml-4.03 +ocurrent/opam-staging:windows-mingw-1909-ocaml-4.04-amd64 -> ocaml/opam:windows-mingw-1909-ocaml-4.04 +ocurrent/opam-staging:windows-mingw-1909-ocaml-4.05-amd64 -> ocaml/opam:windows-mingw-1909-ocaml-4.05 +ocurrent/opam-staging:windows-mingw-1909-ocaml-4.06-amd64 -> ocaml/opam:windows-mingw-1909-ocaml-4.06 +ocurrent/opam-staging:windows-mingw-1909-ocaml-4.07-amd64 -> ocaml/opam:windows-mingw-1909-ocaml-4.07 +ocurrent/opam-staging:windows-mingw-1909-ocaml-4.08-amd64 -> ocaml/opam:windows-mingw-1909-ocaml-4.08 +ocurrent/opam-staging:windows-mingw-1909-ocaml-4.09-amd64 -> ocaml/opam:windows-mingw-1909-ocaml-4.09 +ocurrent/opam-staging:windows-mingw-1909-ocaml-4.10-amd64 -> ocaml/opam:windows-mingw-1909-ocaml-4.10 +ocurrent/opam-staging:windows-mingw-1909-ocaml-4.11-amd64 -> ocaml/opam:windows-mingw-1909-ocaml-4.11 +ocurrent/opam-staging:windows-mingw-1909-ocaml-4.12-amd64 -> ocaml/opam:windows-mingw-1909 +ocurrent/opam-staging:windows-mingw-1909-ocaml-4.12-amd64 -> ocaml/opam:windows-mingw-1909-ocaml-4.12 +ocurrent/opam-staging:windows-mingw-2004-opam-amd64 -> ocaml/opam:windows-mingw-2004-opam +ocurrent/opam-staging:windows-mingw-2004-ocaml-4.02-amd64 -> ocaml/opam:windows-mingw-2004-ocaml-4.02 +ocurrent/opam-staging:windows-mingw-2004-ocaml-4.03-amd64 -> ocaml/opam:windows-mingw-2004-ocaml-4.03 +ocurrent/opam-staging:windows-mingw-2004-ocaml-4.04-amd64 -> ocaml/opam:windows-mingw-2004-ocaml-4.04 +ocurrent/opam-staging:windows-mingw-2004-ocaml-4.05-amd64 -> ocaml/opam:windows-mingw-2004-ocaml-4.05 +ocurrent/opam-staging:windows-mingw-2004-ocaml-4.06-amd64 -> ocaml/opam:windows-mingw-2004-ocaml-4.06 +ocurrent/opam-staging:windows-mingw-2004-ocaml-4.07-amd64 -> ocaml/opam:windows-mingw-2004-ocaml-4.07 +ocurrent/opam-staging:windows-mingw-2004-ocaml-4.08-amd64 -> ocaml/opam:windows-mingw-2004-ocaml-4.08 +ocurrent/opam-staging:windows-mingw-2004-ocaml-4.09-amd64 -> ocaml/opam:windows-mingw-2004-ocaml-4.09 +ocurrent/opam-staging:windows-mingw-2004-ocaml-4.10-amd64 -> ocaml/opam:windows-mingw-2004-ocaml-4.10 +ocurrent/opam-staging:windows-mingw-2004-ocaml-4.11-amd64 -> ocaml/opam:windows-mingw-2004-ocaml-4.11 +ocurrent/opam-staging:windows-mingw-2004-ocaml-4.12-amd64 -> ocaml/opam:windows-mingw-2004 +ocurrent/opam-staging:windows-mingw-2004-ocaml-4.12-amd64 -> ocaml/opam:windows-mingw-2004-ocaml-4.12 +ocurrent/opam-staging:windows-mingw-20H2-opam-amd64 -> ocaml/opam:windows-mingw-20H2-opam +ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.02-amd64 -> ocaml/opam:windows-mingw-20H2-ocaml-4.02 +ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.03-amd64 -> ocaml/opam:windows-mingw-20H2-ocaml-4.03 +ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.04-amd64 -> ocaml/opam:windows-mingw-20H2-ocaml-4.04 +ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.05-amd64 -> ocaml/opam:windows-mingw-20H2-ocaml-4.05 +ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.06-amd64 -> ocaml/opam:windows-mingw-20H2-ocaml-4.06 +ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.07-amd64 -> ocaml/opam:windows-mingw-20H2-ocaml-4.07 +ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.08-amd64 -> ocaml/opam:windows-mingw-20H2-ocaml-4.08 +ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.09-amd64 -> ocaml/opam:windows-mingw-20H2-ocaml-4.09 +ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.10-amd64 -> ocaml/opam:windows-mingw-20H2-ocaml-4.10 +ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.11-amd64 -> ocaml/opam:windows-mingw-20H2-ocaml-4.11 +ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.12-amd64 -> ocaml/opam:windows-mingw-20H2 +ocurrent/opam-staging:windows-mingw-20H2-ocaml-4.12-amd64 -> ocaml/opam:windows-mingw-20H2-ocaml-4.12 +windows-msvc +windows-msvc-1809/amd64 + # escape=` + FROM mcr.microsoft.com/windows:1809 as winget-builder + USER ContainerAdministrator + ADD [ "https://github.com/microsoft/winget-cli/releases/latest/download/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle", "C:\\TEMP\\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip" ] + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip -DestinationPath C:\TEMP\winget-cli -Force" + RUN ren C:\TEMP\winget-cli\AppInstaller_x64.msix AppInstaller_x64.zip + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\winget-cli\AppInstaller_x64.zip -DestinationPath C:\TEMP\winget-cli\ -Force" + RUN mkdir "C:\Program Files\winget-cli" && ` + move "C:\TEMP\winget-cli\\AppInstallerCLI.exe" "C:\Program Files\winget-cli\winget.exe" && ` + move "C:\TEMP\winget-cli\\resources.pri" "C:\Program Files\winget-cli\" + # escape=` + # Autogenerated by OCaml-Dockerfile scripts + FROM mcr.microsoft.com/windows:1809 + LABEL distro_style="windows" + USER ContainerAdministrator + ADD [ "https://aka.ms/vs/16/release/vc_redist.x64.exe", "C:\\TEMP\\" ] + RUN C:\TEMP\vc_redist.x64.exe /install /passive /norestart /log C:\TEMP\vc_redist.log + ADD [ "https://raw.githubusercontent.com/MisterDA/Windows-OCaml-Docker/images/Install.cmd", "C:\\TEMP\\" ] + ADD [ "https://aka.ms/vscollect.exe", "C:\\TEMP\\collect.exe" ] + ADD [ "https://aka.ms/vs/16/release/channel", "C:\\TEMP\\VisualStudio.chman" ] + ADD [ "https://aka.ms/vs/16/release/vs_buildtools.exe", "C:\\TEMP\\vs_buildtools.exe" ] + RUN C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache ` + --installPath C:\BuildTools --channelUri C:\TEMP\VisualStudio.chman ` + --installChannelUri C:\TEMP\VisualStudio.chman ` + --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ` + --add Microsoft.VisualStudio.Component.Windows10SDK.18362 + ENV CYGWIN="winsymlinks:native" + ADD [ "https://www.cygwin.com/setup-x86_64.exe", "C:\\cygwin-setup-x86_64.exe" ] + RUN mkdir C:\cygwin64\lib\cygsympathy && mkdir C:\cygwin64\etc\postinstall + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.cmd", "C:\\cygwin64\\lib\\cygsympathy\\" ] + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.sh", "C:\\cygwin64\\lib\\cygsympathy\\cygsympathy" ] + RUN mklink C:\cygwin64\etc\postinstall\zp_zcygsympathy.sh C:\cygwin64\lib\cygsympathy\cygsympathy + RUN C:\cygwin-setup-x86_64.exe --quiet-mode --no-shortcuts --no-startmenu --no-desktop --only-site --local-package-dir C:\TEMP\cache --root C:\cygwin64 --site http://mirrors.kernel.org/sourceware/cygwin/ --packages curl,diffutils,git,m4,make,mingw64-x86_64-binutils=2.35.2-1,mingw64-x86_64-gcc-g++,patch,rsync,unzip,vim + ADD [ "https://github.com/metastack/msvs-tools/archive/0.4.1.tar.gz", "C:\\TEMP\\msvs-tools.tar.gz" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/msvs-tools.tar.gz && cp msvs-tools-0.4.1/msvs-detect msvs-tools-0.4.1/msvs-promote-path /bin" + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\cygwin64\bin;%c" + RUN awk -i inplace "/(^#)|(^$)/{print;next}{$4=""noacl,""$4; print}" C:\cygwin64\etc\fstab + WORKDIR C:\cygwin64\home\opam + ADD [ "https://github.com/fdopen/opam-repository-mingw/releases/download/0.0.0.2/opam64.tar.xz", "C:\\TEMP\\" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/opam64.tar.xz && ./opam64/install.sh --prefix=/usr && rm -rf opam64 opam64.tar.xz" + COPY --from=winget-builder [ "C:\\Program Files\\winget-cli", "C:\\Program Files\\winget-cli" ] + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\Program Files\winget-cli;%c" + RUN powershell -Command "winget settings ; ` + $path=""""${Env:LocalAppData}\Microsoft\WinGet\Settings\settings.json"""" ; ` + $json=(Get-Content -Encoding ascii $path | Select -SkipLast 1) -Join """"`n"""" ; ` + $json=($json, ' """"telemetry"""": { """"disable"""": true },', """"}"""") -Join """"`n"""" ; ` + $json | Set-Content -Encoding ascii -NoNewLine $path ; ` + winget settings" + ENV HOME="C:\cygwin64\home\opam" + RUN C:\cygwin64\bin\bash.exe --login -c "git config --global user.email 'docker@example.com' && git config --global user.name 'Docker' && git config --system core.longpaths true" + RUN powershell -Command "Remove-Item 'C:\TEMP' -Recurse" + COPY [ ".", "C:\\cygwin64\\home\\opam\\opam-repository" ] + ENV OPAMROOT="C:\opam\.opam" + RUN opam init -k local -a "C:\cygwin64\home\opam\opam-repository" --bare --disable-sandboxing + RUN C:\cygwin64\bin\bash.exe --login -c "rm -rf /cygdrive/c/opam/.opam/repo/default/.git" + COPY [ "Dockerfile", "/Dockerfile.opam" ] +4.12.0/amd64 + FROM ocurrent/opam-staging:windows-msvc-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.12 --packages=ocaml-variants.4.12.0+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.12.0+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +windows-msvc-1909/amd64 + # escape=` + FROM mcr.microsoft.com/windows:1909 as winget-builder + USER ContainerAdministrator + ADD [ "https://github.com/microsoft/winget-cli/releases/latest/download/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle", "C:\\TEMP\\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip" ] + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip -DestinationPath C:\TEMP\winget-cli -Force" + RUN ren C:\TEMP\winget-cli\AppInstaller_x64.msix AppInstaller_x64.zip + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\winget-cli\AppInstaller_x64.zip -DestinationPath C:\TEMP\winget-cli\ -Force" + RUN mkdir "C:\Program Files\winget-cli" && ` + move "C:\TEMP\winget-cli\\AppInstallerCLI.exe" "C:\Program Files\winget-cli\winget.exe" && ` + move "C:\TEMP\winget-cli\\resources.pri" "C:\Program Files\winget-cli\" + # escape=` + # Autogenerated by OCaml-Dockerfile scripts + FROM mcr.microsoft.com/windows:1909 + LABEL distro_style="windows" + USER ContainerAdministrator + ADD [ "https://aka.ms/vs/16/release/vc_redist.x64.exe", "C:\\TEMP\\" ] + RUN C:\TEMP\vc_redist.x64.exe /install /passive /norestart /log C:\TEMP\vc_redist.log + ADD [ "https://raw.githubusercontent.com/MisterDA/Windows-OCaml-Docker/images/Install.cmd", "C:\\TEMP\\" ] + ADD [ "https://aka.ms/vscollect.exe", "C:\\TEMP\\collect.exe" ] + ADD [ "https://aka.ms/vs/16/release/channel", "C:\\TEMP\\VisualStudio.chman" ] + ADD [ "https://aka.ms/vs/16/release/vs_buildtools.exe", "C:\\TEMP\\vs_buildtools.exe" ] + RUN C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache ` + --installPath C:\BuildTools --channelUri C:\TEMP\VisualStudio.chman ` + --installChannelUri C:\TEMP\VisualStudio.chman ` + --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ` + --add Microsoft.VisualStudio.Component.Windows10SDK.18362 + ENV CYGWIN="winsymlinks:native" + ADD [ "https://www.cygwin.com/setup-x86_64.exe", "C:\\cygwin-setup-x86_64.exe" ] + RUN mkdir C:\cygwin64\lib\cygsympathy && mkdir C:\cygwin64\etc\postinstall + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.cmd", "C:\\cygwin64\\lib\\cygsympathy\\" ] + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.sh", "C:\\cygwin64\\lib\\cygsympathy\\cygsympathy" ] + RUN mklink C:\cygwin64\etc\postinstall\zp_zcygsympathy.sh C:\cygwin64\lib\cygsympathy\cygsympathy + RUN C:\cygwin-setup-x86_64.exe --quiet-mode --no-shortcuts --no-startmenu --no-desktop --only-site --local-package-dir C:\TEMP\cache --root C:\cygwin64 --site http://mirrors.kernel.org/sourceware/cygwin/ --packages curl,diffutils,git,m4,make,mingw64-x86_64-binutils=2.35.2-1,mingw64-x86_64-gcc-g++,patch,rsync,unzip,vim + ADD [ "https://github.com/metastack/msvs-tools/archive/0.4.1.tar.gz", "C:\\TEMP\\msvs-tools.tar.gz" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/msvs-tools.tar.gz && cp msvs-tools-0.4.1/msvs-detect msvs-tools-0.4.1/msvs-promote-path /bin" + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\cygwin64\bin;%c" + RUN awk -i inplace "/(^#)|(^$)/{print;next}{$4=""noacl,""$4; print}" C:\cygwin64\etc\fstab + WORKDIR C:\cygwin64\home\opam + ADD [ "https://github.com/fdopen/opam-repository-mingw/releases/download/0.0.0.2/opam64.tar.xz", "C:\\TEMP\\" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/opam64.tar.xz && ./opam64/install.sh --prefix=/usr && rm -rf opam64 opam64.tar.xz" + COPY --from=winget-builder [ "C:\\Program Files\\winget-cli", "C:\\Program Files\\winget-cli" ] + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\Program Files\winget-cli;%c" + RUN powershell -Command "winget settings ; ` + $path=""""${Env:LocalAppData}\Microsoft\WinGet\Settings\settings.json"""" ; ` + $json=(Get-Content -Encoding ascii $path | Select -SkipLast 1) -Join """"`n"""" ; ` + $json=($json, ' """"telemetry"""": { """"disable"""": true },', """"}"""") -Join """"`n"""" ; ` + $json | Set-Content -Encoding ascii -NoNewLine $path ; ` + winget settings" + RUN winget install git + ENV HOME="C:\cygwin64\home\opam" + RUN C:\cygwin64\bin\bash.exe --login -c "git config --global user.email 'docker@example.com' && git config --global user.name 'Docker' && git config --system core.longpaths true" + RUN powershell -Command "Remove-Item 'C:\TEMP' -Recurse" + COPY [ ".", "C:\\cygwin64\\home\\opam\\opam-repository" ] + ENV OPAMROOT="C:\opam\.opam" + RUN opam init -k local -a "C:\cygwin64\home\opam\opam-repository" --bare --disable-sandboxing + RUN C:\cygwin64\bin\bash.exe --login -c "rm -rf /cygdrive/c/opam/.opam/repo/default/.git" + COPY [ "Dockerfile", "/Dockerfile.opam" ] +4.12.0/amd64 + FROM ocurrent/opam-staging:windows-msvc-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.12 --packages=ocaml-variants.4.12.0+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.12.0+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +windows-msvc-2004/amd64 + # escape=` + FROM mcr.microsoft.com/windows:2004 as winget-builder + USER ContainerAdministrator + ADD [ "https://github.com/microsoft/winget-cli/releases/latest/download/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle", "C:\\TEMP\\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip" ] + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip -DestinationPath C:\TEMP\winget-cli -Force" + RUN ren C:\TEMP\winget-cli\AppInstaller_x64.msix AppInstaller_x64.zip + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\winget-cli\AppInstaller_x64.zip -DestinationPath C:\TEMP\winget-cli\ -Force" + RUN mkdir "C:\Program Files\winget-cli" && ` + move "C:\TEMP\winget-cli\\AppInstallerCLI.exe" "C:\Program Files\winget-cli\winget.exe" && ` + move "C:\TEMP\winget-cli\\resources.pri" "C:\Program Files\winget-cli\" + # escape=` + # Autogenerated by OCaml-Dockerfile scripts + FROM mcr.microsoft.com/windows:2004 + LABEL distro_style="windows" + USER ContainerAdministrator + ADD [ "https://aka.ms/vs/16/release/vc_redist.x64.exe", "C:\\TEMP\\" ] + RUN C:\TEMP\vc_redist.x64.exe /install /passive /norestart /log C:\TEMP\vc_redist.log + ADD [ "https://raw.githubusercontent.com/MisterDA/Windows-OCaml-Docker/images/Install.cmd", "C:\\TEMP\\" ] + ADD [ "https://aka.ms/vscollect.exe", "C:\\TEMP\\collect.exe" ] + ADD [ "https://aka.ms/vs/16/release/channel", "C:\\TEMP\\VisualStudio.chman" ] + ADD [ "https://aka.ms/vs/16/release/vs_buildtools.exe", "C:\\TEMP\\vs_buildtools.exe" ] + RUN C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache ` + --installPath C:\BuildTools --channelUri C:\TEMP\VisualStudio.chman ` + --installChannelUri C:\TEMP\VisualStudio.chman ` + --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ` + --add Microsoft.VisualStudio.Component.Windows10SDK.18362 + ENV CYGWIN="winsymlinks:native" + ADD [ "https://www.cygwin.com/setup-x86_64.exe", "C:\\cygwin-setup-x86_64.exe" ] + RUN mkdir C:\cygwin64\lib\cygsympathy && mkdir C:\cygwin64\etc\postinstall + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.cmd", "C:\\cygwin64\\lib\\cygsympathy\\" ] + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.sh", "C:\\cygwin64\\lib\\cygsympathy\\cygsympathy" ] + RUN mklink C:\cygwin64\etc\postinstall\zp_zcygsympathy.sh C:\cygwin64\lib\cygsympathy\cygsympathy + RUN C:\cygwin-setup-x86_64.exe --quiet-mode --no-shortcuts --no-startmenu --no-desktop --only-site --local-package-dir C:\TEMP\cache --root C:\cygwin64 --site http://mirrors.kernel.org/sourceware/cygwin/ --packages curl,diffutils,git,m4,make,mingw64-x86_64-binutils=2.35.2-1,mingw64-x86_64-gcc-g++,patch,rsync,unzip,vim + ADD [ "https://github.com/metastack/msvs-tools/archive/0.4.1.tar.gz", "C:\\TEMP\\msvs-tools.tar.gz" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/msvs-tools.tar.gz && cp msvs-tools-0.4.1/msvs-detect msvs-tools-0.4.1/msvs-promote-path /bin" + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\cygwin64\bin;%c" + RUN awk -i inplace "/(^#)|(^$)/{print;next}{$4=""noacl,""$4; print}" C:\cygwin64\etc\fstab + WORKDIR C:\cygwin64\home\opam + ADD [ "https://github.com/fdopen/opam-repository-mingw/releases/download/0.0.0.2/opam64.tar.xz", "C:\\TEMP\\" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/opam64.tar.xz && ./opam64/install.sh --prefix=/usr && rm -rf opam64 opam64.tar.xz" + COPY --from=winget-builder [ "C:\\Program Files\\winget-cli", "C:\\Program Files\\winget-cli" ] + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\Program Files\winget-cli;%c" + RUN powershell -Command "winget settings ; ` + $path=""""${Env:LocalAppData}\Microsoft\WinGet\Settings\settings.json"""" ; ` + $json=(Get-Content -Encoding ascii $path | Select -SkipLast 1) -Join """"`n"""" ; ` + $json=($json, ' """"telemetry"""": { """"disable"""": true },', """"}"""") -Join """"`n"""" ; ` + $json | Set-Content -Encoding ascii -NoNewLine $path ; ` + winget settings" + RUN winget install git + ENV HOME="C:\cygwin64\home\opam" + RUN C:\cygwin64\bin\bash.exe --login -c "git config --global user.email 'docker@example.com' && git config --global user.name 'Docker' && git config --system core.longpaths true" + RUN powershell -Command "Remove-Item 'C:\TEMP' -Recurse" + COPY [ ".", "C:\\cygwin64\\home\\opam\\opam-repository" ] + ENV OPAMROOT="C:\opam\.opam" + RUN opam init -k local -a "C:\cygwin64\home\opam\opam-repository" --bare --disable-sandboxing + RUN C:\cygwin64\bin\bash.exe --login -c "rm -rf /cygdrive/c/opam/.opam/repo/default/.git" + COPY [ "Dockerfile", "/Dockerfile.opam" ] +4.12.0/amd64 + FROM ocurrent/opam-staging:windows-msvc-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.12 --packages=ocaml-variants.4.12.0+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.12.0+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +windows-msvc-20H2/amd64 + # escape=` + FROM mcr.microsoft.com/windows:20H2 as winget-builder + USER ContainerAdministrator + ADD [ "https://github.com/microsoft/winget-cli/releases/latest/download/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle", "C:\\TEMP\\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip" ] + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.zip -DestinationPath C:\TEMP\winget-cli -Force" + RUN ren C:\TEMP\winget-cli\AppInstaller_x64.msix AppInstaller_x64.zip + RUN powershell -Command "Expand-Archive -LiteralPath C:\TEMP\winget-cli\AppInstaller_x64.zip -DestinationPath C:\TEMP\winget-cli\ -Force" + RUN mkdir "C:\Program Files\winget-cli" && ` + move "C:\TEMP\winget-cli\\AppInstallerCLI.exe" "C:\Program Files\winget-cli\winget.exe" && ` + move "C:\TEMP\winget-cli\\resources.pri" "C:\Program Files\winget-cli\" + # escape=` + # Autogenerated by OCaml-Dockerfile scripts + FROM mcr.microsoft.com/windows:20H2 + LABEL distro_style="windows" + USER ContainerAdministrator + ADD [ "https://aka.ms/vs/16/release/vc_redist.x64.exe", "C:\\TEMP\\" ] + RUN C:\TEMP\vc_redist.x64.exe /install /passive /norestart /log C:\TEMP\vc_redist.log + ADD [ "https://raw.githubusercontent.com/MisterDA/Windows-OCaml-Docker/images/Install.cmd", "C:\\TEMP\\" ] + ADD [ "https://aka.ms/vscollect.exe", "C:\\TEMP\\collect.exe" ] + ADD [ "https://aka.ms/vs/16/release/channel", "C:\\TEMP\\VisualStudio.chman" ] + ADD [ "https://aka.ms/vs/16/release/vs_buildtools.exe", "C:\\TEMP\\vs_buildtools.exe" ] + RUN C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache ` + --installPath C:\BuildTools --channelUri C:\TEMP\VisualStudio.chman ` + --installChannelUri C:\TEMP\VisualStudio.chman ` + --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ` + --add Microsoft.VisualStudio.Component.Windows10SDK.18362 + ENV CYGWIN="winsymlinks:native" + ADD [ "https://www.cygwin.com/setup-x86_64.exe", "C:\\cygwin-setup-x86_64.exe" ] + RUN mkdir C:\cygwin64\lib\cygsympathy && mkdir C:\cygwin64\etc\postinstall + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.cmd", "C:\\cygwin64\\lib\\cygsympathy\\" ] + ADD [ "https://raw.githubusercontent.com/metastack/cygsympathy/master/cygsympathy.sh", "C:\\cygwin64\\lib\\cygsympathy\\cygsympathy" ] + RUN mklink C:\cygwin64\etc\postinstall\zp_zcygsympathy.sh C:\cygwin64\lib\cygsympathy\cygsympathy + RUN C:\cygwin-setup-x86_64.exe --quiet-mode --no-shortcuts --no-startmenu --no-desktop --only-site --local-package-dir C:\TEMP\cache --root C:\cygwin64 --site http://mirrors.kernel.org/sourceware/cygwin/ --packages curl,diffutils,git,m4,make,mingw64-x86_64-binutils=2.35.2-1,mingw64-x86_64-gcc-g++,patch,rsync,unzip,vim + ADD [ "https://github.com/metastack/msvs-tools/archive/0.4.1.tar.gz", "C:\\TEMP\\msvs-tools.tar.gz" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/msvs-tools.tar.gz && cp msvs-tools-0.4.1/msvs-detect msvs-tools-0.4.1/msvs-promote-path /bin" + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\cygwin64\bin;%c" + RUN awk -i inplace "/(^#)|(^$)/{print;next}{$4=""noacl,""$4; print}" C:\cygwin64\etc\fstab + WORKDIR C:\cygwin64\home\opam + ADD [ "https://github.com/fdopen/opam-repository-mingw/releases/download/0.0.0.2/opam64.tar.xz", "C:\\TEMP\\" ] + RUN C:\cygwin64\bin\bash.exe --login -c "cd /tmp && tar -xf /cygdrive/c/TEMP/opam64.tar.xz && ./opam64/install.sh --prefix=/usr && rm -rf opam64 opam64.tar.xz" + COPY --from=winget-builder [ "C:\\Program Files\\winget-cli", "C:\\Program Files\\winget-cli" ] + RUN for /f "tokens=1,2,*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path ^| findstr /r "^[^H]"') do ` + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V Path /t REG_EXPAND_SZ /f /d "C:\Program Files\winget-cli;%c" + RUN powershell -Command "winget settings ; ` + $path=""""${Env:LocalAppData}\Microsoft\WinGet\Settings\settings.json"""" ; ` + $json=(Get-Content -Encoding ascii $path | Select -SkipLast 1) -Join """"`n"""" ; ` + $json=($json, ' """"telemetry"""": { """"disable"""": true },', """"}"""") -Join """"`n"""" ; ` + $json | Set-Content -Encoding ascii -NoNewLine $path ; ` + winget settings" + RUN winget install git + ENV HOME="C:\cygwin64\home\opam" + RUN C:\cygwin64\bin\bash.exe --login -c "git config --global user.email 'docker@example.com' && git config --global user.name 'Docker' && git config --system core.longpaths true" + RUN powershell -Command "Remove-Item 'C:\TEMP' -Recurse" + COPY [ ".", "C:\\cygwin64\\home\\opam\\opam-repository" ] + ENV OPAMROOT="C:\opam\.opam" + RUN opam init -k local -a "C:\cygwin64\home\opam\opam-repository" --bare --disable-sandboxing + RUN C:\cygwin64\bin\bash.exe --login -c "rm -rf /cygdrive/c/opam/.opam/repo/default/.git" + COPY [ "Dockerfile", "/Dockerfile.opam" ] +4.12.0/amd64 + FROM ocurrent/opam-staging:windows-msvc-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.12 --packages=ocaml-variants.4.12.0+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.12.0+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.12-amd64, ocurrent/opam-staging:windows-msvc-1909-ocaml-4.12-amd64, ocurrent/opam-staging:windows-msvc-2004-ocaml-4.12-amd64, ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.12-amd64 -> ocaml/opam:windows-msvc +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.12-amd64, ocurrent/opam-staging:windows-msvc-1909-ocaml-4.12-amd64, ocurrent/opam-staging:windows-msvc-2004-ocaml-4.12-amd64, ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.12-amd64 -> ocaml/opam:windows-msvc-ocaml-4.12 +4.11.2/amd64 + FROM ocurrent/opam-staging:windows-msvc-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.11 --packages=ocaml-variants.4.11.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.11.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.11.2/amd64 + FROM ocurrent/opam-staging:windows-msvc-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.11 --packages=ocaml-variants.4.11.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.11.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.11.2/amd64 + FROM ocurrent/opam-staging:windows-msvc-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.11 --packages=ocaml-variants.4.11.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.11.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.11.2/amd64 + FROM ocurrent/opam-staging:windows-msvc-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.11 --packages=ocaml-variants.4.11.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.11.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.11-amd64, ocurrent/opam-staging:windows-msvc-1909-ocaml-4.11-amd64, ocurrent/opam-staging:windows-msvc-2004-ocaml-4.11-amd64, ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.11-amd64 -> ocaml/opam:windows-msvc-ocaml-4.11 +4.10.2/amd64 + FROM ocurrent/opam-staging:windows-msvc-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.10 --packages=ocaml-variants.4.10.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.10.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.10.2/amd64 + FROM ocurrent/opam-staging:windows-msvc-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.10 --packages=ocaml-variants.4.10.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.10.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.10.2/amd64 + FROM ocurrent/opam-staging:windows-msvc-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.10 --packages=ocaml-variants.4.10.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.10.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.10.2/amd64 + FROM ocurrent/opam-staging:windows-msvc-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.10 --packages=ocaml-variants.4.10.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.10.2+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.10-amd64, ocurrent/opam-staging:windows-msvc-1909-ocaml-4.10-amd64, ocurrent/opam-staging:windows-msvc-2004-ocaml-4.10-amd64, ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.10-amd64 -> ocaml/opam:windows-msvc-ocaml-4.10 +4.09.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.09 --packages=ocaml-variants.4.09.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.09.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.09.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.09 --packages=ocaml-variants.4.09.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.09.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.09.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.09 --packages=ocaml-variants.4.09.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.09.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.09.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.09 --packages=ocaml-variants.4.09.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.09.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.09-amd64, ocurrent/opam-staging:windows-msvc-1909-ocaml-4.09-amd64, ocurrent/opam-staging:windows-msvc-2004-ocaml-4.09-amd64, ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.09-amd64 -> ocaml/opam:windows-msvc-ocaml-4.09 +4.08.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.08 --packages=ocaml-variants.4.08.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.08.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.08.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.08 --packages=ocaml-variants.4.08.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.08.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.08.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.08 --packages=ocaml-variants.4.08.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.08.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.08.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.08 --packages=ocaml-variants.4.08.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.08.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.08-amd64, ocurrent/opam-staging:windows-msvc-1909-ocaml-4.08-amd64, ocurrent/opam-staging:windows-msvc-2004-ocaml-4.08-amd64, ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.08-amd64 -> ocaml/opam:windows-msvc-ocaml-4.08 +4.07.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.07 --packages=ocaml-variants.4.07.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.07.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.07.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.07 --packages=ocaml-variants.4.07.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.07.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.07.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.07 --packages=ocaml-variants.4.07.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.07.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.07.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.07 --packages=ocaml-variants.4.07.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.07.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.07-amd64, ocurrent/opam-staging:windows-msvc-1909-ocaml-4.07-amd64, ocurrent/opam-staging:windows-msvc-2004-ocaml-4.07-amd64, ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.07-amd64 -> ocaml/opam:windows-msvc-ocaml-4.07 +4.06.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-1809-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.06 --packages=ocaml-variants.4.06.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.06.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.06.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-1909-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.06 --packages=ocaml-variants.4.06.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.06.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.06.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-2004-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.06 --packages=ocaml-variants.4.06.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.06.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +4.06.1/amd64 + FROM ocurrent/opam-staging:windows-msvc-20H2-opam-amd64 + ENV OPAMYES="1" OPAMCONFIRMLEVEL="unsafe-yes" OPAMERRLOGLEN="0" OPAMPRECISETRACKING="1" + RUN ocaml-env exec --64 --ms=vs2019 --no-opam -- opam switch create 4.06 --packages=ocaml-variants.4.06.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam pin add -k version ocaml-variants 4.06.1+msvc64 + RUN ocaml-env exec --64 --ms=vs2019 -- opam install -y depext + ENTRYPOINT [ "ocaml-env", "exec", "--64", "--ms=vs2019", "--" ] + CMD [ "cmd.exe" ] + COPY [ "Dockerfile", "/Dockerfile.ocaml" ] +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.06-amd64, ocurrent/opam-staging:windows-msvc-1909-ocaml-4.06-amd64, ocurrent/opam-staging:windows-msvc-2004-ocaml-4.06-amd64, ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.06-amd64 -> ocaml/opam:windows-msvc-ocaml-4.06 +ocurrent/opam-staging:windows-msvc-1809-opam-amd64 -> ocaml/opam:windows-msvc-1809-opam +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.06-amd64 -> ocaml/opam:windows-msvc-1809-ocaml-4.06 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.06-amd64 -> ocaml/opam:windows-msvc-ltsc2019-ocaml-4.06 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.07-amd64 -> ocaml/opam:windows-msvc-1809-ocaml-4.07 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.07-amd64 -> ocaml/opam:windows-msvc-ltsc2019-ocaml-4.07 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.08-amd64 -> ocaml/opam:windows-msvc-1809-ocaml-4.08 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.08-amd64 -> ocaml/opam:windows-msvc-ltsc2019-ocaml-4.08 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.09-amd64 -> ocaml/opam:windows-msvc-1809-ocaml-4.09 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.09-amd64 -> ocaml/opam:windows-msvc-ltsc2019-ocaml-4.09 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.10-amd64 -> ocaml/opam:windows-msvc-1809-ocaml-4.10 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.10-amd64 -> ocaml/opam:windows-msvc-ltsc2019-ocaml-4.10 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.11-amd64 -> ocaml/opam:windows-msvc-1809-ocaml-4.11 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.11-amd64 -> ocaml/opam:windows-msvc-ltsc2019-ocaml-4.11 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.12-amd64 -> ocaml/opam:windows-msvc-1809 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.12-amd64 -> ocaml/opam:windows-msvc-1809-ocaml-4.12 +ocurrent/opam-staging:windows-msvc-1809-ocaml-4.12-amd64 -> ocaml/opam:windows-msvc-ltsc2019-ocaml-4.12 +ocurrent/opam-staging:windows-msvc-1909-opam-amd64 -> ocaml/opam:windows-msvc-1909-opam +ocurrent/opam-staging:windows-msvc-1909-ocaml-4.06-amd64 -> ocaml/opam:windows-msvc-1909-ocaml-4.06 +ocurrent/opam-staging:windows-msvc-1909-ocaml-4.07-amd64 -> ocaml/opam:windows-msvc-1909-ocaml-4.07 +ocurrent/opam-staging:windows-msvc-1909-ocaml-4.08-amd64 -> ocaml/opam:windows-msvc-1909-ocaml-4.08 +ocurrent/opam-staging:windows-msvc-1909-ocaml-4.09-amd64 -> ocaml/opam:windows-msvc-1909-ocaml-4.09 +ocurrent/opam-staging:windows-msvc-1909-ocaml-4.10-amd64 -> ocaml/opam:windows-msvc-1909-ocaml-4.10 +ocurrent/opam-staging:windows-msvc-1909-ocaml-4.11-amd64 -> ocaml/opam:windows-msvc-1909-ocaml-4.11 +ocurrent/opam-staging:windows-msvc-1909-ocaml-4.12-amd64 -> ocaml/opam:windows-msvc-1909 +ocurrent/opam-staging:windows-msvc-1909-ocaml-4.12-amd64 -> ocaml/opam:windows-msvc-1909-ocaml-4.12 +ocurrent/opam-staging:windows-msvc-2004-opam-amd64 -> ocaml/opam:windows-msvc-2004-opam +ocurrent/opam-staging:windows-msvc-2004-ocaml-4.06-amd64 -> ocaml/opam:windows-msvc-2004-ocaml-4.06 +ocurrent/opam-staging:windows-msvc-2004-ocaml-4.07-amd64 -> ocaml/opam:windows-msvc-2004-ocaml-4.07 +ocurrent/opam-staging:windows-msvc-2004-ocaml-4.08-amd64 -> ocaml/opam:windows-msvc-2004-ocaml-4.08 +ocurrent/opam-staging:windows-msvc-2004-ocaml-4.09-amd64 -> ocaml/opam:windows-msvc-2004-ocaml-4.09 +ocurrent/opam-staging:windows-msvc-2004-ocaml-4.10-amd64 -> ocaml/opam:windows-msvc-2004-ocaml-4.10 +ocurrent/opam-staging:windows-msvc-2004-ocaml-4.11-amd64 -> ocaml/opam:windows-msvc-2004-ocaml-4.11 +ocurrent/opam-staging:windows-msvc-2004-ocaml-4.12-amd64 -> ocaml/opam:windows-msvc-2004 +ocurrent/opam-staging:windows-msvc-2004-ocaml-4.12-amd64 -> ocaml/opam:windows-msvc-2004-ocaml-4.12 +ocurrent/opam-staging:windows-msvc-20H2-opam-amd64 -> ocaml/opam:windows-msvc-20H2-opam +ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.06-amd64 -> ocaml/opam:windows-msvc-20H2-ocaml-4.06 +ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.07-amd64 -> ocaml/opam:windows-msvc-20H2-ocaml-4.07 +ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.08-amd64 -> ocaml/opam:windows-msvc-20H2-ocaml-4.08 +ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.09-amd64 -> ocaml/opam:windows-msvc-20H2-ocaml-4.09 +ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.10-amd64 -> ocaml/opam:windows-msvc-20H2-ocaml-4.10 +ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.11-amd64 -> ocaml/opam:windows-msvc-20H2-ocaml-4.11 +ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.12-amd64 -> ocaml/opam:windows-msvc-20H2 +ocurrent/opam-staging:windows-msvc-20H2-ocaml-4.12-amd64 -> ocaml/opam:windows-msvc-20H2-ocaml-4.12 diff --git a/dune-project b/dune-project index c78616b7..13cc787d 100644 --- a/dune-project +++ b/dune-project @@ -10,6 +10,7 @@ (synopsis "Generate Docker base images for OCaml and opam using ocurrent") (depends (ocaml (>= 4.12)) + (conf-libev (<> :os "win32")) (prometheus-app (>= 1.0)) ppx_sexp_conv ppx_deriving_yojson diff --git a/src/conf.ml b/src/conf.ml index 47100d7e..b09bbc59 100644 --- a/src/conf.ml +++ b/src/conf.ml @@ -3,7 +3,10 @@ let staging_repo = "ocurrent/opam-staging" let public_repo = "ocaml/opam" -let password_path = "/run/secrets/ocurrent-hub" +let password_path = + let open Fpath in + let root = v (if Sys.win32 then "C:\\ProgramData\\Docker" else "/run") in + root / "secrets" / "ocurrent-hub" |> to_string module Capnp = struct (* Cap'n Proto RPC is enabled by passing --capnp-public-address. These values are hard-coded @@ -36,8 +39,11 @@ let pool_name os_family arch = let switches ~arch ~distro = let is_tier1 = List.mem distro (Dockerfile_distro.active_tier1_distros arch) in + (* opam-repository-mingw doesn't package the development version of + the compiler. *) + let with_dev = match distro with `Windows _ -> false | _ -> true in let main_switches = - Ocaml_version.Releases.recent_with_dev + Ocaml_version.Releases.(if with_dev then recent_with_dev else recent) |> List.filter (fun ov -> Dockerfile_distro.distro_supported_on arch ov distro) in if is_tier1 then ( @@ -47,7 +53,10 @@ let switches ~arch ~distro = ) (* We can't get the active distros directly, but assume x86_64 is a superset of everything else. *) -let distros = Dockerfile_distro.(active_distros `X86_64 |> List.filter (fun d -> os_family_of_distro d = `Linux)) +let distros = Dockerfile_distro.(active_distros `X86_64 |> List.filter (fun d -> + match os_family_of_distro d with + | `Linux | `Windows -> true + | _ -> false)) let arches_for ~distro = Dockerfile_distro.distro_arches Ocaml_version.Releases.latest distro diff --git a/src/dump.ml b/src/dump.ml index 2cadfd8f..be04600c 100644 --- a/src/dump.ml +++ b/src/dump.ml @@ -95,6 +95,7 @@ let run () = let repos = Fake.Current.Primitive.const { Git_repositories. opam_repository_master = Current_git.Commit_id.v ~repo:"opam_repository" ~gref:"master" ~hash:"master"; + opam_repository_mingw_opam2 = Current_git.Commit_id.v ~repo:"opam_repository_mingw_opam2" ~gref:"master" ~hash:"master"; opam_2_0 = Current_git.Commit_id.v ~repo:"opam" ~gref:"2.0" ~hash:"2.0"; opam_2_1 = Current_git.Commit_id.v ~repo:"opam" ~gref:"2.1" ~hash:"2.1"; } in diff --git a/src/git_repositories.ml b/src/git_repositories.ml index 86a4fbfe..6a2b0545 100644 --- a/src/git_repositories.ml +++ b/src/git_repositories.ml @@ -16,13 +16,15 @@ module Repositories = struct type t = { opam_repository_master : repo; + opam_repository_mingw_opam2 : repo; opam_2_0 : repo; opam_2_1 : repo; } - let digest {opam_repository_master; opam_2_0; opam_2_1} = + let digest {opam_repository_master; opam_repository_mingw_opam2; opam_2_0; opam_2_1} = let json = `Assoc [ "opam-repository__master", `String opam_repository_master; + "opam-repository-mingw__opam2", `String opam_repository_mingw_opam2; "opam__2.0", `String opam_2_0; "opam__2.1", `String opam_2_1; ] in @@ -34,6 +36,7 @@ module Repositories = struct type t = { opam_repository_master : hash; + opam_repository_mingw_opam2 : hash; opam_2_0 : hash; opam_2_1 : hash; } [@@deriving yojson] @@ -52,12 +55,13 @@ module Repositories = struct Current.Process.check_output ~cwd ~cancellable:true ~job ("", [|"git"; "rev-parse"; "HEAD"|]) >>!= fun hash -> Lwt.return (Ok (String.trim hash)) - let build No_context job {Key.opam_repository_master; opam_2_0; opam_2_1} = + let build No_context job {Key.opam_repository_master; opam_repository_mingw_opam2; opam_2_0; opam_2_1} = Current.Job.start job ~level:Current.Level.Mostly_harmless >>= fun () -> get_commit_hash ~job ~repo:opam_repository_master ~branch:"master" >>!= fun opam_repository_master -> + get_commit_hash ~job ~repo:opam_repository_mingw_opam2 ~branch:"opam2" >>!= fun opam_repository_mingw_opam2 -> get_commit_hash ~job ~repo:opam_2_0 ~branch:"2.0" >>!= fun opam_2_0 -> get_commit_hash ~job ~repo:opam_2_1 ~branch:"2.1" >>!= fun opam_2_1 -> - Lwt.return (Ok {Value.opam_repository_master; opam_2_0; opam_2_1}) + Lwt.return (Ok {Value.opam_repository_master; opam_repository_mingw_opam2; opam_2_0; opam_2_1}) let pp f _ = Fmt.string f "Git repositories" @@ -68,6 +72,7 @@ module Cache = Current_cache.Make(Repositories) type t = { opam_repository_master : Current_git.Commit_id.t; + opam_repository_mingw_opam2 : Current_git.Commit_id.t; opam_2_0 : Current_git.Commit_id.t; opam_2_1 : Current_git.Commit_id.t; } @@ -76,10 +81,11 @@ let get ~schedule = let key = { Repositories.Key. opam_repository_master = "git://github.com/ocaml/opam-repository"; + opam_repository_mingw_opam2 = "git://github.com/fdopen/opam-repository-mingw"; opam_2_0 = "git://github.com/ocaml/opam"; opam_2_1 = "git://github.com/ocaml/opam"; } in - let+ {Repositories.Value.opam_repository_master; opam_2_0; opam_2_1} = + let+ {Repositories.Value.opam_repository_master; opam_repository_mingw_opam2; opam_2_0; opam_2_1} = Current.component "Git-repositories" |> let> key = Current.return key in Cache.get ~schedule Repositories.No_context key @@ -87,6 +93,8 @@ let get ~schedule = { opam_repository_master = Current_git.Commit_id.v ~repo:key.opam_repository_master ~gref:"master" ~hash:opam_repository_master; + opam_repository_mingw_opam2 = + Current_git.Commit_id.v ~repo:key.opam_repository_mingw_opam2 ~gref:"opam2" ~hash:opam_repository_mingw_opam2; opam_2_0 = Current_git.Commit_id.v ~repo:key.opam_2_0 ~gref:"2.0" ~hash:opam_2_0; opam_2_1 = diff --git a/src/git_repositories.mli b/src/git_repositories.mli index 8d3de91c..95be8804 100644 --- a/src/git_repositories.mli +++ b/src/git_repositories.mli @@ -1,5 +1,6 @@ type t = { opam_repository_master : Current_git.Commit_id.t; + opam_repository_mingw_opam2 : Current_git.Commit_id.t; opam_2_0 : Current_git.Commit_id.t; opam_2_1 : Current_git.Commit_id.t; } diff --git a/src/pipeline.ml b/src/pipeline.ml index 982770d9..562f6f26 100644 --- a/src/pipeline.ml +++ b/src/pipeline.ml @@ -13,27 +13,27 @@ let aliases_of = let master_distro = Dockerfile_distro.(resolve_alias master_distro) -let maybe_add_beta switch = - let open Dockerfile in +type 'a run = ('a, unit, string, Dockerfile.t) format4 -> 'a + +let maybe_add_beta (run : 'a run) switch = if Ocaml_version.Releases.is_dev switch then run "opam repo add beta git://github.com/ocaml/ocaml-beta-repository --set-default" else - empty + Dockerfile.empty -let maybe_add_multicore switch = - let open Dockerfile in +let maybe_add_multicore (run : 'a run) switch = if Ocaml_version.Configure_options.is_multicore switch then run "opam repo add multicore git://github.com/ocaml-multicore/multicore-opam --set-default" else - empty + Dockerfile.empty -let maybe_install_secondary_compiler ~switch = +let maybe_install_secondary_compiler (run : 'a run) os_family switch = let dune_min_native_support = Ocaml_version.Releases.v4_08 in - let open Dockerfile in - if Ocaml_version.compare switch dune_min_native_support < 0 then + (* opam-repository-mingw doesn't package ocaml-secondary-compiler. *) + if Ocaml_version.compare switch dune_min_native_support < 0 && os_family <> `Windows then run "opam install -y ocaml-secondary-compiler" else - empty + Dockerfile.empty let install_package_archive opam_image = let open Dockerfile in @@ -44,28 +44,50 @@ let install_package_archive opam_image = copy ~chown:"0:0" ~from:"archive" ~src:["/home/opam/opam-repository/cache"] ~dst:"/cache" () (* Generate a Dockerfile to install OCaml compiler [switch] in [opam_image]. *) -let install_compiler_df ~os_family ~arch ~switch opam_image = - let switch_name = Ocaml_version.to_string (Ocaml_version.with_just_major_and_minor switch) in - let (package_name, package_version) = Ocaml_version.Opam.V2.package switch in - let additional_packages = Ocaml_version.Opam.V2.additional_packages switch in - let personality = Dockerfile_distro.personality os_family arch in +let install_compiler_df ~os_family ~arch ~switch ?windows_port opam_image = + let switch_name = Ocaml_version.(with_just_major_and_minor switch |> to_string) in + let (package_name, package_version) = + match windows_port with + | None -> Ocaml_version.Opam.V2.package switch + | Some port -> Dockerfile_windows.ocaml_for_windows_package_exn ~switch ~arch ~port + in let open Dockerfile in - let shell = Option.fold ~none:empty ~some:(fun pers -> shell [pers; "/bin/sh"; "-c"]) personality in + let personality = Dockerfile_distro.personality os_family arch in + let run, run_no_opam, depext, opam_exec = + let open Dockerfile_windows in + let bitness = if Ocaml_version.arch_is_32bit arch then "--32" else "--64" in + match windows_port with + | None -> + (fun fmt -> run fmt), (fun fmt -> run fmt), "opam-depext", ["opam"; "exec"; "--"] + | Some `Msvc -> + (fun fmt -> run_ocaml_env [bitness; "--ms=vs2019"] fmt), + (fun fmt -> run_ocaml_env [bitness; "--ms=vs2019"; "--no-opam"] fmt), + "depext", ["ocaml-env"; "exec"; bitness; "--ms=vs2019"; "--"] + | Some `Mingw -> + (fun fmt -> run_ocaml_env [bitness] fmt), + (fun fmt -> run_ocaml_env [bitness; "--no-opam"] fmt), + "depext depext-cygwinports", ["ocaml-env"; "exec"; bitness; "--"] + in + let shell = maybe (fun pers -> shell [pers; "/bin/sh"; "-c"]) personality in + let packages = + let additional_packages = Ocaml_version.Opam.V2.additional_packages switch in + String.concat "," (Printf.sprintf "%s.%s" package_name package_version :: additional_packages) + in from opam_image @@ shell @@ - maybe_add_beta switch @@ - maybe_add_multicore switch @@ + maybe_add_beta run switch @@ + maybe_add_multicore run switch @@ env ["OPAMYES", "1"; "OPAMCONFIRMLEVEL", "unsafe-yes"; "OPAMERRLOGLEN", "0"; (* Show the whole log if it fails *) "OPAMPRECISETRACKING", "1"; (* Mitigate https://github.com/ocaml/opam/issues/3997 *) ] @@ - run "opam switch create %s --packages=%s" switch_name (String.concat "," (Printf.sprintf "%s.%s" package_name package_version :: additional_packages)) @@ + run_no_opam "opam switch create %s --packages=%s" switch_name packages @@ run "opam pin add -k version %s %s" package_name package_version @@ - run "opam install -y opam-depext" @@ - maybe_install_secondary_compiler ~switch @@ - entrypoint_exec (Option.to_list personality @ ["opam"; "exec"; "--"]) @@ - cmd "bash" @@ + run "opam install -y %s" depext @@ + maybe_install_secondary_compiler run os_family switch @@ + entrypoint_exec (Option.to_list personality @ opam_exec) @@ + (match os_family with `Linux | `Cygwin -> cmd "bash" | `Windows -> cmd_exec ["cmd.exe"]) @@ copy ~src:["Dockerfile"] ~dst:"/Dockerfile.ocaml" () let or_die = function @@ -78,11 +100,14 @@ module Make (OCurrent : S.OCURRENT) = struct (* Pipeline to build the opam base image and the compiler images for a particular architecture. *) module Arch = struct + (* 2020-04-29: On Windows, squashing images is still experimental (broken). *) + let squash os_family = os_family <> `Windows + let install_opam ~arch ~ocluster ~distro ~repos ~push_target = let arch_name = Ocaml_version.string_of_arch arch in - let distro_tag = Dockerfile_distro.tag_of_distro distro in + let distro_tag, os_family = Dockerfile_distro.(tag_of_distro distro, os_family_of_distro distro) in Current.component "%s@,%s" distro_tag arch_name |> - let> {Git_repositories.opam_repository_master; opam_2_0; opam_2_1} = repos in + let> {Git_repositories.opam_repository_master; opam_repository_mingw_opam2; opam_2_0; opam_2_1} = repos in let dockerfile = let hash_opam_2_0 = Current_git.Commit_id.hash opam_2_0 in let hash_opam_2_1 = Current_git.Commit_id.hash opam_2_1 in @@ -91,29 +116,42 @@ module Make (OCurrent : S.OCURRENT) = struct let open Dockerfile in string_of_t ( opam @@ - copy ~chown:"opam:opam" ~src:["."] ~dst:"/home/opam/opam-repository" () @@ - run "opam-sandbox-disable" @@ - run "opam init -k local -a /home/opam/opam-repository --bare" @@ - run "rm -rf .opam/repo/default/.git" @@ + begin match os_family with + | `Cygwin | `Linux -> + copy ~chown:"opam:opam" ~src:["."] ~dst:"/home/opam/opam-repository" () @@ + run "opam-sandbox-disable" @@ + run "opam init -k local -a /home/opam/opam-repository --bare" @@ + run "rm -rf .opam/repo/default/.git" + | `Windows -> + let opam_repo = Dockerfile_windows.Cygwin.default.root ^ {|\home\opam\opam-repository|} in + let opam_root = {|C:\opam\.opam|} in + copy ~src:["."] ~dst:opam_repo () @@ + env [("OPAMROOT", opam_root)] @@ + run "opam init -k local -a \"%s\" --bare --disable-sandboxing" opam_repo @@ + Dockerfile_windows.Cygwin.run_sh "rm -rf /cygdrive/c/opam/.opam/repo/default/.git" + end @@ copy ~src:["Dockerfile"] ~dst:"/Dockerfile.opam" () ) ) in - let options = { Cluster_api.Docker.Spec.defaults with squash = true; include_git = true } in + let options = { Cluster_api.Docker.Spec.defaults with + squash = squash (Dockerfile_distro.os_family_of_distro distro); + include_git = true } in let cache_hint = Printf.sprintf "opam-%s" distro_tag in - OCluster.Raw.build_and_push ocluster ~src:[opam_repository_master] dockerfile + let opam_repository = match os_family with `Windows -> opam_repository_mingw_opam2 | _ -> opam_repository_master in + OCluster.Raw.build_and_push ocluster ~src:[opam_repository] dockerfile ~cache_hint ~options ~push_target - ~pool:(Conf.pool_name (Dockerfile_distro.os_family_of_distro distro) arch) + ~pool:(Conf.pool_name os_family arch) - let install_compiler ~os_family ~arch ~ocluster ~switch ~push_target base = + let install_compiler ~os_family ~arch ~ocluster ~switch ~push_target ?windows_port base = let arch_name = Ocaml_version.string_of_arch arch in Current.component "%s/%s" (Ocaml_version.to_string switch) arch_name |> let> base = base in - let dockerfile = `Contents (install_compiler_df ~os_family ~arch ~switch base |> Dockerfile.string_of_t) in + let dockerfile = `Contents (install_compiler_df ~os_family ~arch ~switch ?windows_port base |> Dockerfile.string_of_t) in (* ([include_git] doesn't do anything here, but it saves rebuilding during the upgrade) *) - let options = { Cluster_api.Docker.Spec.defaults with squash = true; include_git = true } in + let options = { Cluster_api.Docker.Spec.defaults with squash = squash os_family; include_git = true } in let cache_hint = Printf.sprintf "%s-%s-%s" (Ocaml_version.to_string switch) arch_name base in OCluster.Raw.build_and_push ocluster ~src:[] dockerfile ~cache_hint @@ -125,7 +163,7 @@ module Make (OCurrent : S.OCURRENT) = struct Current.component "archive" |> let> base = base in let dockerfile = `Contents (install_package_archive base |> Dockerfile.string_of_t) in - let options = { Cluster_api.Docker.Spec.defaults with squash = true; include_git = true } in + let options = { Cluster_api.Docker.Spec.defaults with squash = squash os_family; include_git = true } in let cache_hint = Printf.sprintf "archive-%s" base in OCluster.Raw.build_and_push ocluster ~src:[] dockerfile ~cache_hint @@ -151,7 +189,8 @@ module Make (OCurrent : S.OCURRENT) = struct |> Cluster_api.Docker.Image_id.of_string |> or_die in - let repo_id = install_compiler ~os_family ~arch ~ocluster ~switch ~push_target opam_image in + let windows_port = match distro with `Windows (port, _) -> Some port | _ -> None in + let repo_id = install_compiler ~os_family ~arch ~ocluster ~switch ~push_target ?windows_port opam_image in (switch, repo_id) in (* Build the archive image for the debian 10 / x86_64 image only *) @@ -181,58 +220,133 @@ module Make (OCurrent : S.OCURRENT) = struct let> v = t in Current.Primitive.const v - (* The main pipeline. Builds images for all supported distribution, compiler version and architecture combinations. *) - let v ~ocluster repos = - Current.all ( - Conf.distros |> List.map @@ fun distro -> - let distro_label = Dockerfile_distro.tag_of_distro distro in - let repos = label distro_label repos in - Current.collapse ~key:"distro" ~value:distro_label ~input:repos @@ - let opam_images, ocaml_images, archive_image = - let arch_results = - let arches = Conf.arches_for ~distro in - List.map (Arch.pipeline ~ocluster ~repos ~distro) arches in - List.fold_left (fun (aa,ba,ca) (a,b,c) -> + let pipeline ~ocluster repos distro gen_tags = + let opam_images, ocaml_images, archive_image = + let arch_results = + let arches = Conf.arches_for ~distro in + List.map (Arch.pipeline ~ocluster ~repos ~distro) arches in + List.fold_left (fun (aa,ba,ca) (a,b,c) -> let ca = match ca,c with Some v, _ -> Some v | None, v -> v in - a::aa, b::ba, ca) ([], [], None) arch_results in - let ocaml_images = - all_switches ocaml_images |> List.filter_map @@ fun switch -> - let images = List.filter_map (Switch_map.find_opt switch) ocaml_images in - if images = [] then None - else ( - let full_tag = Tag.v distro ~switch in - let tags = - let distro_aliases = aliases_of distro in - (* Push the image as e.g. debian-10-ocaml-4.09 and debian-ocaml-4.09 *) - let tags = full_tag :: List.map (Tag.v ~switch) distro_aliases in - if switch <> Ocaml_version.Releases.latest then tags - else ( - (* For every distro, also create a link to the latest OCaml compiler. - e.g. debian-9 -> debian-9-ocaml-4.09 *) - let tags = Tag.v_alias distro :: tags in - (* If [distro] is the latest version of that distribution, make an alias like - debian -> debian-10-ocaml-4.09 *) - let tags = List.map Tag.v_alias distro_aliases @ tags in - (* The top-level alias: latest -> debian-10-ocaml-4.09 *) - if distro <> master_distro then tags - else Tag.latest :: tags - ) - in - (* Fmt.pr "Aliases: %s -> %a@." full_tag Fmt.(Dump.list string) (List.sort String.compare tags); *) - let pushes = List.map (fun tag -> Docker.push_manifest ?auth:Conf.auth ~tag images |> Current.ignore_value) tags in - Some (full_tag, Current.all pushes) - ) + a::aa, b::ba, ca) ([], [], None) arch_results + in + let (multiarch_images, ocaml_images) = + all_switches ocaml_images |> List.filter_map @@ begin fun switch -> + match List.filter_map (Switch_map.find_opt switch) ocaml_images with + | [] -> None + | images -> + let full_tag = Tag.v distro ~switch in + let (multiarch_images, tags) = gen_tags images full_tag switch (aliases_of distro) in + let pushes = List.map (fun tag -> Docker.push_manifest ?auth:Conf.auth ~tag images |> Current.ignore_value) tags in + Some (multiarch_images, (full_tag, Current.all pushes)) + end |> List.split + in + let archive_images = + match archive_image with + | None -> [] + | Some image -> [ "archive", Docker.push_manifest ?auth:Conf.auth ~tag:(Tag.archive ()) [image] |> Current.ignore_value ] + in + let pipeline = + Current.all_labelled ( + ("base", Docker.push_manifest ?auth:Conf.auth ~tag:(Tag.v distro) opam_images |> Current.ignore_value) + :: ocaml_images + @ archive_images) + in + multiarch_images, pipeline + + let linux_pipeline ~ocluster repos distro = + let distro_label = Dockerfile_distro.tag_of_distro distro in + let repos = label distro_label repos in + Current.collapse ~key:"distro" ~value:distro_label ~input:repos @@ + let gen_tags _images full_tag switch distro_aliases = + let tags = + (* Push the image as e.g. debian-10-ocaml-4.09 and debian-ocaml-4.09 *) + let tags = full_tag :: List.map (Tag.v ~switch) distro_aliases in + if switch <> Ocaml_version.Releases.latest then tags + else ( + (* For every distro, also create a link to the latest OCaml compiler. + e.g. debian-9 -> debian-9-ocaml-4.09 *) + let tags = Tag.v_alias distro :: tags in + (* If [distro] is the latest version of that distribution, make an alias like + debian -> debian-10-ocaml-4.09 *) + let tags = List.map Tag.v_alias distro_aliases @ tags in + (* The top-level alias: latest -> debian-10-ocaml-4.09 *) + if distro <> master_distro then tags + else Tag.latest :: tags + ) + in + (* Fmt.pr "Aliases: %s -> %a@." full_tag Fmt.(Dump.list string) (List.sort String.compare tags); *) + Switch_map.empty, tags in - let archive_images = - match archive_image with - | None -> [] - | Some image -> [ "archive", Docker.push_manifest ?auth:Conf.auth ~tag:(Tag.archive ()) [image] |> Current.ignore_value ] + let (_multiarch_images, pipeline) = pipeline ~ocluster repos distro gen_tags in + pipeline + + let windows_distro_pipeline ~ocluster repos distro_label distro_versions = + let distro_pipeline multiarches distro = + let gen_tags images full_tag switch distro_aliases = + let tags = + (* Push the image as e.g. windows-mingw-1809-ocaml-4.09 and windows-mingw-ltsc2019-ocaml-4.09 *) + let tags = full_tag :: List.map (Tag.v ~switch) distro_aliases in + if switch <> Ocaml_version.Releases.latest then tags + else ( + (* For every distro, also create a link to the latest OCaml compiler. + e.g. windows-mingw-1809 -> windows-mingw-1809-ocaml-4.09 *) + Tag.v_alias distro :: tags + ) + in + (* Fmt.pr "Aliases: %s -> %a@." full_tag Fmt.(Dump.list string) (List.sort String.compare tags); *) + Switch_map.add switch images Switch_map.empty, tags in - Current.all_labelled ( - ("base", Docker.push_manifest ?auth:Conf.auth ~tag:(Tag.v distro) opam_images |> Current.ignore_value) - :: ocaml_images - @ archive_images) - ) + let (multiarch_images, pipeline) = pipeline ~ocluster repos distro gen_tags in + let multiarch_images = + let update images = function None -> Some images | Some images' -> Some (images @ images') in + let fold switch images acc = Switch_map.update switch (update images) acc in + let fold_left acc images = Switch_map.fold fold acc images in + List.fold_left fold_left multiarches multiarch_images + in + (multiarch_images, pipeline) + in + let multiarch, pipelines = List.fold_left_map distro_pipeline Switch_map.empty distro_versions in + let pushes = + Switch_map.fold (fun switch images pushes -> + let full_tag = Printf.sprintf "%s:%s-ocaml-%s" Conf.public_repo distro_label (Tag.tag_of_compiler switch) in + let tags = + let tags = [full_tag] in + if switch <> Ocaml_version.Releases.latest then tags + else Printf.sprintf "%s:%s" Conf.public_repo distro_label :: tags + in + (* Fmt.pr "Aliases: %s -> %a@." full_tag Fmt.(Dump.list string) (List.sort String.compare tags); *) + let pushes' = List.map (fun tag -> Docker.push_manifest ?auth:Conf.auth ~tag images |> Current.ignore_value) tags in + (full_tag, Current.all pushes') :: pushes) + multiarch [] + in + Current.(collapse ~key:"distro" ~value:distro_label ~input:repos (all ((all_labelled pushes) :: pipelines))) + + let windows_pipeline ~ocluster repos mingw msvc cygwin = + List.filter_map (fun (distro_label, distros) -> + match distros with + | [] -> None + | distro_versions -> + let repos = label distro_label repos in + windows_distro_pipeline ~ocluster repos distro_label distro_versions |> Option.some) + [("windows-mingw", mingw); ("windows-msvc", msvc); ("cygwin", cygwin)] + + (* The main pipeline. Builds images for all supported distribution, compiler version and architecture combinations. *) + let v ~ocluster repos = + let linux, mingw, msvc, cygwin = Conf.distros |> List.fold_left (fun (linux, mingw, msvc, cygwin) distro -> + let os_family = Dockerfile_distro.os_family_of_distro distro in + match os_family with + | `Linux -> distro :: linux, mingw, msvc, cygwin + | `Cygwin -> linux, mingw, msvc, distro :: cygwin + | `Windows -> + match distro with + | `Windows (`Mingw, _) -> linux, distro :: mingw, msvc, cygwin + | `Windows (`Msvc, _) -> linux, mingw, distro :: msvc, cygwin + | _ -> assert false) ([], [], [], []) + in + let pipelines = + List.rev_map (linux_pipeline ~ocluster repos) linux + @ windows_pipeline ~ocluster repos mingw msvc cygwin in + Current.all pipelines end module Real = Make(struct diff --git a/src/tag.mli b/src/tag.mli index 39f03427..1a9607cd 100644 --- a/src/tag.mli +++ b/src/tag.mli @@ -1,3 +1,7 @@ +val tag_of_compiler : Ocaml_version.t -> string +(** [tag_of_compiler switch] returns a tag identifying the compiler by + its version and variants. *) + val v : ?arch:Ocaml_version.arch -> ?switch:Ocaml_version.t -> Dockerfile_distro.t -> string (** [v ?arch ?switch distro] is the Docker tag to use for an image built on [distro] and [arch] with OCaml compiler [switch] installed. If [switch] is [None] then this is a base image