feat: implement Time<S> class template and CivilTime struct; update t… #8
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| pull_request: | |
| workflow_dispatch: | |
| concurrency: | |
| group: ci-${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| checks: write | |
| pull-requests: write | |
| jobs: | |
| lint-cpp: | |
| name: C++ Lint (clang-format + clang-tidy) | |
| runs-on: ubuntu-22.04 | |
| env: | |
| CARGO_TERM_COLOR: always | |
| steps: | |
| - name: Checkout (with submodules) | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 | |
| - name: Install system dependencies | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| cmake \ | |
| ninja-build \ | |
| clang-format \ | |
| clang-tidy | |
| - name: Set up Rust (stable) | |
| uses: actions-rust-lang/setup-rust-toolchain@v1 | |
| with: | |
| toolchain: stable | |
| - name: Configure (CMake, compile commands) | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| cmake -S . -B build -G Ninja -DTEMPOCH_BUILD_DOCS=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON | |
| - name: clang-format check | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| mapfile -t files < <(git ls-files '*.hpp' '*.cpp') | |
| if [ ${#files[@]} -eq 0 ]; then | |
| echo "No C++ files found." | |
| exit 0 | |
| fi | |
| clang-format --dry-run --Werror "${files[@]}" | |
| - name: clang-tidy check | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| mapfile -t cpp_files < <(git ls-files '*.cpp') | |
| if [ ${#cpp_files[@]} -eq 0 ]; then | |
| echo "No C++ source files found." | |
| exit 0 | |
| fi | |
| for file in "${cpp_files[@]}"; do | |
| echo "Running clang-tidy on ${file}" | |
| clang-tidy -p build --warnings-as-errors='*' "${file}" | |
| done | |
| build-test-docs: | |
| name: Build + Test + Docs | |
| runs-on: ubuntu-22.04 | |
| env: | |
| CARGO_TERM_COLOR: always | |
| CMAKE_BUILD_PARALLEL_LEVEL: 2 | |
| steps: | |
| - name: Checkout (with submodules) | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 | |
| - name: Show selected dependency revisions | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| git submodule status --recursive | |
| echo | |
| echo "tempoch: $(git -C tempoch rev-parse HEAD) ($(git -C tempoch describe --tags --always 2>/dev/null || true))" | |
| echo "tempoch-ffi: $(git -C tempoch/tempoch-ffi rev-parse HEAD) ($(git -C tempoch/tempoch-ffi describe --tags --always 2>/dev/null || true))" | |
| - name: Install system dependencies | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| cmake \ | |
| ninja-build \ | |
| pkg-config \ | |
| graphviz | |
| - name: Install Doxygen 1.16.1 | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| DOXYGEN_VERSION="1.16.1" | |
| curl -fsSL "https://github.com/doxygen/doxygen/releases/download/Release_1_16_1/doxygen-${DOXYGEN_VERSION}.linux.bin.tar.gz" -o /tmp/doxygen.tar.gz | |
| sudo tar -xzf /tmp/doxygen.tar.gz -C /opt | |
| sudo ln -sf "/opt/doxygen-${DOXYGEN_VERSION}/bin/doxygen" /usr/local/bin/doxygen | |
| rm -f /tmp/doxygen.tar.gz | |
| doxygen --version | |
| - name: Set up Rust (stable) | |
| uses: actions-rust-lang/setup-rust-toolchain@v1 | |
| with: | |
| toolchain: stable | |
| - name: Cache cargo + build artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| tempoch/target | |
| tempoch/tempoch-ffi/target | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo- | |
| - name: Validate required submodules exist | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| test -f tempoch/Cargo.toml | |
| test -f tempoch/tempoch-ffi/Cargo.toml | |
| - name: Configure (CMake) | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| cmake -S . -B build -G Ninja -DTEMPOCH_BUILD_DOCS=ON | |
| - name: Build | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| cmake --build build --target test_tempoch | |
| - name: Test (ctest) | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| ctest --test-dir build --output-on-failure -L tempoch_cpp | |
| - name: Build docs (Doxygen) | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| cmake --build build --target docs | |
| coverage: | |
| name: Test & Coverage | |
| if: ${{ github.event_name != 'pull_request' || github.event.pull_request.draft == false }} | |
| runs-on: ubuntu-22.04 | |
| env: | |
| CARGO_TERM_COLOR: always | |
| steps: | |
| - name: Checkout (with submodules) | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 | |
| - name: Install system dependencies | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| cmake \ | |
| ninja-build \ | |
| pkg-config \ | |
| gcovr | |
| - name: Set up Rust (stable) | |
| uses: actions-rust-lang/setup-rust-toolchain@v1 | |
| with: | |
| toolchain: stable | |
| - name: Configure (CMake, coverage) | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| cmake -S . -B build-coverage -G Ninja \ | |
| -DTEMPOCH_BUILD_DOCS=OFF \ | |
| -DCMAKE_BUILD_TYPE=Debug \ | |
| -DCMAKE_CXX_FLAGS="--coverage" \ | |
| -DCMAKE_EXE_LINKER_FLAGS="--coverage" | |
| - name: Build tests | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| cmake --build build-coverage --target test_tempoch | |
| - name: Run tests | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| ctest --test-dir build-coverage --output-on-failure -L tempoch_cpp | |
| - name: Coverage (Cobertura XML) | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| gcovr \ | |
| --root . \ | |
| --exclude 'build-coverage/.*' \ | |
| --exclude 'tempoch/.*' \ | |
| --exclude 'tests/.*' \ | |
| --exclude 'examples/.*' \ | |
| --xml \ | |
| --output coverage.xml | |
| - name: Coverage (HTML) | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| mkdir -p coverage_html | |
| gcovr \ | |
| --root . \ | |
| --exclude 'build-coverage/.*' \ | |
| --exclude 'tempoch/.*' \ | |
| --exclude 'tests/.*' \ | |
| --exclude 'examples/.*' \ | |
| --html-details \ | |
| --output coverage_html/index.html | |
| - name: Build coverage summary (Markdown) | |
| uses: irongut/CodeCoverageSummary@v1.3.0 | |
| with: | |
| filename: coverage.xml | |
| badge: true | |
| format: markdown | |
| output: file | |
| - name: Publish to Job Summary | |
| shell: bash | |
| run: cat code-coverage-results.md >> "$GITHUB_STEP_SUMMARY" |