@xpertss/projen-types 0.0.1 → 0.0.2
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/.jsii +1083 -92
- package/API.md +7459 -4313
- package/README.md +103 -1
- package/lib/actions/action-build-workflow.d.ts +17 -0
- package/lib/actions/action-build-workflow.js +52 -0
- package/lib/actions/action-dogfood-workflow.d.ts +47 -0
- package/lib/actions/action-dogfood-workflow.js +84 -0
- package/lib/actions/action-sonar-workflow.d.ts +25 -0
- package/lib/actions/action-sonar-workflow.js +64 -0
- package/lib/actions/github-action-project.d.ts +60 -0
- package/lib/actions/github-action-project.js +155 -0
- package/lib/cdk/app-runtime-scaffold.js +1 -1
- package/lib/cdk/cdk-app-project.js +2 -4
- package/lib/cdk/cdk-infra-project.js +1 -1
- package/lib/cdk/cdk-typescript-base.js +16 -3
- package/lib/cdk/components/ecr-ecs-constructs.js +1 -1
- package/lib/cdk/components/edge-networking-constructs.js +1 -1
- package/lib/cdk/database-component.js +1 -1
- package/lib/cdk/options.d.ts +0 -2
- package/lib/cdk/options.js +1 -1
- package/lib/common/actions-allowlist-guard.d.ts +37 -0
- package/lib/common/actions-allowlist-guard.js +70 -0
- package/lib/common/internal-actions.d.ts +10 -0
- package/lib/common/internal-actions.js +33 -0
- package/lib/common/manual-deploy-workflow.d.ts +0 -2
- package/lib/common/manual-deploy-workflow.js +1 -12
- package/lib/common/projen-drift-check-workflow.d.ts +36 -0
- package/lib/common/projen-drift-check-workflow.js +73 -0
- package/lib/common/upgrade-workflow.js +6 -2
- package/lib/common/workflow-change-notice-workflow.d.ts +33 -0
- package/lib/common/workflow-change-notice-workflow.js +58 -0
- package/lib/index.d.ts +8 -0
- package/lib/index.js +9 -1
- package/lib/java/components/cdk-deploy-hook.js +1 -1
- package/lib/java/components/code-index-workflow.js +1 -1
- package/lib/java/components/docker-publish.js +1 -1
- package/lib/java/components/flyway-migration.js +1 -1
- package/lib/java/components/github-packages-publish.js +1 -1
- package/lib/java/components/maven-central-publish.js +1 -1
- package/lib/java/java-app-project.js +1 -1
- package/lib/java/java-library-project.js +1 -1
- package/lib/java/java-maven-base.js +13 -4
- package/lib/java/java-service-project.js +1 -1
- package/package.json +1 -1
- package/release-publishing.md +57 -66
- package/lib/common/drift-check.d.ts +0 -8
- package/lib/common/drift-check.js +0 -18
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\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\nCreate a new git repository and install the dependencies:\n\n```bash\nmkdir my-project && cd my-project\ngit init\nnpm install -D projen constructs @xpertss/projen-types\n```\n\nWrite a `.projenrc.ts` (see examples below), then generate the project:\n\n```bash\nnpx projen\n```\n\nCommit the result. From then on, every change to the scaffold goes through `.projenrc.ts` followed by `npx projen`.\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 cdkDeployHook: { targetRepo: '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`, enabled by default) - manual dispatch with an environment selector; each job sends a `workflow_dispatch` to `deploy.yml` in the companion `targetRepo` (a `CdkInfraProject`/`CdkAppProject` repo). `targetRepo` is required when the hook is enabled; disable it with `cdkDeployHook: { enabled: 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## 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` | - (required) | 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\n`EnvironmentOptions` for deploy targets:\n\n```typescript\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## 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` | SonarQube scan step in `build.yml` |\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\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\nCreate a new git repository and install the dependencies:\n\n```bash\nmkdir my-project && cd my-project\ngit init\nnpm install -D projen constructs @xpertss/projen-types\n```\n\nWrite a `.projenrc.ts` (see examples below), then generate the project:\n\n```bash\nnpx projen\n```\n\nCommit the result. From then on, every change to the scaffold goes through `.projenrc.ts` followed by `npx projen`.\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 cdkDeployHook: { targetRepo: '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`, enabled by default) - manual dispatch with an environment selector; each job sends a `workflow_dispatch` to `deploy.yml` in the companion `targetRepo` (a `CdkInfraProject`/`CdkAppProject` repo). `targetRepo` is required when the hook is enabled; disable it with `cdkDeployHook: { enabled: 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.\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), `tsconfig.json`, `.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). Onboarding a brand-new action repo from scratch: `npm init -y && npm install -D projen constructs @xpertss/projen-types`, write the `.projenrc.ts` above, `npx projen && npm install`, 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` | - (required) | 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\n`EnvironmentOptions` for deploy targets:\n\n```typescript\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` | - (required) | `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```typescript\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"
|
|
110
110
|
},
|
|
111
111
|
"repository": {
|
|
112
112
|
"type": "git",
|
|
@@ -119,6 +119,538 @@
|
|
|
119
119
|
}
|
|
120
120
|
},
|
|
121
121
|
"types": {
|
|
122
|
+
"@xpertss/projen-types.ActionBuildWorkflow": {
|
|
123
|
+
"assembly": "@xpertss/projen-types",
|
|
124
|
+
"base": "projen.Component",
|
|
125
|
+
"docs": {
|
|
126
|
+
"remarks": "Creates a dedicated `lint` task\n(named to avoid colliding with projen's own reserved `build` task, which\nspawns the unrelated default/pre-compile/compile/post-compile/test/package\nchain - including `default`, i.e. re-running `.projenrc.ts`, which is not\nwhat this gate is for) and wraps it in a `TaskWorkflow` (`build.yml`)\ntriggered on push-to-`main` and `pull_request`. The same task is reused by\nthe release build job, so the lint commands exist in exactly one place.",
|
|
127
|
+
"stability": "experimental",
|
|
128
|
+
"summary": "The AD-001 Layer-1 lint gate for a composite-action repo: shellcheck, yamllint, and a pinned `actionlint` release binary (verified by SHA-256, never a marketplace action - org policy)."
|
|
129
|
+
},
|
|
130
|
+
"fqn": "@xpertss/projen-types.ActionBuildWorkflow",
|
|
131
|
+
"initializer": {
|
|
132
|
+
"docs": {
|
|
133
|
+
"stability": "experimental"
|
|
134
|
+
},
|
|
135
|
+
"locationInModule": {
|
|
136
|
+
"filename": "src/actions/action-build-workflow.ts",
|
|
137
|
+
"line": 24
|
|
138
|
+
},
|
|
139
|
+
"parameters": [
|
|
140
|
+
{
|
|
141
|
+
"name": "scope",
|
|
142
|
+
"type": {
|
|
143
|
+
"fqn": "projen.github.GitHubProject"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
"kind": "class",
|
|
149
|
+
"locationInModule": {
|
|
150
|
+
"filename": "src/actions/action-build-workflow.ts",
|
|
151
|
+
"line": 20
|
|
152
|
+
},
|
|
153
|
+
"name": "ActionBuildWorkflow",
|
|
154
|
+
"properties": [
|
|
155
|
+
{
|
|
156
|
+
"docs": {
|
|
157
|
+
"stability": "experimental"
|
|
158
|
+
},
|
|
159
|
+
"immutable": true,
|
|
160
|
+
"locationInModule": {
|
|
161
|
+
"filename": "src/actions/action-build-workflow.ts",
|
|
162
|
+
"line": 21
|
|
163
|
+
},
|
|
164
|
+
"name": "task",
|
|
165
|
+
"type": {
|
|
166
|
+
"fqn": "projen.Task"
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"docs": {
|
|
171
|
+
"stability": "experimental"
|
|
172
|
+
},
|
|
173
|
+
"immutable": true,
|
|
174
|
+
"locationInModule": {
|
|
175
|
+
"filename": "src/actions/action-build-workflow.ts",
|
|
176
|
+
"line": 22
|
|
177
|
+
},
|
|
178
|
+
"name": "workflow",
|
|
179
|
+
"type": {
|
|
180
|
+
"fqn": "projen.github.TaskWorkflow"
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
],
|
|
184
|
+
"symbolId": "src/actions/action-build-workflow:ActionBuildWorkflow"
|
|
185
|
+
},
|
|
186
|
+
"@xpertss/projen-types.ActionDogfoodOptions": {
|
|
187
|
+
"assembly": "@xpertss/projen-types",
|
|
188
|
+
"datatype": true,
|
|
189
|
+
"docs": {
|
|
190
|
+
"stability": "experimental"
|
|
191
|
+
},
|
|
192
|
+
"fqn": "@xpertss/projen-types.ActionDogfoodOptions",
|
|
193
|
+
"kind": "interface",
|
|
194
|
+
"locationInModule": {
|
|
195
|
+
"filename": "src/actions/action-dogfood-workflow.ts",
|
|
196
|
+
"line": 55
|
|
197
|
+
},
|
|
198
|
+
"name": "ActionDogfoodOptions",
|
|
199
|
+
"properties": [
|
|
200
|
+
{
|
|
201
|
+
"abstract": true,
|
|
202
|
+
"docs": {
|
|
203
|
+
"stability": "experimental",
|
|
204
|
+
"summary": "Shell cleanup, run once at the end with `if: always()`, so repeated runs start clean."
|
|
205
|
+
},
|
|
206
|
+
"immutable": true,
|
|
207
|
+
"locationInModule": {
|
|
208
|
+
"filename": "src/actions/action-dogfood-workflow.ts",
|
|
209
|
+
"line": 60
|
|
210
|
+
},
|
|
211
|
+
"name": "cleanup",
|
|
212
|
+
"type": {
|
|
213
|
+
"collection": {
|
|
214
|
+
"elementtype": {
|
|
215
|
+
"primitive": "string"
|
|
216
|
+
},
|
|
217
|
+
"kind": "array"
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"abstract": true,
|
|
223
|
+
"docs": {
|
|
224
|
+
"stability": "experimental",
|
|
225
|
+
"summary": "One or more scenario steps, run in order, in the dogfood job."
|
|
226
|
+
},
|
|
227
|
+
"immutable": true,
|
|
228
|
+
"locationInModule": {
|
|
229
|
+
"filename": "src/actions/action-dogfood-workflow.ts",
|
|
230
|
+
"line": 57
|
|
231
|
+
},
|
|
232
|
+
"name": "scenario",
|
|
233
|
+
"type": {
|
|
234
|
+
"collection": {
|
|
235
|
+
"elementtype": {
|
|
236
|
+
"fqn": "@xpertss/projen-types.ActionDogfoodStep"
|
|
237
|
+
},
|
|
238
|
+
"kind": "array"
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
],
|
|
243
|
+
"symbolId": "src/actions/action-dogfood-workflow:ActionDogfoodOptions"
|
|
244
|
+
},
|
|
245
|
+
"@xpertss/projen-types.ActionDogfoodStep": {
|
|
246
|
+
"assembly": "@xpertss/projen-types",
|
|
247
|
+
"datatype": true,
|
|
248
|
+
"docs": {
|
|
249
|
+
"stability": "experimental",
|
|
250
|
+
"summary": "One invocation of the action within the dogfood scenario: optional fixture setup, the `uses: .` call with this step's inputs, then this step's assertions. Most actions need exactly one; actions with a re-run/no-op behavior to verify (e.g. F006's reuse-the-PR path, F007's no-op-commit path) declare two."
|
|
251
|
+
},
|
|
252
|
+
"fqn": "@xpertss/projen-types.ActionDogfoodStep",
|
|
253
|
+
"kind": "interface",
|
|
254
|
+
"locationInModule": {
|
|
255
|
+
"filename": "src/actions/action-dogfood-workflow.ts",
|
|
256
|
+
"line": 16
|
|
257
|
+
},
|
|
258
|
+
"name": "ActionDogfoodStep",
|
|
259
|
+
"properties": [
|
|
260
|
+
{
|
|
261
|
+
"abstract": true,
|
|
262
|
+
"docs": {
|
|
263
|
+
"stability": "experimental",
|
|
264
|
+
"summary": "Shell assertions after this invocation - the job fails unless every one exits 0."
|
|
265
|
+
},
|
|
266
|
+
"immutable": true,
|
|
267
|
+
"locationInModule": {
|
|
268
|
+
"filename": "src/actions/action-dogfood-workflow.ts",
|
|
269
|
+
"line": 41
|
|
270
|
+
},
|
|
271
|
+
"name": "assertions",
|
|
272
|
+
"type": {
|
|
273
|
+
"collection": {
|
|
274
|
+
"elementtype": {
|
|
275
|
+
"primitive": "string"
|
|
276
|
+
},
|
|
277
|
+
"kind": "array"
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"abstract": true,
|
|
283
|
+
"docs": {
|
|
284
|
+
"stability": "experimental",
|
|
285
|
+
"summary": "Label used to name this step-group's generated workflow steps."
|
|
286
|
+
},
|
|
287
|
+
"immutable": true,
|
|
288
|
+
"locationInModule": {
|
|
289
|
+
"filename": "src/actions/action-dogfood-workflow.ts",
|
|
290
|
+
"line": 18
|
|
291
|
+
},
|
|
292
|
+
"name": "name",
|
|
293
|
+
"type": {
|
|
294
|
+
"primitive": "string"
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"abstract": true,
|
|
299
|
+
"docs": {
|
|
300
|
+
"default": "[]",
|
|
301
|
+
"stability": "experimental",
|
|
302
|
+
"summary": "Shell steps executed before this invocation, to produce or alter fixture state."
|
|
303
|
+
},
|
|
304
|
+
"immutable": true,
|
|
305
|
+
"locationInModule": {
|
|
306
|
+
"filename": "src/actions/action-dogfood-workflow.ts",
|
|
307
|
+
"line": 32
|
|
308
|
+
},
|
|
309
|
+
"name": "fixtureSteps",
|
|
310
|
+
"optional": true,
|
|
311
|
+
"type": {
|
|
312
|
+
"collection": {
|
|
313
|
+
"elementtype": {
|
|
314
|
+
"primitive": "string"
|
|
315
|
+
},
|
|
316
|
+
"kind": "array"
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"abstract": true,
|
|
322
|
+
"docs": {
|
|
323
|
+
"default": "- a slug derived from `name`, disambiguated by position",
|
|
324
|
+
"stability": "experimental",
|
|
325
|
+
"summary": "Step id for the `uses: .` invocation, so a later assertion can reference this step's outputs via `${{ steps.<id>.outputs.<name> }}`."
|
|
326
|
+
},
|
|
327
|
+
"immutable": true,
|
|
328
|
+
"locationInModule": {
|
|
329
|
+
"filename": "src/actions/action-dogfood-workflow.ts",
|
|
330
|
+
"line": 25
|
|
331
|
+
},
|
|
332
|
+
"name": "id",
|
|
333
|
+
"optional": true,
|
|
334
|
+
"type": {
|
|
335
|
+
"primitive": "string"
|
|
336
|
+
}
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"abstract": true,
|
|
340
|
+
"docs": {
|
|
341
|
+
"default": "{}",
|
|
342
|
+
"stability": "experimental",
|
|
343
|
+
"summary": "`with:` inputs for this invocation's local `uses: .` call."
|
|
344
|
+
},
|
|
345
|
+
"immutable": true,
|
|
346
|
+
"locationInModule": {
|
|
347
|
+
"filename": "src/actions/action-dogfood-workflow.ts",
|
|
348
|
+
"line": 38
|
|
349
|
+
},
|
|
350
|
+
"name": "inputs",
|
|
351
|
+
"optional": true,
|
|
352
|
+
"type": {
|
|
353
|
+
"collection": {
|
|
354
|
+
"elementtype": {
|
|
355
|
+
"primitive": "string"
|
|
356
|
+
},
|
|
357
|
+
"kind": "map"
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
],
|
|
362
|
+
"symbolId": "src/actions/action-dogfood-workflow:ActionDogfoodStep"
|
|
363
|
+
},
|
|
364
|
+
"@xpertss/projen-types.ActionDogfoodWorkflow": {
|
|
365
|
+
"assembly": "@xpertss/projen-types",
|
|
366
|
+
"base": "projen.Component",
|
|
367
|
+
"docs": {
|
|
368
|
+
"stability": "experimental",
|
|
369
|
+
"summary": "Per AD-001's dogfood test: the composite action is run **against this repo**, end-to-end, via a local `uses: .` reference - no external harness. Builds `test-dogfood.yml` from an ordered `scenario` of invocation steps (see `ActionDogfoodStep`) followed by a shared cleanup step."
|
|
370
|
+
},
|
|
371
|
+
"fqn": "@xpertss/projen-types.ActionDogfoodWorkflow",
|
|
372
|
+
"initializer": {
|
|
373
|
+
"docs": {
|
|
374
|
+
"stability": "experimental"
|
|
375
|
+
},
|
|
376
|
+
"locationInModule": {
|
|
377
|
+
"filename": "src/actions/action-dogfood-workflow.ts",
|
|
378
|
+
"line": 72
|
|
379
|
+
},
|
|
380
|
+
"parameters": [
|
|
381
|
+
{
|
|
382
|
+
"name": "scope",
|
|
383
|
+
"type": {
|
|
384
|
+
"fqn": "projen.github.GitHubProject"
|
|
385
|
+
}
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
"name": "options",
|
|
389
|
+
"type": {
|
|
390
|
+
"fqn": "@xpertss/projen-types.ActionDogfoodOptions"
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
]
|
|
394
|
+
},
|
|
395
|
+
"kind": "class",
|
|
396
|
+
"locationInModule": {
|
|
397
|
+
"filename": "src/actions/action-dogfood-workflow.ts",
|
|
398
|
+
"line": 69
|
|
399
|
+
},
|
|
400
|
+
"name": "ActionDogfoodWorkflow",
|
|
401
|
+
"properties": [
|
|
402
|
+
{
|
|
403
|
+
"docs": {
|
|
404
|
+
"stability": "experimental"
|
|
405
|
+
},
|
|
406
|
+
"immutable": true,
|
|
407
|
+
"locationInModule": {
|
|
408
|
+
"filename": "src/actions/action-dogfood-workflow.ts",
|
|
409
|
+
"line": 70
|
|
410
|
+
},
|
|
411
|
+
"name": "workflow",
|
|
412
|
+
"type": {
|
|
413
|
+
"fqn": "projen.github.GithubWorkflow"
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
],
|
|
417
|
+
"symbolId": "src/actions/action-dogfood-workflow:ActionDogfoodWorkflow"
|
|
418
|
+
},
|
|
419
|
+
"@xpertss/projen-types.ActionSonarWorkflow": {
|
|
420
|
+
"assembly": "@xpertss/projen-types",
|
|
421
|
+
"base": "projen.Component",
|
|
422
|
+
"docs": {
|
|
423
|
+
"remarks": "`sonar.inclusions` is set explicitly since\ndefault inclusions may skip `action.yml` outside `.github/`.",
|
|
424
|
+
"stability": "experimental",
|
|
425
|
+
"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)."
|
|
426
|
+
},
|
|
427
|
+
"fqn": "@xpertss/projen-types.ActionSonarWorkflow",
|
|
428
|
+
"initializer": {
|
|
429
|
+
"docs": {
|
|
430
|
+
"stability": "experimental"
|
|
431
|
+
},
|
|
432
|
+
"locationInModule": {
|
|
433
|
+
"filename": "src/actions/action-sonar-workflow.ts",
|
|
434
|
+
"line": 35
|
|
435
|
+
},
|
|
436
|
+
"parameters": [
|
|
437
|
+
{
|
|
438
|
+
"name": "scope",
|
|
439
|
+
"type": {
|
|
440
|
+
"fqn": "projen.github.GitHubProject"
|
|
441
|
+
}
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
"name": "options",
|
|
445
|
+
"type": {
|
|
446
|
+
"fqn": "@xpertss/projen-types.ActionSonarWorkflowOptions"
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
]
|
|
450
|
+
},
|
|
451
|
+
"kind": "class",
|
|
452
|
+
"locationInModule": {
|
|
453
|
+
"filename": "src/actions/action-sonar-workflow.ts",
|
|
454
|
+
"line": 32
|
|
455
|
+
},
|
|
456
|
+
"name": "ActionSonarWorkflow",
|
|
457
|
+
"properties": [
|
|
458
|
+
{
|
|
459
|
+
"docs": {
|
|
460
|
+
"stability": "experimental"
|
|
461
|
+
},
|
|
462
|
+
"immutable": true,
|
|
463
|
+
"locationInModule": {
|
|
464
|
+
"filename": "src/actions/action-sonar-workflow.ts",
|
|
465
|
+
"line": 33
|
|
466
|
+
},
|
|
467
|
+
"name": "workflow",
|
|
468
|
+
"type": {
|
|
469
|
+
"fqn": "projen.github.GithubWorkflow"
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
],
|
|
473
|
+
"symbolId": "src/actions/action-sonar-workflow:ActionSonarWorkflow"
|
|
474
|
+
},
|
|
475
|
+
"@xpertss/projen-types.ActionSonarWorkflowOptions": {
|
|
476
|
+
"assembly": "@xpertss/projen-types",
|
|
477
|
+
"datatype": true,
|
|
478
|
+
"docs": {
|
|
479
|
+
"stability": "experimental"
|
|
480
|
+
},
|
|
481
|
+
"fqn": "@xpertss/projen-types.ActionSonarWorkflowOptions",
|
|
482
|
+
"kind": "interface",
|
|
483
|
+
"locationInModule": {
|
|
484
|
+
"filename": "src/actions/action-sonar-workflow.ts",
|
|
485
|
+
"line": 9
|
|
486
|
+
},
|
|
487
|
+
"name": "ActionSonarWorkflowOptions",
|
|
488
|
+
"properties": [
|
|
489
|
+
{
|
|
490
|
+
"abstract": true,
|
|
491
|
+
"docs": {
|
|
492
|
+
"remarks": "Required, no default -\na guessed server is worse than a loud failure.",
|
|
493
|
+
"stability": "experimental",
|
|
494
|
+
"summary": "URL of the org's self-hosted SonarQube instance."
|
|
495
|
+
},
|
|
496
|
+
"immutable": true,
|
|
497
|
+
"locationInModule": {
|
|
498
|
+
"filename": "src/actions/action-sonar-workflow.ts",
|
|
499
|
+
"line": 14
|
|
500
|
+
},
|
|
501
|
+
"name": "sonarHostUrl",
|
|
502
|
+
"type": {
|
|
503
|
+
"primitive": "string"
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"abstract": true,
|
|
508
|
+
"docs": {
|
|
509
|
+
"default": "true",
|
|
510
|
+
"stability": "experimental",
|
|
511
|
+
"summary": "Whether `sonar.yml` also runs on `pull_request` as a pass/fail gate."
|
|
512
|
+
},
|
|
513
|
+
"immutable": true,
|
|
514
|
+
"locationInModule": {
|
|
515
|
+
"filename": "src/actions/action-sonar-workflow.ts",
|
|
516
|
+
"line": 23
|
|
517
|
+
},
|
|
518
|
+
"name": "sonarPullRequestGate",
|
|
519
|
+
"optional": true,
|
|
520
|
+
"type": {
|
|
521
|
+
"primitive": "boolean"
|
|
522
|
+
}
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
"abstract": true,
|
|
526
|
+
"docs": {
|
|
527
|
+
"default": "\"SONAR_TOKEN\"",
|
|
528
|
+
"stability": "experimental"
|
|
529
|
+
},
|
|
530
|
+
"immutable": true,
|
|
531
|
+
"locationInModule": {
|
|
532
|
+
"filename": "src/actions/action-sonar-workflow.ts",
|
|
533
|
+
"line": 17
|
|
534
|
+
},
|
|
535
|
+
"name": "sonarTokenSecret",
|
|
536
|
+
"optional": true,
|
|
537
|
+
"type": {
|
|
538
|
+
"primitive": "string"
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
],
|
|
542
|
+
"symbolId": "src/actions/action-sonar-workflow:ActionSonarWorkflowOptions"
|
|
543
|
+
},
|
|
544
|
+
"@xpertss/projen-types.ActionsAllowlistGuard": {
|
|
545
|
+
"assembly": "@xpertss/projen-types",
|
|
546
|
+
"base": "projen.Component",
|
|
547
|
+
"docs": {
|
|
548
|
+
"stability": "experimental"
|
|
549
|
+
},
|
|
550
|
+
"fqn": "@xpertss/projen-types.ActionsAllowlistGuard",
|
|
551
|
+
"initializer": {
|
|
552
|
+
"docs": {
|
|
553
|
+
"stability": "experimental"
|
|
554
|
+
},
|
|
555
|
+
"locationInModule": {
|
|
556
|
+
"filename": "src/common/actions-allowlist-guard.ts",
|
|
557
|
+
"line": 41
|
|
558
|
+
},
|
|
559
|
+
"parameters": [
|
|
560
|
+
{
|
|
561
|
+
"name": "scope",
|
|
562
|
+
"type": {
|
|
563
|
+
"fqn": "projen.github.GitHubProject"
|
|
564
|
+
}
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
"name": "options",
|
|
568
|
+
"optional": true,
|
|
569
|
+
"type": {
|
|
570
|
+
"fqn": "@xpertss/projen-types.ActionsAllowlistGuardOptions"
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
]
|
|
574
|
+
},
|
|
575
|
+
"kind": "class",
|
|
576
|
+
"locationInModule": {
|
|
577
|
+
"filename": "src/common/actions-allowlist-guard.ts",
|
|
578
|
+
"line": 38
|
|
579
|
+
},
|
|
580
|
+
"name": "ActionsAllowlistGuard",
|
|
581
|
+
"properties": [
|
|
582
|
+
{
|
|
583
|
+
"docs": {
|
|
584
|
+
"stability": "experimental"
|
|
585
|
+
},
|
|
586
|
+
"immutable": true,
|
|
587
|
+
"locationInModule": {
|
|
588
|
+
"filename": "src/common/actions-allowlist-guard.ts",
|
|
589
|
+
"line": 39
|
|
590
|
+
},
|
|
591
|
+
"name": "workflow",
|
|
592
|
+
"type": {
|
|
593
|
+
"fqn": "projen.github.GithubWorkflow"
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
],
|
|
597
|
+
"symbolId": "src/common/actions-allowlist-guard:ActionsAllowlistGuard"
|
|
598
|
+
},
|
|
599
|
+
"@xpertss/projen-types.ActionsAllowlistGuardOptions": {
|
|
600
|
+
"assembly": "@xpertss/projen-types",
|
|
601
|
+
"datatype": true,
|
|
602
|
+
"docs": {
|
|
603
|
+
"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.",
|
|
604
|
+
"stability": "experimental",
|
|
605
|
+
"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."
|
|
606
|
+
},
|
|
607
|
+
"fqn": "@xpertss/projen-types.ActionsAllowlistGuardOptions",
|
|
608
|
+
"kind": "interface",
|
|
609
|
+
"locationInModule": {
|
|
610
|
+
"filename": "src/common/actions-allowlist-guard.ts",
|
|
611
|
+
"line": 25
|
|
612
|
+
},
|
|
613
|
+
"name": "ActionsAllowlistGuardOptions",
|
|
614
|
+
"properties": [
|
|
615
|
+
{
|
|
616
|
+
"abstract": true,
|
|
617
|
+
"docs": {
|
|
618
|
+
"default": "\"PROJEN_GITHUB_TOKEN\"",
|
|
619
|
+
"remarks": "The check still fails without it, so fork PRs -\nwhich get no secrets - are only missing the extra comment.",
|
|
620
|
+
"stability": "experimental",
|
|
621
|
+
"summary": "GitHub secret holding a token with permission to comment on PRs, used for the failure comment."
|
|
622
|
+
},
|
|
623
|
+
"immutable": true,
|
|
624
|
+
"locationInModule": {
|
|
625
|
+
"filename": "src/common/actions-allowlist-guard.ts",
|
|
626
|
+
"line": 32
|
|
627
|
+
},
|
|
628
|
+
"name": "gheTokenSecret",
|
|
629
|
+
"optional": true,
|
|
630
|
+
"type": {
|
|
631
|
+
"primitive": "string"
|
|
632
|
+
}
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
"abstract": true,
|
|
636
|
+
"docs": {
|
|
637
|
+
"default": "\"actions-allowlist-guard\"",
|
|
638
|
+
"stability": "experimental"
|
|
639
|
+
},
|
|
640
|
+
"immutable": true,
|
|
641
|
+
"locationInModule": {
|
|
642
|
+
"filename": "src/common/actions-allowlist-guard.ts",
|
|
643
|
+
"line": 35
|
|
644
|
+
},
|
|
645
|
+
"name": "workflowName",
|
|
646
|
+
"optional": true,
|
|
647
|
+
"type": {
|
|
648
|
+
"primitive": "string"
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
],
|
|
652
|
+
"symbolId": "src/common/actions-allowlist-guard:ActionsAllowlistGuardOptions"
|
|
653
|
+
},
|
|
122
654
|
"@xpertss/projen-types.AppRuntimeScaffold": {
|
|
123
655
|
"assembly": "@xpertss/projen-types",
|
|
124
656
|
"base": "projen.Component",
|
|
@@ -173,7 +705,7 @@
|
|
|
173
705
|
},
|
|
174
706
|
"locationInModule": {
|
|
175
707
|
"filename": "src/cdk/cdk-app-project.ts",
|
|
176
|
-
"line":
|
|
708
|
+
"line": 13
|
|
177
709
|
},
|
|
178
710
|
"parameters": [
|
|
179
711
|
{
|
|
@@ -187,7 +719,7 @@
|
|
|
187
719
|
"kind": "class",
|
|
188
720
|
"locationInModule": {
|
|
189
721
|
"filename": "src/cdk/cdk-app-project.ts",
|
|
190
|
-
"line":
|
|
722
|
+
"line": 12
|
|
191
723
|
},
|
|
192
724
|
"name": "CdkAppProject",
|
|
193
725
|
"symbolId": "src/cdk/cdk-app-project:CdkAppProject"
|
|
@@ -205,7 +737,7 @@
|
|
|
205
737
|
"kind": "interface",
|
|
206
738
|
"locationInModule": {
|
|
207
739
|
"filename": "src/cdk/options.ts",
|
|
208
|
-
"line":
|
|
740
|
+
"line": 50
|
|
209
741
|
},
|
|
210
742
|
"name": "CdkAppProjectOptions",
|
|
211
743
|
"properties": [
|
|
@@ -218,7 +750,7 @@
|
|
|
218
750
|
"immutable": true,
|
|
219
751
|
"locationInModule": {
|
|
220
752
|
"filename": "src/cdk/options.ts",
|
|
221
|
-
"line":
|
|
753
|
+
"line": 54
|
|
222
754
|
},
|
|
223
755
|
"name": "appEntryPoint",
|
|
224
756
|
"optional": true,
|
|
@@ -234,7 +766,7 @@
|
|
|
234
766
|
"immutable": true,
|
|
235
767
|
"locationInModule": {
|
|
236
768
|
"filename": "src/cdk/options.ts",
|
|
237
|
-
"line":
|
|
769
|
+
"line": 51
|
|
238
770
|
},
|
|
239
771
|
"name": "database",
|
|
240
772
|
"optional": true,
|
|
@@ -403,7 +935,7 @@
|
|
|
403
935
|
"kind": "interface",
|
|
404
936
|
"locationInModule": {
|
|
405
937
|
"filename": "src/cdk/options.ts",
|
|
406
|
-
"line":
|
|
938
|
+
"line": 33
|
|
407
939
|
},
|
|
408
940
|
"name": "CdkInfraProjectOptions",
|
|
409
941
|
"properties": [
|
|
@@ -416,7 +948,7 @@
|
|
|
416
948
|
"immutable": true,
|
|
417
949
|
"locationInModule": {
|
|
418
950
|
"filename": "src/cdk/options.ts",
|
|
419
|
-
"line":
|
|
951
|
+
"line": 35
|
|
420
952
|
},
|
|
421
953
|
"name": "environments",
|
|
422
954
|
"type": {
|
|
@@ -445,7 +977,7 @@
|
|
|
445
977
|
"immutable": true,
|
|
446
978
|
"locationInModule": {
|
|
447
979
|
"filename": "src/cdk/options.ts",
|
|
448
|
-
"line":
|
|
980
|
+
"line": 37
|
|
449
981
|
},
|
|
450
982
|
"name": "ecrEcs",
|
|
451
983
|
"optional": true,
|
|
@@ -461,7 +993,7 @@
|
|
|
461
993
|
"immutable": true,
|
|
462
994
|
"locationInModule": {
|
|
463
995
|
"filename": "src/cdk/options.ts",
|
|
464
|
-
"line":
|
|
996
|
+
"line": 39
|
|
465
997
|
},
|
|
466
998
|
"name": "edgeResources",
|
|
467
999
|
"optional": true,
|
|
@@ -491,7 +1023,7 @@
|
|
|
491
1023
|
},
|
|
492
1024
|
"locationInModule": {
|
|
493
1025
|
"filename": "src/cdk/cdk-typescript-base.ts",
|
|
494
|
-
"line":
|
|
1026
|
+
"line": 23
|
|
495
1027
|
},
|
|
496
1028
|
"parameters": [
|
|
497
1029
|
{
|
|
@@ -505,7 +1037,7 @@
|
|
|
505
1037
|
"kind": "class",
|
|
506
1038
|
"locationInModule": {
|
|
507
1039
|
"filename": "src/cdk/cdk-typescript-base.ts",
|
|
508
|
-
"line":
|
|
1040
|
+
"line": 22
|
|
509
1041
|
},
|
|
510
1042
|
"name": "CdkTypescriptProject",
|
|
511
1043
|
"symbolId": "src/cdk/cdk-typescript-base:CdkTypescriptProject"
|
|
@@ -523,7 +1055,7 @@
|
|
|
523
1055
|
"kind": "interface",
|
|
524
1056
|
"locationInModule": {
|
|
525
1057
|
"filename": "src/cdk/cdk-typescript-base.ts",
|
|
526
|
-
"line":
|
|
1058
|
+
"line": 11
|
|
527
1059
|
},
|
|
528
1060
|
"name": "CdkTypescriptProjectOptions",
|
|
529
1061
|
"properties": [
|
|
@@ -535,7 +1067,7 @@
|
|
|
535
1067
|
"immutable": true,
|
|
536
1068
|
"locationInModule": {
|
|
537
1069
|
"filename": "src/cdk/cdk-typescript-base.ts",
|
|
538
|
-
"line":
|
|
1070
|
+
"line": 12
|
|
539
1071
|
},
|
|
540
1072
|
"name": "environments",
|
|
541
1073
|
"optional": true,
|
|
@@ -655,23 +1187,6 @@
|
|
|
655
1187
|
"type": {
|
|
656
1188
|
"primitive": "string"
|
|
657
1189
|
}
|
|
658
|
-
},
|
|
659
|
-
{
|
|
660
|
-
"abstract": true,
|
|
661
|
-
"docs": {
|
|
662
|
-
"stability": "experimental",
|
|
663
|
-
"summary": "GitHub secret holding a Slack webhook URL for deploy notifications."
|
|
664
|
-
},
|
|
665
|
-
"immutable": true,
|
|
666
|
-
"locationInModule": {
|
|
667
|
-
"filename": "src/cdk/options.ts",
|
|
668
|
-
"line": 33
|
|
669
|
-
},
|
|
670
|
-
"name": "slackWebhookSecret",
|
|
671
|
-
"optional": true,
|
|
672
|
-
"type": {
|
|
673
|
-
"primitive": "string"
|
|
674
|
-
}
|
|
675
1190
|
}
|
|
676
1191
|
],
|
|
677
1192
|
"symbolId": "src/cdk/options:CommonCdkOptions"
|
|
@@ -841,7 +1356,7 @@
|
|
|
841
1356
|
"kind": "interface",
|
|
842
1357
|
"locationInModule": {
|
|
843
1358
|
"filename": "src/cdk/options.ts",
|
|
844
|
-
"line":
|
|
1359
|
+
"line": 42
|
|
845
1360
|
},
|
|
846
1361
|
"name": "DatabaseOptions",
|
|
847
1362
|
"properties": [
|
|
@@ -854,7 +1369,7 @@
|
|
|
854
1369
|
"immutable": true,
|
|
855
1370
|
"locationInModule": {
|
|
856
1371
|
"filename": "src/cdk/options.ts",
|
|
857
|
-
"line":
|
|
1372
|
+
"line": 44
|
|
858
1373
|
},
|
|
859
1374
|
"name": "engine",
|
|
860
1375
|
"optional": true,
|
|
@@ -871,7 +1386,7 @@
|
|
|
871
1386
|
"immutable": true,
|
|
872
1387
|
"locationInModule": {
|
|
873
1388
|
"filename": "src/cdk/options.ts",
|
|
874
|
-
"line":
|
|
1389
|
+
"line": 47
|
|
875
1390
|
},
|
|
876
1391
|
"name": "migrationTool",
|
|
877
1392
|
"optional": true,
|
|
@@ -1112,14 +1627,262 @@
|
|
|
1112
1627
|
"abstract": true,
|
|
1113
1628
|
"docs": {
|
|
1114
1629
|
"stability": "experimental",
|
|
1115
|
-
"summary": "Environment name, e.g. \"dev\", \"stage\", \"prod\"."
|
|
1630
|
+
"summary": "Environment name, e.g. \"dev\", \"stage\", \"prod\"."
|
|
1631
|
+
},
|
|
1632
|
+
"immutable": true,
|
|
1633
|
+
"locationInModule": {
|
|
1634
|
+
"filename": "src/common/environment-options.ts",
|
|
1635
|
+
"line": 6
|
|
1636
|
+
},
|
|
1637
|
+
"name": "name",
|
|
1638
|
+
"type": {
|
|
1639
|
+
"primitive": "string"
|
|
1640
|
+
}
|
|
1641
|
+
},
|
|
1642
|
+
{
|
|
1643
|
+
"abstract": true,
|
|
1644
|
+
"docs": {
|
|
1645
|
+
"stability": "experimental",
|
|
1646
|
+
"summary": "AWS account id to deploy into, if relevant to the deploy steps used."
|
|
1647
|
+
},
|
|
1648
|
+
"immutable": true,
|
|
1649
|
+
"locationInModule": {
|
|
1650
|
+
"filename": "src/common/environment-options.ts",
|
|
1651
|
+
"line": 9
|
|
1652
|
+
},
|
|
1653
|
+
"name": "accountId",
|
|
1654
|
+
"optional": true,
|
|
1655
|
+
"type": {
|
|
1656
|
+
"primitive": "string"
|
|
1657
|
+
}
|
|
1658
|
+
},
|
|
1659
|
+
{
|
|
1660
|
+
"abstract": true,
|
|
1661
|
+
"docs": {
|
|
1662
|
+
"stability": "experimental",
|
|
1663
|
+
"summary": "AWS region to deploy into, if relevant to the deploy steps used."
|
|
1664
|
+
},
|
|
1665
|
+
"immutable": true,
|
|
1666
|
+
"locationInModule": {
|
|
1667
|
+
"filename": "src/common/environment-options.ts",
|
|
1668
|
+
"line": 12
|
|
1669
|
+
},
|
|
1670
|
+
"name": "region",
|
|
1671
|
+
"optional": true,
|
|
1672
|
+
"type": {
|
|
1673
|
+
"primitive": "string"
|
|
1674
|
+
}
|
|
1675
|
+
},
|
|
1676
|
+
{
|
|
1677
|
+
"abstract": true,
|
|
1678
|
+
"docs": {
|
|
1679
|
+
"default": "false",
|
|
1680
|
+
"stability": "experimental",
|
|
1681
|
+
"summary": "Whether this environment requires a GitHub Environment approval gate before the deploy job is allowed to run."
|
|
1682
|
+
},
|
|
1683
|
+
"immutable": true,
|
|
1684
|
+
"locationInModule": {
|
|
1685
|
+
"filename": "src/common/environment-options.ts",
|
|
1686
|
+
"line": 20
|
|
1687
|
+
},
|
|
1688
|
+
"name": "requiresApproval",
|
|
1689
|
+
"optional": true,
|
|
1690
|
+
"type": {
|
|
1691
|
+
"primitive": "boolean"
|
|
1692
|
+
}
|
|
1693
|
+
}
|
|
1694
|
+
],
|
|
1695
|
+
"symbolId": "src/common/environment-options:EnvironmentOptions"
|
|
1696
|
+
},
|
|
1697
|
+
"@xpertss/projen-types.FlywayMigration": {
|
|
1698
|
+
"assembly": "@xpertss/projen-types",
|
|
1699
|
+
"base": "projen.Component",
|
|
1700
|
+
"docs": {
|
|
1701
|
+
"stability": "experimental",
|
|
1702
|
+
"summary": "Adds Flyway config/dependencies + a migrations directory for DB migrations."
|
|
1703
|
+
},
|
|
1704
|
+
"fqn": "@xpertss/projen-types.FlywayMigration",
|
|
1705
|
+
"initializer": {
|
|
1706
|
+
"docs": {
|
|
1707
|
+
"stability": "experimental"
|
|
1708
|
+
},
|
|
1709
|
+
"locationInModule": {
|
|
1710
|
+
"filename": "src/java/components/flyway-migration.ts",
|
|
1711
|
+
"line": 6
|
|
1712
|
+
},
|
|
1713
|
+
"parameters": [
|
|
1714
|
+
{
|
|
1715
|
+
"name": "project",
|
|
1716
|
+
"type": {
|
|
1717
|
+
"fqn": "projen.java.JavaProject"
|
|
1718
|
+
}
|
|
1719
|
+
}
|
|
1720
|
+
]
|
|
1721
|
+
},
|
|
1722
|
+
"kind": "class",
|
|
1723
|
+
"locationInModule": {
|
|
1724
|
+
"filename": "src/java/components/flyway-migration.ts",
|
|
1725
|
+
"line": 5
|
|
1726
|
+
},
|
|
1727
|
+
"name": "FlywayMigration",
|
|
1728
|
+
"symbolId": "src/java/components/flyway-migration:FlywayMigration"
|
|
1729
|
+
},
|
|
1730
|
+
"@xpertss/projen-types.GitHubActionProject": {
|
|
1731
|
+
"assembly": "@xpertss/projen-types",
|
|
1732
|
+
"base": "projen.github.GitHubProject",
|
|
1733
|
+
"docs": {
|
|
1734
|
+
"stability": "experimental",
|
|
1735
|
+
"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 (`tsconfig.json` for `.projenrc.ts`, 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."
|
|
1736
|
+
},
|
|
1737
|
+
"fqn": "@xpertss/projen-types.GitHubActionProject",
|
|
1738
|
+
"initializer": {
|
|
1739
|
+
"docs": {
|
|
1740
|
+
"stability": "experimental"
|
|
1741
|
+
},
|
|
1742
|
+
"locationInModule": {
|
|
1743
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1744
|
+
"line": 126
|
|
1745
|
+
},
|
|
1746
|
+
"parameters": [
|
|
1747
|
+
{
|
|
1748
|
+
"name": "options",
|
|
1749
|
+
"type": {
|
|
1750
|
+
"fqn": "@xpertss/projen-types.GitHubActionProjectOptions"
|
|
1751
|
+
}
|
|
1752
|
+
}
|
|
1753
|
+
]
|
|
1754
|
+
},
|
|
1755
|
+
"kind": "class",
|
|
1756
|
+
"locationInModule": {
|
|
1757
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1758
|
+
"line": 120
|
|
1759
|
+
},
|
|
1760
|
+
"name": "GitHubActionProject",
|
|
1761
|
+
"properties": [
|
|
1762
|
+
{
|
|
1763
|
+
"docs": {
|
|
1764
|
+
"stability": "experimental"
|
|
1765
|
+
},
|
|
1766
|
+
"immutable": true,
|
|
1767
|
+
"locationInModule": {
|
|
1768
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1769
|
+
"line": 121
|
|
1770
|
+
},
|
|
1771
|
+
"name": "buildWorkflow",
|
|
1772
|
+
"type": {
|
|
1773
|
+
"fqn": "@xpertss/projen-types.ActionBuildWorkflow"
|
|
1774
|
+
}
|
|
1775
|
+
},
|
|
1776
|
+
{
|
|
1777
|
+
"docs": {
|
|
1778
|
+
"stability": "experimental"
|
|
1779
|
+
},
|
|
1780
|
+
"immutable": true,
|
|
1781
|
+
"locationInModule": {
|
|
1782
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1783
|
+
"line": 122
|
|
1784
|
+
},
|
|
1785
|
+
"name": "dogfoodWorkflow",
|
|
1786
|
+
"type": {
|
|
1787
|
+
"fqn": "@xpertss/projen-types.ActionDogfoodWorkflow"
|
|
1788
|
+
}
|
|
1789
|
+
},
|
|
1790
|
+
{
|
|
1791
|
+
"docs": {
|
|
1792
|
+
"stability": "experimental"
|
|
1793
|
+
},
|
|
1794
|
+
"immutable": true,
|
|
1795
|
+
"locationInModule": {
|
|
1796
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1797
|
+
"line": 124
|
|
1798
|
+
},
|
|
1799
|
+
"name": "release",
|
|
1800
|
+
"type": {
|
|
1801
|
+
"fqn": "projen.release.Release"
|
|
1802
|
+
}
|
|
1803
|
+
},
|
|
1804
|
+
{
|
|
1805
|
+
"docs": {
|
|
1806
|
+
"stability": "experimental"
|
|
1807
|
+
},
|
|
1808
|
+
"immutable": true,
|
|
1809
|
+
"locationInModule": {
|
|
1810
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1811
|
+
"line": 123
|
|
1812
|
+
},
|
|
1813
|
+
"name": "sonarWorkflow",
|
|
1814
|
+
"type": {
|
|
1815
|
+
"fqn": "@xpertss/projen-types.ActionSonarWorkflow"
|
|
1816
|
+
}
|
|
1817
|
+
}
|
|
1818
|
+
],
|
|
1819
|
+
"symbolId": "src/actions/github-action-project:GitHubActionProject"
|
|
1820
|
+
},
|
|
1821
|
+
"@xpertss/projen-types.GitHubActionProjectOptions": {
|
|
1822
|
+
"assembly": "@xpertss/projen-types",
|
|
1823
|
+
"datatype": true,
|
|
1824
|
+
"docs": {
|
|
1825
|
+
"stability": "experimental"
|
|
1826
|
+
},
|
|
1827
|
+
"fqn": "@xpertss/projen-types.GitHubActionProjectOptions",
|
|
1828
|
+
"interfaces": [
|
|
1829
|
+
"projen.github.GitHubProjectOptions"
|
|
1830
|
+
],
|
|
1831
|
+
"kind": "interface",
|
|
1832
|
+
"locationInModule": {
|
|
1833
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1834
|
+
"line": 37
|
|
1835
|
+
},
|
|
1836
|
+
"name": "GitHubActionProjectOptions",
|
|
1837
|
+
"properties": [
|
|
1838
|
+
{
|
|
1839
|
+
"abstract": true,
|
|
1840
|
+
"docs": {
|
|
1841
|
+
"remarks": "What fixture state, what to assert, and\nhow to clean up are specified by the action's own F### spec - the\nhighest-risk behavior of that action. Required: a default no-op\ndogfood would silently hollow out a load-bearing AD-001 workflow.",
|
|
1842
|
+
"stability": "experimental",
|
|
1843
|
+
"summary": "The dogfood scenario (AD-001)."
|
|
1844
|
+
},
|
|
1845
|
+
"immutable": true,
|
|
1846
|
+
"locationInModule": {
|
|
1847
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1848
|
+
"line": 75
|
|
1849
|
+
},
|
|
1850
|
+
"name": "dogfood",
|
|
1851
|
+
"type": {
|
|
1852
|
+
"fqn": "@xpertss/projen-types.ActionDogfoodOptions"
|
|
1853
|
+
}
|
|
1854
|
+
},
|
|
1855
|
+
{
|
|
1856
|
+
"abstract": true,
|
|
1857
|
+
"docs": {
|
|
1858
|
+
"remarks": "MUST be reachable from\ngithub.com-hosted (public) runners (AD-001). Required, no default: a\nguessed server is worse than a loud failure.",
|
|
1859
|
+
"stability": "experimental",
|
|
1860
|
+
"summary": "URL of the org's self-hosted SonarQube instance."
|
|
1861
|
+
},
|
|
1862
|
+
"immutable": true,
|
|
1863
|
+
"locationInModule": {
|
|
1864
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1865
|
+
"line": 58
|
|
1866
|
+
},
|
|
1867
|
+
"name": "sonarHostUrl",
|
|
1868
|
+
"type": {
|
|
1869
|
+
"primitive": "string"
|
|
1870
|
+
}
|
|
1871
|
+
},
|
|
1872
|
+
{
|
|
1873
|
+
"abstract": true,
|
|
1874
|
+
"docs": {
|
|
1875
|
+
"remarks": "Used in the default README\ntemplate and recorded in the private `package.json`.",
|
|
1876
|
+
"stability": "experimental",
|
|
1877
|
+
"summary": "One-line description of the action."
|
|
1116
1878
|
},
|
|
1117
1879
|
"immutable": true,
|
|
1118
1880
|
"locationInModule": {
|
|
1119
|
-
"filename": "src/
|
|
1120
|
-
"line":
|
|
1881
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1882
|
+
"line": 43
|
|
1121
1883
|
},
|
|
1122
|
-
"name": "
|
|
1884
|
+
"name": "description",
|
|
1885
|
+
"optional": true,
|
|
1123
1886
|
"type": {
|
|
1124
1887
|
"primitive": "string"
|
|
1125
1888
|
}
|
|
@@ -1127,15 +1890,16 @@
|
|
|
1127
1890
|
{
|
|
1128
1891
|
"abstract": true,
|
|
1129
1892
|
"docs": {
|
|
1893
|
+
"default": "\"PROJEN_GITHUB_TOKEN\"",
|
|
1130
1894
|
"stability": "experimental",
|
|
1131
|
-
"summary": "
|
|
1895
|
+
"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."
|
|
1132
1896
|
},
|
|
1133
1897
|
"immutable": true,
|
|
1134
1898
|
"locationInModule": {
|
|
1135
|
-
"filename": "src/
|
|
1136
|
-
"line":
|
|
1899
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1900
|
+
"line": 51
|
|
1137
1901
|
},
|
|
1138
|
-
"name": "
|
|
1902
|
+
"name": "gheTokenSecret",
|
|
1139
1903
|
"optional": true,
|
|
1140
1904
|
"type": {
|
|
1141
1905
|
"primitive": "string"
|
|
@@ -1144,15 +1908,16 @@
|
|
|
1144
1908
|
{
|
|
1145
1909
|
"abstract": true,
|
|
1146
1910
|
"docs": {
|
|
1911
|
+
"default": "\"MIT\"",
|
|
1147
1912
|
"stability": "experimental",
|
|
1148
|
-
"summary": "
|
|
1913
|
+
"summary": "SPDX identifier for the generated `LICENSE`."
|
|
1149
1914
|
},
|
|
1150
1915
|
"immutable": true,
|
|
1151
1916
|
"locationInModule": {
|
|
1152
|
-
"filename": "src/
|
|
1153
|
-
"line":
|
|
1917
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1918
|
+
"line": 81
|
|
1154
1919
|
},
|
|
1155
|
-
"name": "
|
|
1920
|
+
"name": "license",
|
|
1156
1921
|
"optional": true,
|
|
1157
1922
|
"type": {
|
|
1158
1923
|
"primitive": "string"
|
|
@@ -1161,56 +1926,40 @@
|
|
|
1161
1926
|
{
|
|
1162
1927
|
"abstract": true,
|
|
1163
1928
|
"docs": {
|
|
1164
|
-
"default": "
|
|
1929
|
+
"default": "true",
|
|
1165
1930
|
"stability": "experimental",
|
|
1166
|
-
"summary": "Whether
|
|
1931
|
+
"summary": "Whether `sonar.yml` also runs on `pull_request` as a pass/fail gate."
|
|
1167
1932
|
},
|
|
1168
1933
|
"immutable": true,
|
|
1169
1934
|
"locationInModule": {
|
|
1170
|
-
"filename": "src/
|
|
1171
|
-
"line":
|
|
1935
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1936
|
+
"line": 67
|
|
1172
1937
|
},
|
|
1173
|
-
"name": "
|
|
1938
|
+
"name": "sonarPullRequestGate",
|
|
1174
1939
|
"optional": true,
|
|
1175
1940
|
"type": {
|
|
1176
1941
|
"primitive": "boolean"
|
|
1177
1942
|
}
|
|
1178
|
-
}
|
|
1179
|
-
],
|
|
1180
|
-
"symbolId": "src/common/environment-options:EnvironmentOptions"
|
|
1181
|
-
},
|
|
1182
|
-
"@xpertss/projen-types.FlywayMigration": {
|
|
1183
|
-
"assembly": "@xpertss/projen-types",
|
|
1184
|
-
"base": "projen.Component",
|
|
1185
|
-
"docs": {
|
|
1186
|
-
"stability": "experimental",
|
|
1187
|
-
"summary": "Adds Flyway config/dependencies + a migrations directory for DB migrations."
|
|
1188
|
-
},
|
|
1189
|
-
"fqn": "@xpertss/projen-types.FlywayMigration",
|
|
1190
|
-
"initializer": {
|
|
1191
|
-
"docs": {
|
|
1192
|
-
"stability": "experimental"
|
|
1193
|
-
},
|
|
1194
|
-
"locationInModule": {
|
|
1195
|
-
"filename": "src/java/components/flyway-migration.ts",
|
|
1196
|
-
"line": 6
|
|
1197
1943
|
},
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
"
|
|
1202
|
-
|
|
1203
|
-
|
|
1944
|
+
{
|
|
1945
|
+
"abstract": true,
|
|
1946
|
+
"docs": {
|
|
1947
|
+
"default": "\"SONAR_TOKEN\"",
|
|
1948
|
+
"stability": "experimental"
|
|
1949
|
+
},
|
|
1950
|
+
"immutable": true,
|
|
1951
|
+
"locationInModule": {
|
|
1952
|
+
"filename": "src/actions/github-action-project.ts",
|
|
1953
|
+
"line": 61
|
|
1954
|
+
},
|
|
1955
|
+
"name": "sonarTokenSecret",
|
|
1956
|
+
"optional": true,
|
|
1957
|
+
"type": {
|
|
1958
|
+
"primitive": "string"
|
|
1204
1959
|
}
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
"
|
|
1208
|
-
"locationInModule": {
|
|
1209
|
-
"filename": "src/java/components/flyway-migration.ts",
|
|
1210
|
-
"line": 5
|
|
1211
|
-
},
|
|
1212
|
-
"name": "FlywayMigration",
|
|
1213
|
-
"symbolId": "src/java/components/flyway-migration:FlywayMigration"
|
|
1960
|
+
}
|
|
1961
|
+
],
|
|
1962
|
+
"symbolId": "src/actions/github-action-project:GitHubActionProjectOptions"
|
|
1214
1963
|
},
|
|
1215
1964
|
"@xpertss/projen-types.GitHubPackagesPublish": {
|
|
1216
1965
|
"assembly": "@xpertss/projen-types",
|
|
@@ -1458,7 +2207,7 @@
|
|
|
1458
2207
|
},
|
|
1459
2208
|
"locationInModule": {
|
|
1460
2209
|
"filename": "src/java/java-maven-base.ts",
|
|
1461
|
-
"line":
|
|
2210
|
+
"line": 22
|
|
1462
2211
|
},
|
|
1463
2212
|
"parameters": [
|
|
1464
2213
|
{
|
|
@@ -1472,7 +2221,7 @@
|
|
|
1472
2221
|
"kind": "class",
|
|
1473
2222
|
"locationInModule": {
|
|
1474
2223
|
"filename": "src/java/java-maven-base.ts",
|
|
1475
|
-
"line":
|
|
2224
|
+
"line": 18
|
|
1476
2225
|
},
|
|
1477
2226
|
"name": "JavaMavenProject",
|
|
1478
2227
|
"properties": [
|
|
@@ -1483,7 +2232,7 @@
|
|
|
1483
2232
|
"immutable": true,
|
|
1484
2233
|
"locationInModule": {
|
|
1485
2234
|
"filename": "src/java/java-maven-base.ts",
|
|
1486
|
-
"line":
|
|
2235
|
+
"line": 20
|
|
1487
2236
|
},
|
|
1488
2237
|
"name": "buildVerifyWorkflow",
|
|
1489
2238
|
"type": {
|
|
@@ -1497,7 +2246,7 @@
|
|
|
1497
2246
|
"immutable": true,
|
|
1498
2247
|
"locationInModule": {
|
|
1499
2248
|
"filename": "src/java/java-maven-base.ts",
|
|
1500
|
-
"line":
|
|
2249
|
+
"line": 19
|
|
1501
2250
|
},
|
|
1502
2251
|
"name": "upgradeTask",
|
|
1503
2252
|
"type": {
|
|
@@ -1520,7 +2269,7 @@
|
|
|
1520
2269
|
"kind": "interface",
|
|
1521
2270
|
"locationInModule": {
|
|
1522
2271
|
"filename": "src/java/java-maven-base.ts",
|
|
1523
|
-
"line":
|
|
2272
|
+
"line": 10
|
|
1524
2273
|
},
|
|
1525
2274
|
"name": "JavaMavenProjectOptions",
|
|
1526
2275
|
"symbolId": "src/java/java-maven-base:JavaMavenProjectOptions"
|
|
@@ -1735,8 +2484,250 @@
|
|
|
1735
2484
|
}
|
|
1736
2485
|
],
|
|
1737
2486
|
"symbolId": "src/java/components/maven-central-publish:MavenCentralPublishOptions"
|
|
2487
|
+
},
|
|
2488
|
+
"@xpertss/projen-types.ProjenDriftCheckWorkflow": {
|
|
2489
|
+
"assembly": "@xpertss/projen-types",
|
|
2490
|
+
"base": "projen.Component",
|
|
2491
|
+
"docs": {
|
|
2492
|
+
"stability": "experimental"
|
|
2493
|
+
},
|
|
2494
|
+
"fqn": "@xpertss/projen-types.ProjenDriftCheckWorkflow",
|
|
2495
|
+
"initializer": {
|
|
2496
|
+
"docs": {
|
|
2497
|
+
"stability": "experimental"
|
|
2498
|
+
},
|
|
2499
|
+
"locationInModule": {
|
|
2500
|
+
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
2501
|
+
"line": 40
|
|
2502
|
+
},
|
|
2503
|
+
"parameters": [
|
|
2504
|
+
{
|
|
2505
|
+
"name": "scope",
|
|
2506
|
+
"type": {
|
|
2507
|
+
"fqn": "projen.github.GitHubProject"
|
|
2508
|
+
}
|
|
2509
|
+
},
|
|
2510
|
+
{
|
|
2511
|
+
"name": "options",
|
|
2512
|
+
"optional": true,
|
|
2513
|
+
"type": {
|
|
2514
|
+
"fqn": "@xpertss/projen-types.ProjenDriftCheckWorkflowOptions"
|
|
2515
|
+
}
|
|
2516
|
+
}
|
|
2517
|
+
]
|
|
2518
|
+
},
|
|
2519
|
+
"kind": "class",
|
|
2520
|
+
"locationInModule": {
|
|
2521
|
+
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
2522
|
+
"line": 37
|
|
2523
|
+
},
|
|
2524
|
+
"name": "ProjenDriftCheckWorkflow",
|
|
2525
|
+
"properties": [
|
|
2526
|
+
{
|
|
2527
|
+
"docs": {
|
|
2528
|
+
"stability": "experimental"
|
|
2529
|
+
},
|
|
2530
|
+
"immutable": true,
|
|
2531
|
+
"locationInModule": {
|
|
2532
|
+
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
2533
|
+
"line": 38
|
|
2534
|
+
},
|
|
2535
|
+
"name": "workflow",
|
|
2536
|
+
"type": {
|
|
2537
|
+
"fqn": "projen.github.GithubWorkflow"
|
|
2538
|
+
}
|
|
2539
|
+
}
|
|
2540
|
+
],
|
|
2541
|
+
"symbolId": "src/common/projen-drift-check-workflow:ProjenDriftCheckWorkflow"
|
|
2542
|
+
},
|
|
2543
|
+
"@xpertss/projen-types.ProjenDriftCheckWorkflowOptions": {
|
|
2544
|
+
"assembly": "@xpertss/projen-types",
|
|
2545
|
+
"datatype": true,
|
|
2546
|
+
"docs": {
|
|
2547
|
+
"remarks": "Re-runs the project's synth command on the PR head and fails if the\nregenerated output no longer matches what's committed - i.e. someone\nhand-edited a generated file (package.json / pom.xml /\n.github/workflows/*.yml / ...) instead of going through `.projenrc.ts`.\n\nRuns on `pull_request` so it genuinely executes the PR's own code (the\nonly way to detect drift) - and therefore, by necessity, a PR author can\ndisable it within their own PR. That residual exposure is bounded by\n`WorkflowChangeNoticeWorkflow` (Check 2), which is tamper-proof and flags\nany touch to `.github/workflows/**`. See the F003 spec's Security section.",
|
|
2548
|
+
"stability": "experimental",
|
|
2549
|
+
"summary": "PR-triggered check that rejects direct edits to projen-managed files."
|
|
2550
|
+
},
|
|
2551
|
+
"fqn": "@xpertss/projen-types.ProjenDriftCheckWorkflowOptions",
|
|
2552
|
+
"kind": "interface",
|
|
2553
|
+
"locationInModule": {
|
|
2554
|
+
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
2555
|
+
"line": 17
|
|
2556
|
+
},
|
|
2557
|
+
"name": "ProjenDriftCheckWorkflowOptions",
|
|
2558
|
+
"properties": [
|
|
2559
|
+
{
|
|
2560
|
+
"abstract": true,
|
|
2561
|
+
"docs": {
|
|
2562
|
+
"default": "\"PROJEN_GITHUB_TOKEN\"",
|
|
2563
|
+
"remarks": "The check still fails (and\nemits `::error::` annotations) without it, so fork PRs - which get no\nsecrets - are only missing the extra comment.",
|
|
2564
|
+
"stability": "experimental",
|
|
2565
|
+
"summary": "GitHub secret holding a token with permission to comment on PRs, used for the best-effort drift report comment."
|
|
2566
|
+
},
|
|
2567
|
+
"immutable": true,
|
|
2568
|
+
"locationInModule": {
|
|
2569
|
+
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
2570
|
+
"line": 31
|
|
2571
|
+
},
|
|
2572
|
+
"name": "gheTokenSecret",
|
|
2573
|
+
"optional": true,
|
|
2574
|
+
"type": {
|
|
2575
|
+
"primitive": "string"
|
|
2576
|
+
}
|
|
2577
|
+
},
|
|
2578
|
+
{
|
|
2579
|
+
"abstract": true,
|
|
2580
|
+
"docs": {
|
|
2581
|
+
"default": "\"npx projen\"",
|
|
2582
|
+
"stability": "experimental",
|
|
2583
|
+
"summary": "The command that regenerates the project from `.projenrc.ts`."
|
|
2584
|
+
},
|
|
2585
|
+
"immutable": true,
|
|
2586
|
+
"locationInModule": {
|
|
2587
|
+
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
2588
|
+
"line": 22
|
|
2589
|
+
},
|
|
2590
|
+
"name": "projenCommand",
|
|
2591
|
+
"optional": true,
|
|
2592
|
+
"type": {
|
|
2593
|
+
"primitive": "string"
|
|
2594
|
+
}
|
|
2595
|
+
},
|
|
2596
|
+
{
|
|
2597
|
+
"abstract": true,
|
|
2598
|
+
"docs": {
|
|
2599
|
+
"default": "\"projen-drift-check\"",
|
|
2600
|
+
"stability": "experimental"
|
|
2601
|
+
},
|
|
2602
|
+
"immutable": true,
|
|
2603
|
+
"locationInModule": {
|
|
2604
|
+
"filename": "src/common/projen-drift-check-workflow.ts",
|
|
2605
|
+
"line": 34
|
|
2606
|
+
},
|
|
2607
|
+
"name": "workflowName",
|
|
2608
|
+
"optional": true,
|
|
2609
|
+
"type": {
|
|
2610
|
+
"primitive": "string"
|
|
2611
|
+
}
|
|
2612
|
+
}
|
|
2613
|
+
],
|
|
2614
|
+
"symbolId": "src/common/projen-drift-check-workflow:ProjenDriftCheckWorkflowOptions"
|
|
2615
|
+
},
|
|
2616
|
+
"@xpertss/projen-types.WorkflowChangeNoticeWorkflow": {
|
|
2617
|
+
"assembly": "@xpertss/projen-types",
|
|
2618
|
+
"base": "projen.Component",
|
|
2619
|
+
"docs": {
|
|
2620
|
+
"stability": "experimental"
|
|
2621
|
+
},
|
|
2622
|
+
"fqn": "@xpertss/projen-types.WorkflowChangeNoticeWorkflow",
|
|
2623
|
+
"initializer": {
|
|
2624
|
+
"docs": {
|
|
2625
|
+
"stability": "experimental"
|
|
2626
|
+
},
|
|
2627
|
+
"locationInModule": {
|
|
2628
|
+
"filename": "src/common/workflow-change-notice-workflow.ts",
|
|
2629
|
+
"line": 36
|
|
2630
|
+
},
|
|
2631
|
+
"parameters": [
|
|
2632
|
+
{
|
|
2633
|
+
"name": "scope",
|
|
2634
|
+
"type": {
|
|
2635
|
+
"fqn": "projen.github.GitHubProject"
|
|
2636
|
+
}
|
|
2637
|
+
},
|
|
2638
|
+
{
|
|
2639
|
+
"name": "options",
|
|
2640
|
+
"optional": true,
|
|
2641
|
+
"type": {
|
|
2642
|
+
"fqn": "@xpertss/projen-types.WorkflowChangeNoticeWorkflowOptions"
|
|
2643
|
+
}
|
|
2644
|
+
}
|
|
2645
|
+
]
|
|
2646
|
+
},
|
|
2647
|
+
"kind": "class",
|
|
2648
|
+
"locationInModule": {
|
|
2649
|
+
"filename": "src/common/workflow-change-notice-workflow.ts",
|
|
2650
|
+
"line": 33
|
|
2651
|
+
},
|
|
2652
|
+
"name": "WorkflowChangeNoticeWorkflow",
|
|
2653
|
+
"properties": [
|
|
2654
|
+
{
|
|
2655
|
+
"docs": {
|
|
2656
|
+
"stability": "experimental"
|
|
2657
|
+
},
|
|
2658
|
+
"immutable": true,
|
|
2659
|
+
"locationInModule": {
|
|
2660
|
+
"filename": "src/common/workflow-change-notice-workflow.ts",
|
|
2661
|
+
"line": 34
|
|
2662
|
+
},
|
|
2663
|
+
"name": "workflow",
|
|
2664
|
+
"type": {
|
|
2665
|
+
"fqn": "projen.github.GithubWorkflow"
|
|
2666
|
+
}
|
|
2667
|
+
}
|
|
2668
|
+
],
|
|
2669
|
+
"symbolId": "src/common/workflow-change-notice-workflow:WorkflowChangeNoticeWorkflow"
|
|
2670
|
+
},
|
|
2671
|
+
"@xpertss/projen-types.WorkflowChangeNoticeWorkflowOptions": {
|
|
2672
|
+
"assembly": "@xpertss/projen-types",
|
|
2673
|
+
"datatype": true,
|
|
2674
|
+
"docs": {
|
|
2675
|
+
"remarks": "Runs on `pull_request_target` (NOT `pull_request`) so it always executes\nthe copy of this workflow committed on the base branch - a PR cannot edit\nthis file to disable or weaken the notice. It checks out and executes\nnothing from the PR; it only lists the changed filenames via the GitHub\nAPI and posts a non-blocking NOTE. Because `pull_request_target` runs with\nthe base repo's normal token even for fork-originated PRs, the comment\nposts reliably with no degraded fallback.\n\nThis check NEVER fails the build - it is purely informational (reviewer\nattention). It is the tamper-proof backstop that bounds Check 1's\n(`ProjenDriftCheckWorkflow`) residual exposure. See the F003 spec's\nSecurity section.",
|
|
2676
|
+
"stability": "experimental",
|
|
2677
|
+
"summary": "PR-triggered, tamper-proof notice that a PR touches GitHub Actions workflow or action files."
|
|
2678
|
+
},
|
|
2679
|
+
"fqn": "@xpertss/projen-types.WorkflowChangeNoticeWorkflowOptions",
|
|
2680
|
+
"kind": "interface",
|
|
2681
|
+
"locationInModule": {
|
|
2682
|
+
"filename": "src/common/workflow-change-notice-workflow.ts",
|
|
2683
|
+
"line": 20
|
|
2684
|
+
},
|
|
2685
|
+
"name": "WorkflowChangeNoticeWorkflowOptions",
|
|
2686
|
+
"properties": [
|
|
2687
|
+
{
|
|
2688
|
+
"abstract": true,
|
|
2689
|
+
"docs": {
|
|
2690
|
+
"default": "[\".github/workflows/**\", \".github/actions/**\"]",
|
|
2691
|
+
"stability": "experimental",
|
|
2692
|
+
"summary": "Glob patterns (bash `[[ string == pattern ]]` semantics, where `*` also matches `/`) that trigger the notice when a changed PR file matches any of them."
|
|
2693
|
+
},
|
|
2694
|
+
"immutable": true,
|
|
2695
|
+
"locationInModule": {
|
|
2696
|
+
"filename": "src/common/workflow-change-notice-workflow.ts",
|
|
2697
|
+
"line": 27
|
|
2698
|
+
},
|
|
2699
|
+
"name": "watchPaths",
|
|
2700
|
+
"optional": true,
|
|
2701
|
+
"type": {
|
|
2702
|
+
"collection": {
|
|
2703
|
+
"elementtype": {
|
|
2704
|
+
"primitive": "string"
|
|
2705
|
+
},
|
|
2706
|
+
"kind": "array"
|
|
2707
|
+
}
|
|
2708
|
+
}
|
|
2709
|
+
},
|
|
2710
|
+
{
|
|
2711
|
+
"abstract": true,
|
|
2712
|
+
"docs": {
|
|
2713
|
+
"default": "\"workflow-change-notice\"",
|
|
2714
|
+
"stability": "experimental"
|
|
2715
|
+
},
|
|
2716
|
+
"immutable": true,
|
|
2717
|
+
"locationInModule": {
|
|
2718
|
+
"filename": "src/common/workflow-change-notice-workflow.ts",
|
|
2719
|
+
"line": 30
|
|
2720
|
+
},
|
|
2721
|
+
"name": "workflowName",
|
|
2722
|
+
"optional": true,
|
|
2723
|
+
"type": {
|
|
2724
|
+
"primitive": "string"
|
|
2725
|
+
}
|
|
2726
|
+
}
|
|
2727
|
+
],
|
|
2728
|
+
"symbolId": "src/common/workflow-change-notice-workflow:WorkflowChangeNoticeWorkflowOptions"
|
|
1738
2729
|
}
|
|
1739
2730
|
},
|
|
1740
|
-
"version": "0.0.
|
|
1741
|
-
"fingerprint": "
|
|
2731
|
+
"version": "0.0.2",
|
|
2732
|
+
"fingerprint": "SOREw4FllfwWFwxt950SKH0rCoRLyBQ4OrDsDR7T0SI="
|
|
1742
2733
|
}
|