Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
e17e1e6
test: add API, type and wire-protocol safety nets
fateeand Nov 9, 2026
082b200
build: add the framework-independent core package
fateeand Nov 9, 2026
e02d867
refactor: move models, redaction and scenarios into the core
fateeand Nov 9, 2026
ff89ccb
feat: add the framework-independent telemetry engine
fateeand Nov 9, 2026
35d36ad
refactor: move the shell/fragment broadcast protocol into the core
fateeand Nov 9, 2026
bd46da8
refactor: move the AWS RUM sink into the core's rum entry point
fateeand Nov 9, 2026
e21cd26
test: smoke-test the packed packages in real consumers
fateeand Nov 9, 2026
6e52219
ci: release and publish both packages with one linked version
fateeand Nov 9, 2026
941c062
docs: document the core, who owns what, and writing adapters
fateeand Nov 9, 2026
246c7b2
fix: accept annotated release tags, and document the shared connectio…
fateeand Nov 10, 2026
2147f21
logos update
fateeand Nov 10, 2026
94a91d1
update readmes
fateeand Nov 10, 2026
6b053f5
perf: copy settled scenarios only while settled has subscribers
fateeand Nov 10, 2026
ec40961
try fix logo theming
fateeand Nov 10, 2026
fd5906c
rename to ngx coverage report
fateeand Nov 10, 2026
292208f
increase coverage
fateeand Nov 10, 2026
ad7922b
version packages independently
fateeand Nov 10, 2026
22c31b3
docs update
fateeand Nov 10, 2026
c4cce01
address feedback
fateeand Nov 10, 2026
4a30d76
address more feedback
fateeand Nov 10, 2026
380e134
after dispose, keep scenarios, BI events and logs
fateeand Nov 10, 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
77 changes: 77 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,83 @@ module.exports = {
jest: false,
node: true
}
},
{
// The core is framework-independent, and its main entry point loads
// no optional peer: those get entry points of their own.
files: ['projects/ui-watchtower/src/**/*.ts'],
rules: {
'no-restricted-imports': [
'error',
{
patterns: [
{
group: [
'@angular/*',
'zone.js',
'@absaoss-cps/ngx-ui-watchtower',
'@absaoss-cps/ngx-ui-watchtower/*'
],
message: 'The core is framework-independent.'
},
{
group: ['rxjs', 'rxjs/*', 'aws-rum-web', 'aws-rum-web/*'],
message:
'The main entry point loads no optional peer; use an entry point of its own.'
}
]
}
]
}
},
{
// The core's AWS RUM entry point: aws-rum-web, and still no framework.
files: ['projects/ui-watchtower/rum/**/*.ts'],
rules: {
'no-restricted-imports': [
'error',
{
patterns: [
{
group: [
'@angular/*',
'zone.js',
'@absaoss-cps/ngx-ui-watchtower',
'@absaoss-cps/ngx-ui-watchtower/*',
'rxjs',
'rxjs/*'
],
message:
'The core is framework-independent, and this entry point loads no other optional peer.'
}
]
}
]
}
},
{
// The core's RxJS entry point: RxJS, and still no framework.
files: ['projects/ui-watchtower/rxjs/**/*.ts'],
rules: {
'no-restricted-imports': [
'error',
{
patterns: [
{
group: [
'@angular/*',
'zone.js',
'@absaoss-cps/ngx-ui-watchtower',
'@absaoss-cps/ngx-ui-watchtower/*',
'aws-rum-web',
'aws-rum-web/*'
],
message: 'The core is framework-independent.'
}
]
}
]
}
}
]
};
67 changes: 65 additions & 2 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ jobs:
- name: Build library
run: npm run build

- name: Check the public API
run: npm run api:check

test:
name: Unit tests
runs-on: ubuntu-latest
Expand All @@ -59,16 +62,76 @@ jobs:
- name: Run unit tests with coverage
run: npm run test:coverage

- name: Comment coverage on PR
- name: Comment ngx coverage on PR
uses: ArtiomTr/jest-coverage-report-action@v2
if: github.event_name == 'pull_request'
continue-on-error: true
with:
custom-title: Coverage report
custom-title: Ngx coverage report
coverage-file: ./coverage/report.json
# Tests already ran above; the action only formats the report.
skip-step: all

- name: Comment core coverage on PR
uses: ArtiomTr/jest-coverage-report-action@v2
if: github.event_name == 'pull_request'
continue-on-error: true
with:
custom-title: Core coverage report
coverage-file: ./coverage/ui-watchtower/report.json
# The same file as the base: no comparison with a base branch,
# which would run the Angular package's tests.
base-coverage-file: ./coverage/ui-watchtower/report.json
skip-step: all

smoke:
name: Packed packages
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v7

- name: Setup Node.js
uses: actions/setup-node@v7
with:
node-version: 22.x
cache: npm

- name: Install dependencies
run: npm ci

- name: Build both packages
run: npm run build

# Packs both packages and installs them, outside the workspace, into a
# core-only Node and TypeScript consumer and an unchanged Angular one.
- name: Smoke-test the packed packages
run: npm run smoke

release:
name: Release config
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v7
with:
# The release check compares bootstrap-sha with the tagged commit.
fetch-tags: true

- name: Setup Node.js
uses: actions/setup-node@v7
with:
node-version: 22.x

# Plain Node: neither needs the workspace's dependencies.
- name: Test the publish script and the release workflow's wiring
run: npm run test:release

# Replays releases through the Release Please version the release
# workflow runs, on this repository's config.
- name: Check the release config
run: npm run release:check

lint:
name: Lint and format
runs-on: ubuntu-latest
Expand Down
22 changes: 17 additions & 5 deletions .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,22 @@ on:
push:
branches:
- main
# Retries a failed or partial publish: run it on the release tag,
# e.g. `gh workflow run release-please.yml --ref ngx-ui-watchtower-v0.5.0`.
workflow_dispatch:

permissions: {}

jobs:
release-please:
if: github.event_name == 'push'
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
outputs:
release_created: ${{ steps.release.outputs['projects/ngx-ui-watchtower--release_created'] }}
core_release_created: ${{ steps.release.outputs['projects/ui-watchtower--release_created'] }}
ngx_release_created: ${{ steps.release.outputs['projects/ngx-ui-watchtower--release_created'] }}
steps:
- uses: googleapis/release-please-action@v5
id: release
Expand All @@ -26,7 +31,13 @@ jobs:

publish:
needs: release-please
if: ${{ needs.release-please.outputs.release_created == 'true' }}
# After a release of either package, or when run by hand to retry. On a
# manual run release-please is skipped, which !cancelled() lets through.
if: >-
${{ !cancelled() && (
github.event_name == 'workflow_dispatch' ||
needs.release-please.outputs.core_release_created == 'true' ||
needs.release-please.outputs.ngx_release_created == 'true') }}
runs-on: ubuntu-latest
permissions:
# Required for npm trusted publishing (OIDC). No npm token needed.
Expand All @@ -48,9 +59,10 @@ jobs:
- name: Install dependencies
run: npm ci

- name: Build library
- name: Build both packages
run: npm run build

# The core, then the Angular package: each only if its release tag
# points at this commit and the version isn't on npm yet.
- name: Publish to npm
working-directory: dist/ngx-ui-watchtower
run: npm publish
run: node scripts/publish-packages.mjs
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,6 @@ testem.log
# System files
.DS_Store
Thumbs.db

# API snapshot output on a mismatch
*.snapshot.json.actual
Loading
Loading