Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
b9a4d03
build(deps): update dependencies, toolchain, and quality gates
3leapsdave Sep 24, 2026
a795160
fix(ooxml): bound decompressed bytes per part and per archive
3leapsdave Sep 24, 2026
efe2787
test: add malformed-archive and cross-surface contract suites
3leapsdave Sep 24, 2026
4cc27d6
refactor!: remove unenforced extraction timeout option
3leapsdave Sep 24, 2026
6902d2a
fix(ooxml): resolve numeric character references in DOCX, XLSX and PPTX
3leapsdave Sep 24, 2026
a531813
docs(changelog): note OOXML numeric character reference resolution
3leapsdave Sep 24, 2026
ec85fb9
fix(xml): resolve only XML 1.0 characters from character references
3leapsdave Sep 24, 2026
06ce010
fix: limit extracted text to XML 1.0 characters on every format
3leapsdave Sep 24, 2026
e940899
fix: drop DEL and C1 controls from extracted text
3leapsdave Sep 24, 2026
fc5862c
feat: add docprims facade crate
3leapsdave Sep 24, 2026
3e2a27d
refactor!: complete the docprims facade API
3leapsdave Sep 24, 2026
f70af43
fix: re-export output field types from docprims
3leapsdave Sep 24, 2026
ef2eddb
fix: never emit empty blocks when output is truncated
3leapsdave Sep 24, 2026
7d0114f
fix: mark public error and schema enums non_exhaustive
3leapsdave Sep 24, 2026
dbc90b2
build(ts): update TypeScript to 7.0.2
3leapsdave Sep 25, 2026
588d9c1
docs(changelog): note decompression and output limit fixes
3leapsdave Sep 25, 2026
667c93f
ci(napi): write prebuilds to the prebuilds directory
3leapsdave Sep 25, 2026
a9afca0
build: declare crates.io publication per crate
3leapsdave Sep 25, 2026
e0bb730
chore(release): prepare v0.2.0
3leapsdave Sep 25, 2026
1f538bc
build(release): add version, crate and release-notes gates
3leapsdave Sep 25, 2026
4168f82
docs(release): match v0.2.0 notes to the release notes section
3leapsdave Sep 25, 2026
add0b4a
test(release): isolate crate name and empty plan controls
3leapsdave Sep 25, 2026
39ba5aa
test(release): isolate the moved-main and missing-section cases
3leapsdave Sep 25, 2026
69f677d
test(release): cover a detached commit past the release tag
3leapsdave Sep 25, 2026
2486b95
build(release): add signed tag, anchor and asset ceremony tooling
3leapsdave Sep 25, 2026
1a7e486
ci: pin actions by commit and default to read-only permissions
3leapsdave Sep 25, 2026
3f6cbc6
build(ts): install with npm ci and add platform packages at publish
3leapsdave Sep 25, 2026
5bb9743
docs(decisions): record crates.io publication and public API posture
3leapsdave Sep 25, 2026
3ff5163
build: add goneat hook and dependency policy configuration
3leapsdave Sep 25, 2026
06508cb
docs: state extract/v0 stability, output guarantees and sensitivity
3leapsdave Sep 25, 2026
a2bcac6
build(ts): derive the platform package set from napi.targets
3leapsdave Sep 25, 2026
2a60719
test(ts): reject a file in place of a platform package directory
3leapsdave Sep 25, 2026
983c6d5
ci(ts): check platform packages against napi.targets
3leapsdave Sep 25, 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
63 changes: 57 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,81 @@ on:
push:
branches: ["main"]
pull_request:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
with:
toolchain: 1.94.1
components: rustfmt, clippy
- name: Install cargo-deny
run: cargo install cargo-deny@0.18.3 --locked
run: cargo install cargo-deny@0.20.2 --locked
- name: Install cargo-audit
run: cargo install cargo-audit@0.22.2 --locked
- name: Install cbindgen
run: cargo install cbindgen --locked
run: cargo install cbindgen@0.29.4 --locked
- name: Quality gates
run: make check
- name: Verify generated C header is up to date
run: |
make cbindgen
git diff --exit-code ffi/docprims-ffi/docprims.h
diff -u ffi/docprims-ffi/docprims.h bindings/go/docprims/include/docprims.h
publish-check:
name: publish-check
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
with:
toolchain: 1.94.1
- name: Verify release tooling dependencies
run: |
python3 -c 'import sys; assert sys.version_info >= (3, 11)'
command -v jq
command -v gpg
- name: Install checksum-pinned Decernor for release tests
run: |
tool_dir="$(mktemp -d "$RUNNER_TEMP/decernor.XXXXXX")"
archive="$(awk '{ print $2 }' config/release/decernor-ci-sha256.txt)"
version="${archive#decernor_}"
version="${version%%_*}"
curl --proto '=https' --tlsv1.2 --fail --silent --show-error --location \
"https://github.com/3leaps/decernor/releases/download/v${version}/${archive}" \
--output "$tool_dir/$archive"
(cd "$tool_dir" && sha256sum --check "$GITHUB_WORKSPACE/config/release/decernor-ci-sha256.txt")
tar -xzf "$tool_dir/$archive" -C "$tool_dir" decernor
echo "DOCPRIMS_DECERNOR_BIN=$tool_dir/decernor" >> "$GITHUB_ENV"
- name: Package workspace
run: make release-check
- name: Release tooling tests
run: make release-tooling-test
msrv:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
with:
toolchain: 1.88.0
- name: Build and test on MSRV
run: make msrv
test-go-vendored:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: "1.22.x"
- name: Run Go tests (vendored libs)
Expand Down
51 changes: 30 additions & 21 deletions .github/workflows/go-bindings-prep.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,19 @@ on:
type: string
env:
CARGO_TERM_COLOR: always
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
jobs:
validate:
name: Validate Inputs
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Validate version matches VERSION file
id: version
run: |
Expand All @@ -34,7 +39,8 @@ jobs:
name: Build FFI (Linux)
runs-on: ubuntu-latest
container:
image: ghcr.io/fulmenhq/goneat-tools-runner-glibc:v0.3.1
# goneat-tools-runner-glibc v0.5.6
image: ghcr.io/fulmenhq/goneat-tools-runner-glibc@sha256:afcffa00283c765928dfef40966c282f2ca190653cf4443f634cb8f67c1d51ab
options: --user root
needs: validate
strategy:
Expand All @@ -53,7 +59,7 @@ jobs:
glibc: ""
artifact_suffix: linux-arm64-musl
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Verify cargo-zigbuild is available
shell: bash
run: |
Expand Down Expand Up @@ -105,7 +111,7 @@ jobs:
cp "target/${TARGET_DIR}/release/libdocprims_ffi.so" "dist/ffi/${{ matrix.artifact_suffix }}/"
fi
- name: Upload FFI artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ffi-${{ matrix.artifact_suffix }}
path: dist/ffi/${{ matrix.artifact_suffix }}
Expand All @@ -116,14 +122,15 @@ jobs:
env:
MACOSX_DEPLOYMENT_TARGET: "11.0"
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
with:
toolchain: 1.94.1
targets: aarch64-apple-darwin
- name: Build FFI (arm64)
run: |
set -euo pipefail
cargo build --release --target aarch64-apple-darwin -p docprims-ffi
cargo build --release --target aarch64-apple-darwin -p docprims-ffi --locked
- name: Package FFI
run: |
set -euo pipefail
Expand All @@ -135,7 +142,7 @@ jobs:
# This allows consumers to set rpath or place dylib alongside executable.
install_name_tool -id "@rpath/libdocprims_ffi.dylib" dist/ffi/darwin-arm64/libdocprims_ffi.dylib
- name: Upload FFI artifact (darwin-arm64)
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ffi-darwin-arm64
path: dist/ffi/darwin-arm64
Expand All @@ -144,12 +151,13 @@ jobs:
runs-on: windows-latest
needs: validate
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
with:
toolchain: 1.94.1
targets: x86_64-pc-windows-gnu
- name: Install MinGW
uses: msys2/setup-msys2@v2
uses: msys2/setup-msys2@66cd2cce69caa17b53920067426061ca1de3a884 # v2.32.0
with:
msystem: MINGW64
update: true
Expand All @@ -159,7 +167,7 @@ jobs:
shell: msys2 {0}
run: |
set -euo pipefail
cargo build --release --target x86_64-pc-windows-gnu -p docprims-ffi
cargo build --release --target x86_64-pc-windows-gnu -p docprims-ffi --locked
- name: Package FFI
shell: bash
run: |
Expand All @@ -169,26 +177,27 @@ jobs:
cp target/x86_64-pc-windows-gnu/release/docprims_ffi.dll dist/ffi/windows-amd64/
cp target/x86_64-pc-windows-gnu/release/libdocprims_ffi.dll.a dist/ffi/windows-amd64/
- name: Upload FFI artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ffi-windows-amd64
path: dist/ffi/windows-amd64
cbindgen:
name: Generate C Header
runs-on: ubuntu-latest
container:
image: ghcr.io/fulmenhq/goneat-tools-runner-glibc:v0.3.1
# goneat-tools-runner-glibc v0.5.6
image: ghcr.io/fulmenhq/goneat-tools-runner-glibc@sha256:afcffa00283c765928dfef40966c282f2ca190653cf4443f634cb8f67c1d51ab
options: --user root
needs: validate
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Generate C header
shell: bash
run: |
set -euo pipefail
cbindgen --config cbindgen.toml --crate docprims-ffi --output docprims.h
- name: Upload header
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: c-header
path: docprims.h
Expand All @@ -200,16 +209,16 @@ jobs:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
- name: Download all FFI artifacts
uses: actions/download-artifact@v4.1.3
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
pattern: ffi-*
path: ffi-libs
- name: Download C header
uses: actions/download-artifact@v4.1.3
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: c-header
path: ffi-libs
Expand Down Expand Up @@ -258,9 +267,9 @@ jobs:
echo "Go bindings updated for $VERSION"
ls -la bindings/go/docprims/lib/*/ || true
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
with:
token: ${{ secrets.GITHUB_TOKEN }}
token: ${{ github.token }}
base: main
branch: go-bindings/v${{ needs.validate.outputs.version }}
title: "feat(bindings): update Go prebuilt libs for v${{ needs.validate.outputs.version }}"
Expand Down
41 changes: 23 additions & 18 deletions .github/workflows/go-bindings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,33 @@ name: go-bindings
on:
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
go-test-linux-amd64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
with:
toolchain: 1.88.0
- uses: actions/setup-go@v5
toolchain: 1.94.1
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: "1.22.x"
- name: Install cbindgen
run: cargo install cbindgen --locked
run: cargo install cbindgen@0.29.4 --locked
- name: Build FFI and run Go tests (glibc)
run: |
make go-test
make go-test-shared
go-test-darwin-arm64-vendored:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: "1.22.x"
- name: Run Go tests (vendored darwin-arm64)
Expand All @@ -33,38 +38,38 @@ jobs:
go-test-darwin-arm64-shared:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
with:
toolchain: 1.88.0
- uses: actions/setup-go@v5
toolchain: 1.94.1
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: "1.22.x"
- name: Install cbindgen
run: cargo install cbindgen --locked
run: cargo install cbindgen@0.29.4 --locked
- name: Build FFI and run Go tests (shared)
run: make go-test-shared
go-test-linux-amd64-musl:
if: github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
with:
toolchain: 1.88.0
- uses: actions/setup-go@v5
toolchain: 1.94.1
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: "1.22.x"
- name: Install toolchain
run: |
sudo apt-get update
sudo apt-get install -y musl-tools
rustup target add x86_64-unknown-linux-musl
cargo install cbindgen --locked
cargo install cbindgen@0.29.4 --locked
- name: Build musl static lib and run Go tests
run: |
make cbindgen
cargo build --release -p docprims-ffi --target x86_64-unknown-linux-musl
cargo build --release -p docprims-ffi --target x86_64-unknown-linux-musl --locked
mkdir -p bindings/go/docprims/include
cp ffi/docprims-ffi/docprims.h bindings/go/docprims/include/docprims.h
mkdir -p bindings/go/docprims/lib/local/linux-amd64-musl
Expand Down
Loading
Loading