Skip to content

feat: implement Time<S> class template and CivilTime struct; update t… #10

feat: implement Time<S> class template and CivilTime struct; update t…

feat: implement Time<S> class template and CivilTime struct; update t… #10

Workflow file for this run

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"