Since we rely on goreleaser and automation for managing our releases,
the actual release process is exceptionally easy:
$ git tag -a v0.2.0 -m "dbc v0.2.0 Release"
$ git push --tagsFor pre-releases, we utilize tags such as alpha and beta. e.g., to
do a pre-release, you use the following command:
$ git tag -a v0.2.0-beta1 -m "dbc v0.2.0 Beta Release"
$ git push --tagsThe automation will take over from the tag being pushed.
Releases publish libdbc-dev_*.deb and libdbc-devel*.rpm alongside the CLI
packages, on the GitHub release, in the versioned distribution bucket, and in
the Cloudsmith columnar/dbc repository (stable releases only, like the CLI
packages).
These are development-only packages, separate from the dbc CLI package; there
is no separate runtime package.
Each package includes libdbc.a, libdbc.so (SONAME libdbc.so),
/usr/include/libdbc.h, and the dbc pkg-config module. The libraries and
pkgconfig/dbc.pc are installed under:
| Package | Architecture | Library directory |
|---|---|---|
libdbc-dev (Debian) |
amd64 |
/usr/lib/x86_64-linux-gnu |
libdbc-dev (Debian) |
arm64 |
/usr/lib/aarch64-linux-gnu |
libdbc-devel (RPM) |
x86_64, aarch64 |
/usr/lib64 |
Install the package for your architecture, for example:
sudo apt install ./libdbc-dev_*_amd64.deb pkg-config
# Or, on an RPM-based distribution:
sudo dnf install ./libdbc-devel*.x86_64.rpm pkgconf-pkg-config
pkg-config --modversion dbcThe capi build supplies the static archive and header. The Linux-only
capi-shared build uses the same Zig targets (glibc 2.28) and stages its shared
library and format-specific pkg-config files with scripts/stage_devel.py under
dist/devel/linux_<goarch>/. The devel-deb and devel-rpm nFPM entries combine
these artifacts without duplicating the generated header. Snapshot CI uploads
both package formats as the devel-packages artifact and tests the installed
packages on Linux amd64 and arm64.
Rust consumers link these packages through pkg-config by default; the
bundled feature selects the prebuilt platform crates instead. Static linking
is the default; setting DBC_DYNAMIC selects the shared library, which must
remain on the runtime loader's search path. See
Linking libdbc
for the feature and environment-variable options.
The libdbc-dev archive in .goreleaser.yaml packages the capi static
library for macOS (libdbc-dev_<version>_darwin_<arch>.tar.gz) and Windows
(libdbc-dev_<version>_windows_amd64.zip) with libdbc.h, LICENSE, and a
relocatable dbc.pc written by scripts/stage_capi.py. They are attached to
the GitHub release and the distribution bucket. Stable releases also:
- update the
libdbcHomebrew formula incolumnar-tech/homebrew-tap(thebrewspublisher, withDBC_TAP_GITHUB_PAT); - upload the Windows zip to Cloudsmith as the raw package
libdbc-dev-windows-x64(thecloudsmith-rawcustom publisher, runningscripts/publish_cloudsmith_raw.pywithCLOUDSMITH_TOKEN).
Before creating and pushing the tags, please consult the following checklist of steps:
- Are the docs up to date with any new/changed features?
- Are the auto-complete scripts up to date with changes to the options and subcommands?
- If any new features or CLI subcommands/flags have been added in this
release, add
{{ since_version('v1.2.3') }}tags in the docs where appropriate - Is the
llmstxtplugin config in sync with the mainnavin mkdocs.yml? - (Before promoting a pre-release) Has the pre-release been manually tested?
- After pushing the tag, you will need to approve the deployment on the Actions tab of the repo.
- (One time) The
productionenvironment has aCARGO_REGISTRY_TOKENsecret for a crates.io account that owns thecolumnar-dbc*crates. GoReleaser publishes them, with the release's version, in its finalafterhook; a failure there happens after the GitHub release is out. To recover, rerungoreleaser build --clean --id capi(needs Zig 0.17.0 andGORELEASER_KEY) at the tag, thenpython3 scripts/publish_crates.py --version <version>.
Once the above checklist is completed, just push the new tag to kick off the release process. Then, continue to the Post-Release Checklist.
- Create a pull request against microsoft/winget-pkgs from our fork. See winget for details.
You can find detailed steps for items in the post-release checklist here.
Updating our WinGet package is only partially automated. goreleaser automatically creates a branch at https://github.com/columnar-tech/winget-pkgs but then someone needs to manually create a pull request against upstream with the change.
Follow these steps:
- Wait for the release workflow to finish.
- Find the branch at https://github.com/columnar-tech/winget-pkgs. It should be called
dbc-$VERSION. - Create a pull request