Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
709fdf9
Version bump
Jul 14, 2026
d77a396
BL-2680 Use portable ISO timestamps for native BoxLang
elpete Sep 14, 2026
47f6027
fix: initialize Sentry singleton before concurrent access
elpete Sep 14, 2026
f48b813
feat: add isolated tracing and typed observability transport
elpete Oct 4, 2026
f890303
feat: ship portable browser tracing and feedback capture
elpete Oct 4, 2026
91a8acd
test: verify observability envelopes and runtime integration boundaries
elpete Oct 4, 2026
d77c1ee
fix: keep build cleanup from traversing external symlinks
elpete Oct 4, 2026
8c14f08
fix: measure worker execution and preserve chained trace context
elpete Oct 4, 2026
cbba0fe
Sanitize standalone browser spans and preserve supplied client filters
elpete Oct 4, 2026
a05f6c2
Record installed package and final browser verification
elpete Oct 4, 2026
b4aa880
Document broader qb harness verification limits
elpete Oct 4, 2026
06b6111
Preserve numeric standalone Web Vitals in privacy filters
elpete Oct 4, 2026
3743355
fix: align cache and queue span attributes with Sentry conventions
elpete Oct 4, 2026
39865b9
docs: record dashboard and signed-in feedback acceptance
elpete Oct 4, 2026
a721025
Fix cross-engine transport and observability test harness
elpete Oct 4, 2026
6b56cc1
Fix Lucee 5 span cleanup and missing source path handling
elpete Oct 4, 2026
5451622
Merge pull request #47 from coldbox-modules/fix/native-boxlang-timest…
elpete Oct 8, 2026
609be57
Merge pull request #48 from coldbox-modules/fix/thread-safe-sentry-in…
elpete Oct 8, 2026
ff32e7e
Merge development and preserve portable timestamp regression
elpete Oct 8, 2026
e8642e2
Keep ISO timestamps aligned with truncated epoch seconds
elpete Oct 8, 2026
c60cf56
Merge pull request #49 from coldbox-modules/feat/observability-feedback
elpete Oct 8, 2026
dcecf59
Apply cfformat changes
elpete Oct 8, 2026
ecbed7b
Install browser dependencies before release builds
elpete Oct 8, 2026
d95b7cf
Merge pull request #50 from coldbox-modules/fix/release-browser-depen…
elpete Oct 8, 2026
cec4f5c
Repair browser lockfile metadata and verify assets in CI
elpete Oct 8, 2026
97b95a2
Merge pull request #51 from coldbox-modules/fix/browser-lockfile-port…
elpete Oct 8, 2026
028ae07
Normalize rewritten BoxLang request URLs like CFML
elpete Oct 8, 2026
5e3c47a
Merge pull request #52 from coldbox-modules/fix/boxlang-request-url
elpete Oct 8, 2026
2657c95
Prepare backward-compatible 2.2.0 stable release
elpete Oct 8, 2026
e378d11
Merge stable release history into 2.2.0 preparation
elpete Oct 8, 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
13 changes: 10 additions & 3 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ on:
branches:
- "releases/v*"
- development
- master
- main

jobs:
tests:
Expand All @@ -25,6 +27,11 @@ jobs:
- name: Checkout Repository
uses: actions/checkout@v4

- uses: Ortus-Solutions/commandbox-action@v1.0.2
with:
cmd: run-script format:check
- name: Setup CommandBox CLI
uses: Ortus-Solutions/setup-commandbox@v2.0.1

- name: Install pinned formatter
run: box install commandbox-cfformat@0.21.0

- name: Check formatting
run: box run-script format:check
24 changes: 23 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ jobs:
##########################################################################################
build:
name: Build & Publish
outputs:
version: ${{ steps.current_version.outputs.version }}
runs-on: ubuntu-24.04
steps:
- name: Checkout Repository
Expand All @@ -39,7 +41,9 @@ jobs:
- name: "Setup Environment Variables For Build Process"
id: current_version
run: |
echo "VERSION=`cat box.json | jq '.version' -r`" >> $GITHUB_ENV
release_version="$(jq -r '.version' box.json)"
echo "VERSION=$release_version" >> "$GITHUB_ENV"
echo "version=$release_version" >> "$GITHUB_OUTPUT"
box package set version=@build.version@+@build.number@
# master or snapshot
echo "Github Ref is $GITHUB_REF"
Expand All @@ -56,6 +60,22 @@ jobs:
changelogPath: ./changelog.md
tag: v${{ env.VERSION }}

- name: Setup Node for browser assets
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: browser/package-lock.json

- name: Install browser build dependencies
run: npm --prefix browser ci

- name: Install module and API documentation dependencies
run: |
box install
cd test-harness
box install

- name: Build ${{ env.MODULE_ID }}
run: |
npm install -g markdownlint-cli
Expand Down Expand Up @@ -85,6 +105,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: ${{ env.MODULE_ID }}
include-hidden-files: true
path: |
.artifacts/**/*
changelog.md
Expand Down Expand Up @@ -161,6 +182,7 @@ jobs:
# Bump to next version
- name: Bump Version
run: |
box package set version=${{ needs.build.outputs.version }}
box bump --patch --!TagVersion

# Commit it back to development
Expand Down
47 changes: 46 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,29 @@ on:
required: false

jobs:
browser:
name: Browser assets
runs-on: ubuntu-24.04
steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: browser/package-lock.json

- name: Install browser dependencies
run: npm --prefix browser ci

- name: Test browser assets
run: npm --prefix browser test

- name: Build browser assets
run: npm --prefix browser run build

tests:
name: Tests
runs-on: ubuntu-24.04
Expand Down Expand Up @@ -84,10 +107,22 @@ jobs:
box package set dependencies.coldbox=${{ matrix.coldboxVersion }}
box install

- name: Setup Node for the envelope receiver
uses: actions/setup-node@v4
with:
node-version: 22

- name: Start local envelope receiver
run: |
mkdir -p test-harness/tests/results
node test-harness/support/receiver.mjs > test-harness/tests/results/receiver.log 2>&1 &
echo $! > test-harness/tests/results/receiver.pid
curl --fail --retry 10 --retry-connrefused --retry-delay 1 http://127.0.0.1:60320/state

- name: Start ${{ matrix.cfengine }} Server
run: |
box server start serverConfigFile="server-${{ matrix.cfengine }}.json" --noSaveSettings --debug
curl http://127.0.0.1:60299
curl --fail-with-body http://127.0.0.1:60299/health.cfm

- name: Run Tests
run: |
Expand All @@ -101,6 +136,16 @@ jobs:
junit_files: test-harness/tests/results/**/*.xml
check_name: "${{ matrix.cfengine }} ColdBox ${{ matrix.coldboxVersion }} Test Results"

- name: Stop local envelope receiver
if: always()
run: |
if [ -f test-harness/tests/results/receiver.pid ]; then
receiver_pid="$(cat test-harness/tests/results/receiver.pid)"
if kill -0 "$receiver_pid" 2>/dev/null; then
kill "$receiver_pid"
fi
fi

- name: Upload Test Results to Artifacts
if: always()
uses: actions/upload-artifact@v4
Expand Down
12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,15 @@ test-harness/.env
# Local server configs (test artifacts)
server-sentry-*.json
test-harness/server-sentry-*.json

/modules
/test-harness/coldbox
/test-harness/testbox
/test-harness/sentry
/browser/node_modules/

/test-harness/provider-feedback.html
/test-harness/tests/provider-proof.cfm
/test-harness/lucee-local-cache/

/test-harness/tests/provider-feedback-native.cfm
33 changes: 33 additions & 0 deletions ModuleConfig.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,15 @@ component {
}
}

settings.append(
createObject( "component", "#moduleMapping#.models.telemetry.Observability" ).defaults(),
false
);
interceptors = [
{ class : "#moduleMapping#.interceptors.QueueObservability" },
{ class : "#moduleMapping#.interceptors.Observability" },
{ class : "#moduleMapping#.interceptors.QueryObservability" }
];
interceptorSettings = { customInterceptionPoints : [ "onSentryEventCapture" ] };
}

Expand All @@ -105,9 +114,30 @@ component {
*/
function onLoad(){
// Incorporate defaults into settings
if ( settings.queryAdapter == "auto" || settings.queryAdapter == "boxlang" ) {
wirebox
.getInstance( "SentryService@sentry" )
.getObservability()
.configureQueryInstrumentation( getApplicationMetadata().name );
}
binder.mapDSL( "sentryCache", "#moduleMapping#.models.dsl.CacheDSL" );
wirebox.registerDSL( "sentryCache", "#moduleMapping#.models.dsl.CacheDSL" );
settings.scrubFields.addAll( SCRUB_FIELDS );
settings.scrubHeaders.addAll( SCRUB_HEADERS );

if ( settings.enableStructuredLogBoxAppender && settings.enableLogs ) {
logBox.registerAppender(
name = "sentry_structured",
class = "#moduleMapping#.models.StructuredLogAppender",
properties = { "messageMode" : settings.logMessageMode },
levelMin = 0,
levelMax = 3
);
logBox
.getRootLogger()
.addAppender( logBox.getAppendersMap( "sentry_structured" )[ "sentry_structured" ] );
}

// Load the LogBox Appenders
if ( settings.enableLogBoxAppender ) {
loadAppenders();
Expand All @@ -118,6 +148,9 @@ component {
* Fired when the module is unregistered and unloaded
*/
function onUnload(){
if ( wirebox.containsInstance( "SentryService@sentry" ) ) {
wirebox.getInstance( "SentryService@sentry" ).shutdown();
}
}

/**
Expand Down
88 changes: 46 additions & 42 deletions box.json
Original file line number Diff line number Diff line change
@@ -1,55 +1,59 @@
{
"name":"Sentry",
"author":"Ortus Solutions <info@ortussolutions.com>",
"version":"2.1.6",
"slug":"sentry",
"type":"modules",
"homepage":"https://github.com/coldbox-modules/sentry",
"documentation":"https://github.com/coldbox-modules/sentry",
"repository":{
"type":"git",
"url":"https://github.com/coldbox-modules/sentry"
"name": "Sentry",
"author": "Ortus Solutions <info@ortussolutions.com>",
"version": "2.2.0",
"slug": "sentry",
"type": "modules",
"homepage": "https://github.com/coldbox-modules/sentry",
"documentation": "https://github.com/coldbox-modules/sentry",
"repository": {
"type": "git",
"url": "https://github.com/coldbox-modules/sentry"
},
"bugs":"https://github.com/coldbox-modules/sentry/issues",
"shortDescription":"A module to log messages and send bug reports to Sentry",
"license":[
"bugs": "https://github.com/coldbox-modules/sentry/issues",
"shortDescription": "A module to log messages and send bug reports to Sentry",
"license": [
{
"type":"Apache2",
"url":"http://www.apache.org/licenses/LICENSE-2.0.html"
"type": "Apache2",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
],
"contributors":[],
"dependencies":{
"funclinenums":"^1.1.0"
"contributors": [],
"dependencies": {
"funclinenums": "^1.1.0"
},
"devDependencies":{},
"installPaths":{
"funclinenums":"modules/funclinenums/"
"devDependencies": {},
"installPaths": {
"funclinenums": "modules/funclinenums/"
},
"ignore":[
"ignore": [
"**/.*",
"test-harness",
"*.md"
"*.md",
"browser/node_modules",
"browser/tests",
"browser/*config*",
"browser/build.mjs"
],
"scripts":{
"build:module":"task run taskFile=build/Build.cfc :projectName=`package show slug` :version=`package show version`",
"build:docs":"task run taskFile=build/Build.cfc target=docs :projectName=`package show slug` :version=`package show version`",
"install:dependencies":"install --force && cd test-harness && install --force",
"release":"recipe build/release.boxr",
"format":"cfformat run helpers,models,interceptors,handlers,test-harness/tests/,ModuleConfig.cfc --overwrite",
"format:watch":"cfformat watch helpers,models,interceptors,handlers,test-harness/tests/,ModuleConfig.cfc ./.cfformat.json",
"format:check":"cfformat check helpers,models,interceptors,handlers,test-harness/tests/,ModuleConfig.cfc ./.cfformat.json",
"start:lucee":"server start serverConfigFile=server-lucee@5.json",
"start:2018":"server start serverConfigFile=server-adobe@2018.json",
"start:2021":"server start serverConfigFile=server-adobe@2021.json",
"stop:lucee":"server stop serverConfigFile=server-lucee@5.json",
"stop:2018":"server stop serverConfigFile=server-adobe@2018.json",
"stop:2021":"server stop serverConfigFile=server-adobe@2021.json",
"logs:lucee":"server log serverConfigFile=server-lucee@5.json --follow",
"logs:2018":"server log serverConfigFile=server-adobe@2018.json --follow",
"logs:2021":"server log serverConfigFile=server-adobe@2021.json --follow"
"scripts": {
"build:module": "task run taskFile=build/Build.cfc :projectName=`package show slug` :version=`package show version`",
"build:docs": "task run taskFile=build/Build.cfc target=docs :projectName=`package show slug` :version=`package show version`",
"install:dependencies": "install --force && cd test-harness && install --force",
"release": "recipe build/release.boxr",
"format": "cfformat run helpers,models,interceptors,handlers,test-harness/tests/,test-harness/Application.cfc,ModuleConfig.cfc --overwrite",
"format:watch": "cfformat watch helpers,models,interceptors,handlers,test-harness/tests/,test-harness/Application.cfc,ModuleConfig.cfc ./.cfformat.json",
"format:check": "cfformat check helpers,models,interceptors,handlers,test-harness/tests/,test-harness/Application.cfc,ModuleConfig.cfc ./.cfformat.json",
"start:lucee": "server start serverConfigFile=server-lucee@5.json",
"start:2018": "server start serverConfigFile=server-adobe@2018.json",
"start:2021": "server start serverConfigFile=server-adobe@2021.json",
"stop:lucee": "server stop serverConfigFile=server-lucee@5.json",
"stop:2018": "server stop serverConfigFile=server-adobe@2018.json",
"stop:2021": "server stop serverConfigFile=server-adobe@2021.json",
"logs:lucee": "server log serverConfigFile=server-lucee@5.json --follow",
"logs:2018": "server log serverConfigFile=server-adobe@2018.json --follow",
"logs:2021": "server log serverConfigFile=server-adobe@2021.json --follow"
},
"testbox":{
"runner":"http://localhost:60299/tests/runner.cfm"
"testbox": {
"runner": "http://localhost:60299/tests/runner.cfm"
}
}
5 changes: 5 additions & 0 deletions browser/build.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { rmSync } from "node:fs";
rmSync("dist", { recursive: true, force: true });
import { build } from 'esbuild';
await build({ entryPoints: ['src/index.ts'], bundle: true, format: 'esm', splitting: true, outdir: 'dist/esm', target: 'es2022', minify: true });
await build({ entryPoints: ['src/script.ts'], bundle: true, format: 'iife', outfile: 'dist/sentry-box.js', target: 'es2022', minify: true });
29 changes: 29 additions & 0 deletions browser/dist/esm/chunk-5LBAMSSV.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions browser/dist/esm/chunk-QBI2JL2F.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions browser/dist/esm/chunk-UVRZCAHX.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions browser/dist/esm/feedbackReplay-6PAAGWVV.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions browser/dist/esm/feedbackScreenshot-XN3R2P73.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading