Skip to content
Merged
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
5 changes: 5 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Each line is a file pattern followed by one or more owners.
# These owners are requested for review whenever a matching path changes.
# See https://docs.github.com/articles/about-codeowners

* @bbalouki
102 changes: 102 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: Bug report
description: Report a parsing, build, or runtime defect in ITCHCPP.
title: "[Bug]: "
labels: ["bug", "triage"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to report a bug. Please search
[existing issues](https://github.com/bbalouki/itchcpp/issues) first to
avoid duplicates.

- type: textarea
id: description
attributes:
label: Description
description: A clear and concise description of the bug.
validations:
required: true

- type: textarea
id: repro
attributes:
label: Steps to reproduce
description: >
Minimal, compilable code (or CLI invocation) that reproduces the
issue. Attach or link a sample ITCH file if the bug is data-dependent.
render: cpp
validations:
required: true

- type: textarea
id: expected
attributes:
label: Expected behavior
validations:
required: true

- type: textarea
id: actual
attributes:
label: Actual behavior
description: Include the full error message, stack trace, or sanitizer output if applicable.
validations:
required: true

- type: input
id: version
attributes:
label: ITCHCPP version
description: Contents of `VERSION.txt`, the pip package version, or the commit SHA.
placeholder: e.g. 1.6.2
validations:
required: true

- type: dropdown
id: interface
attributes:
label: Interface
options:
- C++ library
- Python bindings (itchcpp)
- itch-tool CLI
- Build system / CMake
validations:
required: true

- type: dropdown
id: os
attributes:
label: Operating system
multiple: true
options:
- Linux
- Windows
- macOS
validations:
required: true

- type: input
id: compiler
attributes:
label: Compiler and version
placeholder: e.g. Clang 18, GCC 13, MSVC 19.38
validations:
required: true

- type: input
id: cxx-standard
attributes:
label: C++ standard
placeholder: e.g. 20 or 23
validations:
required: false

- type: textarea
id: extra
attributes:
label: Additional context
description: CMake configure flags, vcpkg/Conan setup, or anything else relevant.
validations:
required: false
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Question or discussion
url: https://github.com/bbalouki/itchcpp/discussions
about: Ask usage questions or discuss ideas before filing an issue.
- name: Security vulnerability
url: https://github.com/bbalouki/itchcpp/security/policy
about: Report security issues privately, do not open a public issue. See SECURITY.md.
66 changes: 66 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Feature request
description: Suggest an enhancement for ITCHCPP.
title: "[Feature]: "
labels: ["enhancement", "triage"]
body:
- type: markdown
attributes:
value: |
Thanks for suggesting an improvement. Please search
[existing issues](https://github.com/bbalouki/itchcpp/issues) first to
avoid duplicates.

- type: textarea
id: problem
attributes:
label: Problem
description: What limitation or gap are you running into? Is it related to a specific message type, transport, or interface (C++, Python, itch-tool)?
validations:
required: true

- type: textarea
id: solution
attributes:
label: Proposed solution
description: What would you like to happen? Include a sketch of the API or CLI surface if relevant.
validations:
required: true

- type: textarea
id: alternatives
attributes:
label: Alternatives considered
validations:
required: false

- type: dropdown
id: area
attributes:
label: Area
multiple: true
options:
- Parser / message decoding
- Feed ingestion / transport (MoldUDP64, SoupBinTCP, pcap)
- Book engine
- Analytics
- Interoperability (CSV/Arrow, itch-tool)
- Python bindings
- Build / packaging (CMake, vcpkg, Conan)
- Documentation
validations:
required: false

- type: checkboxes
id: breaking
attributes:
label: Compatibility
options:
- label: This would require a breaking change to the public API (see [CONTRIBUTING](../../CONTRIBUTING.md#versioning-and-compatibility-policy)).
required: false

- type: textarea
id: extra
attributes:
label: Additional context
validations:
required: false
24 changes: 24 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
## Summary

<!-- What does this change do, and why? -->

## Related issues

<!-- e.g. Closes #123 -->

## Type of change

- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change (see [CONTRIBUTING](../CONTRIBUTING.md#versioning-and-compatibility-policy))
- [ ] Documentation
- [ ] Build / CI / tooling

## Checklist

- [ ] Code follows the style in [CLAUDE](../CLAUDE.md) (`snake_case`, `PascalCase` types, `m_` members, trailing return types, etc.).
- [ ] `clang-format` and `clang-tidy` pass locally.
- [ ] Tests were added or updated under `tests/` and `ctest` passes.
- [ ] Public API changes are documented with Doxygen `///` comments.
- [ ] [CHANGELOG](../CHANGELOG.md) is updated under `[Unreleased]`.
- [ ] Breaking changes to headers, wire formats, `itch-tool`, or the Python API are called out explicitly above.
15 changes: 15 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
commit-message:
prefix: "ci"

- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
commit-message:
prefix: "build"
49 changes: 33 additions & 16 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
# Pinned off windows-latest: it moved to the Windows Server 2025 / VS 2026
# image in 2026-06 and the vcpkg benchmark port's configure step does not
# yet build cleanly under that toolchain. Revisit once vcpkg catches up.
os: [ubuntu-latest, windows-2022, macos-latest]
build_type: [Release, Debug]
cpp_standard: [20, 23]
runs-on: ${{ matrix.os }}
Expand All @@ -30,9 +33,14 @@ jobs:
path: |
${{ env.VCPKG_ROOT }}
~/.cache/vcpkg
key: ${{ runner.os }}-vcpkg-${{ hashFiles('vcpkg.json') }}
restore-keys: |
${{ runner.os }}-vcpkg-
# Keyed on matrix.os (not runner.os) so a runner-image change, which can
# silently swap the compiler/toolset, busts the cache instead of reusing
# binaries or a CMakeCache.txt built by a different toolchain/generator.
# No restore-keys: a partial-match fallback can restore a vcpkg clone
# from before vcpkg.json last changed, whose git history doesn't
# contain the currently pinned builtin-baseline commit, and
# lukka/run-vcpkg then fails outright instead of re-cloning.
key: ${{ matrix.os }}-vcpkg-${{ hashFiles('vcpkg.json') }}

- name: Set up vcpkg
uses: lukka/run-vcpkg@v11
Expand All @@ -41,9 +49,9 @@ jobs:
uses: actions/cache@v4
with:
path: ${{ env.BUILD_DIR }}
key: ${{ runner.os }}-${{ matrix.build_type }}-cmake-${{ hashFiles('CMakeLists.txt', '**/CMakeLists.txt') }}
key: ${{ matrix.os }}-${{ matrix.build_type }}-cmake-${{ hashFiles('CMakeLists.txt', '**/CMakeLists.txt') }}
restore-keys: |
${{ runner.os }}-${{ matrix.build_type }}-cmake-
${{ matrix.os }}-${{ matrix.build_type }}-cmake-

- name: Set VCPKG Triplet
shell: bash
Expand Down Expand Up @@ -114,9 +122,11 @@ jobs:
path: |
${{ env.VCPKG_ROOT }}
~/.cache/vcpkg
# No restore-keys: a partial-match fallback can restore a vcpkg clone
# from before vcpkg.json last changed, whose git history doesn't
# contain the currently pinned builtin-baseline commit, and
# lukka/run-vcpkg then fails outright instead of re-cloning.
key: ${{ runner.os }}-vcpkg-${{ hashFiles('vcpkg.json') }}
restore-keys: |
${{ runner.os }}-vcpkg-

- name: Set up vcpkg
uses: lukka/run-vcpkg@v11
Expand Down Expand Up @@ -152,9 +162,11 @@ jobs:
path: |
${{ env.VCPKG_ROOT }}
~/.cache/vcpkg
# No restore-keys: a partial-match fallback can restore a vcpkg clone
# from before vcpkg.json last changed, whose git history doesn't
# contain the currently pinned builtin-baseline commit, and
# lukka/run-vcpkg then fails outright instead of re-cloning.
key: ${{ runner.os }}-vcpkg-${{ hashFiles('vcpkg.json') }}
restore-keys: |
${{ runner.os }}-vcpkg-

- name: Set up vcpkg
uses: lukka/run-vcpkg@v11
Expand Down Expand Up @@ -196,9 +208,11 @@ jobs:
path: |
${{ env.VCPKG_ROOT }}
~/.cache/vcpkg
# No restore-keys: a partial-match fallback can restore a vcpkg clone
# from before vcpkg.json last changed, whose git history doesn't
# contain the currently pinned builtin-baseline commit, and
# lukka/run-vcpkg then fails outright instead of re-cloning.
key: ${{ runner.os }}-vcpkg-${{ hashFiles('vcpkg.json') }}
restore-keys: |
${{ runner.os }}-vcpkg-

- name: Set up vcpkg
uses: lukka/run-vcpkg@v11
Expand Down Expand Up @@ -284,9 +298,10 @@ jobs:
path: |
${{ env.VCPKG_ROOT }}
~/.cache/vcpkg
# No restore-keys: see build-and-test's Cache vcpkg step for why a
# partial-match fallback is unsafe here (it could also cross-match the
# non-python vcpkg cache, an even less appropriate restore target).
key: ${{ runner.os }}-vcpkg-python-${{ hashFiles('vcpkg.json') }}
restore-keys: |
${{ runner.os }}-vcpkg-

- name: Set up vcpkg
uses: lukka/run-vcpkg@v11
Expand Down Expand Up @@ -329,9 +344,11 @@ jobs:
path: |
${{ env.VCPKG_ROOT }}
~/.cache/vcpkg
# No restore-keys: a partial-match fallback can restore a vcpkg clone
# from before vcpkg.json last changed, whose git history doesn't
# contain the currently pinned builtin-baseline commit, and
# lukka/run-vcpkg then fails outright instead of re-cloning.
key: ${{ runner.os }}-vcpkg-${{ hashFiles('vcpkg.json') }}
restore-keys: |
${{ runner.os }}-vcpkg-

- name: Set up vcpkg
uses: lukka/run-vcpkg@v11
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-14]
# Pinned off windows-latest: see build.yml for why (VS 2026 image, vcpkg
# benchmark port not yet compatible).
os: [ubuntu-latest, windows-2022, macos-14]
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand Down
Loading
Loading