Skip to content

Commit 42c114a

Browse files
committed
Merge branch 'dev' into feat/http_ext_fields
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
2 parents ea4586e + 8b18994 commit 42c114a

69 files changed

Lines changed: 4057 additions & 635 deletions

Some content is hidden

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

.github/workflows/ci.yml

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,28 @@ jobs:
109109
fetch-depth: 1
110110
- name: Install Rust 1.96.0
111111
uses: dtolnay/rust-toolchain@1.96.0
112-
- uses: Swatinem/rust-cache@v2
112+
# NOTE: intentionally NO Swatinem/rust-cache here, AND we wipe the registry
113+
# index before packaging. The committed Cargo.lock is byte-identical to a
114+
# fresh x86_64 resolution (verified in an amd64 container), so the lock is
115+
# not the problem. The failure comes from stale `~/.cargo/registry` state
116+
# the hosted runner carries: under the sparse protocol `cargo package
117+
# --locked` consults that partial local index, decides it can't satisfy the
118+
# committed lock, and aborts with "cannot update the lock file ... --locked"
119+
# ~1.4s in (too fast for a real network fetch). Removing the index forces a
120+
# clean fetch, against which Cargo.lock resolves cleanly — keeping this
121+
# dry-run deterministic.
113122
# Continuous dry-run of the crates.io release: build + verify a .crate for
114123
# every publishable member without uploading. Catches publishability
115124
# regressions (missing version reqs, packaging-excluded files, broken
116125
# inter-crate deps) on every push/PR, long before a release tag. Mirrors
117126
# `make publish-dry` and the release workflow's dry-run. The two
118127
# `publish = false` FFI crates are excluded (not part of the registry set).
119128
- name: cargo package (no upload)
120-
run: cargo package --workspace --locked --exclude cpex-ffi --exclude cpex-demo-ffi
129+
run: |
130+
# Drop any pre-seeded registry index/cache so cargo fetches fresh and
131+
# --locked resolves against a clean index (see note above).
132+
rm -rf ~/.cargo/registry/index ~/.cargo/registry/cache
133+
cargo package --workspace --locked --exclude cpex-ffi --exclude cpex-demo-ffi
121134
122135
docs:
123136
name: Docs Build

.github/workflows/release.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,11 @@ jobs:
7070
- uses: actions/checkout@v7
7171
- name: Install Rust 1.96.0
7272
uses: dtolnay/rust-toolchain@1.96.0
73-
- uses: Swatinem/rust-cache@v2
73+
# NOTE: intentionally NO Swatinem/rust-cache here. A restored partial
74+
# `~/.cargo/registry` index makes `cargo package/publish --locked` abort
75+
# with "cannot update the lock file" against the sparse index even when
76+
# Cargo.lock is correct (see the CI `package` job for the full rationale).
77+
# A fresh index each run keeps publish resolution deterministic.
7478
- name: cargo publish (dependency order)
7579
env:
7680
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

CHANGELOG.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,21 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
1515
1616
## [Unreleased]
1717

18+
### Changed
19+
20+
- **BREAKING — APL authz/authn config keys renamed** for clarity. The old key names no longer parse; a config using them fails to load with an error naming the replacement (a dropped authorization or authentication block would otherwise fail open, so the rejection is deliberate). Migration:
21+
- `identity:``authentication:` (at `global`, per-route, and policy-group scope)
22+
- `policy:``authorization.pre_invocation:` (or flat `pre_invocation:`)
23+
- `post_policy:``authorization.post_invocation:` (or flat `post_invocation:`)
24+
25+
The two authorization phases may be written either nested under an `authorization:` block or flat directly on the section; the forms are equivalent. The field-pipeline keys `args:` / `result:` are unchanged (they stay aligned with the `args.*` / `result.*` attribute namespaces that predicates and interpolation read). Internal APL IR is unchanged. (#105)
26+
1827
## [0.2.0] - 2026-06-26
1928

2029
### Added
2130

2231
- CPEX redesign as a Rust framework with Go bindings
23-
- APL (Attribute Policy Language) governance is now bundled into `libcpex_ffi.a`. New `cpex_apl_install` extern C entry point registers the standard APL plugin/PDP factories (`validator/pii-scan`, `audit/logger`, `identity/jwt`, `delegator/oauth`, `cedar-direct`) and installs the APL config visitor on a manager. Call it after `cpex_manager_new_default` and before `cpex_load_config`. Go hosts use `PluginManager.EnableAPL()`. (#60)
32+
- APL (Authorization Policy Language) governance is now bundled into `libcpex_ffi.a`. New `cpex_apl_install` extern C entry point registers the standard APL plugin/PDP factories (`validator/pii-scan`, `audit/logger`, `identity/jwt`, `delegator/oauth`, `cedar-direct`) and installs the APL config visitor on a manager. Call it after `cpex_manager_new_default` and before `cpex_load_config`. Go hosts use `PluginManager.EnableAPL()`. (#60)
2433
- Publish `libcpex_ffi.a` as signed GitHub Release artifacts on every semver tag push (`linux-amd64-gnu`, `linux-arm64-gnu`, `linux-amd64-musl`, `linux-arm64-musl`, `darwin-arm64`). Cosign keyless signatures + SHA256 checksums; see `crates/cpex-ffi/RELEASE.md` for the schema and the verify-and-consume recipe. (#60)
2534
- FFI ABI versioning: `cpex_ffi_abi_version()` extern C accessor exposes `FFI_ABI_VERSION`. The Go binding checks this in `init()` and panics on mismatch. Other language bindings must replicate the check. (#60)
2635
- CEL (Common Expression Language) policy decision backend. A new `apl-pdp-cel` crate registers `kind: cel`, letting authors write inline boolean predicates (`cel: { expr: ... }`) over the common attribute vocabulary (`subject.id`, `delegation.depth`, `session.labels`, ...), evaluated through the existing `PdpResolver` seam alongside Cedar, OPA, and AuthZen. Expressions compile once and cache by source; compile errors, undeclared-variable references, and non-boolean results fail closed (deny), overridable with `on_error: allow`. No change to APL evaluation semantics. (#68)

0 commit comments

Comments
 (0)