@ankhorage/devtools 1.18.4 → 1.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # @ankhorage/devtools
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v1.18.4](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v1.19.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
7
7
 
8
8
  Shared tooling, repository automation, runtime policies, and agent standards for Ankhorage TypeScript projects
9
9
 
@@ -0,0 +1,8 @@
1
+ /*** Resolve the centrally pinned PKGViz CI audit for repositories with analyzable source. */
2
+ export declare function resolvePkgvizAuditPolicyAsync(targetDirectory: string): Promise<PkgvizAuditPolicy | undefined>;
3
+ interface PkgvizAuditPolicy {
4
+ readonly artifactName: string;
5
+ readonly artifactPath: string;
6
+ readonly command: string;
7
+ }
8
+ export {};
@@ -0,0 +1,27 @@
1
+ import { stat } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ /*** Resolve the centrally pinned PKGViz CI audit for repositories with analyzable source. */
4
+ export async function resolvePkgvizAuditPolicyAsync(targetDirectory) {
5
+ if (!(await hasSourceDirectoryAsync(targetDirectory)))
6
+ return undefined;
7
+ return {
8
+ artifactName: 'pkgviz-audit',
9
+ artifactPath: 'pkgviz-audit.json',
10
+ command: 'bunx pkgviz@0.8.1 --out pkgviz-audit.json --rule cyclic-dependencies=block',
11
+ };
12
+ }
13
+ /*** Detect whether the managed repository has a source tree that PKGViz can inspect. */
14
+ async function hasSourceDirectoryAsync(targetDirectory) {
15
+ try {
16
+ return (await stat(join(targetDirectory, 'src'))).isDirectory();
17
+ }
18
+ catch (error) {
19
+ if (isNodeError(error) && error.code === 'ENOENT')
20
+ return false;
21
+ throw error;
22
+ }
23
+ }
24
+ /*** Narrow filesystem failures to Node errors with stable error codes. */
25
+ function isNodeError(error) {
26
+ return error instanceof Error && 'code' in error;
27
+ }
@@ -99,3 +99,5 @@ jobs:
99
99
  else
100
100
  echo "No changeset:status script found; skipping."
101
101
  fi
102
+
103
+ # __ANKH_PKGVIZ_AUDIT_STEPS__
@@ -3,6 +3,7 @@ import { join } from 'node:path';
3
3
  import { resolveApmReleaseCommandAsync } from '../../features/apm-release-validation/adapters/outbound/resolveApmReleaseCommandAsync.js';
4
4
  import { resolveStructureReleaseCommandAsync } from '../../features/structure-descriptor-generation/adapters/outbound/resolveStructureReleaseCommandAsync.js';
5
5
  import { bunRuntimePolicy, nodeRuntimePolicy } from '../../policy/bunRuntimePolicy.js';
6
+ import { resolvePkgvizAuditPolicyAsync } from '../../policy/resolvePkgvizAuditPolicyAsync.js';
6
7
  import { readCurrentDoctorVersion } from './readCurrentDoctorVersion.js';
7
8
  import { renderRenovateWorkflowAsync } from './renderRenovateWorkflowAsync.js';
8
9
  import { renderWorkflowAsync } from './renderWorkflowAsync.js';
@@ -40,6 +41,7 @@ function createWorkflowDefinition(relativePath, sourcePath) {
40
41
  bunVersion: bunRuntimePolicy.version,
41
42
  doctorVersion: readCurrentDoctorVersion(),
42
43
  nodeVersion: nodeRuntimePolicy.setupVersion,
44
+ pkgvizAudit: await resolvePkgvizAuditPolicyAsync(targetDirectory),
43
45
  }),
44
46
  };
45
47
  }
@@ -3,6 +3,11 @@ export interface WorkflowPolicy {
3
3
  readonly doctorVersion: string;
4
4
  readonly nodeVersion: string;
5
5
  readonly apmReleaseCommand?: string;
6
+ readonly pkgvizAudit?: {
7
+ readonly artifactName: string;
8
+ readonly artifactPath: string;
9
+ readonly command: string;
10
+ };
6
11
  readonly structureReleaseCommand?: string;
7
12
  }
8
13
  /*** Renders one workflow template with the canonical runtime, Doctor, and Changesets policy. */
@@ -5,6 +5,7 @@ export async function renderWorkflowAsync(sourceUrl, policy) {
5
5
  const template = await readFile(sourceUrl, 'utf8');
6
6
  return template
7
7
  .replaceAll(BUN_VERSION_TOKEN, policy.bunVersion)
8
+ .replaceAll(PKGVIZ_AUDIT_STEPS_TOKEN, renderPkgvizAuditSteps(policy))
8
9
  .replaceAll(CHANGESETS_PUBLISH_COMMAND_TOKEN, changesetsPolicy.workflowCommands.publish)
9
10
  .replaceAll(CHANGESETS_STATUS_COMMAND_TOKEN, changesetsPolicy.workflowCommands.status)
10
11
  .replaceAll(CHANGESETS_VERSION_COMMAND_TOKEN, changesetsPolicy.workflowCommands.version)
@@ -19,3 +20,19 @@ const CHANGESETS_STATUS_COMMAND_TOKEN = '__ANKH_CHANGESETS_STATUS_COMMAND__';
19
20
  const CHANGESETS_VERSION_COMMAND_TOKEN = '__ANKH_CHANGESETS_VERSION_COMMAND__';
20
21
  const DOCTOR_VERSION_TOKEN = '__ANKH_DOCTOR_VERSION__';
21
22
  const NODE_VERSION_TOKEN = '__ANKH_NODE_VERSION__';
23
+ /*** Render the centrally managed PKGViz audit steps only for applicable repositories. */
24
+ function renderPkgvizAuditSteps(policy) {
25
+ if (policy.pkgvizAudit === undefined)
26
+ return '';
27
+ return ` - name: Enforce PKGViz cyclic-dependencies rule
28
+ run: ${policy.pkgvizAudit.command}
29
+
30
+ - name: Upload PKGViz audit
31
+ if: always() && hashFiles('${policy.pkgvizAudit.artifactPath}') != ''
32
+ uses: actions/upload-artifact@v4
33
+ with:
34
+ name: ${policy.pkgvizAudit.artifactName}
35
+ path: ${policy.pkgvizAudit.artifactPath}
36
+ `;
37
+ }
38
+ const PKGVIZ_AUDIT_STEPS_TOKEN = ' # __ANKH_PKGVIZ_AUDIT_STEPS__';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhorage/devtools",
3
- "version": "1.18.4",
3
+ "version": "1.19.0",
4
4
  "description": "Shared tooling, repository automation, runtime policies, and agent standards for Ankhorage TypeScript projects",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/ankhorage/devtools#readme",