Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
e7edba3
Update README with additional authoring details
hpractv May 6, 2026
7849643
Move projects into src/ and update solution paths
hpractv May 6, 2026
4236a24
Move projects into src/
hpractv May 6, 2026
5327fb7
ralph: Task #1 - Move project to src/ folder
hpractv May 6, 2026
4d9b4f7
Extract dataTypeFromString to neutral dataTypeHelper in library names…
hpractv May 6, 2026
97da965
Extract dataTypeFromString to dataTypeHelper; update callers to use a…
hpractv May 6, 2026
b27bb99
ralph: Task #2 - Extract dataTypeFromString to neutral helper
hpractv May 6, 2026
3427472
Remove provider implementations and dependencies
hpractv May 6, 2026
1e8ea95
Use analyticsLibrary.library namespace in excelLibrary after provider…
hpractv May 6, 2026
9609e62
Replace removed dataLibrary with minimal core helper and add System.D…
hpractv May 6, 2026
e11e608
Remove duplicate using in excelLibrary
hpractv May 6, 2026
6696ea3
Remove Oracle and sqlDb suppressions from GlobalSuppressions.cs
hpractv May 6, 2026
907707f
Remove provider packages from packages.config\n\nCo-authored-by: Copi…
hpractv May 6, 2026
a2a6514
Remove SQL Server, Oracle, SAS, and Sybase provider implementations a…
hpractv May 6, 2026
0026ba9
Remove provider release artifacts; remove provider mentions from README
hpractv May 6, 2026
0ae5ac2
Remove SQL Server example from release artifacts
hpractv May 6, 2026
c1d25ff
ralph: Task #3 - Remove all provider code and dependencies
hpractv May 6, 2026
ebdf731
Split project into focused NuGet packages
hpractv May 6, 2026
fe540a7
Update package tags to remove provider-specific tags
hpractv May 6, 2026
371072b
Move analytics.cs to Core and update namespace to analyticsLibrary.Core
hpractv May 6, 2026
fdd1cbf
Revert typedIndex placement; restore Algorithms namespace and BOM ord…
hpractv May 6, 2026
e7dfe27
Move typedIndex to analyticsLibrary.Core and update namespace
hpractv May 6, 2026
c348fdb
Remove Algorithms using and replace quickSort call with Array.Sort in…
hpractv May 6, 2026
7705b56
ralph: Task #4 - Split project into focused NuGet packages
hpractv May 6, 2026
a74a1a1
ralph: Tasks #6, #5, #7, #8 - Dependency management, tests, CI workfl…
hpractv May 6, 2026
b2bd2d5
Fix Excel enum duplicate and typo; add Excel xUnit tests
hpractv May 6, 2026
2e378d2
Add Excel test project to solution and include Excel tests\n\nCo-auth…
hpractv May 6, 2026
3595c9d
tests(Excel): add xUnit tests for analyticsLibrary.Excel; EPPlus roun…
hpractv May 6, 2026
333ab5c
tests(excel): add Excel xUnit tests and regression guards\n\nAdd xUni…
hpractv May 6, 2026
254c318
tests: add analyticsLibrary.Excel.Tests xUnit project and Excel tests…
hpractv May 6, 2026
f4306ce
tests(excel): add project reference to analyticsLibrary.Excel and add…
hpractv May 6, 2026
d590b78
Add Excel tests for analyticsLibrary.Excel\n\n- Add tests/analyticsLi…
hpractv May 6, 2026
d190201
Fix Excel: replace skip.forEach with foreach; add Excel xUnit tests
hpractv May 6, 2026
e3a9104
Add Excel xUnit tests and project; ensure EPPlus works in CI
hpractv May 6, 2026
e3969fd
tests(Excel): add analyticsLibrary.Excel.Tests xUnit project and Exce…
hpractv May 6, 2026
aee4d2c
tests(excel): add Excel xUnit tests
hpractv May 6, 2026
4582194
tests: add analyticsLibrary.Excel.Tests xUnit project and tests\n\nAd…
hpractv May 6, 2026
bf7a1fc
Fix sheetColumnAttribute internal naming typo
hpractv May 6, 2026
85257d3
Add Excel xUnit tests and test project; validate column enum and shee…
hpractv May 6, 2026
7a86ac5
Add Excel xUnit tests: columnLettersEnum, sheetColumnAttribute, rowVa…
hpractv May 6, 2026
64ad60c
Pin EPPlus and test package versions in Directory.Packages.props\n\nA…
hpractv May 6, 2026
c1f4ec2
tests(excel): add Excel xUnit tests and project; adjust test project …
hpractv May 6, 2026
7974f00
Add Excel xUnit tests and project for analyticsLibrary.Excel\n\nAdds …
hpractv May 6, 2026
483a22c
Add analyticsLibrary.Excel.Tests xUnit project with Excel tests
hpractv May 6, 2026
8cb6b24
Add Excel xUnit tests and remove duplicate template test\n\nCo-author…
hpractv May 6, 2026
1d5192e
ralph: Task #9 - Add Excel package tests and fix bugs
hpractv May 6, 2026
7252b5e
chore: ignore .test-output.txt
hpractv May 6, 2026
225ae51
ci: enhance beta package publishing logic in CI workflow
hpractv May 6, 2026
03e059b
Add FOSS Excel packages: ExcelDataReader (3.7.0), ExcelDataReader.Dat…
hpractv May 8, 2026
59dded7
ralph: Task #10 - Add FOSS reading/writing packages
hpractv May 8, 2026
ffbfb47
tests: add Xlsx workbook smoke test for getWorkbookSheetDatasets\n\nC…
hpractv May 8, 2026
89d374f
excel: use NPOI table properties for ranges; implement BuildDataTable…
hpractv May 8, 2026
ed5166c
tests: add smoke test for getWorkbookSheetDatasets; include NPOI depe…
hpractv May 8, 2026
6ee407a
chore: remove accidental tmpExcelTest artifacts\n\nCo-authored-by: Co…
hpractv May 8, 2026
bcca106
tests: add smoke test for getWorkbookSheetDatasets; remove unsupporte…
hpractv May 8, 2026
c767bf6
tests: use fresh read stream for in-memory workbook to avoid NPOI clo…
hpractv May 8, 2026
b843c06
ralph: Task #11 - Implement getWorkbookSheetDatasets and range helper
hpractv May 8, 2026
7a3cbc0
Add NPOI-based tests for getSheetData and getExcelSheetNames; remove …
hpractv May 8, 2026
4adedd7
ralph: Task #12 - Port read APIs getSheetData and getExcelSheetNames …
hpractv May 8, 2026
0ec29b7
docs: update ralph memory to reflect NPOI write porting
hpractv May 8, 2026
7460f9b
chore(excel): remove ExcelWorksheet symbol from write-API comment
hpractv May 8, 2026
32dea83
docs: append memory note about Excel write API port to NPOI
hpractv May 8, 2026
e517212
docs: append deleteTable and EPPlus artifact notes to ralph/memory.md
hpractv May 8, 2026
35984ed
ralph: Task #13 - Port all write APIs to NPOI/FOSS
hpractv May 8, 2026
dafdc05
docs: update README to reflect breaking changes in analyticsLibrary.E…
hpractv May 8, 2026
d97f19e
chore: update package versions and enhance CI workflows to detect pac…
hpractv May 9, 2026
c0e3004
fix: rename single-letter generic type parameters
Copilot May 9, 2026
3860b84
Merge pull request #7 from hpractv/copilot/fix-single-letter-generics…
hpractv May 9, 2026
1d58088
fix: address review feedback - extension enforcement, getSheetData bo…
Copilot May 9, 2026
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
226 changes: 226 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
name: CI

on:
pull_request:
branches: [ main ]
push:
branches: [ main ]

jobs:
changes:
name: Detect package-impacting changes
runs-on: ubuntu-latest
outputs:
core_changed: ${{ steps.flags.outputs.core_changed }}
algorithms_changed: ${{ steps.flags.outputs.algorithms_changed }}
statistics_changed: ${{ steps.flags.outputs.statistics_changed }}
excel_changed: ${{ steps.flags.outputs.excel_changed }}
access_changed: ${{ steps.flags.outputs.access_changed }}
hadoop_changed: ${{ steps.flags.outputs.hadoop_changed }}
root_changed: ${{ steps.flags.outputs.root_changed }}
any_changed: ${{ steps.flags.outputs.any_changed }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Detect changed paths
id: filter
uses: dorny/paths-filter@v3
with:
filters: |
workflows:
- '.github/workflows/ci.yml'
- '.github/workflows/release.yml'
core:
- 'src/analyticsLibrary.Core/**'
algorithms:
- 'src/analyticsLibrary.Algorithms/**'
statistics:
- 'src/analyticsLibrary.Statistics/**'
excel:
- 'src/analyticsLibrary.Excel/**'
access:
- 'src/analyticsLibrary.Access/**'
hadoop:
- 'src/analyticsLibrary.Hadoop/**'
root:
- 'src/analyticsLibrary/**'

- name: Compute effective package flags
id: flags
run: |
WORKFLOWS_CHANGED='${{ steps.filter.outputs.workflows }}'
set_flag() {
local name="$1"
local raw="$2"
if [ "$raw" = "true" ] || [ "$WORKFLOWS_CHANGED" = "true" ]; then
echo "${name}=true" >> "$GITHUB_OUTPUT"
else
echo "${name}=false" >> "$GITHUB_OUTPUT"
fi
}

set_flag core_changed '${{ steps.filter.outputs.core }}'
set_flag algorithms_changed '${{ steps.filter.outputs.algorithms }}'
set_flag statistics_changed '${{ steps.filter.outputs.statistics }}'
set_flag excel_changed '${{ steps.filter.outputs.excel }}'
set_flag access_changed '${{ steps.filter.outputs.access }}'
set_flag hadoop_changed '${{ steps.filter.outputs.hadoop }}'
set_flag root_changed '${{ steps.filter.outputs.root }}'

if [ '${{ steps.filter.outputs.core }}' = "true" ] || \
[ '${{ steps.filter.outputs.algorithms }}' = "true" ] || \
[ '${{ steps.filter.outputs.statistics }}' = "true" ] || \
[ '${{ steps.filter.outputs.excel }}' = "true" ] || \
[ '${{ steps.filter.outputs.access }}' = "true" ] || \
[ '${{ steps.filter.outputs.hadoop }}' = "true" ] || \
[ '${{ steps.filter.outputs.root }}' = "true" ] || \
[ "$WORKFLOWS_CHANGED" = "true" ]; then
echo "any_changed=true" >> "$GITHUB_OUTPUT"
else
echo "any_changed=false" >> "$GITHUB_OUTPUT"
fi

no-package-changes:
name: No package-impacting changes
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.any_changed != 'true'
steps:
- name: Skip message
run: echo "No package-impacting changes detected; skipping NuGet build/pack/publish."

build-test-pack:
name: Build, Test, and Pack
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.any_changed == 'true'

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'

- name: Restore
run: dotnet restore

- name: Build
run: dotnet build -c Release --no-restore

- name: Test
run: dotnet test -c Release --no-build --verbosity normal

- name: Pack
run: |
mkdir -p ./artifacts
PACKED=0
IS_PR="${{ github.event_name == 'pull_request' }}"
PR_NUMBER="${{ github.event.pull_request.number }}"
RUN_NUMBER="${{ github.run_number }}"

pack_pkg() {
local csproj="$1"
local base_ver
base_ver=$(grep -oPm1 '<Version>\K[^<]+' "$csproj")
if [ "$IS_PR" = "true" ] && [ -n "$PR_NUMBER" ]; then
local ver="${base_ver}-beta.pr-${PR_NUMBER}.${RUN_NUMBER}"
else
local ver="$base_ver"
fi
dotnet pack "$csproj" -c Release --no-build -p:Version="$ver" -o ./artifacts
}

if [ "${{ needs.changes.outputs.core_changed }}" = "true" ]; then
pack_pkg src/analyticsLibrary.Core/analyticsLibrary.Core.csproj
PACKED=$((PACKED+1))
fi
if [ "${{ needs.changes.outputs.algorithms_changed }}" = "true" ]; then
pack_pkg src/analyticsLibrary.Algorithms/analyticsLibrary.Algorithms.csproj
PACKED=$((PACKED+1))
fi
if [ "${{ needs.changes.outputs.statistics_changed }}" = "true" ]; then
pack_pkg src/analyticsLibrary.Statistics/analyticsLibrary.Statistics.csproj
PACKED=$((PACKED+1))
fi
if [ "${{ needs.changes.outputs.excel_changed }}" = "true" ]; then
pack_pkg src/analyticsLibrary.Excel/analyticsLibrary.Excel.csproj
PACKED=$((PACKED+1))
fi
if [ "${{ needs.changes.outputs.access_changed }}" = "true" ]; then
pack_pkg src/analyticsLibrary.Access/analyticsLibrary.Access.csproj
PACKED=$((PACKED+1))
fi
if [ "${{ needs.changes.outputs.hadoop_changed }}" = "true" ]; then
pack_pkg src/analyticsLibrary.Hadoop/analyticsLibrary.Hadoop.csproj
PACKED=$((PACKED+1))
fi
if [ "${{ needs.changes.outputs.root_changed }}" = "true" ]; then
pack_pkg src/analyticsLibrary/analyticsLibrary.csproj
PACKED=$((PACKED+1))
fi

if [ "$PACKED" -eq 0 ]; then
echo "No package projects selected for packing."
exit 1
fi

- name: Inspect packages
run: |
echo "Produced packages:"
ls -la ./artifacts/*.nupkg
EXPECTED=0
verify_pkg() {
local should_pack="$1"
local package_name="$2"
if [ "$should_pack" = "true" ]; then
EXPECTED=$((EXPECTED+1))
if ! ls ./artifacts/${package_name}.*.nupkg 1>/dev/null 2>&1; then
echo "ERROR: Expected package not found: ${package_name}"
exit 1
fi
fi
}

verify_pkg "${{ needs.changes.outputs.core_changed }}" "analyticsLibrary.Core"
verify_pkg "${{ needs.changes.outputs.algorithms_changed }}" "analyticsLibrary.Algorithms"
verify_pkg "${{ needs.changes.outputs.statistics_changed }}" "analyticsLibrary.Statistics"
verify_pkg "${{ needs.changes.outputs.excel_changed }}" "analyticsLibrary.Excel"
verify_pkg "${{ needs.changes.outputs.access_changed }}" "analyticsLibrary.Access"
verify_pkg "${{ needs.changes.outputs.hadoop_changed }}" "analyticsLibrary.Hadoop"
verify_pkg "${{ needs.changes.outputs.root_changed }}" "analyticsLibrary"

if [ "$EXPECTED" -eq 0 ]; then
echo "ERROR: No packages were expected after change detection."
exit 1
fi
echo "All expected packages found."

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: nuget-packages-${{ github.run_id }}
path: ./artifacts/*.nupkg
retention-days: 30

- name: Publish beta packages
if: >
github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.full_name == github.repository
env:
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
run: |
if [ -z "$NUGET_API_KEY" ]; then
echo "NUGET_API_KEY is not set; skipping beta package publish."
exit 0
fi

dotnet nuget push ./artifacts/*.nupkg \
--api-key "$NUGET_API_KEY" \
--source https://api.nuget.org/v3/index.json \
--skip-duplicate
Loading
Loading