@xpertss/projen-types 0.0.6 → 0.0.8

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.
Files changed (39) hide show
  1. package/.jsii +62 -174
  2. package/API.md +20 -329
  3. package/README.md +20 -5
  4. package/lib/actions/action-build-workflow.js +4 -2
  5. package/lib/actions/action-dogfood-workflow.js +4 -2
  6. package/lib/actions/action-sonar-workflow.d.ts +6 -6
  7. package/lib/actions/action-sonar-workflow.js +8 -6
  8. package/lib/actions/github-action-project.d.ts +7 -7
  9. package/lib/actions/github-action-project.js +13 -7
  10. package/lib/cdk/app-runtime-scaffold.js +1 -1
  11. package/lib/cdk/cdk-app-project.js +5 -3
  12. package/lib/cdk/cdk-infra-project.js +1 -1
  13. package/lib/cdk/cdk-typescript-base.js +19 -4
  14. package/lib/cdk/components/ecr-ecs-constructs.js +1 -1
  15. package/lib/cdk/components/edge-networking-constructs.js +1 -1
  16. package/lib/cdk/database-component.js +1 -1
  17. package/lib/common/manual-deploy-workflow.js +3 -1
  18. package/lib/common/projen-drift-check-workflow.js +4 -2
  19. package/lib/common/upgrade-workflow.js +3 -1
  20. package/lib/common/workflow-change-notice-workflow.js +4 -2
  21. package/lib/common/workflow-purpose.d.ts +21 -0
  22. package/lib/common/workflow-purpose.js +51 -0
  23. package/lib/index.d.ts +0 -1
  24. package/lib/index.js +1 -2
  25. package/lib/java/components/cdk-deploy-hook.js +1 -1
  26. package/lib/java/components/code-index-workflow.js +5 -3
  27. package/lib/java/components/docker-publish.js +5 -3
  28. package/lib/java/components/flyway-migration.js +1 -1
  29. package/lib/java/components/github-packages-publish.js +5 -3
  30. package/lib/java/components/maven-central-publish.js +5 -3
  31. package/lib/java/java-app-project.js +1 -1
  32. package/lib/java/java-library-project.js +1 -1
  33. package/lib/java/java-maven-base.js +7 -4
  34. package/lib/java/java-service-project.js +1 -1
  35. package/lib/java/options.d.ts +1 -1
  36. package/lib/java/options.js +1 -1
  37. package/package.json +1 -1
  38. package/lib/common/actions-allowlist-guard.d.ts +0 -37
  39. package/lib/common/actions-allowlist-guard.js +0 -70
package/.jsii CHANGED
@@ -106,7 +106,7 @@
106
106
  },
107
107
  "name": "@xpertss/projen-types",
108
108
  "readme": {
109
- "markdown": "# @xpertss/projen-types\n\nProjen project types for CDK/TypeScript and Java/Maven projects.\n\nInstead of hand-maintaining `pom.xml`, `cdk.json`, and GitHub workflows, you declare a project type in a `.projenrc.ts` file and let [projen](https://github.com/projen/projen) generate (and keep up to date) the whole scaffold: build files, source skeletons, CI workflows, and deploy pipelines.\n\n## Project types at a glance\n\n| Type | What it is | Publishes to | Generated workflows |\n| --- | --- | --- | --- |\n| `CdkInfraProject` | Pure-infrastructure CDK stacks (CloudFront, Route53, SQS, API Gateway, Cognito, ECR/ECS for externally-built images) | - | `build` (PR checks), `deploy` (manual dispatch) |\n| `CdkAppProject` | Full TypeScript service behind API Gateway: infra + app source + database | - | `build`, `deploy`, `app-build` (PR checks) |\n| `JavaLibraryProject` | Reusable Java library | Maven Central | `build`, `upgrade` (nightly), `publish-maven-central`, `codeindex` |\n| `JavaServiceProject` | Spring Boot service | Docker Hub | `build`, `upgrade` (nightly), `publish-docker`, `deploy-cdk` |\n| `JavaAppProject` | GUI/TUI/CLI Java application | GitHub Packages | `build`, `upgrade` (nightly), `publish-ghpackages` |\n| `GitHubActionProject` | Reusable GitHub Action or Workflow | GitHub Releases | `build`, `test-dogfood`, `sonar`, `release` |\n\nTwo foundation classes are also exported for advanced use: `CdkTypescriptProject` (shared CDK + TypeScript base for the CDK types) and `JavaMavenProject` (shared Maven base for the Java types).\n\nAll project types:\n\n- run a **drift check** in PR builds - a job that re-runs projen and fails if generated files were hand-edited. Edit `.projenrc.ts`, then run `npx projen`; never edit generated files directly.\n- use the GitHub secret `PROJEN_GITHUB_TOKEN` (a fine-grained PAT) for projen's automation. Override with `gheTokenSecret`.\n- make all publishing/deploying **manual** (workflow_dispatch) rather than on every merge.\n\n## Getting started\n\nScaffold the repo with projen's own bootstrap, pointed at this package:\n\n```bash\nmkdir my-project && cd my-project\ngit init\nnpx projen new --from @xpertss/projen-types cdk_infra --name my-project\n```\n\nThat writes a starter `.projenrc.ts`, synthesizes the whole scaffold and\ninstalls dependencies. The type names `projen new` accepts are `cdk_infra`,\n`cdk_app`, `java_library`, `java_service`, `java_app` and\n`git_hub_action`; pass a bogus one to have it list them. Required options\nbecome flags: `--name` for every type, plus `--group-id`/`--artifact-id`\n(Java) and `--sonar-host-url` (`git_hub_action`). Any other plainly-typed\noption can be passed the same way - `--cdk-deploy-target-repo owner/repo`,\n`--docker-registry ghcr.io`, `--no-use-flyway`, and so on.\n\nCommit the result. From then on, every change to the scaffold goes through\n`.projenrc.ts` followed by `npx projen`:\n\n```bash\nnpx projen\n```\n\nEvery type scaffolds from that one command; no option is *required* that\n`projen new` cannot pass. The structured options - `environments` and\n`GitHubActionProject`'s `dogfood` - are ones projen's CLI cannot render\ninto a projenrc, so they are added afterwards by editing `.projenrc.ts` and\nre-running `npx projen`. Leaving `environments` out simply generates no\ndeploy workflow; leaving `dogfood` out (or a service's\n`cdkDeployTargetRepo`) still generates the workflow, with one step that\nfails and tells you what to add - a gate this package considers load-bearing\nis allowed to be missing loudly, never silently.\n\nThe `name` option must match the `name` field in the project's `package.json` (for the CDK types) or the project name used by projen's `java.JavaProject` (for the Java types).\n\n## Examples\n\n### CdkInfraProject\n\nPure infrastructure stacks with optional ECR/ECS and edge-networking constructs.\n\n```typescript\n// .projenrc.ts\nimport { CdkInfraProject } from '@xpertss/projen-types';\n\nconst project = new CdkInfraProject({\n name: 'media-edge-infra',\n environments: [\n 'dev',\n { name: 'stage', accountId: '111111111111', region: 'eu-central-1' },\n { name: 'prod', accountId: '222222222222', region: 'eu-central-1', requiresApproval: true },\n ],\n edgeResources: ['cloudfront', 'route53', 'sqs'],\n ecrEcs: { enabled: true, externalImageSource: true },\n slackWebhookSecret: 'SLACK_DEPLOY_WEBHOOK',\n});\n\nproject.synth();\n```\n\nYou get:\n\n- `cdk.json`, `cdk synth` / `cdk diff` / `cdk deploy` tasks, and the standard `AwsCdkTypeScriptApp` layout (CDK 2.189.1 by default).\n- `.github/workflows/build.yml` - PR build that hard-fails on projen drift.\n- `.github/workflows/deploy.yml` - manual dispatch with one `deploy-<env>` job per environment (runs `cdk deploy --all` with `--context environment=<env>`); `requiresApproval` environments get a GitHub Environment approval gate; a Slack notification step is added when `slackWebhookSecret` is set.\n- `src/constructs/edge-networking.ts` - helper constructs only for the requested `edgeResources` (`cloudfront`, `route53`, `apigateway`, `cognito`, `sqs`).\n- `src/constructs/ecr-ecs.ts` when `ecrEcs.enabled` - ECR repo + Fargate service; `externalImageSource: true` (default) means the service pulls an image built outside this repo.\n\n### CdkAppProject\n\n`CdkInfraProject` plus application source, a database construct, and an app-level build workflow.\n\n```typescript\n// .projenrc.ts\nimport { CdkAppProject } from '@xpertss/projen-types';\n\nconst project = new CdkAppProject({\n name: 'video-api',\n environments: ['dev', 'prod'],\n edgeResources: ['apigateway'],\n database: { engine: 'postgres', migrationTool: 'flyway' },\n appEntryPoint: 'src/app.ts',\n});\n\nproject.synth();\n```\n\nEverything from `CdkInfraProject`, plus:\n\n- `src/app.ts` - application entrypoint stub (`export function handler()`).\n- `src/handlers/example.ts` - API Gateway proxy handler stub, with `@types/aws-lambda` added as a dev dependency.\n- `src/constructs/database.ts` - a `Database` construct stub for the chosen engine (`postgres`/`mysql` -> RDS, `dynamodb` -> DynamoDB). `migrationTool` (no default, intentionally) is added as a dev dependency and referenced in the stub - wiring it up is left to you.\n- `.github/workflows/app-build.yml` - runs the project's test task on every PR, then checks for projen drift.\n\n### JavaLibraryProject\n\nA reusable Java library published to Maven Central.\n\n```typescript\n// .projenrc.ts\nimport { JavaLibraryProject } from '@xpertss/projen-types';\n\nconst project = new JavaLibraryProject({\n name: 'common-utils',\n groupId: 'org.xpertss',\n artifactId: 'common-utils',\n version: '1.0.0',\n sonarProjectKey: 'org.xpertss:common-utils',\n mavenCentralOidc: true,\n});\n\nproject.synth();\n```\n\nYou get:\n\n- `pom.xml` (via projen's `java.JavaProject`) with the given GAV coordinates.\n- `.github/workflows/build.yml` - PR build + projen drift check, plus a SonarQube scan step when `sonarProjectKey` is set (needs a `SONAR_TOKEN` secret).\n- `.github/workflows/upgrade.yml` - nightly (03:00 UTC) PR running `mvn versions:use-latest-releases versions:update-properties`.\n- `.github/workflows/publish-maven-central.yml` - manual dispatch running `mvn -B deploy -P release`. With `mavenCentralOidc: true` it uses Maven Central's OIDC trusted publishing (no GPG secrets needed); otherwise it expects the secrets `MAVEN_GPG_PRIVATE_KEY`, `MAVEN_GPG_PASSPHRASE`, `MAVEN_CENTRAL_USERNAME`, `MAVEN_CENTRAL_PASSWORD`.\n- `.github/workflows/codeindex.yml` - on push to `main`, generates a Java source index under `.cai/` (disable with `publishCodeIndex: false`).\n\n### JavaServiceProject\n\nA Spring Boot service that publishes a Docker image and can trigger deploys in a companion CDK repo.\n\n```typescript\n// .projenrc.ts\nimport { JavaServiceProject } from '@xpertss/projen-types';\n\nconst project = new JavaServiceProject({\n name: 'stream-processor',\n groupId: 'org.xpertss',\n artifactId: 'stream-processor',\n dockerRegistry: 'docker.io/xpertss',\n cdkDeployTargetRepo: 'xpertss/stream-infra',\n environments: ['dev', { name: 'prod', requiresApproval: true }],\n});\n\nproject.synth();\n```\n\nYou get (everything from `JavaMavenProject` - `pom.xml`, `build` + drift check, nightly `upgrade` - plus):\n\n- `spring-boot-starter-web` added to the pom.\n- `.github/workflows/publish-docker.yml` - manual dispatch: `mvn -B package && docker build -t <registry>/<name>:<sha>`, logged in with the `DOCKER_USERNAME` / `DOCKER_PASSWORD` secrets. `dockerRegistry` defaults to `docker.io`.\n- Flyway wiring when `useFlyway` (default `true`): `flyway-maven-plugin` ^10 + `flyway-core` ^10 in the pom, and `src/main/resources/db/migration/V1__init.sql`.\n- `.github/workflows/deploy-cdk.yml` (the `CdkDeployHook`, generated by default) - manual dispatch with an environment selector; each job sends a `workflow_dispatch` to `deploy.yml` in the companion `cdkDeployTargetRepo` (a `CdkInfraProject`/`CdkAppProject` repo). With no `cdkDeployTargetRepo` set, the workflow is still generated but each job's only step fails with instructions - it is dispatch-only, so that lands on whoever tries to deploy rather than on every PR. Turn the workflow off entirely with `cdkDeployHook: false`. `environments` defaults to `['prod']`.\n\n### JavaAppProject\n\nA GUI/TUI/CLI Java application published to GitHub Packages only - no Maven Central, no Docker, no CDK deploy hook.\n\n```typescript\n// .projenrc.ts\nimport { JavaAppProject } from '@xpertss/projen-types';\n\nconst project = new JavaAppProject({\n name: 'studio-cli',\n groupId: 'org.xpertss',\n artifactId: 'studio-cli',\n ghPackagesRegistry: 'https://maven.pkg.github.com/xpertss/studio-cli',\n});\n\nproject.synth();\n```\n\nYou get everything from `JavaMavenProject`, plus `.github/workflows/publish-ghpackages.yml` - manual dispatch running `mvn -B deploy -DaltDeploymentRepository=github::<registry>`, authenticated with `GITHUB_TOKEN`. `ghPackagesRegistry` defaults to `https://maven.pkg.github.com/<repo>` derived from the repository URL.\n\n### GitHubActionProject\n\nA reusable GitHub Action or Workflow. This example scaffolds an action that stages a folder and, only if it changed, commits and pushes it.\n\n```typescript\n// .projenrc.ts\nimport { GitHubActionProject } from '@xpertss/projen-types';\n\nconst project = new GitHubActionProject({\n name: 'auto-commit',\n description: 'Stage a folder and, only if it changed, commit and push it',\n sonarHostUrl: 'https://sonar.xpertss.org', // required, no default - your self-hosted SonarQube\n dogfood: {\n // Two scenario steps: the \"changed\" path and the \"no-op\" path are both\n // load-bearing behavior for this action (a double-commit or a\n // push-when-empty bug is the failure mode a hand-rolled inline-shell\n // alternative is most likely to introduce).\n scenario: [\n {\n name: 'Changed path',\n fixtureSteps: [\n 'echo \"$(date -u +%Y%m%dT%H%M%SZ)\" >> test/fixtures/dogfood-state.txt',\n ],\n inputs: {\n commit_message: 'test: dogfood',\n branches: 'test/dogfood',\n },\n assertions: [\n // step id defaults to a slug of `name` - here \"changed-path-0\"\n '[ \"${{ steps.changed-path-0.outputs.committed }}\" = \"true\" ]',\n ],\n },\n {\n // No fixture change this time - nothing new to commit.\n name: 'No-op path',\n id: 'no-op-check', // pin an explicit id instead of relying on the default slug\n inputs: {\n commit_message: 'test: dogfood',\n branches: 'test/dogfood',\n },\n assertions: [\n '[ \"${{ steps.no-op-check.outputs.committed }}\" = \"false\" ]',\n ],\n },\n ],\n cleanup: [\n 'git push origin --delete test/dogfood || true',\n ],\n },\n});\n\nproject.synth();\n```\n\nYou get:\n\n- `action.yml` and `auto-commit.sh` are hand-written - this type only lints their content via `build.yml`'s shellcheck/yamllint/actionlint checks.\n- `.github/workflows/build.yml` - lint gate: `apt`-installed shellcheck/yamllint plus a pinned, SHA-256-verified `actionlint` release binary. Gates `main` alongside `sonar.yml`.\n- `.github/workflows/test-dogfood.yml` - runs the `dogfood.scenario` steps above against this repo's own `action.yml` (via `uses: .`), then the shared `cleanup`, on `workflow_dispatch`, every `pull_request`, and nightly. Omit `dogfood` and the workflow still exists, with one step that fails on every PR until you declare a scenario - AD-001 allows a dogfood to be missing loudly, never silently. A *partial* `dogfood` (a scenario with no cleanup) is a synth error.\n- `.github/workflows/sonar.yml` - self-hosted SonarQube via the Scanner CLI, scanning `action.yml`/`.github/workflows/**`/`**/*.sh` explicitly.\n- `.github/workflows/release.yml` - `feat:`/`fix:` commits on `main` bump the version, tag `vX.Y.Z`, and create a GitHub Release.\n- `.github/workflows/projen-drift-check.yml`, `workflow-change-notice.yml`, `actions-allowlist-guard.yml` - drift detection, a change notice, and an action allow-list guard, always included.\n- `package.json` (**private**, version source only), `.yamllint`, `LICENSE` (MIT by default), and a `README.md` template - all regenerated by `npx projen`.\n\nNeeds the same two secrets as everything else in this package: `PROJEN_GITHUB_TOKEN` (used for automated PR comments) and `SONAR_TOKEN` (the Sonar scan). Onboard a brand-new action repo following [Getting started](#getting-started), write the `.projenrc.ts` above, then hand-write `action.yml`/`auto-commit.sh`/`test/fixtures/`.\n\n## Common options\n\nCDK project types (`CdkInfraProjectOptions` / `CdkAppProjectOptions`):\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `name` | - (required) | Project name; must match `package.json` |\n| `cdkVersion` | `2.189.1` | AWS CDK version |\n| `gheTokenSecret` | `PROJEN_GITHUB_TOKEN` | GitHub secret holding projen's PAT |\n| `slackWebhookSecret` | - | GitHub secret with a Slack webhook URL for deploy notifications |\n| `environments` | - (no `deploy` workflow) | Deploy targets for the `deploy` workflow; strings or `EnvironmentOptions` |\n| `ecrEcs` | - | `EcrEcsOptions` - `enabled`, `externalImageSource` (default `true`) |\n| `edgeResources` | - | Subset of `cloudfront`, `route53`, `apigateway`, `cognito`, `sqs` |\n| `database` | - (app only) | `DatabaseOptions` - `engine` (`postgres`/`mysql`/`dynamodb`, default `postgres`), `migrationTool` |\n| `appEntryPoint` | `src/app.ts` (app only) | Path of the generated application entrypoint |\n\nJava project types (`JavaLibraryProjectOptions` / `JavaServiceProjectOptions` / `JavaAppProjectOptions`):\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `name` | - (required) | Project name |\n| `groupId` | - (required) | Maven group id |\n| `artifactId` | - (required) | Maven artifact id |\n| `version` | `0.1.0` | Maven version |\n| `sonarProjectKey` | - | SonarQube project key; the sonar step is skipped when unset |\n| `gheTokenSecret` | `PROJEN_GITHUB_TOKEN` | GitHub secret holding projen's PAT |\n| `cdkDeployTargetRepo` | - (service only; `deploy-cdk.yml` fails until set) | Companion CDK repo (`owner/repo`) whose `deploy.yml` the deploy hook dispatches |\n| `cdkDeployHook` | `true` (service only) | Whether to generate `deploy-cdk.yml` at all |\n| `dockerRegistry` | `docker.io` (service only) | Registry the Docker image is pushed to |\n| `useFlyway` | `true` (service only) | Flyway plugin/dependency + `V1__init.sql` |\n\n`EnvironmentOptions` for deploy targets:\n\n```text\ninterface EnvironmentOptions {\n readonly name: string; // e.g. \"dev\", \"stage\", \"prod\"\n readonly accountId?: string; // AWS account id (CDK deploys)\n readonly region?: string; // AWS region (CDK deploys)\n readonly requiresApproval?: boolean; // GitHub Environment approval gate (default false)\n}\n```\n\nPlain strings (`'dev'`) are shorthand for `{ name: 'dev' }`.\n\n`GitHubActionProjectOptions`:\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `name` | - (required) | Project name |\n| `description` | - | One-line description; used in the default README template and recorded in the private `package.json` |\n| `sonarHostUrl` | - (required) | URL of your self-hosted SonarQube instance; must be reachable from github.com-hosted runners |\n| `sonarTokenSecret` | `SONAR_TOKEN` | GitHub secret holding the Sonar token |\n| `sonarPullRequestGate` | `true` | Whether `sonar.yml` also runs on `pull_request` as a pass/fail gate |\n| `dogfood` | - (a `test-dogfood.yml` that fails until you declare one) | `ActionDogfoodOptions` - the scenario that exercises the action end-to-end via `uses: .` |\n| `license` | `MIT` | SPDX identifier for the generated `LICENSE` |\n| `gheTokenSecret` | `PROJEN_GITHUB_TOKEN` | GitHub secret holding projen's PAT |\n\n`ActionDogfoodOptions`/`ActionDogfoodStep` - the dogfood scenario (`test-dogfood.yml`):\n\n```text\ninterface ActionDogfoodOptions {\n readonly scenario: ActionDogfoodStep[]; // one or more, run in order - required\n readonly cleanup: string[]; // shared, run once at the end with `if: always()` - required\n}\n\ninterface ActionDogfoodStep {\n readonly name: string; // labels this step-group's generated workflow steps\n readonly id?: string; // step id for the `uses: .` call; default: a slug of `name`\n readonly fixtureSteps?: string[]; // shell, before the invocation (default: none)\n readonly inputs?: Record<string, string>; // `with:` for this invocation (default: none)\n readonly assertions: string[]; // shell, after the invocation - required, job fails unless all exit 0\n}\n```\n\nMost actions need exactly one `scenario` step. Actions with a re-run/no-op/idempotency behavior to verify (e.g. `auto-commit`'s no-op-on-no-change path, `create-pull-request`'s reuse-the-PR path) declare two - the second typically omits `fixtureSteps` so its invocation sees no new state, and its assertion checks the opposite outcome of the first. Reference an invocation's own outputs from a later assertion via `${{ steps.<id>.outputs.<name> }}`, using either the default slug or an explicit `id`.\n\n## Required GitHub secrets\n\n| Secret | Used by | Notes |\n| --- | --- | --- |\n| `PROJEN_GITHUB_TOKEN` | all types | PAT for projen's self-mutation/automation; override via `gheTokenSecret` |\n| `SONAR_TOKEN` | Java types with `sonarProjectKey`; `GitHubActionProject` | SonarQube scan step in `build.yml` / `sonar.yml`; override via `sonarTokenSecret` on `GitHubActionProject` |\n| `DOCKER_USERNAME` / `DOCKER_PASSWORD` | `JavaServiceProject` | Docker image push |\n| `MAVEN_GPG_PRIVATE_KEY`, `MAVEN_GPG_PASSPHRASE`, `MAVEN_CENTRAL_USERNAME`, `MAVEN_CENTRAL_PASSWORD` | `JavaLibraryProject` without `mavenCentralOidc` | Not needed with OIDC trusted publishing |\n| (your Slack webhook secret) | CDK types with `slackWebhookSecret` | Deploy notifications |\n\n## Going further\n\nThe project types are composed from smaller components you can also attach to your own projects:\n\n| Component | Applies to | Purpose |\n| --- | --- | --- |\n| `AppRuntimeScaffold` | `NodeProject` | App source skeleton (`app.ts` + handlers) |\n| `DatabaseComponent` | `NodeProject` | Database construct stub + migration tool wiring |\n| `EcrEcsConstructs` | `Project` | ECR + Fargate ECS construct helper |\n| `EdgeNetworkingConstructs` | `Project` | Per-resource edge networking construct helpers |\n| `MavenCentralPublish` | `JavaProject` | Manual-dispatch Maven Central publish workflow |\n| `DockerPublish` | `JavaProject` | Manual-dispatch Docker build+push workflow |\n| `GitHubPackagesPublish` | `JavaProject` | Manual-dispatch GitHub Packages publish workflow |\n| `FlywayMigration` | `JavaProject` | Flyway plugin/dependency + migrations directory |\n| `CdkDeployHook` | `JavaProject` | Manual-dispatch workflow that triggers `deploy.yml` in a companion CDK repo |\n| `CodeIndexWorkflow` | `JavaProject` | Code index generation on push to `main` |\n| `ActionBuildWorkflow` | `GitHubProject` | The `lint` task (shellcheck/yamllint/pinned actionlint) + `build.yml` |\n| `ActionDogfoodWorkflow` | `GitHubProject` | `test-dogfood.yml` from an `ActionDogfoodOptions` scenario |\n| `ActionSonarWorkflow` | `GitHubProject` | `sonar.yml` (self-hosted SonarQube via the Scanner CLI) |\n\nExample - adding a Docker publish to a plain projen `JavaProject`:\n\n```typescript\nimport { java } from 'projen';\nimport { DockerPublish } from '@xpertss/projen-types';\n\nconst project = new java.JavaProject({\n name: 'my-service',\n groupId: 'org.xpertss',\n artifactId: 'my-service',\n});\n\nnew DockerPublish(project, { dockerRegistry: 'ghcr.io' });\n\nproject.synth();\n```\n\nThe full API reference, including every option and property, is in [API.md](./API.md).\n"
109
+ "markdown": "# @xpertss/projen-types\n\nProjen project types for CDK/TypeScript and Java/Maven projects.\n\nInstead of hand-maintaining `pom.xml`, `cdk.json`, and GitHub workflows, you declare a project type in a `.projenrc.ts` file and let [projen](https://github.com/projen/projen) generate (and keep up to date) the whole scaffold: build files, source skeletons, CI workflows, and deploy pipelines.\n\n## Project types at a glance\n\n| Type | What it is | Publishes to | Generated workflows |\n| --- | --- | --- | --- |\n| `CdkInfraProject` | Pure-infrastructure CDK stacks (CloudFront, Route53, SQS, API Gateway, Cognito, ECR/ECS for externally-built images) | - | `build` (PR checks), `deploy` (manual dispatch) |\n| `CdkAppProject` | Full TypeScript service behind API Gateway: infra + app source + database | - | `build`, `deploy`, `app-build` (PR checks) |\n| `JavaLibraryProject` | Reusable Java library | Maven Central | `build`, `upgrade` (nightly), `publish-maven-central`, `codeindex` |\n| `JavaServiceProject` | Spring Boot service | Docker Hub | `build`, `upgrade` (nightly), `publish-docker`, `deploy-cdk` |\n| `JavaAppProject` | GUI/TUI/CLI Java application | GitHub Packages | `build`, `upgrade` (nightly), `publish-ghpackages` |\n| `GitHubActionProject` | Reusable GitHub Action or Workflow | GitHub Releases | `build`, `test-dogfood`, `sonar`, `release` |\n\nTwo foundation classes are also exported for advanced use: `CdkTypescriptProject` (shared CDK + TypeScript base for the CDK types) and `JavaMavenProject` (shared Maven base for the Java types).\n\nAll project types:\n\n- run a **drift check** in PR builds - a job that re-runs projen and fails if generated files were hand-edited. Edit `.projenrc.ts`, then run `npx projen`; never edit generated files directly.\n- use the GitHub secret `PROJEN_GITHUB_TOKEN` (a fine-grained PAT) for projen's automation. Override with `gheTokenSecret`.\n- make all publishing/deploying **manual** (workflow_dispatch) rather than on every merge.\n\n## Getting started\n\nScaffold the repo with projen's own bootstrap, pointed at this package:\n\n```bash\nmkdir my-project && cd my-project\ngit init\nnpx projen new --from @xpertss/projen-types cdk_infra --name my-project\n```\n\nThat writes a starter `.projenrc.ts`, synthesizes the whole scaffold and\ninstalls dependencies. The type names `projen new` accepts are `cdk_infra`,\n`cdk_app`, `java_library`, `java_service`, `java_app` and\n`git_hub_action`; pass a bogus one to have it list them. Required options\nbecome flags: `--name` for every type, plus `--group-id`/`--artifact-id`\n(Java) and `--sonar-host-url` (`git_hub_action`). Any other plainly-typed\noption can be passed the same way - `--cdk-deploy-target-repo owner/repo`,\n`--docker-registry ghcr.io`, `--no-use-flyway`, and so on.\n\nCommit the result. From then on, every change to the scaffold goes through\n`.projenrc.ts` followed by `npx projen`:\n\n```bash\nnpx projen\n```\n\nEvery type scaffolds from that one command; no option is *required* that\n`projen new` cannot pass. The structured options - `environments` and\n`GitHubActionProject`'s `dogfood` - are ones projen's CLI cannot render\ninto a projenrc, so they are added afterwards by editing `.projenrc.ts` and\nre-running `npx projen`. Leaving `environments` out simply generates no\ndeploy workflow; leaving `dogfood` out (or a service's\n`cdkDeployTargetRepo`) still generates the workflow, with one step that\nfails and tells you what to add - a gate this package considers load-bearing\nis allowed to be missing loudly, never silently.\n\nThe `name` option must match the `name` field in the project's `package.json` (for the CDK types) or the project name used by projen's `java.JavaProject` (for the Java types).\n\n## Updating an existing project when this package changes\n\nYour generated scaffold reflects the *installed* version of `@xpertss/projen-types` - `npx projen` reads your project type from the package in `node_modules`, not from this repository. So when this package ships a change (a bug fix, a new generated file, or altered workflow behavior), an existing project picks it up by bumping the dependency and re-synthesizing. A stale `node_modules` silently regenerates with the old behavior, so the bump is the load-bearing step.\n\nUsing the [`auto-commit` action](#githubactionproject) as a running example, say a new release adds the `# Purpose:` workflow header and SonarCloud wording. In the `auto-commit` repo:\n\n```bash\nnpm view @xpertss/projen-types version # what's the newest release?\nnpm i -D @xpertss/projen-types@latest # bump the installed project type\nnpx projen # re-synthesize every generated file\ngit diff # review before committing\n```\n\nThe diff here is the workflows gaining a `# Purpose:` comment and `sonar.yml` reflecting the SonarCloud wording. Commit the result with a normal `chore:` or `fix:` message - you never hand-edit the generated files themselves.\n\n## Examples\n\n### CdkInfraProject\n\nPure infrastructure stacks with optional ECR/ECS and edge-networking constructs.\n\n```typescript\n// .projenrc.ts\nimport { CdkInfraProject } from '@xpertss/projen-types';\n\nconst project = new CdkInfraProject({\n name: 'media-edge-infra',\n environments: [\n 'dev',\n { name: 'stage', accountId: '111111111111', region: 'eu-central-1' },\n { name: 'prod', accountId: '222222222222', region: 'eu-central-1', requiresApproval: true },\n ],\n edgeResources: ['cloudfront', 'route53', 'sqs'],\n ecrEcs: { enabled: true, externalImageSource: true },\n slackWebhookSecret: 'SLACK_DEPLOY_WEBHOOK',\n});\n\nproject.synth();\n```\n\nYou get:\n\n- `cdk.json`, `cdk synth` / `cdk diff` / `cdk deploy` tasks, and the standard `AwsCdkTypeScriptApp` layout (CDK 2.189.1 by default).\n- `.github/workflows/build.yml` - PR build that hard-fails on projen drift.\n- `.github/workflows/deploy.yml` - manual dispatch with one `deploy-<env>` job per environment (runs `cdk deploy --all` with `--context environment=<env>`); `requiresApproval` environments get a GitHub Environment approval gate; a Slack notification step is added when `slackWebhookSecret` is set.\n- `src/constructs/edge-networking.ts` - helper constructs only for the requested `edgeResources` (`cloudfront`, `route53`, `apigateway`, `cognito`, `sqs`).\n- `src/constructs/ecr-ecs.ts` when `ecrEcs.enabled` - ECR repo + Fargate service; `externalImageSource: true` (default) means the service pulls an image built outside this repo.\n\n### CdkAppProject\n\n`CdkInfraProject` plus application source, a database construct, and an app-level build workflow.\n\n```typescript\n// .projenrc.ts\nimport { CdkAppProject } from '@xpertss/projen-types';\n\nconst project = new CdkAppProject({\n name: 'video-api',\n environments: ['dev', 'prod'],\n edgeResources: ['apigateway'],\n database: { engine: 'postgres', migrationTool: 'flyway' },\n appEntryPoint: 'src/app.ts',\n});\n\nproject.synth();\n```\n\nEverything from `CdkInfraProject`, plus:\n\n- `src/app.ts` - application entrypoint stub (`export function handler()`).\n- `src/handlers/example.ts` - API Gateway proxy handler stub, with `@types/aws-lambda` added as a dev dependency.\n- `src/constructs/database.ts` - a `Database` construct stub for the chosen engine (`postgres`/`mysql` -> RDS, `dynamodb` -> DynamoDB). `migrationTool` (no default, intentionally) is added as a dev dependency and referenced in the stub - wiring it up is left to you.\n- `.github/workflows/app-build.yml` - runs the project's test task on every PR, then checks for projen drift.\n\n### JavaLibraryProject\n\nA reusable Java library published to Maven Central.\n\n```typescript\n// .projenrc.ts\nimport { JavaLibraryProject } from '@xpertss/projen-types';\n\nconst project = new JavaLibraryProject({\n name: 'common-utils',\n groupId: 'org.xpertss',\n artifactId: 'common-utils',\n version: '1.0.0',\n sonarProjectKey: 'org.xpertss:common-utils',\n mavenCentralOidc: true,\n});\n\nproject.synth();\n```\n\nYou get:\n\n- `pom.xml` (via projen's `java.JavaProject`) with the given GAV coordinates.\n- `.github/workflows/build.yml` - PR build + projen drift check, plus a SonarQube scan step when `sonarProjectKey` is set (needs a `SONAR_TOKEN` secret).\n- `.github/workflows/upgrade.yml` - nightly (03:00 UTC) PR running `mvn versions:use-latest-releases versions:update-properties`.\n- `.github/workflows/publish-maven-central.yml` - manual dispatch running `mvn -B deploy -P release`. With `mavenCentralOidc: true` it uses Maven Central's OIDC trusted publishing (no GPG secrets needed); otherwise it expects the secrets `MAVEN_GPG_PRIVATE_KEY`, `MAVEN_GPG_PASSPHRASE`, `MAVEN_CENTRAL_USERNAME`, `MAVEN_CENTRAL_PASSWORD`.\n- `.github/workflows/codeindex.yml` - on push to `main`, generates a Java source index under `.cai/` (disable with `publishCodeIndex: false`).\n\n### JavaServiceProject\n\nA Spring Boot service that publishes a Docker image and can trigger deploys in a companion CDK repo.\n\n```typescript\n// .projenrc.ts\nimport { JavaServiceProject } from '@xpertss/projen-types';\n\nconst project = new JavaServiceProject({\n name: 'stream-processor',\n groupId: 'org.xpertss',\n artifactId: 'stream-processor',\n dockerRegistry: 'docker.io/xpertss',\n cdkDeployTargetRepo: 'xpertss/stream-infra',\n environments: ['dev', { name: 'prod', requiresApproval: true }],\n});\n\nproject.synth();\n```\n\nYou get (everything from `JavaMavenProject` - `pom.xml`, `build` + drift check, nightly `upgrade` - plus):\n\n- `spring-boot-starter-web` added to the pom.\n- `.github/workflows/publish-docker.yml` - manual dispatch: `mvn -B package && docker build -t <registry>/<name>:<sha>`, logged in with the `DOCKER_USERNAME` / `DOCKER_PASSWORD` secrets. `dockerRegistry` defaults to `docker.io`.\n- Flyway wiring when `useFlyway` (default `true`): `flyway-maven-plugin` ^10 + `flyway-core` ^10 in the pom, and `src/main/resources/db/migration/V1__init.sql`.\n- `.github/workflows/deploy-cdk.yml` (the `CdkDeployHook`, generated by default) - manual dispatch with an environment selector; each job sends a `workflow_dispatch` to `deploy.yml` in the companion `cdkDeployTargetRepo` (a `CdkInfraProject`/`CdkAppProject` repo). With no `cdkDeployTargetRepo` set, the workflow is still generated but each job's only step fails with instructions - it is dispatch-only, so that lands on whoever tries to deploy rather than on every PR. Turn the workflow off entirely with `cdkDeployHook: false`. `environments` defaults to `['prod']`.\n\n### JavaAppProject\n\nA GUI/TUI/CLI Java application published to GitHub Packages only - no Maven Central, no Docker, no CDK deploy hook.\n\n```typescript\n// .projenrc.ts\nimport { JavaAppProject } from '@xpertss/projen-types';\n\nconst project = new JavaAppProject({\n name: 'studio-cli',\n groupId: 'org.xpertss',\n artifactId: 'studio-cli',\n ghPackagesRegistry: 'https://maven.pkg.github.com/xpertss/studio-cli',\n});\n\nproject.synth();\n```\n\nYou get everything from `JavaMavenProject`, plus `.github/workflows/publish-ghpackages.yml` - manual dispatch running `mvn -B deploy -DaltDeploymentRepository=github::<registry>`, authenticated with `GITHUB_TOKEN`. `ghPackagesRegistry` defaults to `https://maven.pkg.github.com/<repo>` derived from the repository URL.\n\n### GitHubActionProject\n\nA reusable GitHub Action or Workflow. This example scaffolds an action that stages a folder and, only if it changed, commits and pushes it.\n\n```typescript\n// .projenrc.ts\nimport { GitHubActionProject } from '@xpertss/projen-types';\n\nconst project = new GitHubActionProject({\n name: 'auto-commit',\n description: 'Stage a folder and, only if it changed, commit and push it',\n sonarHostUrl: 'https://sonarcloud.io', // required, no default - your SonarCloud URL\n dogfood: {\n // Two scenario steps: the \"changed\" path and the \"no-op\" path are both\n // load-bearing behavior for this action (a double-commit or a\n // push-when-empty bug is the failure mode a hand-rolled inline-shell\n // alternative is most likely to introduce).\n scenario: [\n {\n name: 'Changed path',\n fixtureSteps: [\n 'echo \"$(date -u +%Y%m%dT%H%M%SZ)\" >> test/fixtures/dogfood-state.txt',\n ],\n inputs: {\n commit_message: 'test: dogfood',\n branches: 'test/dogfood',\n },\n assertions: [\n // step id defaults to a slug of `name` - here \"changed-path-0\"\n '[ \"${{ steps.changed-path-0.outputs.committed }}\" = \"true\" ]',\n ],\n },\n {\n // No fixture change this time - nothing new to commit.\n name: 'No-op path',\n id: 'no-op-check', // pin an explicit id instead of relying on the default slug\n inputs: {\n commit_message: 'test: dogfood',\n branches: 'test/dogfood',\n },\n assertions: [\n '[ \"${{ steps.no-op-check.outputs.committed }}\" = \"false\" ]',\n ],\n },\n ],\n cleanup: [\n 'git push origin --delete test/dogfood || true',\n ],\n },\n});\n\nproject.synth();\n```\n\nYou get:\n\n- `action.yml` and `auto-commit.sh` are hand-written - this type only lints their content via `build.yml`'s shellcheck/yamllint/actionlint checks.\n- `.github/workflows/build.yml` - lint gate: `apt`-installed shellcheck/yamllint plus a pinned, SHA-256-verified `actionlint` release binary. Gates `main` alongside `sonar.yml`.\n- `.github/workflows/test-dogfood.yml` - runs the `dogfood.scenario` steps above against this repo's own `action.yml` (via `uses: .`), then the shared `cleanup`, on `workflow_dispatch`, every `pull_request`, and nightly. Omit `dogfood` and the workflow still exists, with one step that fails on every PR until you declare a scenario - AD-001 allows a dogfood to be missing loudly, never silently. A *partial* `dogfood` (a scenario with no cleanup) is a synth error.\n- `.github/workflows/sonar.yml` - SonarCloud scan via the Scanner CLI (the quality gate blocks the PR), scanning `action.yml`/`.github/workflows/**`/`**/*.sh` explicitly.\n- `.github/workflows/release.yml` - `feat:`/`fix:` commits on `main` bump the version, tag `vX.Y.Z`, and create a GitHub Release.\n- `.github/workflows/projen-drift-check.yml` and `workflow-change-notice.yml` - drift detection and a change notice, always included.\n- `package.json` (**private**, version source only), `.yamllint`, `LICENSE` (MIT by default), and a `README.md` template - all regenerated by `npx projen`.\n\nNeeds the same two secrets as everything else in this package: `PROJEN_GITHUB_TOKEN` (used for automated PR comments) and `SONAR_TOKEN` (the Sonar scan). Onboard a brand-new action repo following [Getting started](#getting-started), write the `.projenrc.ts` above, then hand-write `action.yml`/`auto-commit.sh`/`test/fixtures/`.\n\n## Common options\n\nCDK project types (`CdkInfraProjectOptions` / `CdkAppProjectOptions`):\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `name` | - (required) | Project name; must match `package.json` |\n| `cdkVersion` | `2.189.1` | AWS CDK version |\n| `gheTokenSecret` | `PROJEN_GITHUB_TOKEN` | GitHub secret holding projen's PAT |\n| `slackWebhookSecret` | - | GitHub secret with a Slack webhook URL for deploy notifications |\n| `environments` | - (no `deploy` workflow) | Deploy targets for the `deploy` workflow; strings or `EnvironmentOptions` |\n| `ecrEcs` | - | `EcrEcsOptions` - `enabled`, `externalImageSource` (default `true`) |\n| `edgeResources` | - | Subset of `cloudfront`, `route53`, `apigateway`, `cognito`, `sqs` |\n| `database` | - (app only) | `DatabaseOptions` - `engine` (`postgres`/`mysql`/`dynamodb`, default `postgres`), `migrationTool` |\n| `appEntryPoint` | `src/app.ts` (app only) | Path of the generated application entrypoint |\n\nJava project types (`JavaLibraryProjectOptions` / `JavaServiceProjectOptions` / `JavaAppProjectOptions`):\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `name` | - (required) | Project name |\n| `groupId` | - (required) | Maven group id |\n| `artifactId` | - (required) | Maven artifact id |\n| `version` | `0.1.0` | Maven version |\n| `sonarProjectKey` | - | SonarQube project key; the sonar step is skipped when unset |\n| `gheTokenSecret` | `PROJEN_GITHUB_TOKEN` | GitHub secret holding projen's PAT |\n| `cdkDeployTargetRepo` | - (service only; `deploy-cdk.yml` fails until set) | Companion CDK repo (`owner/repo`) whose `deploy.yml` the deploy hook dispatches |\n| `cdkDeployHook` | `true` (service only) | Whether to generate `deploy-cdk.yml` at all |\n| `dockerRegistry` | `docker.io` (service only) | Registry the Docker image is pushed to |\n| `useFlyway` | `true` (service only) | Flyway plugin/dependency + `V1__init.sql` |\n\n`EnvironmentOptions` for deploy targets:\n\n```text\ninterface EnvironmentOptions {\n readonly name: string; // e.g. \"dev\", \"stage\", \"prod\"\n readonly accountId?: string; // AWS account id (CDK deploys)\n readonly region?: string; // AWS region (CDK deploys)\n readonly requiresApproval?: boolean; // GitHub Environment approval gate (default false)\n}\n```\n\nPlain strings (`'dev'`) are shorthand for `{ name: 'dev' }`.\n\n`GitHubActionProjectOptions`:\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `name` | - (required) | Project name |\n| `description` | - | One-line description; used in the default README template and recorded in the private `package.json` |\n| `sonarHostUrl` | - (required) | URL of your SonarCloud instance (e.g. `https://sonarcloud.io`); must be reachable from github.com-hosted runners |\n| `sonarTokenSecret` | `SONAR_TOKEN` | GitHub secret holding the Sonar token |\n| `sonarPullRequestGate` | `true` | Whether `sonar.yml` also runs on `pull_request` as a pass/fail gate |\n| `dogfood` | - (a `test-dogfood.yml` that fails until you declare one) | `ActionDogfoodOptions` - the scenario that exercises the action end-to-end via `uses: .` |\n| `license` | `MIT` | SPDX identifier for the generated `LICENSE` |\n| `gheTokenSecret` | `PROJEN_GITHUB_TOKEN` | GitHub secret holding projen's PAT |\n\n`ActionDogfoodOptions`/`ActionDogfoodStep` - the dogfood scenario (`test-dogfood.yml`):\n\n```text\ninterface ActionDogfoodOptions {\n readonly scenario: ActionDogfoodStep[]; // one or more, run in order - required\n readonly cleanup: string[]; // shared, run once at the end with `if: always()` - required\n}\n\ninterface ActionDogfoodStep {\n readonly name: string; // labels this step-group's generated workflow steps\n readonly id?: string; // step id for the `uses: .` call; default: a slug of `name`\n readonly fixtureSteps?: string[]; // shell, before the invocation (default: none)\n readonly inputs?: Record<string, string>; // `with:` for this invocation (default: none)\n readonly assertions: string[]; // shell, after the invocation - required, job fails unless all exit 0\n}\n```\n\nMost actions need exactly one `scenario` step. Actions with a re-run/no-op/idempotency behavior to verify (e.g. `auto-commit`'s no-op-on-no-change path, `create-pull-request`'s reuse-the-PR path) declare two - the second typically omits `fixtureSteps` so its invocation sees no new state, and its assertion checks the opposite outcome of the first. Reference an invocation's own outputs from a later assertion via `${{ steps.<id>.outputs.<name> }}`, using either the default slug or an explicit `id`.\n\n## Required GitHub secrets\n\n| Secret | Used by | Notes |\n| --- | --- | --- |\n| `PROJEN_GITHUB_TOKEN` | all types | PAT for projen's self-mutation/automation; override via `gheTokenSecret` |\n| `SONAR_TOKEN` | Java types with `sonarProjectKey`; `GitHubActionProject` | SonarQube scan step in `build.yml` / `sonar.yml`; override via `sonarTokenSecret` on `GitHubActionProject` |\n| `DOCKER_USERNAME` / `DOCKER_PASSWORD` | `JavaServiceProject` | Docker image push |\n| `MAVEN_GPG_PRIVATE_KEY`, `MAVEN_GPG_PASSPHRASE`, `MAVEN_CENTRAL_USERNAME`, `MAVEN_CENTRAL_PASSWORD` | `JavaLibraryProject` without `mavenCentralOidc` | Not needed with OIDC trusted publishing |\n| (your Slack webhook secret) | CDK types with `slackWebhookSecret` | Deploy notifications |\n\n## Going further\n\nThe project types are composed from smaller components you can also attach to your own projects:\n\n| Component | Applies to | Purpose |\n| --- | --- | --- |\n| `AppRuntimeScaffold` | `NodeProject` | App source skeleton (`app.ts` + handlers) |\n| `DatabaseComponent` | `NodeProject` | Database construct stub + migration tool wiring |\n| `EcrEcsConstructs` | `Project` | ECR + Fargate ECS construct helper |\n| `EdgeNetworkingConstructs` | `Project` | Per-resource edge networking construct helpers |\n| `MavenCentralPublish` | `JavaProject` | Manual-dispatch Maven Central publish workflow |\n| `DockerPublish` | `JavaProject` | Manual-dispatch Docker build+push workflow |\n| `GitHubPackagesPublish` | `JavaProject` | Manual-dispatch GitHub Packages publish workflow |\n| `FlywayMigration` | `JavaProject` | Flyway plugin/dependency + migrations directory |\n| `CdkDeployHook` | `JavaProject` | Manual-dispatch workflow that triggers `deploy.yml` in a companion CDK repo |\n| `CodeIndexWorkflow` | `JavaProject` | Code index generation on push to `main` |\n| `ActionBuildWorkflow` | `GitHubProject` | The `lint` task (shellcheck/yamllint/pinned actionlint) + `build.yml` |\n| `ActionDogfoodWorkflow` | `GitHubProject` | `test-dogfood.yml` from an `ActionDogfoodOptions` scenario |\n| `ActionSonarWorkflow` | `GitHubProject` | `sonar.yml` (SonarCloud scan via the Scanner CLI) |\n\nExample - adding a Docker publish to a plain projen `JavaProject`:\n\n```typescript\nimport { java } from 'projen';\nimport { DockerPublish } from '@xpertss/projen-types';\n\nconst project = new java.JavaProject({\n name: 'my-service',\n groupId: 'org.xpertss',\n artifactId: 'my-service',\n});\n\nnew DockerPublish(project, { dockerRegistry: 'ghcr.io' });\n\nproject.synth();\n```\n\nThe full API reference, including every option and property, is in [API.md](./API.md).\n"
110
110
  },
111
111
  "repository": {
112
112
  "type": "git",
@@ -134,7 +134,7 @@
134
134
  },
135
135
  "locationInModule": {
136
136
  "filename": "src/actions/action-build-workflow.ts",
137
- "line": 24
137
+ "line": 25
138
138
  },
139
139
  "parameters": [
140
140
  {
@@ -148,7 +148,7 @@
148
148
  "kind": "class",
149
149
  "locationInModule": {
150
150
  "filename": "src/actions/action-build-workflow.ts",
151
- "line": 20
151
+ "line": 21
152
152
  },
153
153
  "name": "ActionBuildWorkflow",
154
154
  "properties": [
@@ -159,7 +159,7 @@
159
159
  "immutable": true,
160
160
  "locationInModule": {
161
161
  "filename": "src/actions/action-build-workflow.ts",
162
- "line": 21
162
+ "line": 22
163
163
  },
164
164
  "name": "task",
165
165
  "type": {
@@ -173,7 +173,7 @@
173
173
  "immutable": true,
174
174
  "locationInModule": {
175
175
  "filename": "src/actions/action-build-workflow.ts",
176
- "line": 22
176
+ "line": 23
177
177
  },
178
178
  "name": "workflow",
179
179
  "type": {
@@ -193,7 +193,7 @@
193
193
  "kind": "interface",
194
194
  "locationInModule": {
195
195
  "filename": "src/actions/action-dogfood-workflow.ts",
196
- "line": 55
196
+ "line": 56
197
197
  },
198
198
  "name": "ActionDogfoodOptions",
199
199
  "properties": [
@@ -206,7 +206,7 @@
206
206
  "immutable": true,
207
207
  "locationInModule": {
208
208
  "filename": "src/actions/action-dogfood-workflow.ts",
209
- "line": 60
209
+ "line": 61
210
210
  },
211
211
  "name": "cleanup",
212
212
  "type": {
@@ -227,7 +227,7 @@
227
227
  "immutable": true,
228
228
  "locationInModule": {
229
229
  "filename": "src/actions/action-dogfood-workflow.ts",
230
- "line": 57
230
+ "line": 58
231
231
  },
232
232
  "name": "scenario",
233
233
  "type": {
@@ -253,7 +253,7 @@
253
253
  "kind": "interface",
254
254
  "locationInModule": {
255
255
  "filename": "src/actions/action-dogfood-workflow.ts",
256
- "line": 16
256
+ "line": 17
257
257
  },
258
258
  "name": "ActionDogfoodStep",
259
259
  "properties": [
@@ -266,7 +266,7 @@
266
266
  "immutable": true,
267
267
  "locationInModule": {
268
268
  "filename": "src/actions/action-dogfood-workflow.ts",
269
- "line": 41
269
+ "line": 42
270
270
  },
271
271
  "name": "assertions",
272
272
  "type": {
@@ -287,7 +287,7 @@
287
287
  "immutable": true,
288
288
  "locationInModule": {
289
289
  "filename": "src/actions/action-dogfood-workflow.ts",
290
- "line": 18
290
+ "line": 19
291
291
  },
292
292
  "name": "name",
293
293
  "type": {
@@ -304,7 +304,7 @@
304
304
  "immutable": true,
305
305
  "locationInModule": {
306
306
  "filename": "src/actions/action-dogfood-workflow.ts",
307
- "line": 32
307
+ "line": 33
308
308
  },
309
309
  "name": "fixtureSteps",
310
310
  "optional": true,
@@ -327,7 +327,7 @@
327
327
  "immutable": true,
328
328
  "locationInModule": {
329
329
  "filename": "src/actions/action-dogfood-workflow.ts",
330
- "line": 25
330
+ "line": 26
331
331
  },
332
332
  "name": "id",
333
333
  "optional": true,
@@ -345,7 +345,7 @@
345
345
  "immutable": true,
346
346
  "locationInModule": {
347
347
  "filename": "src/actions/action-dogfood-workflow.ts",
348
- "line": 38
348
+ "line": 39
349
349
  },
350
350
  "name": "inputs",
351
351
  "optional": true,
@@ -376,7 +376,7 @@
376
376
  },
377
377
  "locationInModule": {
378
378
  "filename": "src/actions/action-dogfood-workflow.ts",
379
- "line": 88
379
+ "line": 89
380
380
  },
381
381
  "parameters": [
382
382
  {
@@ -397,7 +397,7 @@
397
397
  "kind": "class",
398
398
  "locationInModule": {
399
399
  "filename": "src/actions/action-dogfood-workflow.ts",
400
- "line": 85
400
+ "line": 86
401
401
  },
402
402
  "name": "ActionDogfoodWorkflow",
403
403
  "properties": [
@@ -408,7 +408,7 @@
408
408
  "immutable": true,
409
409
  "locationInModule": {
410
410
  "filename": "src/actions/action-dogfood-workflow.ts",
411
- "line": 86
411
+ "line": 87
412
412
  },
413
413
  "name": "workflow",
414
414
  "type": {
@@ -422,9 +422,9 @@
422
422
  "assembly": "@xpertss/projen-types",
423
423
  "base": "projen.Component",
424
424
  "docs": {
425
- "remarks": "`sonar.inclusions` is set explicitly since\ndefault inclusions may skip `action.yml` outside `.github/`.",
425
+ "remarks": "`sonar.inclusions` is set explicitly since default\ninclusions may skip `action.yml` outside `.github/`.",
426
426
  "stability": "experimental",
427
- "summary": "AD-001 Layer 2: self-hosted SonarQube Community Edition via the Scanner CLI only (never `SonarSource/sonarqube-scan-action` - third-party, and it carried a security advisory)."
427
+ "summary": "AD-001 Layer 2: SonarCloud via the Scanner CLI only (never `SonarSource/sonarqube-scan-action` - third-party, and it carried a security advisory)."
428
428
  },
429
429
  "fqn": "@xpertss/projen-types.ActionSonarWorkflow",
430
430
  "initializer": {
@@ -433,7 +433,7 @@
433
433
  },
434
434
  "locationInModule": {
435
435
  "filename": "src/actions/action-sonar-workflow.ts",
436
- "line": 35
436
+ "line": 36
437
437
  },
438
438
  "parameters": [
439
439
  {
@@ -453,7 +453,7 @@
453
453
  "kind": "class",
454
454
  "locationInModule": {
455
455
  "filename": "src/actions/action-sonar-workflow.ts",
456
- "line": 32
456
+ "line": 33
457
457
  },
458
458
  "name": "ActionSonarWorkflow",
459
459
  "properties": [
@@ -464,7 +464,7 @@
464
464
  "immutable": true,
465
465
  "locationInModule": {
466
466
  "filename": "src/actions/action-sonar-workflow.ts",
467
- "line": 33
467
+ "line": 34
468
468
  },
469
469
  "name": "workflow",
470
470
  "type": {
@@ -484,21 +484,20 @@
484
484
  "kind": "interface",
485
485
  "locationInModule": {
486
486
  "filename": "src/actions/action-sonar-workflow.ts",
487
- "line": 9
487
+ "line": 10
488
488
  },
489
489
  "name": "ActionSonarWorkflowOptions",
490
490
  "properties": [
491
491
  {
492
492
  "abstract": true,
493
493
  "docs": {
494
- "remarks": "Required, no default -\na guessed server is worse than a loud failure.",
495
494
  "stability": "experimental",
496
- "summary": "URL of the org's self-hosted SonarQube instance."
495
+ "summary": "URL of the org's SonarCloud instance (e.g. `https://sonarcloud.io`). Required, no default - a guessed server is worse than a loud failure."
497
496
  },
498
497
  "immutable": true,
499
498
  "locationInModule": {
500
499
  "filename": "src/actions/action-sonar-workflow.ts",
501
- "line": 14
500
+ "line": 15
502
501
  },
503
502
  "name": "sonarHostUrl",
504
503
  "type": {
@@ -515,7 +514,7 @@
515
514
  "immutable": true,
516
515
  "locationInModule": {
517
516
  "filename": "src/actions/action-sonar-workflow.ts",
518
- "line": 23
517
+ "line": 24
519
518
  },
520
519
  "name": "sonarPullRequestGate",
521
520
  "optional": true,
@@ -532,7 +531,7 @@
532
531
  "immutable": true,
533
532
  "locationInModule": {
534
533
  "filename": "src/actions/action-sonar-workflow.ts",
535
- "line": 17
534
+ "line": 18
536
535
  },
537
536
  "name": "sonarTokenSecret",
538
537
  "optional": true,
@@ -543,116 +542,6 @@
543
542
  ],
544
543
  "symbolId": "src/actions/action-sonar-workflow:ActionSonarWorkflowOptions"
545
544
  },
546
- "@xpertss/projen-types.ActionsAllowlistGuard": {
547
- "assembly": "@xpertss/projen-types",
548
- "base": "projen.Component",
549
- "docs": {
550
- "stability": "experimental"
551
- },
552
- "fqn": "@xpertss/projen-types.ActionsAllowlistGuard",
553
- "initializer": {
554
- "docs": {
555
- "stability": "experimental"
556
- },
557
- "locationInModule": {
558
- "filename": "src/common/actions-allowlist-guard.ts",
559
- "line": 41
560
- },
561
- "parameters": [
562
- {
563
- "name": "scope",
564
- "type": {
565
- "fqn": "projen.github.GitHubProject"
566
- }
567
- },
568
- {
569
- "name": "options",
570
- "optional": true,
571
- "type": {
572
- "fqn": "@xpertss/projen-types.ActionsAllowlistGuardOptions"
573
- }
574
- }
575
- ]
576
- },
577
- "kind": "class",
578
- "locationInModule": {
579
- "filename": "src/common/actions-allowlist-guard.ts",
580
- "line": 38
581
- },
582
- "name": "ActionsAllowlistGuard",
583
- "properties": [
584
- {
585
- "docs": {
586
- "stability": "experimental"
587
- },
588
- "immutable": true,
589
- "locationInModule": {
590
- "filename": "src/common/actions-allowlist-guard.ts",
591
- "line": 39
592
- },
593
- "name": "workflow",
594
- "type": {
595
- "fqn": "projen.github.GithubWorkflow"
596
- }
597
- }
598
- ],
599
- "symbolId": "src/common/actions-allowlist-guard:ActionsAllowlistGuard"
600
- },
601
- "@xpertss/projen-types.ActionsAllowlistGuardOptions": {
602
- "assembly": "@xpertss/projen-types",
603
- "datatype": true,
604
- "docs": {
605
- "remarks": "Runs on `pull_request_target` so it always executes the copy of this\nworkflow committed on the base branch - a PR cannot edit this file to\ndisable or weaken the check. It checks out and executes nothing from the\nPR; it only reads the PR head's file content via the GitHub API. Because\n`pull_request_target` runs with the base repo's token even for\nfork-originated PRs, the failure comment posts reliably.\n\n It performs a flat, unconditional scan of the PR's head ref (no\n base-vs-head comparison): fetch the content of every GitHub workflow and\n composite-action file, extract every `uses:` value, and fail if any does\n not start with one of the three trusted namespaces from AD-001\n (`actions/`, `docker/`, `xpertss/`). The single\nexemption is a local same-repo reference (`uses: .` or\n`uses: ./.github/actions/<name>`) - the repo's own hand-committed action,\nto which the org policy's \"allow select actions\" setting does not apply.",
606
- "stability": "experimental",
607
- "summary": "Blocking, tamper-proof PR check that stops a disallowed GitHub Action reference from ever (re)appearing in a repo's workflow or composite-action files."
608
- },
609
- "fqn": "@xpertss/projen-types.ActionsAllowlistGuardOptions",
610
- "kind": "interface",
611
- "locationInModule": {
612
- "filename": "src/common/actions-allowlist-guard.ts",
613
- "line": 25
614
- },
615
- "name": "ActionsAllowlistGuardOptions",
616
- "properties": [
617
- {
618
- "abstract": true,
619
- "docs": {
620
- "default": "\"PROJEN_GITHUB_TOKEN\"",
621
- "remarks": "The check still fails without it, so fork PRs -\nwhich get no secrets - are only missing the extra comment.",
622
- "stability": "experimental",
623
- "summary": "GitHub secret holding a token with permission to comment on PRs, used for the failure comment."
624
- },
625
- "immutable": true,
626
- "locationInModule": {
627
- "filename": "src/common/actions-allowlist-guard.ts",
628
- "line": 32
629
- },
630
- "name": "gheTokenSecret",
631
- "optional": true,
632
- "type": {
633
- "primitive": "string"
634
- }
635
- },
636
- {
637
- "abstract": true,
638
- "docs": {
639
- "default": "\"actions-allowlist-guard\"",
640
- "stability": "experimental"
641
- },
642
- "immutable": true,
643
- "locationInModule": {
644
- "filename": "src/common/actions-allowlist-guard.ts",
645
- "line": 35
646
- },
647
- "name": "workflowName",
648
- "optional": true,
649
- "type": {
650
- "primitive": "string"
651
- }
652
- }
653
- ],
654
- "symbolId": "src/common/actions-allowlist-guard:ActionsAllowlistGuardOptions"
655
- },
656
545
  "@xpertss/projen-types.AppRuntimeScaffold": {
657
546
  "assembly": "@xpertss/projen-types",
658
547
  "base": "projen.Component",
@@ -707,7 +596,7 @@
707
596
  },
708
597
  "locationInModule": {
709
598
  "filename": "src/cdk/cdk-app-project.ts",
710
- "line": 13
599
+ "line": 14
711
600
  },
712
601
  "parameters": [
713
602
  {
@@ -721,7 +610,7 @@
721
610
  "kind": "class",
722
611
  "locationInModule": {
723
612
  "filename": "src/cdk/cdk-app-project.ts",
724
- "line": 12
613
+ "line": 13
725
614
  },
726
615
  "name": "CdkAppProject",
727
616
  "symbolId": "src/cdk/cdk-app-project:CdkAppProject"
@@ -1096,7 +985,7 @@
1096
985
  },
1097
986
  "locationInModule": {
1098
987
  "filename": "src/java/components/code-index-workflow.ts",
1099
- "line": 6
988
+ "line": 7
1100
989
  },
1101
990
  "parameters": [
1102
991
  {
@@ -1110,7 +999,7 @@
1110
999
  "kind": "class",
1111
1000
  "locationInModule": {
1112
1001
  "filename": "src/java/components/code-index-workflow.ts",
1113
- "line": 5
1002
+ "line": 6
1114
1003
  },
1115
1004
  "name": "CodeIndexWorkflow",
1116
1005
  "symbolId": "src/java/components/code-index-workflow:CodeIndexWorkflow"
@@ -1262,7 +1151,7 @@
1262
1151
  "docs": {
1263
1152
  "remarks": "If unset, the sonar scan step is skipped.",
1264
1153
  "stability": "experimental",
1265
- "summary": "SonarQube project key."
1154
+ "summary": "SonarCloud project key."
1266
1155
  },
1267
1156
  "immutable": true,
1268
1157
  "locationInModule": {
@@ -1401,7 +1290,7 @@
1401
1290
  },
1402
1291
  "locationInModule": {
1403
1292
  "filename": "src/java/components/docker-publish.ts",
1404
- "line": 11
1293
+ "line": 12
1405
1294
  },
1406
1295
  "parameters": [
1407
1296
  {
@@ -1422,7 +1311,7 @@
1422
1311
  "kind": "class",
1423
1312
  "locationInModule": {
1424
1313
  "filename": "src/java/components/docker-publish.ts",
1425
- "line": 10
1314
+ "line": 11
1426
1315
  },
1427
1316
  "name": "DockerPublish",
1428
1317
  "symbolId": "src/java/components/docker-publish:DockerPublish"
@@ -1437,7 +1326,7 @@
1437
1326
  "kind": "interface",
1438
1327
  "locationInModule": {
1439
1328
  "filename": "src/java/components/docker-publish.ts",
1440
- "line": 4
1329
+ "line": 5
1441
1330
  },
1442
1331
  "name": "DockerPublishOptions",
1443
1332
  "properties": [
@@ -1450,7 +1339,7 @@
1450
1339
  "immutable": true,
1451
1340
  "locationInModule": {
1452
1341
  "filename": "src/java/components/docker-publish.ts",
1453
- "line": 6
1342
+ "line": 7
1454
1343
  },
1455
1344
  "name": "dockerRegistry",
1456
1345
  "optional": true,
@@ -1722,7 +1611,7 @@
1722
1611
  "base": "projen.github.GitHubProject",
1723
1612
  "docs": {
1724
1613
  "stability": "experimental",
1725
- "summary": "Scaffolds the repo lifecycle (AD-001) around a hand-committed, composite (shell) GitHub Action: the `build`/`test-dogfood`/`sonar`/`release` workflows, versioning and release discipline, the F003 verify components, the F009 allowlist guard, and repo boilerplate (a private version-source `package.json`, `.yamllint`, `LICENSE`, and a `README.md` template). The action's own content (`action.yml`, its shell scripts, `test/` fixtures) is authored by hand per the action's own F### spec - this type only lints it."
1614
+ "summary": "Scaffolds the repo lifecycle (AD-001) around a hand-committed, composite (shell) GitHub Action: the `build`/`test-dogfood`/`sonar`/`release` workflows, versioning and release discipline, the F003 verify components, and repo boilerplate (a private version-source `package.json`, `.yamllint`, `LICENSE`, and a `README.md` template). The action's own content (`action.yml`, its shell scripts, `test/` fixtures) is authored by hand per the action's own F### spec - this type only lints it."
1726
1615
  },
1727
1616
  "fqn": "@xpertss/projen-types.GitHubActionProject",
1728
1617
  "initializer": {
@@ -1828,9 +1717,8 @@
1828
1717
  {
1829
1718
  "abstract": true,
1830
1719
  "docs": {
1831
- "remarks": "MUST be reachable from\ngithub.com-hosted (public) runners (AD-001). Required, no default: a\nguessed server is worse than a loud failure.",
1832
1720
  "stability": "experimental",
1833
- "summary": "URL of the org's self-hosted SonarQube instance."
1721
+ "summary": "URL of the org's SonarCloud instance (e.g. `https://sonarcloud.io`). MUST be reachable from github.com-hosted (public) runners (AD-001). Required, no default: a guessed server is worse than a loud failure."
1834
1722
  },
1835
1723
  "immutable": true,
1836
1724
  "locationInModule": {
@@ -1884,7 +1772,7 @@
1884
1772
  "docs": {
1885
1773
  "default": "\"PROJEN_GITHUB_TOKEN\"",
1886
1774
  "stability": "experimental",
1887
- "summary": "Name of the GitHub Actions secret holding the PAT used for projen-automation PR comments (F003/F009) and, when the action has a `token` input, the dogfood's invocation of it."
1775
+ "summary": "Name of the GitHub Actions secret holding the PAT used for projen-automation PR comments (F003) and, when the action has a `token` input, the dogfood's invocation of it."
1888
1776
  },
1889
1777
  "immutable": true,
1890
1778
  "locationInModule": {
@@ -1967,7 +1855,7 @@
1967
1855
  },
1968
1856
  "locationInModule": {
1969
1857
  "filename": "src/java/components/github-packages-publish.ts",
1970
- "line": 11
1858
+ "line": 12
1971
1859
  },
1972
1860
  "parameters": [
1973
1861
  {
@@ -1988,7 +1876,7 @@
1988
1876
  "kind": "class",
1989
1877
  "locationInModule": {
1990
1878
  "filename": "src/java/components/github-packages-publish.ts",
1991
- "line": 10
1879
+ "line": 11
1992
1880
  },
1993
1881
  "name": "GitHubPackagesPublish",
1994
1882
  "symbolId": "src/java/components/github-packages-publish:GitHubPackagesPublish"
@@ -2003,7 +1891,7 @@
2003
1891
  "kind": "interface",
2004
1892
  "locationInModule": {
2005
1893
  "filename": "src/java/components/github-packages-publish.ts",
2006
- "line": 4
1894
+ "line": 5
2007
1895
  },
2008
1896
  "name": "GitHubPackagesPublishOptions",
2009
1897
  "properties": [
@@ -2016,7 +1904,7 @@
2016
1904
  "immutable": true,
2017
1905
  "locationInModule": {
2018
1906
  "filename": "src/java/components/github-packages-publish.ts",
2019
- "line": 6
1907
+ "line": 7
2020
1908
  },
2021
1909
  "name": "ghPackagesRegistry",
2022
1910
  "optional": true,
@@ -2440,7 +2328,7 @@
2440
2328
  },
2441
2329
  "locationInModule": {
2442
2330
  "filename": "src/java/components/maven-central-publish.ts",
2443
- "line": 14
2331
+ "line": 15
2444
2332
  },
2445
2333
  "parameters": [
2446
2334
  {
@@ -2461,7 +2349,7 @@
2461
2349
  "kind": "class",
2462
2350
  "locationInModule": {
2463
2351
  "filename": "src/java/components/maven-central-publish.ts",
2464
- "line": 13
2352
+ "line": 14
2465
2353
  },
2466
2354
  "name": "MavenCentralPublish",
2467
2355
  "symbolId": "src/java/components/maven-central-publish:MavenCentralPublish"
@@ -2476,7 +2364,7 @@
2476
2364
  "kind": "interface",
2477
2365
  "locationInModule": {
2478
2366
  "filename": "src/java/components/maven-central-publish.ts",
2479
- "line": 4
2367
+ "line": 5
2480
2368
  },
2481
2369
  "name": "MavenCentralPublishOptions",
2482
2370
  "properties": [
@@ -2489,7 +2377,7 @@
2489
2377
  "immutable": true,
2490
2378
  "locationInModule": {
2491
2379
  "filename": "src/java/components/maven-central-publish.ts",
2492
- "line": 6
2380
+ "line": 7
2493
2381
  },
2494
2382
  "name": "mavenCentralOidc",
2495
2383
  "optional": true,
@@ -2513,7 +2401,7 @@
2513
2401
  },
2514
2402
  "locationInModule": {
2515
2403
  "filename": "src/common/projen-drift-check-workflow.ts",
2516
- "line": 40
2404
+ "line": 41
2517
2405
  },
2518
2406
  "parameters": [
2519
2407
  {
@@ -2534,7 +2422,7 @@
2534
2422
  "kind": "class",
2535
2423
  "locationInModule": {
2536
2424
  "filename": "src/common/projen-drift-check-workflow.ts",
2537
- "line": 37
2425
+ "line": 38
2538
2426
  },
2539
2427
  "name": "ProjenDriftCheckWorkflow",
2540
2428
  "properties": [
@@ -2545,7 +2433,7 @@
2545
2433
  "immutable": true,
2546
2434
  "locationInModule": {
2547
2435
  "filename": "src/common/projen-drift-check-workflow.ts",
2548
- "line": 38
2436
+ "line": 39
2549
2437
  },
2550
2438
  "name": "workflow",
2551
2439
  "type": {
@@ -2567,7 +2455,7 @@
2567
2455
  "kind": "interface",
2568
2456
  "locationInModule": {
2569
2457
  "filename": "src/common/projen-drift-check-workflow.ts",
2570
- "line": 17
2458
+ "line": 18
2571
2459
  },
2572
2460
  "name": "ProjenDriftCheckWorkflowOptions",
2573
2461
  "properties": [
@@ -2582,7 +2470,7 @@
2582
2470
  "immutable": true,
2583
2471
  "locationInModule": {
2584
2472
  "filename": "src/common/projen-drift-check-workflow.ts",
2585
- "line": 31
2473
+ "line": 32
2586
2474
  },
2587
2475
  "name": "gheTokenSecret",
2588
2476
  "optional": true,
@@ -2600,7 +2488,7 @@
2600
2488
  "immutable": true,
2601
2489
  "locationInModule": {
2602
2490
  "filename": "src/common/projen-drift-check-workflow.ts",
2603
- "line": 22
2491
+ "line": 23
2604
2492
  },
2605
2493
  "name": "projenCommand",
2606
2494
  "optional": true,
@@ -2617,7 +2505,7 @@
2617
2505
  "immutable": true,
2618
2506
  "locationInModule": {
2619
2507
  "filename": "src/common/projen-drift-check-workflow.ts",
2620
- "line": 34
2508
+ "line": 35
2621
2509
  },
2622
2510
  "name": "workflowName",
2623
2511
  "optional": true,
@@ -2641,7 +2529,7 @@
2641
2529
  },
2642
2530
  "locationInModule": {
2643
2531
  "filename": "src/common/workflow-change-notice-workflow.ts",
2644
- "line": 36
2532
+ "line": 37
2645
2533
  },
2646
2534
  "parameters": [
2647
2535
  {
@@ -2662,7 +2550,7 @@
2662
2550
  "kind": "class",
2663
2551
  "locationInModule": {
2664
2552
  "filename": "src/common/workflow-change-notice-workflow.ts",
2665
- "line": 33
2553
+ "line": 34
2666
2554
  },
2667
2555
  "name": "WorkflowChangeNoticeWorkflow",
2668
2556
  "properties": [
@@ -2673,7 +2561,7 @@
2673
2561
  "immutable": true,
2674
2562
  "locationInModule": {
2675
2563
  "filename": "src/common/workflow-change-notice-workflow.ts",
2676
- "line": 34
2564
+ "line": 35
2677
2565
  },
2678
2566
  "name": "workflow",
2679
2567
  "type": {
@@ -2695,7 +2583,7 @@
2695
2583
  "kind": "interface",
2696
2584
  "locationInModule": {
2697
2585
  "filename": "src/common/workflow-change-notice-workflow.ts",
2698
- "line": 20
2586
+ "line": 21
2699
2587
  },
2700
2588
  "name": "WorkflowChangeNoticeWorkflowOptions",
2701
2589
  "properties": [
@@ -2709,7 +2597,7 @@
2709
2597
  "immutable": true,
2710
2598
  "locationInModule": {
2711
2599
  "filename": "src/common/workflow-change-notice-workflow.ts",
2712
- "line": 27
2600
+ "line": 28
2713
2601
  },
2714
2602
  "name": "watchPaths",
2715
2603
  "optional": true,
@@ -2731,7 +2619,7 @@
2731
2619
  "immutable": true,
2732
2620
  "locationInModule": {
2733
2621
  "filename": "src/common/workflow-change-notice-workflow.ts",
2734
- "line": 30
2622
+ "line": 31
2735
2623
  },
2736
2624
  "name": "workflowName",
2737
2625
  "optional": true,
@@ -2743,6 +2631,6 @@
2743
2631
  "symbolId": "src/common/workflow-change-notice-workflow:WorkflowChangeNoticeWorkflowOptions"
2744
2632
  }
2745
2633
  },
2746
- "version": "0.0.6",
2747
- "fingerprint": "1XCl00RhqEO1ATeyAv8AdyUrUGIIQTcw3w9sOyHocDo="
2634
+ "version": "0.0.8",
2635
+ "fingerprint": "zxHJWTVJMWqWf0DnPuj1az/5dZHbjWmk6U04R59/9Lw="
2748
2636
  }