Release Process
Relevant source files
The following files were used as context for generating this wiki page:
The release process for libfastjson defines the rigorous steps required to transition the codebase from development to a stable public release. This process ensures code quality through continuous integration, maintains consistent versioning across project metadata, and establishes a standardized workflow for generating distribution artifacts and documentation.
The scope of this process covers pre-release validation, branch management, versioning updates, artifact generation, and post-release maintenance tasks.
Pre-Release Validation and Quality Assurance
Before a release can be initiated, the codebase must meet specific quality standards. This includes passing automated Continuous Integration (CI) tests and adhering to the project's coding style guidelines.
CI and Merge Requirements
All pull requests must pass all CI tests to be considered for merging. The project utilizes a testbench to ensure code quality, and it is highly suggested that bug fixes or new functionality include related tests.
Sources: CONTRIBUTING.md:1-12
The merge process is facilitated by scripts that verify the integrity of the master branch when combined with new changes.
Sources: CI/try_merge.sh:1-30
Coding Style Compliance
The project enforces specific minimal style guidelines:
- Indentations must use TABs, not spaces.
- No trailing whitespace is permitted.
A dedicated script, check_codestyle.sh, is used to scan source files (*.[ch]) against the rsyslog team's codestyle definitions using a stylecheck tool.
Sources: CONTRIBUTING.md:14-26, CI/check_codestyle.sh:1-7
Release Workflow
The core release workflow involves specific Git operations and file updates to prepare the distribution.
Versioning and Metadata Updates
Version information is synchronized across several key files. The fjson_version() function in json_version.c returns the VERSION macro defined during the build process.
Sources: json_version.c:11-15
During the release, the following files must be updated:
- json_c_version.h: Update the version string.
- Doxyfile: Update the version for documentation.
- configure.ac: Update the package version.
- Makefile.am: Update the libtool version info (
-version-info). For non-major releases, the minor version (y) is typically incremented:x:y:ztox:y+1:z.
Sources: RELEASE_CHECKLIST.txt:13-23
Build and Artifact Generation
The process for generating a release involves a top-down flow from environment setup to tarball creation.
The diagram shows the sequential steps required to build and package a release.
Sources: RELEASE_CHECKLIST.txt:3-56
Artifact Details
The release produces two primary tarballs:
json-c-${release}.tar.gz: The full distribution including documentation.json-c-${release}-nodoc.tar.gz: A distribution excluding thedocdirectory.
Sources: RELEASE_CHECKLIST.txt:45-51
Distribution and Post-Release
Once artifacts are generated and the release is tagged, the final steps involve public distribution and setting up the environment for the next development cycle.
Public Distribution
Artifacts are uploaded to the Amazon S3 service.
- Storage Class: "Reduced Redundancy".
- Accessibility: Publicly accessible.
- Verification: Verify files at
https://s3.amazonaws.com/json-c_releases/releases/index.html.
Sources: RELEASE_CHECKLIST.txt:62-70
Post-Release Maintenance Tasks
After the release is finalized, the following maintenance tasks are performed:
| Task | Description |
|---|---|
| Master Update | Version in configure.ac is updated to ${release}.99 to indicate development. |
| ChangeLog | Add a new section for the next version. |
| GitHub Pages | Update the gh-pages branch with new Doxygen documentation. |
| Checksums | Generate SHA256 and MD5 checksums of tarballs for the Wiki. |
| Notification | Send a release announcement to the mailing list. |
Sources: RELEASE_CHECKLIST.txt:74-123
Documentation Management
Documentation is updated by cloning the gh-pages branch and copying the new doc directory and README-WIN32.html into a version-specific subdirectory.
Sources: RELEASE_CHECKLIST.txt:89-106
The release process ensures that libfastjson remains a small, fast library with stable and predictable delivery cycles, adhering to its goal of providing essential JSON handling functions for the rsyslog ecosystem.
Sources: README.md:1-12