Skip to content

Commit c31eed6

Browse files
committed
feat: MATLAB File Reader/Writer v0.1.0-beta - First Release
🎉 First public release with v7.3 write support! ## What's New ### Reader (v5 + v7.3) - Format auto-detection (v5 and v7.3+) - Numeric types: double, single, int8-64, uint8-64 - Complex numbers, multi-dimensional arrays - Partial structures/cell arrays support ### Writer (v7.3) ✨ - Create MATLAB v7.3 files via HDF5 - All numeric types + complex numbers - Multi-dimensional arrays - Round-trip verified: write → read ✅ ## Infrastructure - CI/CD: GitHub Actions (Linux, macOS, Windows) ✅ - golangci-lint: 34+ linters, 0 issues ✅ - Tests: 27 tests, 24 passing (88.9%) - Documentation: README, ROADMAP, CONTRIBUTING ## Known Limitations - v5 Writer not yet implemented (TASK-011) - Complex numbers: workaround format (HDF5 limitation) - Reader bugs: multi-dim arrays, multiple variables - No compression/structures/cells writing yet ## Quality Metrics - Linter: 0 errors, 0 warnings ✅ - Test coverage: 47.3% - CI: ALL GREEN ✅ - Repository: PUBLIC ✅ Next: v0.2.0 will add v5 Writer and fix reader bugs
1 parent 76748e4 commit c31eed6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+6110
-16
lines changed

.github/CODEOWNERS

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# CODEOWNERS for MATLAB File Reader
2+
# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
3+
#
4+
# This file defines individuals or teams responsible for code in this repository.
5+
# Code owners are automatically requested for review when someone opens a pull request
6+
# that modifies code they own.
7+
8+
# Default owner for everything in the repo
9+
* @kolkov
10+
11+
# Core MATLAB format parsers - Critical parsing logic
12+
/internal/v5/ @kolkov
13+
/internal/v73/ @kolkov
14+
/types/ @kolkov
15+
16+
# Public API files - Breaking changes require careful review
17+
/matfile.go @kolkov
18+
19+
# Command-line utilities and examples
20+
/cmd/ @kolkov
21+
/examples/ @kolkov
22+
23+
# Test data and generators - Validation and test file creation
24+
/testdata/ @kolkov
25+
26+
# Documentation - Keep up to date with code changes
27+
*.md @kolkov
28+
/docs/ @kolkov
29+
30+
# GitHub configuration and CI/CD
31+
/.github/ @kolkov
32+
33+
# Code quality and linting configuration
34+
/.golangci.yml @kolkov
35+
/Makefile @kolkov
36+
37+
# Tests - Ensure coverage and reliability
38+
*_test.go @kolkov
39+
40+
# Release management - Version control and changelog
41+
/CHANGELOG.md @kolkov
42+
/ROADMAP.md @kolkov
43+
44+
# Contributing guidelines
45+
/CONTRIBUTING.md @kolkov
46+
47+
# Go module files - Dependency management
48+
/go.mod @kolkov
49+
/go.sum @kolkov
50+
51+
# Scripts
52+
/scripts/ @kolkov

.github/workflows/test.yml

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
name: Tests
2+
3+
# Testing Strategy:
4+
# - Tests run on Linux, macOS, and Windows (cross-platform library)
5+
# - MATLAB .mat files are cross-platform - must work everywhere
6+
# - Go 1.25+ required (matches go.mod requirement)
7+
# - Depends on github.com/scigolib/hdf5 for v7.3+ format support
8+
#
9+
# Branch Strategy (Git Flow):
10+
# - feature/** branches: Development work
11+
# - release/** branches: Pre-release testing (test here BEFORE merging to main)
12+
# - develop branch: Integration branch
13+
# - main branch: Production-ready code only (protected)
14+
# - Pull requests: Must pass all tests before merge
15+
16+
on:
17+
push:
18+
branches:
19+
- main
20+
- develop
21+
- 'feature/**'
22+
- 'release/**'
23+
pull_request:
24+
branches:
25+
- main
26+
- develop
27+
28+
jobs:
29+
# Unit tests - Cross-platform
30+
unit-tests:
31+
name: Unit Tests - ${{ matrix.os }} - Go ${{ matrix.go-version }}
32+
runs-on: ${{ matrix.os }}
33+
strategy:
34+
matrix:
35+
os: [ubuntu-latest, macos-latest, windows-latest]
36+
go-version: ['1.25'] # Match go.mod requirement
37+
38+
steps:
39+
- name: Checkout code
40+
uses: actions/checkout@v4
41+
42+
- name: Set up Go
43+
uses: actions/setup-go@v5
44+
with:
45+
go-version: ${{ matrix.go-version }}
46+
cache: true
47+
48+
- name: Download dependencies
49+
run: go mod download
50+
51+
- name: Verify dependencies
52+
run: go mod verify
53+
54+
- name: Run go vet
55+
if: matrix.os == 'ubuntu-latest'
56+
run: go vet ./...
57+
58+
- name: Run unit tests with race detector
59+
shell: bash
60+
run: go test -short -v -race -coverprofile=coverage.txt -covermode=atomic ./...
61+
62+
- name: Upload coverage to Codecov
63+
if: matrix.os == 'ubuntu-latest' && matrix.go-version == '1.25'
64+
uses: codecov/codecov-action@v4
65+
continue-on-error: true
66+
with:
67+
file: ./coverage.txt
68+
flags: unittests
69+
name: codecov-unit
70+
71+
lint:
72+
name: Lint
73+
runs-on: ubuntu-latest
74+
continue-on-error: false # Strict for production library
75+
76+
steps:
77+
- name: Checkout code
78+
uses: actions/checkout@v4
79+
80+
- name: Set up Go
81+
uses: actions/setup-go@v5
82+
with:
83+
go-version: '1.25'
84+
cache: true
85+
86+
- name: Run golangci-lint
87+
uses: golangci/golangci-lint-action@v8
88+
with:
89+
version: latest
90+
args: --timeout=5m
91+
92+
# Formatting check
93+
formatting:
94+
name: Code Formatting
95+
runs-on: ubuntu-latest
96+
97+
steps:
98+
- name: Checkout code
99+
uses: actions/checkout@v4
100+
101+
- name: Set up Go
102+
uses: actions/setup-go@v5
103+
with:
104+
go-version: '1.25'
105+
cache: true
106+
107+
- name: Check formatting
108+
run: |
109+
if [ -n "$(gofmt -l .)" ]; then
110+
echo "ERROR: The following files are not formatted:"
111+
gofmt -l .
112+
echo ""
113+
echo "Run 'go fmt ./...' to fix formatting issues."
114+
exit 1
115+
fi
116+
echo "All files are properly formatted ✓"

.gitignore

Lines changed: 64 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
# If you prefer the allow list template instead of the deny list, see community template:
2-
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
3-
#
41
# Binaries for programs and plugins
52
*.exe
63
*.exe~
@@ -11,22 +8,75 @@
118
# Test binary, built with `go test -c`
129
*.test
1310

14-
# Code coverage profiles and other test artifacts
11+
# Output of the go coverage tool
1512
*.out
16-
coverage.*
17-
*.coverprofile
18-
profile.cov
13+
*.html
14+
coverage.txt
15+
coverage.out
16+
coverage.html
1917

20-
# Dependency directories (remove the comment below to include it)
21-
# vendor/
18+
# Dependency directories
19+
vendor/
20+
21+
# AI agents and private configs
22+
.gode
23+
.goco
24+
.claude
25+
26+
# Private development docs (not for release)
27+
/docs/dev/
28+
/docs/proposals/
2229

2330
# Go workspace file
2431
go.work
2532
go.work.sum
2633

27-
# env file
28-
.env
34+
# Build directories
35+
/bin/
36+
/dist/
37+
/build/
38+
39+
# IDE specific files
40+
.vscode/
41+
.idea/
42+
*.swp
43+
*.swo
44+
*~
45+
46+
# OS specific files
47+
.DS_Store
48+
Thumbs.db
49+
50+
# Temporary files
51+
*.tmp
52+
*.log
53+
*.bak
54+
tmp/
55+
56+
# Python
57+
__pycache__/
58+
*.py[cod]
59+
*$py.class
60+
.Python
61+
venv/
62+
env/
63+
64+
# Archives (keep archive directory, but ignore common archive files)
65+
*.zip
66+
*.tar.gz
67+
*.rar
68+
69+
# Editor backup files
70+
*~
71+
.*.swp
72+
.*.swo
73+
74+
# Dev docs
75+
docs/dev
76+
test_output.txt
77+
78+
# Lint results
79+
lint_results.log
2980

30-
# Editor/IDE
31-
# .idea/
32-
# .vscode/
81+
# Test output files (generated by tests)
82+
testdata/test_*.mat

0 commit comments

Comments
 (0)