ntoskrnl7 / ci-version

CI versioning for C/C++

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ci-version

CI

Requirements

  • Linux
  • macOS
  • Windows
  • Git
  • bash
    • Git, MSYS2, MINGW
  • CMake 3.13+

Usage

  1. Please move after creating the project directory.

    mkdir test-project
    cd test-project
    git init
    git submodule add http://github.com/ntoskrnl7/ci-version
    ./ci-version/bin/init.sh
  2. Please write the following files in the project directory.

    • Directory structure
    📦test-project
    ┣ 📂.config (*generated by init.sh)
    ┃ ┗  📂 ci-version
    ┃       ┣ 📜major.h
    ┃       ┗ 📜....
    ┣ 📜ci-version.cmake (*generated by init.sh)
    ┣ 📂ci-version (*submodule)
    ┣ 📜main.c
    ┗ 📜CMakeLists.txt
    
    • CMakeLists.txt
    cmake_minimum_required(VERSION 3.13)
    
    project(test C)
    
    add_executable(test main.c)
    
    include(ci-version.cmake)
    ci_version(test)
    • main.c
    #include <ci-version/version.h>
    #include <ci-version/semver.h>
    #include <stdio.h>
    
    int main() {
      puts("Version : "__CI_SEMVER__);
      return 0;
    }
  3. Perform a build.

    cmake -S . -B build
    cmake --build build
  4. Run test

    ./build/test
    # Version : 0.0.0-alpha
    
    ./ci-version/bin/version.sh
    # 0.0.0
    
    ./ci-version/bin/semver.sh
    # 0.0.0-alpha
  5. Update Version & Run test

    ./ci-version/bin/patch.sh
    cmake --build build
    ./build/test
    # Version : 0.0.1-alpha
    ./ci-version/bin/version.sh
    # 0.0.1
    ./ci-version/bin/semver.sh
    # 0.0.1-alpha
    
    ./ci-version/bin/patch.sh 4
    cmake --build build
    ./build/test
    # Version : 0.0.4-alpha
    ./ci-version/bin/version.sh
    # 0.0.4
    ./ci-version/bin/semver.sh
    # 0.0.4-alpha
    
    ./ci-version/bin/minor.sh
    cmake --build build
    ./build/test
    # Version : 0.1.0-alpha
    ./ci-version/bin/version.sh
    # 0.1.0
    ./ci-version/bin/semver.sh
    # 0.1.0-alpha
    
    ./ci-version/bin/minor.sh 4
    cmake --build build
    ./build/test
    # Version : 0.4.0-alpha
    ./ci-version/bin/version.sh
    # 0.4.0
    ./ci-version/bin/semver.sh
    # 0.4.0-alpha
    
    ./ci-version/bin/major.sh
    cmake --build build
    ./build/test
    # Version : 1.0.0-alpha
    ./ci-version/bin/version.sh
    # 1.0.0
    ./ci-version/bin/semver.sh
    # 1.0.0-alpha
    
    ./ci-version/bin/major.sh 4
    cmake --build build
    ./build/test
    # Version : 4.0.0-alpha
    ./ci-version/bin/version.sh
    # 4.0.0
    ./ci-version/bin/semver.sh
    # 4.0.0-alpha
    
    ./ci-version/bin/pre-release.sh beta
    cmake --build build
    ./build/test
    # Version : 4.0.0-beta
    ./ci-version/bin/version.sh
    # 4.0.0
    ./ci-version/bin/semver.sh
    # 4.0.0-beta
    
    ./ci-version/bin/build-metadata.sh test
    cmake --build build
    ./build/test
    # Version : 4.0.0-beta+test
    ./ci-version/bin/version.sh
    # 4.0.0
    ./ci-version/bin/semver.sh
    # 4.0.0-beta+test
    
    ./ci-version/bin/build-metadata.sh
    cmake --build build
    ./build/test
    # Version : 4.0.0-beta
    ./ci-version/bin/version.sh
    # 4.0.0
    ./ci-version/bin/semver.sh
    # 4.0.0-beta
    
    ./ci-version/bin/release.sh
    cmake --build build
    ./build/test
    # Version : 4.0.0
    ./ci-version/bin/version.sh
    # 4.0.0
    ./ci-version/bin/semver.sh
    # 4.0.0

Reference

Macros

ex) Version : 0.1.2-beta+test

Name Value
__CI_MAJOR_VERSION__ 0
__CI_MAJOR_VERSION_STR__ "0"
__CI_MINOR_VERSION__ 1
__CI_MINOR_VERSION_STR__ "1"
__CI_PATCH_VERSION__ 2
__CI_PATCH_VERSION_STR__ "2"
__CI_PRE_RELEASE__ beta
__CI_PRE_RELEASE_STR__ "beta"
__CI_BUILD_META_DATA__ test
__CI_BUILD_META_DATA_STR__ "test"
__CI_BUILD_DATE__ 220202
__CI_BUILD_DATE_STR__ "220202"
__CI_VERSION__ "0.1.2"
__CI_SEMVER__ "0.1.2-beta+test"
__CI_SEMANTIC_VERSION__ "0.1.2-beta+test"

Test

cd test
./test.sh

About

CI versioning for C/C++


Languages

Language:Shell 84.9%Language:C 14.1%Language:CMake 1.0%