ci: add few workflows

diff --git a/.github/workflows/amd64_linux_bazel.yml b/.github/workflows/amd64_linux_bazel.yml
new file mode 100644
index 0000000..0695aa8
--- /dev/null
+++ b/.github/workflows/amd64_linux_bazel.yml
@@ -0,0 +1,74 @@
+# ref: https://github.com/actions/runner-images
+name: amd64 Linux Bazel
+
+on: [push, pull_request, workflow_dispatch]
+
+# Building using the github runner environement directly.
+jobs:
+  native:
+    strategy:
+      matrix:
+        bazel: [
+          {compilation_mode: opt},
+          {compilation_mode: dbg},
+        ]
+        cpp: [
+          {version: 14, flags: "-std=c++14"},
+          {version: 17, flags: "-std=c++17"},
+          {version: 20, flags: "-std=c++20"},
+        ]
+        python: [
+          {version: '3.11'},
+        ]
+        exclude:
+          # only test `-c dbg` build with C++17
+          - cpp: {version: 14}
+            bazel: {compilation_mode: dbg}
+          - cpp: {version: 20}
+            bazel: {compilation_mode: dbg}
+      fail-fast: false
+    name: Linux•Bazel(${{ matrix.bazel.compilation_mode }})•C++${{ matrix.cpp.version }}•Python${{ matrix.python.version }}
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+      - name: Check Java
+        run: java -version
+      - name: Setup Python
+        uses: actions/setup-python@v5
+        with:
+          python-version: ${{ matrix.python.version }}
+      - name: Check Python
+        run: |
+          python --version
+          python -m platform
+      - uses: bazel-contrib/setup-bazel@0.8.4
+        with:
+          bazelisk-cache: true
+          disk-cache: ${{ github.workflow }}
+          repository-cache: true
+      - name: Check Bazel
+        run: bazel version
+      - name: Build
+        run: >
+          cd examples/basic &&
+          bazel build
+          -c ${{ matrix.bazel.compilation_mode }}
+          --cxxopt=${{ matrix.cpp.flags }} --host_cxxopt=${{ matrix.cpp.flags }}
+          --subcommands=pretty_print
+          --enable_bzlmod
+          //...
+      - name: Test
+        run: >
+          cd examples/basic &&
+          bazel test
+          -c ${{ matrix.bazel.compilation_mode }}
+          --cxxopt=${{ matrix.cpp.flags }} --host_cxxopt=${{ matrix.cpp.flags }}
+          --subcommands=pretty_print
+          --enable_bzlmod
+          //...
+
+  amd64_linux_bazel:
+    runs-on: ubuntu-latest
+    needs: native
+    steps:
+      - uses: actions/checkout@v4
diff --git a/.github/workflows/amd64_macos_bazel.yml b/.github/workflows/amd64_macos_bazel.yml
new file mode 100644
index 0000000..1de301c
--- /dev/null
+++ b/.github/workflows/amd64_macos_bazel.yml
@@ -0,0 +1,72 @@
+# ref: https://github.com/actions/runner-images
+name: amd64 MacOS Bazel
+
+on: [push, pull_request, workflow_dispatch]
+
+# Building using the github runner environement directly.
+jobs:
+  native:
+    strategy:
+      matrix:
+        bazel: [
+          {compilation_mode: opt},
+          {compilation_mode: dbg},
+        ]
+        cpp: [
+          #{version: 14, flags: "-std=c++14"},
+          {version: 17, flags: "-std=c++17"},
+          #{version: 20, flags: "-std=c++20"},
+        ]
+        python: [
+          {version: '3.11'},
+        ]
+        exclude:
+          # only test `-c dbg` build with C++17
+          - cpp: {version: 14}
+            bazel: {compilation_mode: dbg}
+          - cpp: {version: 20}
+            bazel: {compilation_mode: dbg}
+      fail-fast: false
+    name: MacOS•Bazel(${{ matrix.bazel.compilation_mode }})•C++${{ matrix.cpp.version }}•Python${{ matrix.python.version }}
+    runs-on: macos-13 # last macos intel based runner
+    steps:
+      - uses: actions/checkout@v4
+      - name: Set Java to OpenJDK 17 (Temurin)
+        uses: actions/setup-java@v3
+        with:
+          distribution: 'temurin'
+          java-version: '17'
+      - name: Setup Python
+        uses: actions/setup-python@v5
+        with:
+          python-version: ${{ matrix.python.version }}
+      - name: Check Python
+        run: |
+          python --version
+          python -m platform
+      - name: Check Bazel
+        run: bazel version
+      - name: Build
+        run: >
+          cd examples/basic &&
+          bazel build
+          -c ${{ matrix.bazel.compilation_mode }}
+          --cxxopt=${{ matrix.cpp.flags }} --host_cxxopt=${{ matrix.cpp.flags }}
+          --subcommands=pretty_print
+          --enable_bzlmod
+          //...
+      - name: Test
+        run: >
+          cd examples/basic &&
+          bazel test
+          -c ${{ matrix.bazel.compilation_mode }}
+          --cxxopt=${{ matrix.cpp.flags }} --host_cxxopt=${{ matrix.cpp.flags }}
+          --subcommands=pretty_print
+          --enable_bzlmod
+          //...
+
+  amd64_macos_bazel:
+    runs-on: ubuntu-latest
+    needs: native
+    steps:
+      - uses: actions/checkout@v4
diff --git a/.github/workflows/amd64_windows_bazel.yml b/.github/workflows/amd64_windows_bazel.yml
new file mode 100644
index 0000000..09abdd0
--- /dev/null
+++ b/.github/workflows/amd64_windows_bazel.yml
@@ -0,0 +1,77 @@
+# ref: https://github.com/actions/runner-images
+name: amd64 Windows Bazel
+
+on: [push, pull_request, workflow_dispatch]
+
+# Building using the github runner environement directly.
+jobs:
+  native:
+    strategy:
+      matrix:
+        runner: [
+          windows-2022,
+          #windows-2019,
+        ]
+        bazel: [
+          {compilation_mode: opt},
+          {compilation_mode: dbg},
+        ]
+        cpp: [
+          {version: 14, flags: "/std:c++14"},
+          {version: 17, flags: "/std:c++17"},
+          #{version: 20, flags: "/std:c++20"},
+        ]
+        python: [
+          {version: '3.11'},
+        ]
+        exclude:
+          - runner: windows-2019
+            cpp: {version: 20}
+          # only test -c dbg with VS 2022 version 17 to save compute time
+          - runner: windows-2019
+            bazel: {compilation_mode: dbg}
+          - cpp: {version: 14}
+            bazel: {compilation_mode: dbg}
+          - cpp: {version: 20}
+            bazel: {compilation_mode: dbg}
+      fail-fast: false # Don't cancel all jobs if one fails.
+    name: ${{ matrix.runner }}•Bazel(${{ matrix.bazel.compilation_mode }})•C++${{ matrix.cpp.version }}•Python${{ matrix.python.version }}
+    runs-on: ${{ matrix.runner }}
+    steps:
+      - uses: actions/checkout@v4
+      - name: Setup Python
+        uses: actions/setup-python@v5
+        with:
+          python-version: ${{ matrix.python.version }}
+      - name: Check Python
+        run: |
+          python --version
+          python -m platform
+      - name: Install Bazel
+        run: choco install bazel
+      - name: Check Bazel
+        run: bazel version
+      - name: Build
+        run: >
+          cd examples/basic &&
+          bazel build
+          -c ${{ matrix.bazel.compilation_mode }}
+          --cxxopt=${{ matrix.cpp.flags }} --host_cxxopt=${{ matrix.cpp.flags }}
+          --subcommands=pretty_print
+          --enable_bzlmod
+          //...
+      - name: Test
+        run: >
+          cd examples/basic &&
+          bazel test
+          -c ${{ matrix.bazel.compilation_mode }}
+          --cxxopt=${{ matrix.cpp.flags }} --host_cxxopt=${{ matrix.cpp.flags }}
+          --subcommands=pretty_print
+          --enable_bzlmod
+          //...
+
+  amd64_windows_bazel:
+    runs-on: ubuntu-latest
+    needs: native
+    steps:
+      - uses: actions/checkout@v4
diff --git a/.github/workflows/arm64_macos_bazel.yml b/.github/workflows/arm64_macos_bazel.yml
new file mode 100644
index 0000000..4ce8696
--- /dev/null
+++ b/.github/workflows/arm64_macos_bazel.yml
@@ -0,0 +1,72 @@
+# ref: https://github.com/actions/runner-images
+name: arm64 MacOS Bazel
+
+on: [push, pull_request, workflow_dispatch]
+
+# Building using the github runner environement directly.
+jobs:
+  native:
+    strategy:
+      matrix:
+        bazel: [
+          {compilation_mode: opt},
+          {compilation_mode: dbg},
+        ]
+        cpp: [
+          #{version: 14, flags: "-std=c++14"},
+          {version: 17, flags: "-std=c++17"},
+          #{version: 20, flags: "-std=c++20"},
+        ]
+        python: [
+          {version: '3.11'},
+        ]
+        exclude:
+          # only test `-c dbg` build with C++17
+          - cpp: {version: 14}
+            bazel: {compilation_mode: dbg}
+          - cpp: {version: 20}
+            bazel: {compilation_mode: dbg}
+      fail-fast: false
+    name: MacOS•Bazel(${{ matrix.bazel.compilation_mode }})•C++${{ matrix.cpp.version }}•Python${{ matrix.python.version }}
+    runs-on: macos-latest
+    steps:
+      - uses: actions/checkout@v4
+      - name: Set Java to OpenJDK 17 (Temurin)
+        uses: actions/setup-java@v3
+        with:
+          distribution: 'temurin'
+          java-version: '17'
+      - name: Setup Python
+        uses: actions/setup-python@v5
+        with:
+          python-version: ${{ matrix.python.version }}
+      - name: Check Python
+        run: |
+          python --version
+          python -m platform
+      - name: Check Bazel
+        run: bazel version
+      - name: Build
+        run: >
+          cd examples/basic &&
+          bazel build
+          -c ${{ matrix.bazel.compilation_mode }}
+          --cxxopt=${{ matrix.cpp.flags }} --host_cxxopt=${{ matrix.cpp.flags }}
+          --subcommands=pretty_print
+          --enable_bzlmod
+          //...
+      - name: Test
+        run: >
+          cd examples/basic &&
+          bazel test
+          -c ${{ matrix.bazel.compilation_mode }}
+          --cxxopt=${{ matrix.cpp.flags }} --host_cxxopt=${{ matrix.cpp.flags }}
+          --subcommands=pretty_print
+          --enable_bzlmod
+          //...
+
+  arm64_macos_bazel:
+    runs-on: ubuntu-latest
+    needs: native
+    steps:
+      - uses: actions/checkout@v4