mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-11-28 00:49:01 +08:00
[macos ci] update to 2022-01-03 (#22314)
* [macos ci] update to 2022-01-03 * update the instructions * forgot to update azure-pipelines-osx.yml * install parallels in Install-Prerequisites.ps1 * oops * fix ace, libsoundio, and libpqxx * tensorflow doesn't yet support macOS 12
This commit is contained in:
parent
964e75806b
commit
5edd518dc3
31
ports/ace/fix-macos-12.patch
Normal file
31
ports/ace/fix-macos-12.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
--- /dev/null
|
||||||
|
+++ b/include/makeinclude/platform_macosx_monterey.GNU
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
+include $(ACE_ROOT)/include/makeinclude/platform_macosx_bigsur.GNU
|
||||||
|
+
|
||||||
|
|
||||||
|
--- a/include/makeinclude/platform_macosx.GNU
|
||||||
|
+++ b/include/makeinclude/platform_macosx.GNU
|
||||||
|
@@ -24,6 +24,9 @@
|
||||||
|
MACOS_CODENAME_VER_11_1 := bigsur
|
||||||
|
MACOS_CODENAME_VER_11_2 := bigsur
|
||||||
|
MACOS_CODENAME_VER_11_latest := bigsur
|
||||||
|
+MACOS_CODENAME_VER_12_0 := monterey
|
||||||
|
+MACOS_CODENAME_VER_12_1 := monterey
|
||||||
|
+MACOS_CODENAME_VER_12_latest := monterey
|
||||||
|
|
||||||
|
MACOS_CODENAME = $(MACOS_CODENAME_VER_$(MACOS_MAJOR_VERSION)_$(MACOS_MINOR_VERSION))
|
||||||
|
|
||||||
|
@@ -42,6 +45,12 @@ else ifeq ($(MACOS_MAJOR_VERSION), 11)
|
||||||
|
## just use the latest known version
|
||||||
|
MACOS_CODENAME = $(MACOS_CODENAME_VER_11_latest)
|
||||||
|
endif
|
||||||
|
+else ifeq ($(MACOS_MAJOR_VERSION),12)
|
||||||
|
+ ifeq ($(shell test $(MACOS_MINOR_VERSION) -gt 1; echo $$?),0)
|
||||||
|
+ ## if the detected version is greater than the latest know version,
|
||||||
|
+ ## just use the latest known version
|
||||||
|
+ MACOS_CODENAME = $(MACOS_CODENAME_VER_12_latest)
|
||||||
|
+ endif
|
||||||
|
else
|
||||||
|
## Unsupported major version
|
||||||
|
$(error Unsupported MacOS version $(MACOS_RELEASE_VERSION))
|
@ -13,7 +13,6 @@ if("tao" IN_LIST FEATURES)
|
|||||||
SHA512 3ea0cc7b35433d7c41f51137caacd394a976cf4d5c2972a35015901b3ba172bacff0216a3146bf632b929a63853b7123019382c22d14c6d64e43a71a61b88023
|
SHA512 3ea0cc7b35433d7c41f51137caacd394a976cf4d5c2972a35015901b3ba172bacff0216a3146bf632b929a63853b7123019382c22d14c6d64e43a71a61b88023
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
# VCPKG_TARGET_IS_LINUX
|
|
||||||
vcpkg_download_distfile(ARCHIVE
|
vcpkg_download_distfile(ARCHIVE
|
||||||
URLS "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-${ACE_VERSION_DIRECTORY}/ACE%2BTAO-src-${ACE_VERSION}.tar.gz"
|
URLS "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-${ACE_VERSION_DIRECTORY}/ACE%2BTAO-src-${ACE_VERSION}.tar.gz"
|
||||||
FILENAME ACE-TAO-${ACE_VERSION}.tar.gz
|
FILENAME ACE-TAO-${ACE_VERSION}.tar.gz
|
||||||
@ -28,8 +27,7 @@ else()
|
|||||||
FILENAME ACE-src-${ACE_VERSION}.zip
|
FILENAME ACE-src-${ACE_VERSION}.zip
|
||||||
SHA512 73707c92a0533ab60f090cfb620d508755b8267e2b83fb52d9903c4d780d2e2b504545433fdbe34801d4895cf938ecc5a5f26c34528851080bcce07f5a501ac1
|
SHA512 73707c92a0533ab60f090cfb620d508755b8267e2b83fb52d9903c4d780d2e2b504545433fdbe34801d4895cf938ecc5a5f26c34528851080bcce07f5a501ac1
|
||||||
)
|
)
|
||||||
else(VCPKG_TARGET_IS_WINDOWS)
|
else()
|
||||||
# VCPKG_TARGET_IS_LINUX
|
|
||||||
vcpkg_download_distfile(ARCHIVE
|
vcpkg_download_distfile(ARCHIVE
|
||||||
URLS "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-${ACE_VERSION_DIRECTORY}/ACE-src-${ACE_VERSION}.tar.gz"
|
URLS "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-${ACE_VERSION_DIRECTORY}/ACE-src-${ACE_VERSION}.tar.gz"
|
||||||
FILENAME ACE-src-${ACE_VERSION}.tar.gz
|
FILENAME ACE-src-${ACE_VERSION}.tar.gz
|
||||||
@ -41,6 +39,8 @@ endif()
|
|||||||
vcpkg_extract_source_archive_ex(
|
vcpkg_extract_source_archive_ex(
|
||||||
OUT_SOURCE_PATH SOURCE_PATH
|
OUT_SOURCE_PATH SOURCE_PATH
|
||||||
ARCHIVE ${ARCHIVE}
|
ARCHIVE ${ARCHIVE}
|
||||||
|
PATCHES
|
||||||
|
fix-macos-12.patch
|
||||||
)
|
)
|
||||||
|
|
||||||
set(ACE_ROOT ${SOURCE_PATH})
|
set(ACE_ROOT ${SOURCE_PATH})
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "ace",
|
"name": "ace",
|
||||||
"version": "7.0.5",
|
"version": "7.0.5",
|
||||||
"port-version": 2,
|
"port-version": 3,
|
||||||
"maintainers": "Johnny Willemsen <jwillemsen@remedy.nl>",
|
"maintainers": "Johnny Willemsen <jwillemsen@remedy.nl>",
|
||||||
"description": "The ADAPTIVE Communication Environment",
|
"description": "The ADAPTIVE Communication Environment",
|
||||||
"homepage": "https://www.dre.vanderbilt.edu/~schmidt/ACE.html",
|
"homepage": "https://www.dre.vanderbilt.edu/~schmidt/ACE.html",
|
||||||
|
15
ports/libpqxx/fix_build_with_apple_clang_13.patch
Normal file
15
ports/libpqxx/fix_build_with_apple_clang_13.patch
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# apple clang 13 has a bug where [[likely]] or [[unlikely]] returns
|
||||||
|
# don't count for checking that a constexpr function has a return,
|
||||||
|
# so at least one return must be unmarked
|
||||||
|
--- a/src/robusttransaction.cxx
|
||||||
|
+++ b/src/robusttransaction.cxx
|
||||||
|
@@ -62,9 +62,8 @@ constexpr tx_stat parse_status(std::string_view text) noexcept
|
||||||
|
case 'i':
|
||||||
|
if (text == in_progress)
|
||||||
|
PQXX_LIKELY return tx_in_progress;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
- PQXX_UNLIKELY
|
||||||
|
return tx_unknown;
|
||||||
|
}
|
||||||
|
|
@ -6,6 +6,7 @@ vcpkg_from_github(
|
|||||||
HEAD_REF master
|
HEAD_REF master
|
||||||
PATCHES
|
PATCHES
|
||||||
fix_build_with_vs2017.patch
|
fix_build_with_vs2017.patch
|
||||||
|
fix_build_with_apple_clang_13.patch
|
||||||
)
|
)
|
||||||
|
|
||||||
file(COPY "${CMAKE_CURRENT_LIST_DIR}/config-public-compiler.h.in" DESTINATION "${SOURCE_PATH}")
|
file(COPY "${CMAKE_CURRENT_LIST_DIR}/config-public-compiler.h.in" DESTINATION "${SOURCE_PATH}")
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "libpqxx",
|
"name": "libpqxx",
|
||||||
"version-semver": "7.6.0",
|
"version-semver": "7.6.0",
|
||||||
"port-version": 2,
|
"port-version": 3,
|
||||||
"description": "The official C++ client API for PostgreSQL",
|
"description": "The official C++ client API for PostgreSQL",
|
||||||
"homepage": "https://www.postgresql.org/",
|
"homepage": "https://www.postgresql.org/",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
|
@ -19,7 +19,16 @@ index 6541f1b..e81bdce 100644
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUILD_STATIC_LIBS)
|
if(BUILD_STATIC_LIBS)
|
||||||
@@ -243,9 +245,26 @@ if(BUILD_STATIC_LIBS)
|
@@ -204,8 +206,7 @@ if(MSVC)
|
||||||
|
set(EXAMPLE_CFLAGS "/W4")
|
||||||
|
set(TEST_CFLAGS "${LIB_CFLAGS}")
|
||||||
|
set(TEST_LDFLAGS " ")
|
||||||
|
set(LIBM " ")
|
||||||
|
else()
|
||||||
|
- set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Werror -pedantic")
|
||||||
|
set(LIB_CFLAGS "-std=c11 -fvisibility=hidden -Wall -Werror=strict-prototypes -Werror=old-style-definition -Werror=missing-prototypes -D_REENTRANT -D_POSIX_C_SOURCE=200809L -Wno-missing-braces")
|
||||||
|
set(EXAMPLE_CFLAGS "-std=c99 -Wall")
|
||||||
|
@@ -243,9 +244,26 @@ if(BUILD_STATIC_LIBS)
|
||||||
COMPILE_FLAGS ${LIB_CFLAGS}
|
COMPILE_FLAGS ${LIB_CFLAGS}
|
||||||
LINKER_LANGUAGE C
|
LINKER_LANGUAGE C
|
||||||
)
|
)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "libsoundio",
|
"name": "libsoundio",
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"port-version": 4,
|
"port-version": 5,
|
||||||
"description": "libsoundio is C library providing cross-platform audio input and output.",
|
"description": "libsoundio is C library providing cross-platform audio input and output.",
|
||||||
"homepage": "http://libsound.io/",
|
"homepage": "http://libsound.io/",
|
||||||
"supports": "!uwp",
|
"supports": "!uwp",
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
#
|
#
|
||||||
variables:
|
variables:
|
||||||
osx-pool: 'PrOsx-2021-07-27'
|
osx-pool: 'PrOsx-2022-01-03'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
- template: osx/azure-pipelines.yml
|
- template: osx/azure-pipelines.yml
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
variables:
|
variables:
|
||||||
windows-pool: 'PrWin-2021-12-14'
|
windows-pool: 'PrWin-2021-12-14'
|
||||||
linux-pool: 'PrLin-2021-12-13'
|
linux-pool: 'PrLin-2021-12-13'
|
||||||
osx-pool: 'PrOsx-2021-07-27'
|
osx-pool: 'PrOsx-2022-01-03'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
- template: windows/azure-pipelines.yml
|
- template: windows/azure-pipelines.yml
|
||||||
|
@ -1,68 +0,0 @@
|
|||||||
#!pwsh
|
|
||||||
#Requires -Version 6.0
|
|
||||||
|
|
||||||
<#
|
|
||||||
.SYNOPSIS
|
|
||||||
Installs the base box at the specified version from the share.
|
|
||||||
|
|
||||||
.PARAMETER FileshareMachine
|
|
||||||
The machine which is acting as a fileshare
|
|
||||||
|
|
||||||
.PARAMETER BoxVersion
|
|
||||||
The version of the box to add. Defaults to latest if nothing is passed.
|
|
||||||
#>
|
|
||||||
[CmdletBinding()]
|
|
||||||
Param(
|
|
||||||
[Parameter(Mandatory=$True)]
|
|
||||||
[String]$FileshareMachine,
|
|
||||||
|
|
||||||
[Parameter()]
|
|
||||||
[String]$BoxVersion
|
|
||||||
)
|
|
||||||
|
|
||||||
Set-StrictMode -Version 2
|
|
||||||
|
|
||||||
if (-not $IsMacOS) {
|
|
||||||
throw 'This script should only be run on a macOS host'
|
|
||||||
}
|
|
||||||
|
|
||||||
$mountPoint = '/Users/vcpkg/vagrant/share'
|
|
||||||
|
|
||||||
if (mount | grep "on $mountPoint (") {
|
|
||||||
umount $mountPoint
|
|
||||||
if (-not $?) {
|
|
||||||
Write-Error "umount $mountPoint failed with return code $LASTEXITCODE."
|
|
||||||
throw
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sshfs "fileshare@${FileshareMachine}:/Users/fileshare/share" $mountPoint
|
|
||||||
if ($LASTEXITCODE -eq 1) {
|
|
||||||
Write-Error 'sshfs returned 1.
|
|
||||||
This means that the osxfuse kernel extension was not allowed to load.
|
|
||||||
You may need to force un/reinstall osxfuse and/or sshfs with
|
|
||||||
brew uninstall osxfuse
|
|
||||||
brew uninstall sshfs
|
|
||||||
brew install osxfuse
|
|
||||||
brew install sshfs
|
|
||||||
Then, rerun this script.
|
|
||||||
|
|
||||||
If you''ve already done that, Please open
|
|
||||||
System Preferences > Security & Privacy > General,
|
|
||||||
and allow the kernel extension to load.
|
|
||||||
Then, rerun this script.
|
|
||||||
|
|
||||||
If you''ve already done this, you probably need to add your ssh keys to the fileshare machine.'
|
|
||||||
throw
|
|
||||||
} elseif (-not $?) {
|
|
||||||
Write-Error "sshfs failed with return code $LASTEXITCODE."
|
|
||||||
throw
|
|
||||||
}
|
|
||||||
|
|
||||||
if (-not [String]::IsNullOrEmpty($BoxVersion)) {
|
|
||||||
$versionArgs = @("--box-version", $BoxVersion)
|
|
||||||
} else {
|
|
||||||
$versionArgs = @()
|
|
||||||
}
|
|
||||||
|
|
||||||
vagrant box add "$mountPoint/vcpkg-boxes/macos-ci.json" @versionArgs
|
|
@ -65,8 +65,19 @@ Installing anyways."
|
|||||||
Get-RemoteFile -OutFile $pathToDmg -Uri $_.DmgUrl -Sha256 $_.Sha256
|
Get-RemoteFile -OutFile $pathToDmg -Uri $_.DmgUrl -Sha256 $_.Sha256
|
||||||
|
|
||||||
hdiutil attach $pathToDmg -mountpoint /Volumes/setup-installer
|
hdiutil attach $pathToDmg -mountpoint /Volumes/setup-installer
|
||||||
sudo installer -pkg "/Volumes/setup-installer/$($_.InstallerPath)" -target /
|
|
||||||
hdiutil detach /Volumes/setup-installer
|
if ($null -ne (Get-Member -InputObject $_ -Name 'InstallationCommands')) {
|
||||||
|
$_.InstallationCommands | % {
|
||||||
|
Write-Host "> $($_ -join ' ')"
|
||||||
|
& $_[0] $_[1..$_.Length] | Write-Host
|
||||||
|
}
|
||||||
|
} elseif ($null -ne (Get-Member -InputObject $_ -Name 'InstallerPath')) {
|
||||||
|
sudo installer -pkg "/Volumes/setup-installer/$($_.InstallerPath)" -target /
|
||||||
|
hdiutil detach /Volumes/setup-installer
|
||||||
|
} else {
|
||||||
|
Write-Error "$($_.Name) installer object has a DmgUrl, but neither an InstallerPath nor an InstallationCommands"
|
||||||
|
throw
|
||||||
|
}
|
||||||
} elseif ($null -ne (Get-Member -InputObject $_ -Name 'PkgUrl')) {
|
} elseif ($null -ne (Get-Member -InputObject $_ -Name 'PkgUrl')) {
|
||||||
$pathToPkg = "~/Downloads/$($_.Name).pkg"
|
$pathToPkg = "~/Downloads/$($_.Name).pkg"
|
||||||
Get-RemoteFile -OutFile $pathToPkg -Uri $_.PkgUrl -Sha256 $_.Sha256
|
Get-RemoteFile -OutFile $pathToPkg -Uri $_.PkgUrl -Sha256 $_.Sha256
|
||||||
@ -78,21 +89,6 @@ Installing anyways."
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$Installables.Brew | ForEach-Object {
|
|
||||||
$installable = $_
|
|
||||||
if ($null -eq (Get-Member -InputObject $installable -Name 'Kind')) {
|
|
||||||
brew install $installable.Name
|
|
||||||
} else {
|
|
||||||
switch ($installable.Kind) {
|
|
||||||
'cask' { brew install --cask $installable.Name }
|
|
||||||
default {
|
|
||||||
Write-Error "Invalid kind: $_. Expected either empty, or 'cask'."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
brew upgrade
|
|
||||||
|
|
||||||
$installedVagrantPlugins = @{}
|
$installedVagrantPlugins = @{}
|
||||||
vagrant plugin list --machine-readable | ForEach-Object {
|
vagrant plugin list --machine-readable | ForEach-Object {
|
||||||
$timestamp, $target, $type, $data = $_ -split ','
|
$timestamp, $target, $type, $data = $_ -split ','
|
||||||
|
@ -5,102 +5,30 @@
|
|||||||
- [`vcpkg-eg-mac` VMs](#vcpkg-eg-mac-vms)
|
- [`vcpkg-eg-mac` VMs](#vcpkg-eg-mac-vms)
|
||||||
- [Table of Contents](#table-of-contents)
|
- [Table of Contents](#table-of-contents)
|
||||||
- [Basic Usage](#basic-usage)
|
- [Basic Usage](#basic-usage)
|
||||||
|
- [Creating a new Vagrant box](#creating-a-new-vagrant-box)
|
||||||
|
- [VM Software Versions](#vm-software-versions)
|
||||||
|
- [Creating a New Azure Agent Pool](#creating-a-new-azure-agent-pool)
|
||||||
|
- [Running the VM](#running-the-vm)
|
||||||
|
- [Getting an Azure Pipelines PAT](#getting-an-azure-pipelines-pat)
|
||||||
- [Setting up a new macOS machine](#setting-up-a-new-macos-machine)
|
- [Setting up a new macOS machine](#setting-up-a-new-macos-machine)
|
||||||
- [Troubleshooting](#troubleshooting)
|
- [Troubleshooting](#troubleshooting)
|
||||||
- [Creating a new Vagrant box](#creating-a-new-vagrant-box)
|
- [(Internal) Accessing the macOS fileshare](#internal-accessing-the-macos-fileshare)
|
||||||
- [VM Software Versions](#vm-software-versions)
|
|
||||||
- [(Internal) Accessing the macOS fileshare](#internal-accessing-the-macos-fileshare)
|
|
||||||
|
|
||||||
## Basic Usage
|
## Basic Usage
|
||||||
|
|
||||||
The simplest usage, and one which should be used for when spinning up
|
The most common operation here is to set up a new VM for Azure
|
||||||
new VMs, and when restarting old ones, is a simple:
|
pipelines; we try to make that operation as easy as possible.
|
||||||
|
It should take all of three steps, assuming the machine is
|
||||||
|
already set up (or read [these instructions] for how to set up a machine):
|
||||||
|
|
||||||
```
|
1. [Create a new vagrant box](#creating-a-new-vagrant-box)
|
||||||
$ cd ~/vagrant/vcpkg-eg-mac
|
2. [Create a new agent pool](#creating-a-new-azure-agent-pool)
|
||||||
$ vagrant up
|
3. [Setup and run the vagrant VM](#running-the-vm)
|
||||||
```
|
4. Update `azure-pipelines.yml` and `azure-pipelines-osx.yml` to point to the new macOS pool.
|
||||||
|
|
||||||
Any modifications to the machines should be made in `configuration/Vagrantfile`
|
[these instructions]: #setting-up-a-new-macos-machine
|
||||||
and `Setup-VagrantMachines.ps1`, and make sure to push any changes!
|
|
||||||
|
|
||||||
## Setting up a new macOS machine
|
### Creating a new Vagrant box
|
||||||
|
|
||||||
Before anything else, one must download `brew` and `powershell`.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
|
|
||||||
$ brew cask install powershell
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, we need to download the `vcpkg` repository:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ git clone https://github.com/microsoft/vcpkg
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, we need to mint an SSH key:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ ssh-keygen
|
|
||||||
$ cat .ssh/id_rsa.pub
|
|
||||||
```
|
|
||||||
|
|
||||||
Add that SSH key to `authorized_keys` on the file share machine with the base box.
|
|
||||||
|
|
||||||
Next, install prerequisites and grab the current base box with:
|
|
||||||
```sh
|
|
||||||
$ cd vcpkg/scripts/azure-pipelines/osx
|
|
||||||
$ ./Install-Prerequisites.ps1 -Force
|
|
||||||
$ ./Get-InternalBaseBox.ps1 -FileshareMachine vcpkgmm-01.guest.corp.microsoft.com -BoxVersion 2020-09-28
|
|
||||||
```
|
|
||||||
|
|
||||||
... where -BoxVersion is the version you want to use.
|
|
||||||
|
|
||||||
Getting the base box will fail due to missing kernel modules for osxfuse, sshfs, and/or VirtualBox.
|
|
||||||
Log in to the machine, open System Preferences > Security & Privacy > General, and allow the kernel
|
|
||||||
extensions for VirtualBox and sshfs to load. Then, again:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ ./Get-InternalBaseBox.ps1 -FileshareMachine vcpkgmm-01.guest.corp.microsoft.com -BoxVersion 2020-09-28
|
|
||||||
```
|
|
||||||
|
|
||||||
Replace `XX` with the number of
|
|
||||||
the virtual machine. Generally, that should be the same as the number
|
|
||||||
for the physical machine; i.e., vcpkgmm-04 would use 04.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# NOTE: you may get an error about CoreCLR; see the following paragraph if you do
|
|
||||||
$ ./Setup-VagrantMachines.ps1 \
|
|
||||||
-MachineId XX \
|
|
||||||
-DevopsPat '<get this from azure devops; it needs agent pool read and manage access>' \
|
|
||||||
-Date <this is the date of the pool; 2021-04-16 at time of writing>
|
|
||||||
$ cd ~/vagrant/vcpkg-eg-mac
|
|
||||||
$ vagrant up
|
|
||||||
```
|
|
||||||
|
|
||||||
If you see the following error:
|
|
||||||
|
|
||||||
```
|
|
||||||
Failed to initialize CoreCLR, HRESULT: 0x8007001F
|
|
||||||
```
|
|
||||||
|
|
||||||
You have to reboot the machine; run
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ sudo shutdown -r now
|
|
||||||
```
|
|
||||||
|
|
||||||
and wait for the machine to start back up. Then, start again from where the error was emitted.
|
|
||||||
|
|
||||||
### Troubleshooting
|
|
||||||
|
|
||||||
The following are issues that we've run into:
|
|
||||||
|
|
||||||
- (with a Parallels box) `vagrant up` doesn't work, and vagrant gives the error that the VM is `'stopped'`.
|
|
||||||
- Try logging into the GUI with the KVM, and retrying `vagrant up`.
|
|
||||||
|
|
||||||
## Creating a new Vagrant box
|
|
||||||
|
|
||||||
Whenever we want to install updated versions of the command line tools,
|
Whenever we want to install updated versions of the command line tools,
|
||||||
or of macOS, we need to create a new vagrant box.
|
or of macOS, we need to create a new vagrant box.
|
||||||
@ -111,15 +39,17 @@ you can set up your own vagrant boxes that are the same as ours by doing the fol
|
|||||||
|
|
||||||
You'll need some prerequisites:
|
You'll need some prerequisites:
|
||||||
|
|
||||||
- vagrant - found at <https://www.vagrantup.com/>
|
|
||||||
- The vagrant-parallels plugin - `vagrant plugin install vagrant-parallels`
|
|
||||||
- Parallels - found at <https://parallels.com>
|
|
||||||
- An Xcode installer - you can get this from Apple's developer website,
|
- An Xcode installer - you can get this from Apple's developer website,
|
||||||
although you'll need to sign in first: <https://developer.apple.com/downloads>
|
although you'll need to sign in first: <https://developer.apple.com/downloads>
|
||||||
|
- The software installed by `Install-Prerequisites.ps1`
|
||||||
|
|
||||||
|
If you're updating the CI pool, make sure you update macOS.
|
||||||
|
|
||||||
First, you'll need to create a base VM;
|
First, you'll need to create a base VM;
|
||||||
this is where you determine what version of macOS is installed.
|
this is where you determine what version of macOS is installed.
|
||||||
Just follow the Parallels process for creating a macOS VM.
|
Follow the Parallels process for creating a macOS VM; this involves
|
||||||
|
updating to whatever version, and then scrolling right until you find
|
||||||
|
"Install macOS from recovery partition".
|
||||||
|
|
||||||
Once you've done this, you can run through the installation of macOS onto a new VM.
|
Once you've done this, you can run through the installation of macOS onto a new VM.
|
||||||
You should set the username to `vagrant`.
|
You should set the username to `vagrant`.
|
||||||
@ -191,39 +121,141 @@ Once you've done that, add the software versions under [VM Software Versions](#v
|
|||||||
|
|
||||||
[base-box-instructions]: https://parallels.github.io/vagrant-parallels/docs/boxes/base.html
|
[base-box-instructions]: https://parallels.github.io/vagrant-parallels/docs/boxes/base.html
|
||||||
|
|
||||||
### VM Software Versions
|
#### VM Software Versions
|
||||||
|
|
||||||
* 2020-09-28:
|
* 2022-03-01:
|
||||||
* macOS: 10.15.6
|
* macOS: 12.1
|
||||||
* Xcode CLTs: 12
|
* Xcode CLTs: 13.2
|
||||||
* 2021-04-16:
|
|
||||||
* macOS: 11.2.3
|
|
||||||
* Xcode CLTs: 12.4
|
|
||||||
* 2021-07-27:
|
* 2021-07-27:
|
||||||
* macOS: 11.5.1
|
* macOS: 11.5.1
|
||||||
* Xcode CLTs: 12.5.1
|
* Xcode CLTs: 12.5.1
|
||||||
|
* 2021-04-16:
|
||||||
|
* macOS: 11.2.3
|
||||||
|
* Xcode CLTs: 12.4
|
||||||
|
* 2020-09-28:
|
||||||
|
* macOS: 10.15.6
|
||||||
|
* Xcode CLTs: 12
|
||||||
|
|
||||||
### (Internal) Accessing the macOS fileshare
|
### Creating a New Azure Agent Pool
|
||||||
|
|
||||||
|
When updating the macOS machines to a new version, you'll need to create
|
||||||
|
a new agent pool for the machines to join. The standard for this is to
|
||||||
|
name it `PrOsx-YYYY-MM-DD`, with `YYYY-MM-DD` the day that the process
|
||||||
|
is started.
|
||||||
|
|
||||||
|
In order to create a new agent pool, go to the `vcpkg/public` project;
|
||||||
|
go to `Project settings`, then go to `Agent pools` under `Pipelines`.
|
||||||
|
Add a new self-hosted pool, name it as above, and make certain to check
|
||||||
|
the box for "Grant access permission to all pipelines".
|
||||||
|
|
||||||
|
Once you've done this, you are done; you can start adding new machines
|
||||||
|
to the pool!
|
||||||
|
|
||||||
|
### Running the VM
|
||||||
|
|
||||||
|
Before anything else, you'll probably want to destroy any old VMs,
|
||||||
|
and remove any old vagrant boxes:
|
||||||
|
|
||||||
|
```ps1
|
||||||
|
$ cd ~/vagrant/vcpkg-eg-mac
|
||||||
|
$ vagrant destroy -f
|
||||||
|
$ cd ~
|
||||||
|
$ rm -rf ~/vagrant/vcpkg-eg-mac
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, make sure that your software is up to date:
|
||||||
|
```sh
|
||||||
|
$ ./Install-Prerequisites.ps1
|
||||||
|
```
|
||||||
|
|
||||||
|
as well as checking to make sure macOS is up to date.
|
||||||
|
|
||||||
|
Then, follow the instructions for [accessing the fileshare][access-fileshare].
|
||||||
|
|
||||||
|
And finally, [grab a PAT], add the vagrant box, set up the VM, and run it:
|
||||||
|
```sh
|
||||||
|
$ vagrant box add ~/vagrant/share/boxes/macos-ci.json
|
||||||
|
$ ./Setup-VagrantMachines.ps1 -Date <YYYY-MM-DD> -Pat <PAT>
|
||||||
|
$ cd ~/vagrant/vcpkg-eg-mac
|
||||||
|
$ vagrant up
|
||||||
|
```
|
||||||
|
|
||||||
|
[grab a PAT]: #getting-an-azure-pipelines-pat
|
||||||
|
|
||||||
|
## Getting an Azure Pipelines PAT
|
||||||
|
|
||||||
|
Personal Access Tokens are an important part of this process,
|
||||||
|
and they are fairly easy to generate.
|
||||||
|
On ADO, under the correct project (in vcpkg's case, "vcpkg"),
|
||||||
|
click on the "User Settings" icon, then go to "Personal access tokens".
|
||||||
|
It is the icon to the left of your user icon, in the top right corner.
|
||||||
|
|
||||||
|
Then, create a new token, give it a name, make sure it expires quickly,
|
||||||
|
and give it a custom defined scope that includes the
|
||||||
|
"Agent pools: Read & manage" permission (you'll need to "Show all scopes"
|
||||||
|
to access this).
|
||||||
|
You can now copy this token and use it to allow machines to join.
|
||||||
|
|
||||||
|
## Setting up a new macOS machine
|
||||||
|
|
||||||
|
Before anything else, one must download `brew` and `powershell`.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
|
||||||
|
$ brew cask install powershell
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, we need to download the `vcpkg` repository:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ git clone https://github.com/microsoft/vcpkg
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, we need to mint an SSH key:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ ssh-keygen
|
||||||
|
$ cat .ssh/id_rsa.pub
|
||||||
|
```
|
||||||
|
|
||||||
|
Add that SSH key to `authorized_keys` on the file share machine with the base box.
|
||||||
|
|
||||||
|
Next, install prerequisites:
|
||||||
|
```sh
|
||||||
|
$ cd vcpkg/scripts/azure-pipelines/osx
|
||||||
|
$ ./Install-Prerequisites.ps1 -Force
|
||||||
|
```
|
||||||
|
|
||||||
|
And finally, make sure you can [access the fileshare][access-fileshare].
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
The following are issues that we've run into:
|
||||||
|
|
||||||
|
- (with a Parallels box) `vagrant up` doesn't work, and vagrant gives the error that the VM is `'stopped'`.
|
||||||
|
- Try logging into the GUI with the KVM, and retrying `vagrant up`.
|
||||||
|
- (when running a powershell script) The error `Failed to initialize CoreCLR, HRESULT: 0x8007001F` is printed.
|
||||||
|
- Reboot the machine; run
|
||||||
|
```sh
|
||||||
|
$ sudo shutdown -r now
|
||||||
|
```
|
||||||
|
and wait for the machine to start back up. Then, start again from where the error was emitted.
|
||||||
|
|
||||||
|
## (Internal) Accessing the macOS fileshare
|
||||||
|
|
||||||
The fileshare is located on `vcpkgmm-01`, under the `fileshare` user, in the `share` directory.
|
The fileshare is located on `vcpkgmm-01`, under the `fileshare` user, in the `share` directory.
|
||||||
In order to get `sshfs` working on the physical machine,
|
In order to get `sshfs` working on the physical machine,
|
||||||
You can run `Install-Prerequisites.ps1` to grab the right software, then either:
|
You can run `Install-Prerequisites.ps1` to grab the right software, then either:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ mkdir vagrant/share
|
$ mkdir -p vagrant/share
|
||||||
$ sshfs fileshare@<vcpkgmm-01 URN>:/Users/fileshare/share vagrant/share
|
$ sshfs fileshare@vcpkgmm-01:share vagrant/share
|
||||||
```
|
```
|
||||||
|
|
||||||
or you can just run
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ ./Get-InternalBaseBox.ps1
|
|
||||||
```
|
|
||||||
|
|
||||||
which will do the thing automatically.
|
|
||||||
|
|
||||||
If you get an error, that means that gatekeeper has prevented the kernel extension from loading,
|
If you get an error, that means that gatekeeper has prevented the kernel extension from loading,
|
||||||
so you'll need to access the GUI of the machine, go to System Preferences,
|
so you'll need to access the GUI of the machine, go to System Preferences,
|
||||||
Security & Privacy, General, unlock the settings,
|
Security & Privacy, General, unlock the settings,
|
||||||
and allow system extensions from the osxfuse developer to run.
|
and allow system extensions from the osxfuse developer to run.
|
||||||
Then, you'll be able to add the fileshare as an sshfs.
|
Then, you'll be able to add the fileshare as an sshfs.
|
||||||
|
|
||||||
|
[access-fileshare]: #internal-accessing-the-macos-fileshare
|
||||||
|
@ -92,14 +92,16 @@ if ([String]::IsNullOrEmpty($MachineId)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Test-Path '~/vagrant/vcpkg-eg-mac') {
|
if (Test-Path '~/vagrant/vcpkg-eg-mac') {
|
||||||
|
Write-Host 'Deleting existing directories'
|
||||||
|
|
||||||
Push-Location '~/vagrant/vcpkg-eg-mac'
|
Push-Location '~/vagrant/vcpkg-eg-mac'
|
||||||
try {
|
vagrant destroy -f
|
||||||
Write-Host 'Deleting existing directories'
|
if (-not $?) {
|
||||||
vagrant destroy -f
|
throw "Failed to destroy vagrant VM."
|
||||||
Remove-Item -Recurse -Force -LiteralPath '~/vagrant/vcpkg-eg-mac' | Out-Null
|
|
||||||
} finally {
|
|
||||||
Pop-Location
|
|
||||||
}
|
}
|
||||||
|
Pop-Location
|
||||||
|
|
||||||
|
Remove-Item -Recurse -Force -LiteralPath '~/vagrant/vcpkg-eg-mac' | Out-Null
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host 'Creating new directories'
|
Write-Host 'Creating new directories'
|
||||||
|
@ -3,14 +3,14 @@ require 'json'
|
|||||||
configuration = JSON.parse(File.read("#{__dir__}/vagrant-configuration.json"))
|
configuration = JSON.parse(File.read("#{__dir__}/vagrant-configuration.json"))
|
||||||
|
|
||||||
server = {
|
server = {
|
||||||
:hostname => configuration['machine_name'],
|
:machine_name => configuration['machine_name'],
|
||||||
:box => configuration['box_name'],
|
:box => configuration['box_name'],
|
||||||
:box_version => configuration['box_version'],
|
:box_version => configuration['box_version'],
|
||||||
:ram => 12000,
|
:ram => 12000,
|
||||||
:cpu => 11
|
:cpu => 11
|
||||||
}
|
}
|
||||||
|
|
||||||
azure_agent_url = 'https://vstsagentpackage.azureedge.net/agent/2.185.1/vsts-agent-osx-x64-2.185.1.tar.gz'
|
azure_agent_url = 'https://vstsagentpackage.azureedge.net/agent/2.195.2/vsts-agent-osx-x64-2.195.2.tar.gz'
|
||||||
devops_url = configuration['devops_url']
|
devops_url = configuration['devops_url']
|
||||||
agent_pool = configuration['agent_pool']
|
agent_pool = configuration['agent_pool']
|
||||||
pat = configuration['pat']
|
pat = configuration['pat']
|
||||||
@ -18,7 +18,6 @@ pat = configuration['pat']
|
|||||||
Vagrant.configure('2') do |config|
|
Vagrant.configure('2') do |config|
|
||||||
config.vm.box = server[:box]
|
config.vm.box = server[:box]
|
||||||
config.vm.box_version = server[:box_version]
|
config.vm.box_version = server[:box_version]
|
||||||
config.vm.hostname = server[:hostname]
|
|
||||||
config.vm.synced_folder '.', '/vagrant', disabled: true
|
config.vm.synced_folder '.', '/vagrant', disabled: true
|
||||||
|
|
||||||
config.vm.provider 'parallels' do |prl|
|
config.vm.provider 'parallels' do |prl|
|
||||||
@ -53,7 +52,7 @@ Vagrant.configure('2') do |config|
|
|||||||
--work ~/Data/work \
|
--work ~/Data/work \
|
||||||
--auth pat --token #{pat} \
|
--auth pat --token #{pat} \
|
||||||
--pool #{agent_pool} \
|
--pool #{agent_pool} \
|
||||||
--agent `hostname` \
|
--agent #{server[:machine_name]} \
|
||||||
--replace \
|
--replace \
|
||||||
--acceptTeeEula",
|
--acceptTeeEula",
|
||||||
privileged: false
|
privileged: false
|
||||||
|
@ -6,18 +6,33 @@
|
|||||||
"Name": "vagrant",
|
"Name": "vagrant",
|
||||||
"VersionCommand": [ "vagrant", "-v" ],
|
"VersionCommand": [ "vagrant", "-v" ],
|
||||||
"VersionRegex": "Vagrant (.*)",
|
"VersionRegex": "Vagrant (.*)",
|
||||||
"Version": "2.2.18",
|
"Version": "2.2.19",
|
||||||
"DmgUrl": "https://releases.hashicorp.com/vagrant/2.2.18/vagrant_2.2.18_x86_64.dmg",
|
"DmgUrl": "https://releases.hashicorp.com/vagrant/2.2.19/vagrant_2.2.19_x86_64.dmg",
|
||||||
"Sha256": "B4E8103AABDF29F18F592CD6DE4FA03BF182FBC192A0757B5E18156CB18FA672",
|
"Sha256": "6307BE217813A11C9E106448BF232803031E434A08C8B2DF8C62FDC9E8543845",
|
||||||
"InstallerPath": "vagrant.pkg"
|
"InstallerPath": "vagrant.pkg"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Name": "Parallels",
|
||||||
|
"VersionCommand": [ "cat", "/Applications/Parallels Desktop.app/Contents/Info.plist" ],
|
||||||
|
"VersionRegex": "<key>CFBundleShortVersionString</key>[\\n\\t ]*<string>([0-9.]+)</string>",
|
||||||
|
"Version": "17.1.1",
|
||||||
|
"DmgUrl": "https://download.parallels.com/desktop/v17/17.1.1-51537/ParallelsDesktop-17.1.1-51537.dmg",
|
||||||
|
"Sha256": "BD7BE2DF4D1B3508C127CF1D9C1EF93CDDA63384BCF3893A77FBC9F1169765A9",
|
||||||
|
"InstallationCommands": [
|
||||||
|
[ "bash", "-c", "ps x | grep 'Parallels Desktop' | grep -v 'grep' | sed -E 's/^ *([0-9]+).*(\\/Applications.*)$/\\1: \\2/'" ],
|
||||||
|
[ "bash", "-c", "ps x | grep 'Parallels Desktop' | grep -v 'grep' | sed -E 's/^ *([0-9]+).*$/\\1/' | xargs -p kill" ],
|
||||||
|
[ "sudo", "rm", "-rf", "/Applications/Parallels Desktop.app" ],
|
||||||
|
[ "sudo", "cp", "-r", "/Volumes/setup-installer/Parallels Desktop.app", "/Applications" ],
|
||||||
|
[ "sudo", "/Applications/Parallels Desktop.app/Contents/MacOS/inittool2", "init", "-b", "/Applications/Parallels Desktop.app" ]
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"Name": "osxfuse",
|
"Name": "osxfuse",
|
||||||
"VersionCommand": [ "cat", "/Library/Filesystems/macfuse.fs/Contents/version.plist" ],
|
"VersionCommand": [ "cat", "/Library/Filesystems/macfuse.fs/Contents/version.plist" ],
|
||||||
"VersionRegex": "<key>CFBundleVersion</key>[\\n\\t ]*<string>([0-9.]+)</string>",
|
"VersionRegex": "<key>CFBundleVersion</key>[\\n\\t ]*<string>([0-9.]+)</string>",
|
||||||
"Version": "4.1.2",
|
"Version": "4.2.4",
|
||||||
"DmgUrl": "https://github.com/osxfuse/osxfuse/releases/download/macfuse-4.1.2/macfuse-4.1.2.dmg",
|
"DmgUrl": "https://github.com/osxfuse/osxfuse/releases/download/macfuse-4.2.4/macfuse-4.2.4.dmg",
|
||||||
"Sha256": "9FF344DE38BAD5AC5ECA5194DA00A2BA35DD6AFDB9039133B5446168F8EDAFDB",
|
"Sha256": "82A2C30B3A7BF56AA2755C0C192FB50D9EECC3FE42505AB4E8679B50306188BD",
|
||||||
"InstallerPath": "Install macFUSE.pkg"
|
"InstallerPath": "Install macFUSE.pkg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -29,12 +44,10 @@
|
|||||||
"Sha256": "F8F4F71814273EA42DBE6CD92199F7CFF418571FFD1B10C0608878D3472D2162"
|
"Sha256": "F8F4F71814273EA42DBE6CD92199F7CFF418571FFD1B10C0608878D3472D2162"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"Brew": [
|
|
||||||
],
|
|
||||||
"VagrantPlugins": [
|
"VagrantPlugins": [
|
||||||
{
|
{
|
||||||
"Name": "vagrant-parallels",
|
"Name": "vagrant-parallels",
|
||||||
"Version": "2.2.3"
|
"Version": "2.2.4"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
},
|
},
|
||||||
"required": [
|
"required": [
|
||||||
"Applications",
|
"Applications",
|
||||||
"Brew",
|
|
||||||
"VagrantPlugins"
|
"VagrantPlugins"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -48,22 +47,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Brew": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": [ "Name" ],
|
|
||||||
"properties": {
|
|
||||||
"Name": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"Kind": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": [ "cask" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"VagrantPlugins": {
|
"VagrantPlugins": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
|
@ -1436,6 +1436,8 @@ tcl:arm64-windows=fail
|
|||||||
tcl:x64-uwp=fail
|
tcl:x64-uwp=fail
|
||||||
telnetpp:arm-uwp=fail
|
telnetpp:arm-uwp=fail
|
||||||
telnetpp:x64-uwp=fail
|
telnetpp:x64-uwp=fail
|
||||||
|
tensorflow:x64-osx=fail
|
||||||
|
tensorflow-cc:x64-osx=fail
|
||||||
theia:arm64-windows = skip
|
theia:arm64-windows = skip
|
||||||
theia:arm-uwp = skip
|
theia:arm-uwp = skip
|
||||||
theia:x64-uwp = skip
|
theia:x64-uwp = skip
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
{
|
{
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"git-tree": "2fdbe23020728d91dbae5249ed04b42b4b882a87",
|
||||||
|
"version": "7.0.5",
|
||||||
|
"port-version": 3
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"git-tree": "1801922b3e4808edcd0b55b6a800bbb1c01687a6",
|
"git-tree": "1801922b3e4808edcd0b55b6a800bbb1c01687a6",
|
||||||
"version": "7.0.5",
|
"version": "7.0.5",
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"ace": {
|
"ace": {
|
||||||
"baseline": "7.0.5",
|
"baseline": "7.0.5",
|
||||||
"port-version": 2
|
"port-version": 3
|
||||||
},
|
},
|
||||||
"activemq-cpp": {
|
"activemq-cpp": {
|
||||||
"baseline": "3.9.5",
|
"baseline": "3.9.5",
|
||||||
@ -3810,7 +3810,7 @@
|
|||||||
},
|
},
|
||||||
"libpqxx": {
|
"libpqxx": {
|
||||||
"baseline": "7.6.0",
|
"baseline": "7.6.0",
|
||||||
"port-version": 2
|
"port-version": 3
|
||||||
},
|
},
|
||||||
"libprotobuf-mutator": {
|
"libprotobuf-mutator": {
|
||||||
"baseline": "1.0",
|
"baseline": "1.0",
|
||||||
@ -3918,7 +3918,7 @@
|
|||||||
},
|
},
|
||||||
"libsoundio": {
|
"libsoundio": {
|
||||||
"baseline": "2.0.0",
|
"baseline": "2.0.0",
|
||||||
"port-version": 4
|
"port-version": 5
|
||||||
},
|
},
|
||||||
"libspatialindex": {
|
"libspatialindex": {
|
||||||
"baseline": "1.9.3",
|
"baseline": "1.9.3",
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
{
|
{
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"git-tree": "6dd0107ca668c589cf18a57a884dd3ef276730cf",
|
||||||
|
"version-semver": "7.6.0",
|
||||||
|
"port-version": 3
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"git-tree": "5c4df2807e229629d04aecc0a66f11219d4dcbcd",
|
"git-tree": "5c4df2807e229629d04aecc0a66f11219d4dcbcd",
|
||||||
"version-semver": "7.6.0",
|
"version-semver": "7.6.0",
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
{
|
{
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"git-tree": "ea8a154b722a142045906b20d2df00a38d330d6b",
|
||||||
|
"version": "2.0.0",
|
||||||
|
"port-version": 5
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"git-tree": "96de946826ca6aafdc9409f9d75f02a6d082cffb",
|
"git-tree": "96de946826ca6aafdc9409f9d75f02a6d082cffb",
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
|
Loading…
Reference in New Issue
Block a user