Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 2 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
name: Library — lint / test / build
runs-on: ubuntu-latest
env:
LIBS: chat,langgraph,ag-ui,render,a2ui,partial-json,licensing
LIBS: chat,langgraph,ag-ui,render,a2ui,licensing,telemetry
steps:
- uses: actions/checkout@v6.0.2
- uses: actions/setup-node@v6.3.0
Expand All @@ -22,6 +22,7 @@ jobs:
- run: npx nx run-many -t lint --projects=$LIBS
- run: npx nx run-many -t test --projects=$LIBS --coverage
- run: npx nx run-many -t build --projects=$LIBS --configuration=production
- run: node scripts/verify-release-versions.mjs

website:
name: Website — lint / build
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
contents: read
id-token: write # required for npm trusted publishing + provenance
env:
NPM_PUBLISHABLE_PROJECTS: chat,langgraph,ag-ui,render,a2ui,partial-json,licensing
NPM_PUBLISHABLE_PROJECTS: chat,langgraph,ag-ui,render,a2ui,licensing,telemetry
steps:
- uses: actions/checkout@v6.0.2
# Node 24 ships npm 11+ which fully implements npm trusted publishing
Expand All @@ -43,6 +43,9 @@ jobs:
- name: Lint, test, build publishable projects
run: npx nx run-many -t lint,test,build --projects=$NPM_PUBLISHABLE_PROJECTS --skip-nx-cache

- name: Patch install telemetry into publishable manifests
run: node libs/telemetry/scripts/apply-install-telemetry.mjs dist/libs/chat dist/libs/langgraph dist/libs/ag-ui dist/libs/render dist/libs/a2ui dist/libs/licensing

- name: Verify atomic release versions
run: node scripts/verify-release-versions.mjs --tag "$RELEASE_TAG"
env:
Expand Down
2 changes: 1 addition & 1 deletion libs/chat/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@ngaf/chat",
"version": "0.0.32",
"version": "0.0.29",
"exports": {
".": {
"types": "./index.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion libs/telemetry/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@ngaf/telemetry",
"version": "0.0.0",
"version": "0.0.29",
"license": "MIT",
"repository": {
"type": "git",
Expand Down
5 changes: 5 additions & 0 deletions libs/telemetry/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@
"command": "node libs/telemetry/scripts/assemble-dist.mjs"
}
},
"nx-release-publish": {
"options": {
"packageRoot": "dist/{projectRoot}"
}
},
"test": {
"executor": "@nx/vitest:test",
"options": {
Expand Down
6 changes: 6 additions & 0 deletions libs/telemetry/src/node/client.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,13 @@ describe('node client', () => {
_resetDisableForTesting();
delete process.env.DO_NOT_TRACK;
delete process.env.NGAF_TELEMETRY_DISABLED;
delete process.env.npm_config_do_not_track;
delete process.env.NPM_CONFIG_DO_NOT_TRACK;
delete process.env.CI;
delete process.env.GITHUB_ACTIONS;
delete process.env.CONTINUOUS_INTEGRATION;
delete process.env.BUILDKITE;
delete process.env.CIRCLECI;
delete process.env.NGAF_TELEMETRY_SAMPLE_RATE;
delete process.env.npm_config_user_agent;
process.env.NGAF_TELEMETRY_INGEST_URL = 'https://test.example/api/ingest';
Expand Down
7 changes: 7 additions & 0 deletions libs/telemetry/src/node/postinstall.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,15 @@ describe('postinstall script', () => {
beforeEach(() => {
vi.mocked(capturePostinstall).mockClear();
delete process.env.CI;
delete process.env.GITHUB_ACTIONS;
delete process.env.CONTINUOUS_INTEGRATION;
delete process.env.BUILDKITE;
delete process.env.CIRCLECI;
delete process.env.DO_NOT_TRACK;
delete process.env.npm_config_do_not_track;
delete process.env.NPM_CONFIG_DO_NOT_TRACK;
delete process.env.DEBUG;
delete process.env.NGAF_TELEMETRY_DISABLED;
});

test('calls capturePostinstall with the package name + version', async () => {
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

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

8 changes: 8 additions & 0 deletions scripts/verify-release-versions.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,14 @@ export async function verifyReleaseVersions({
}

const packageInfo = await getPackageForProject(workspaceRoot, project);
const publishRoot =
project.targets['nx-release-publish']?.options?.packageRoot;

if (publishRoot !== 'dist/{projectRoot}') {
throw new Error(
`Release project "${projectName}" must publish from dist/{projectRoot}.`
);
}

if (packageInfo.packageJson.private === true) {
throw new Error(
Expand Down
26 changes: 26 additions & 0 deletions scripts/verify-release-versions.spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@ async function createWorkspace(projectVersions) {
await mkdir(projectRoot, { recursive: true });
await writeJson(join(projectRoot, 'project.json'), {
name: projectName,
targets: {
'nx-release-publish': {
options: {
packageRoot: 'dist/{projectRoot}',
},
},
},
});
await writeJson(join(projectRoot, 'package.json'), {
name: `@ngaf/${projectName}`,
Expand Down Expand Up @@ -110,4 +117,23 @@ describe('verifyReleaseVersions', () => {
'Public package @ngaf/render is not included in release group "publishable".'
);
});

it('rejects release projects without an explicit dist publish root', async () => {
const workspaceRoot = await createWorkspace({
chat: '0.0.13',
telemetry: '0.0.13',
});
await writeJson(join(workspaceRoot, 'libs', 'telemetry', 'project.json'), {
name: 'telemetry',
targets: {
'nx-release-publish': {
options: {},
},
},
});

await expect(verifyReleaseVersions({ workspaceRoot })).rejects.toThrow(
'Release project "telemetry" must publish from dist/{projectRoot}.'
);
});
});
Loading