Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 80 additions & 16 deletions .github/workflows/update-project-version.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,39 +22,103 @@ jobs:
uses: actions/checkout@v4

- name: update project files
id: update_files
run: |
VER="${{ github.event.inputs.target_version }}"
SOVER="${{ github.event.inputs.target_soversion }}"
echo "bumping version to $VER"
echo "bumping to $VER"

# 1. CMakeLists.txt: Only update version inside the project() block
# 1. cmakelists.txt
if [ -f CMakeLists.txt ]; then
echo "updating cmakelists.txt"
sed -i "/project[[:space:]]*([[:space:]]*jsoncpp/,/)/ s/VERSION [0-9.]*/VERSION $VER/" CMakeLists.txt
sed -i "/project.*jsoncpp/,/)/ s/VERSION [0-9.]*/VERSION $VER/" CMakeLists.txt
if [ -n "$SOVER" ]; then
sed -i "s/set(PROJECT_SOVERSION [0-9]*/set(PROJECT_SOVERSION $SOVER/" CMakeLists.txt
fi
fi

# 2. meson.build: Only update version inside the project() block
# 2. meson.build
if [ -f meson.build ]; then
echo "updating meson.build"
sed -i "/project('jsoncpp'/,/)/ s/version[[:space:]]*:[[:space:]]*['\"][0-9.]*['\"]/version : '$VER'/" meson.build
# targeting the version line directly
sed -i "s/version[[:space:]]*:[[:space:]]*['\"][0-9.]*['\"]/version : '$VER'/" meson.build
if [ -n "$SOVER" ]; then
# update soversion only within the library() or where defined
sed -i "s/soversion[[:space:]]*:[[:space:]]*['\"][0-9]*['\"]/soversion : '$SOVER'/" meson.build
fi
fi

# 3. MODULE.bazel: Only update version inside the module() block
# 3. module.bazel
if [ -f MODULE.bazel ]; then
echo "updating MODULE.bazel"
# match range from 'module(' to the first ')'
sed -i "/module(/,/)/ s/version[[:space:]]*=[[:space:]]*['\"][0-9.]*['\"]/version = \"$VER\"/" MODULE.bazel
# match only the first 'version' occurrence in the file (the module version)
sed -i "0,/version[[:space:]]*=[[:space:]]*['\"][0-9.]*['\"]/s//version = \"$VER\"/" MODULE.bazel
fi

# 4. vcpkg.json: jq is inherently surgical
# 4. vcpkg.json
if [ -f vcpkg.json ]; then
echo "updating vcpkg.json"
jq ".version = \"$VER\"" vcpkg.json > vcpkg.json.tmp && mv vcpkg.json.
jq --arg ver "$VER" '.version = $ver' vcpkg.json > tmp.json && mv tmp.json vcpkg.json
fi

# 5. include/json/version.h
if [ -f include/json/version.h ]; then
MAJOR=$(echo "$VER" | cut -d. -f1)
MINOR=$(echo "$VER" | cut -d. -f2)
PATCH=$(echo "$VER" | cut -d. -f3)
QUALIFIER=$(echo "$VER" | cut -d. -f4 -s)

sed -i "s/#define JSONCPP_VERSION_STRING \".*\"/#define JSONCPP_VERSION_STRING \"$VER\"/" include/json/version.h
sed -i "s/#define JSONCPP_VERSION_MAJOR [0-9]*/#define JSONCPP_VERSION_MAJOR $MAJOR/" include/json/version.h
sed -i "s/#define JSONCPP_VERSION_MINOR [0-9]*/#define JSONCPP_VERSION_MINOR $MINOR/" include/json/version.h
sed -i "s/#define JSONCPP_VERSION_PATCH [0-9]*/#define JSONCPP_VERSION_PATCH $PATCH/" include/json/version.h

if [ -n "$QUALIFIER" ]; then
sed -i "s/#define JSONCPP_VERSION_QUALIFIER.*/#define JSONCPP_VERSION_QUALIFIER $QUALIFIER/" include/json/version.h
else
sed -i "s/#define JSONCPP_VERSION_QUALIFIER.*/#define JSONCPP_VERSION_QUALIFIER/" include/json/version.h
fi
fi

- name: verify version macros
id: verify
run: |
FILE="include/json/version.h"
if [ -f "$FILE" ]; then
# extract clean values by stripping everything except digits and dots
V_STR=$(grep "JSONCPP_VERSION_STRING" "$FILE" | head -n 1 | cut -d '"' -f 2)
V_MAJ=$(grep "JSONCPP_VERSION_MAJOR" "$FILE" | head -n 1 | awk '{print $3}' | tr -cd '0-9')
V_MIN=$(grep "JSONCPP_VERSION_MINOR" "$FILE" | head -n 1 | awk '{print $3}' | tr -cd '0-9')
V_PAT=$(grep "JSONCPP_VERSION_PATCH" "$FILE" | head -n 1 | awk '{print $3}' | tr -cd '0-9')
V_QUA=$(grep "JSONCPP_VERSION_QUALIFIER" "$FILE" | head -n 1 | awk '{print $3}' | tr -cd '0-9')

# create a unique delimiter for the multi-line output
DELIM=$(dd if=/dev/urandom bs=15 count=1 2>/dev/null | base64)
echo "report<<$DELIM" >> $GITHUB_OUTPUT
echo "| Macro | Value |" >> $GITHUB_OUTPUT
echo "| :--- | :--- |" >> $GITHUB_OUTPUT
echo "| STRING | \`$V_STR\` |" >> $GITHUB_OUTPUT
echo "| MAJOR | \`$V_MAJ\` |" >> $GITHUB_OUTPUT
echo "| MINOR | \`$V_MIN\` |" >> $GITHUB_OUTPUT
echo "| PATCH | \`$V_PAT\` |" >> $GITHUB_OUTPUT
echo "| QUALIFIER | \`${V_QUA:-empty}\` |" >> $GITHUB_OUTPUT
echo "$DELIM" >> $GITHUB_OUTPUT
fi

- name: sanity check (cmake configure)
run: |
if [ -f CMakeLists.txt ]; then
mkdir build_check && cd build_check
cmake .. -DJSONCPP_WITH_TESTS=OFF -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF
cd .. && rm -rf build_check
fi

- name: create pull request
uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "chore: bump version to ${{ github.event.inputs.target_version }}"
branch: "bump-to-${{ github.event.inputs.target_version }}"
title: "chore: bump version to ${{ github.event.inputs.target_version }}"
body: |
automated version bump.
- new version: `${{ github.event.inputs.target_version }}`
- new soversion: `${{ github.event.inputs.target_soversion || 'no change' }}`

### header verification
${{ steps.verify.outputs.report }}
labels: "maintenance"
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ project(jsoncpp
# 3. ./CMakeLists.txt
# 4. ./MODULE.bazel
# IMPORTANT: also update the PROJECT_SOVERSION!!
VERSION 1.9.7 # <major>[.<minor>[.<patch>[.<tweak>]]]
VERSION 1.9.7.1 # <major>[.<minor>[.<patch>[.<tweak>]]]
LANGUAGES CXX)

message(STATUS "JsonCpp Version: ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
Expand Down
2 changes: 1 addition & 1 deletion MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ module(
# 3. /CMakeLists.txt
# 4. /MODULE.bazel
# IMPORTANT: also update the SOVERSION!!
version = "1.9.7",
version = "1.9.7.1",
compatibility_level = 1,
)

Expand Down
4 changes: 2 additions & 2 deletions include/json/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
// 4. /MODULE.bazel
// IMPORTANT: also update the SOVERSION!!

#define JSONCPP_VERSION_STRING "1.9.7"
#define JSONCPP_VERSION_STRING "1.9.7.1"
#define JSONCPP_VERSION_MAJOR 1
#define JSONCPP_VERSION_MINOR 9
#define JSONCPP_VERSION_PATCH 7
#define JSONCPP_VERSION_QUALIFIER
#define JSONCPP_VERSION_QUALIFIER 1
#define JSONCPP_VERSION_HEXA \
((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | \
(JSONCPP_VERSION_PATCH << 8))
Expand Down
2 changes: 1 addition & 1 deletion meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ project(
# 3. /CMakeLists.txt
# 4. /MODULE.bazel
# IMPORTANT: also update the SOVERSION!!
version : '1.9.7',
version : '1.9.7.1',
default_options : [
'buildtype=release',
'cpp_std=c++11',
Expand Down