This post documents how to update a vcpkg registry port. In this example, we will be updating the ml-cpp-utils port.

Update the ref and SHA512

Navigate to /ports/ml-cpp-utils/portfile.cmake

Update the REF field to the git commit/tag/release of the upstream repo and set the SHA512 field to 0.

vcpkg_from_github(
    OUT_SOURCE_PATH SOURCE_PATH
    REPO nukethebees/cpp_utils
    REF b342e3eea9538c7a35019b56f21a5f50439a4f74
    SHA512 0
    HEAD_REF master
)

We must install our port to get the SHA512 value. If the package is already installed locally then first run

vcpkg remove ml-cpp-utils

Install the package using

vcpkg install ml-cpp-utils --overlay-ports=./ports

You should get an error that includes the SHA512 value.

error: failing download because the expected SHA512 was all zeros, please change the expected SHA512 to: 97b2a6b1770595559185e75405a28af191765fbbc9827ea06ae507086b3a599aecc6f2520cc75a2f53be0bf4db829ebc55fb6ddf814405bee7b6b70d84b9529f

Replace the 0 with the new value.

vcpkg_from_github(
    OUT_SOURCE_PATH SOURCE_PATH
    REPO nukethebees/cpp_utils
    REF b342e3eea9538c7a35019b56f21a5f50439a4f74
    SHA512 97b2a6b1770595559185e75405a28af191765fbbc9827ea06ae507086b3a599aecc6f2520cc75a2f53be0bf4db829ebc55fb6ddf814405bee7b6b70d84b9529f
    HEAD_REF master
)

Commit your changes to the git repo. You must commit these changes for the next step to work correctly.

Updating the version or port-version

Navigate to /ports/ml-cpp-utils/vcpkg.json

If you are updating to a new version of the upstream package, change version to the new value. If the upstream version is unchanged then increment then port-version value. If port-version is missing then add it and set it to 1 (the default is 0).

{
  "name": "ml-cpp-utils",
  "version": "0.1.0",
  "port-version": 2,
  "homepage": "https://github.com/nukethebees/cpp_utils",
  "license": "GPL-3.0",
  "dependencies": [
    "gtest",
    {
      "name": "vcpkg-cmake",
      "host": true
    },
    {
      "name": "vcpkg-cmake-config",
      "host": true
    }
  ]
}

Update the package’s version and baseline using

vcpkg --x-builtin-ports-root=./ports --x-builtin-registry-versions-dir=./versions x-add-version --all --verbose

If you had not previously changed version or port-version then you may need to add --overwrite-version to forcibly overwrite the current port-version. I recommend avoiding this and always incrementing the version or port version.

Commit your changes. The process is finished.

Sources