Tutorial: Publish packages to a private vcpkg registry using Git
You can create your own private registry of packages to consume via vcpkg using Git. Private registries are ideal if you want to use private libraries or want to make non-public modifications to existing packages. You have full control over your packages' versions and contents, so there's really no limit on what you can put in a private registry.
In this tutorial we show how to:
Prerequisites:
- vcpkg
- Git
- A terminal
1 - Create a vcpkg registry using Git
vcpkg's Git-based registries are Git repositories with a specific layout that vcpkg understands.
Initialize a Git registry:
mkdir vcpkg-registry
cd vcpkg-registry
git init
2 - Create the registry layout
A vcpkg Git-based registry requires the following:
- a folder named
ports
to contain the registry's ports, - a folder named
versions
to contain the versions database, - a file named
baseline.json
in theversions
folder.
Your repository can contain any other files you want, for example: scripts, a LICENSE file, a README.md
file, documentation, etc.
1 - Create the ports
and versions
folders:
mkdir ports
mkdir versions
2 - Create a file named baseline.json
in the versions
folder with the following contents:
{
"default": {}
}
The minimal valid baseline.json
file should include the above contents. Read the versioning
documentation to learn more about the baseline.json
file and the versions
database.
3 - Commit your changes to the repository
git add versions/baseline.json
git commit -m "Initial commit"
Optionally, if you have a remote Git repository set up, this is a good point to push your changes.
git remote add origin https://example.com/vcpkg-registry.git
git push --set-upstream origin HEAD
3 - Add ports to the registry
Copy all your package ports in the ports
folder in the registry. Each port must have its own
directory containing at least a vcpkg.json
file and a portfile.cmake
file. Learn more about
creating ports in the tutorial on packaging GitHub
repositories.
git add ports/.
git commit -m "Add registry ports"
4 - Update the versions database
Each port in the registry must have a corresponding version file. Version files are generated by
the vcpkg x-add-version
command. This command also updates the baseline entry for each port in
version/baseline.json
.
To update the versions database for all your ports at once, run:
vcpkg --x-builtin-ports-root=./ports --x-builtin-registry-versions-dir=./versions x-add-version --all --verbose
The --x-builtin-ports-root
and --x-builtin-registry-versions-dir
are redirection options.
Normally, the x-add-version
command operates on vcpkg's built-in registry; but by using the
redirection options, it is possible to use the command on local Git registries.
The --all
option makes vcpkg scan the ports
directory for all available ports and updates them
all at once. Lastly, the --verbose
option makes the command print each operation it executes to
standard output, you can suppress the output by removing this option.
The x-add-version
requires that all port changes have been committed to the registry's Git
repository. Read the [x-add-version
command] documentation to learn more.
When all the output looks correct, run:
git add .
git commit -m "Update versions database"
If you have a remote Git repository, don't forget to push your changes:
git push
Next Steps
And that's it! You have set up your own private Git-based registry to use with vcpkg.
Here are some additional tasks to try next: