@1aboveio/skills 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +3 -0
- package/README.md +90 -0
- package/bin/1aboveio-skills.mjs +18 -0
- package/package.json +28 -0
- package/runtime/skills/distribution/generated/recipes.json +1189 -0
- package/runtime/skills/distribution/scripts/bundles.mjs +280 -0
- package/runtime/skills/engineering/engineering-runtime/scripts/main-module.mjs +80 -0
- package/skills/backend/airflow-dag-develop/LICENSE +3 -0
- package/skills/backend/airflow-dag-develop/SKILL.md +111 -0
- package/skills/backend/app-debug/LICENSE +3 -0
- package/skills/backend/app-debug/SKILL.md +109 -0
- package/skills/backend/app-debug/references/common-errors.md +128 -0
- package/skills/backend/python-backend/LICENSE +3 -0
- package/skills/backend/python-backend/SKILL.md +326 -0
- package/skills/cicd-pipeline/cloud-build/LICENSE +3 -0
- package/skills/cicd-pipeline/cloud-build/SKILL.md +707 -0
- package/skills/cicd-pipeline/cloud-debug/LICENSE +3 -0
- package/skills/cicd-pipeline/cloud-debug/SKILL.md +316 -0
- package/skills/cicd-pipeline/cloud-debug/references/build-failures.md +238 -0
- package/skills/cicd-pipeline/cloud-debug/references/deploy-failures.md +376 -0
- package/skills/cicd-pipeline/cloud-debug/references/pipeline-failures.md +378 -0
- package/skills/cicd-pipeline/cloud-deploy/LICENSE +3 -0
- package/skills/cicd-pipeline/cloud-deploy/SKILL.md +229 -0
- package/skills/cicd-pipeline/cloud-deploy/references/config-templates.md +257 -0
- package/skills/cicd-pipeline/docker/LICENSE +3 -0
- package/skills/cicd-pipeline/docker/SKILL.md +126 -0
- package/skills/cicd-pipeline/google-cloud/LICENSE +3 -0
- package/skills/cicd-pipeline/google-cloud/SKILL.md +118 -0
- package/skills/cicd-pipeline/google-cloud/references/gcs.md +469 -0
- package/skills/cicd-pipeline/google-cloud/references/iam.md +451 -0
- package/skills/cicd-pipeline/google-cloud/references/project.md +349 -0
- package/skills/cicd-pipeline/google-cloud/references/secrets.md +336 -0
- package/skills/cicd-pipeline/google-cloud/references/vpc.md +312 -0
- package/skills/cicd-pipeline/google-cloud/scripts/create-sa.sh +36 -0
- package/skills/cicd-pipeline/google-cloud/scripts/gcp-config.sh +31 -0
- package/skills/cicd-pipeline/google-cloud/scripts/grant-iap.sh +41 -0
- package/skills/cicd-pipeline/google-cloud/scripts/setup-secrets.sh +48 -0
- package/skills/cicd-pipeline/mergify/LICENSE +3 -0
- package/skills/cicd-pipeline/mergify/SKILL.md +138 -0
- package/skills/cicd-pipeline/mergify/assets/templates/mergify.yml +237 -0
- package/skills/cicd-pipeline/mergify/assets/templates/ruleset.json +46 -0
- package/skills/cicd-pipeline/mergify/references/branch-protection.md +277 -0
- package/skills/cicd-pipeline/mergify/references/configuration.md +183 -0
- package/skills/cicd-pipeline/mergify/references/diagnosis.md +73 -0
- package/skills/cicd-pipeline/mergify/references/traps.md +78 -0
- package/skills/cicd-pipeline/mergify/references/watch-contract.md +218 -0
- package/skills/cicd-pipeline/mergify/scripts/audit-core.mjs +131 -0
- package/skills/cicd-pipeline/mergify/scripts/audit.mjs +4 -0
- package/skills/cicd-pipeline/mergify/scripts/watch-pr-delivery-core.mjs +663 -0
- package/skills/cicd-pipeline/mergify/scripts/watch-pr-delivery.mjs +4 -0
- package/skills/cicd-pipeline/podman/LICENSE +3 -0
- package/skills/cicd-pipeline/podman/SKILL.md +70 -0
- package/skills/cicd-pipeline/podman/agents/openai.yaml +4 -0
- package/skills/cicd-pipeline/podman/assets/templates/podman-compose-socket-directory.yml +6 -0
- package/skills/cicd-pipeline/podman/assets/templates/podman-service-override.conf +3 -0
- package/skills/cicd-pipeline/podman/references/compose-compatibility.md +70 -0
- package/skills/cicd-pipeline/podman/references/networking-and-ports.md +74 -0
- package/skills/cicd-pipeline/podman/references/rootless-services-and-sockets.md +156 -0
- package/skills/cicd-pipeline/podman/references/troubleshooting.md +98 -0
- package/skills/engineering/e2e-test/LICENSE +3 -0
- package/skills/engineering/e2e-test/SKILL.md +156 -0
- package/skills/engineering/e2e-test/assets/ci-gates.cloudbuild.yaml +272 -0
- package/skills/engineering/e2e-test/assets/ci-gates.github.yml +451 -0
- package/skills/engineering/e2e-test/assets/e2e-workflow.yml +282 -0
- package/skills/engineering/e2e-test/references/authoring/auth-flows.md +159 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-config.md +71 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-patterns.md +219 -0
- package/skills/engineering/e2e-test/references/authoring/test-skipping.md +44 -0
- package/skills/engineering/e2e-test/references/ci-integration.md +121 -0
- package/skills/engineering/e2e-test/references/ci-playwright-container.md +280 -0
- package/skills/engineering/e2e-test/references/debugging.md +36 -0
- package/skills/engineering/e2e-test/references/presentation-sweep.md +131 -0
- package/skills/engineering/e2e-test/references/reviewing.md +39 -0
- package/skills/engineering/e2e-test/references/route-discovery.md +50 -0
- package/skills/engineering/e2e-test/references/route-manifest.md +44 -0
- package/skills/engineering/e2e-test/scripts/detect-routes-fastapi.py +290 -0
- package/skills/engineering/e2e-test/scripts/detect-routes-nextjs.mjs +200 -0
- package/skills/engineering/e2e-test/scripts/post-visual-evidence.mjs +158 -0
- package/skills/engineering/e2e-test/scripts/presentation-checks.mjs +171 -0
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.mjs +179 -0
- package/skills/engineering/e2e-test/scripts/presentation-reachability.mjs +154 -0
- package/skills/engineering/e2e-test/scripts/presentation-render-health.mjs +141 -0
- package/skills/engineering/e2e-test/scripts/presentation-sweep.mjs +148 -0
- package/skills/engineering/e2e-test/scripts/presentation-temporal.mjs +127 -0
- package/skills/engineering/e2e-test/scripts/presentation-visual.mjs +84 -0
- package/skills/engineering/e2e-test/scripts/project-route-manifest.mjs +75 -0
- package/skills/engineering/e2e-test/scripts/validate-manifest.mjs +106 -0
- package/skills/engineering/engineering-runtime/LICENSE +3 -0
- package/skills/engineering/engineering-runtime/SKILL.md +10 -0
- package/skills/engineering/engineering-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/engineering-runtime/coherence/workflow.json +553 -0
- package/skills/engineering/engineering-runtime/scripts/exact-head-artifact.mjs +131 -0
- package/skills/engineering/engineering-runtime/scripts/head-check-set.mjs +398 -0
- package/skills/engineering/engineering-runtime/scripts/main-module.mjs +80 -0
- package/skills/engineering/engineering-runtime/scripts/mergify-yaml.mjs +11 -0
- package/skills/engineering/engineering-runtime/scripts/package-lock.json +43 -0
- package/skills/engineering/engineering-runtime/scripts/package.json +10 -0
- package/skills/engineering/engineering-runtime/scripts/required-check-plan.mjs +223 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +576 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +166 -0
- package/skills/engineering/ensure-coverage/LICENSE +3 -0
- package/skills/engineering/ensure-coverage/SKILL.md +136 -0
- package/skills/engineering/ensure-coverage/evals/evals.json +125 -0
- package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +91 -0
- package/skills/engineering/ensure-coverage/references/breadth/inventory-contract.md +83 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +44 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +16 -0
- package/skills/engineering/ensure-coverage/references/depth/characterization.md +68 -0
- package/skills/engineering/ensure-coverage/references/depth/coverage.config.example.json +25 -0
- package/skills/engineering/ensure-coverage/references/depth/grading.md +35 -0
- package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +87 -0
- package/skills/engineering/ensure-coverage/references/depth/test-smells.md +23 -0
- package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +164 -0
- package/skills/engineering/ensure-coverage/references/enforcement/hooks.md +85 -0
- package/skills/engineering/ensure-coverage/references/examples/coverage-ledger.md +109 -0
- package/skills/engineering/ensure-coverage/references/examples/refund-flow.md +33 -0
- package/skills/engineering/ensure-coverage/references/presentation/axis.md +78 -0
- package/skills/engineering/ensure-coverage/references/presentation/runner-contract.md +74 -0
- package/skills/engineering/ensure-coverage/references/process/audit-mode.md +33 -0
- package/skills/engineering/ensure-coverage/references/process/output-template.md +139 -0
- package/skills/engineering/ensure-coverage/references/process/review-contract-template.md +119 -0
- package/skills/engineering/ensure-coverage/references/process/scope-class.md +178 -0
- package/skills/engineering/ensure-coverage/references/process/test-strategy.md +55 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-config.schema.json +45 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-file.schema.json +93 -0
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.mjs +178 -0
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.mjs +101 -0
- package/skills/engineering/ensure-coverage/scripts/ci-audit.mjs +358 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-checklist.mjs +494 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.mjs +663 -0
- package/skills/engineering/ensure-coverage/scripts/design-parity.mjs +591 -0
- package/skills/engineering/ensure-coverage/scripts/evidence-block.mjs +367 -0
- package/skills/engineering/ensure-coverage/scripts/lint-tests.mjs +269 -0
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.mjs +176 -0
- package/skills/engineering/ensure-coverage/scripts/package-lock.json +76 -0
- package/skills/engineering/ensure-coverage/scripts/package.json +19 -0
- package/skills/engineering/ensure-coverage/scripts/scope-class.mjs +554 -0
- package/skills/engineering/harness-runtime/LICENSE +3 -0
- package/skills/engineering/harness-runtime/SKILL.md +18 -0
- package/skills/engineering/harness-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/harness-runtime/bin/discover-models.mjs +4 -0
- package/skills/engineering/harness-runtime/bin/model-catalog.mjs +4 -0
- package/skills/engineering/harness-runtime/contracts.md +15 -0
- package/skills/engineering/harness-runtime/discover-models.mjs +392 -0
- package/skills/engineering/harness-runtime/fixtures/native-question-schemas.json +33 -0
- package/skills/engineering/harness-runtime/fixtures/question-responses.json +54 -0
- package/skills/engineering/harness-runtime/index.mjs +767 -0
- package/skills/engineering/harness-runtime/model-catalog.mjs +787 -0
- package/skills/engineering/harness-runtime/native-question-contracts.md +37 -0
- package/skills/engineering/harness-runtime/references/model-catalog-seed.json +159 -0
- package/skills/engineering/harness-runtime/references/model-catalog.md +57 -0
- package/skills/engineering/implement-and-pr/LICENSE +3 -0
- package/skills/engineering/implement-and-pr/SKILL.md +176 -0
- package/skills/engineering/implement-and-pr/references/ci-iteration.md +10 -0
- package/skills/engineering/implement-and-pr/references/closeout.md +27 -0
- package/skills/engineering/implement-and-pr/references/contract-complete-fix-rounds.md +34 -0
- package/skills/engineering/implement-and-pr/references/evidence-rules.md +39 -0
- package/skills/engineering/implement-and-pr/references/incremental-plan.md +16 -0
- package/skills/engineering/implement-and-pr/references/self-review.md +23 -0
- package/skills/engineering/implement-and-pr/references/tdd-mode.md +18 -0
- package/skills/engineering/resolve-issues/LICENSE +3 -0
- package/skills/engineering/resolve-issues/SKILL.md +167 -0
- package/skills/engineering/resolve-issues/generated/workflow-repair-policy.json +448 -0
- package/skills/engineering/resolve-issues/references/breaker.md +82 -0
- package/skills/engineering/resolve-issues/references/deliverables.md +27 -0
- package/skills/engineering/resolve-issues/references/delivery.md +108 -0
- package/skills/engineering/resolve-issues/references/evidence-lane.md +21 -0
- package/skills/engineering/resolve-issues/references/exact-head-ci.md +287 -0
- package/skills/engineering/resolve-issues/references/fan-out.md +33 -0
- package/skills/engineering/resolve-issues/references/finalization.md +68 -0
- package/skills/engineering/resolve-issues/references/guarantees.md +10 -0
- package/skills/engineering/resolve-issues/references/high-risk.md +29 -0
- package/skills/engineering/resolve-issues/references/incidents/848/README.md +156 -0
- package/skills/engineering/resolve-issues/references/intake.md +86 -0
- package/skills/engineering/resolve-issues/references/integration-gate.md +53 -0
- package/skills/engineering/resolve-issues/references/interference.md +87 -0
- package/skills/engineering/resolve-issues/references/loop.md +134 -0
- package/skills/engineering/resolve-issues/references/model-catalog.md +9 -0
- package/skills/engineering/resolve-issues/references/postmortem.md +27 -0
- package/skills/engineering/resolve-issues/references/pre-flight-model-slots.md +41 -0
- package/skills/engineering/resolve-issues/references/pre-flight-recording-and-checkout.md +48 -0
- package/skills/engineering/resolve-issues/references/pre-flight.md +41 -0
- package/skills/engineering/resolve-issues/references/regression-checklist.md +26 -0
- package/skills/engineering/resolve-issues/references/run-state.md +288 -0
- package/skills/engineering/resolve-issues/references/sandboxed-testing.md +48 -0
- package/skills/engineering/resolve-issues/references/spawn-contract.md +96 -0
- package/skills/engineering/resolve-issues/references/terminal-evidence-journal.md +40 -0
- package/skills/engineering/resolve-issues/references/why.md +653 -0
- package/skills/engineering/resolve-issues/schemas/fix-round.schema.json +49 -0
- package/skills/engineering/resolve-issues/scripts/combine-and-verify.mjs +721 -0
- package/skills/engineering/resolve-issues/scripts/component-candidate.mjs +962 -0
- package/skills/engineering/resolve-issues/scripts/contract-revision.mjs +220 -0
- package/skills/engineering/resolve-issues/scripts/detect-delivery-mode.mjs +420 -0
- package/skills/engineering/resolve-issues/scripts/detect-target-branch.mjs +256 -0
- package/skills/engineering/resolve-issues/scripts/detect-workspace-mode.mjs +168 -0
- package/skills/engineering/resolve-issues/scripts/discover-models.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/doctrine.mjs +62 -0
- package/skills/engineering/resolve-issues/scripts/evidence-lifecycle-contract.mjs +191 -0
- package/skills/engineering/resolve-issues/scripts/exact-head-ci.mjs +413 -0
- package/skills/engineering/resolve-issues/scripts/exact-head-github-provider.mjs +332 -0
- package/skills/engineering/resolve-issues/scripts/finalize.mjs +488 -0
- package/skills/engineering/resolve-issues/scripts/fix-rounds.mjs +3307 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-circular-1001.json +16 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-valid-sequencing.json +51 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/fmm-express-830-component-candidate.json +17 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/head-check-set-1081.json +166 -0
- package/skills/engineering/resolve-issues/scripts/gate-value-series.mjs +92 -0
- package/skills/engineering/resolve-issues/scripts/guide-index.mjs +73 -0
- package/skills/engineering/resolve-issues/scripts/head-check-set.mjs +159 -0
- package/skills/engineering/resolve-issues/scripts/interference.mjs +427 -0
- package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/next-operations.mjs +419 -0
- package/skills/engineering/resolve-issues/scripts/postmortem.mjs +909 -0
- package/skills/engineering/resolve-issues/scripts/preflight-questions.mjs +322 -0
- package/skills/engineering/resolve-issues/scripts/reconcile-contained-unit-prs.mjs +415 -0
- package/skills/engineering/resolve-issues/scripts/release-state-contract.mjs +697 -0
- package/skills/engineering/resolve-issues/scripts/report.mjs +494 -0
- package/skills/engineering/resolve-issues/scripts/required-check-plan.mjs +172 -0
- package/skills/engineering/resolve-issues/scripts/round-metadata.mjs +79 -0
- package/skills/engineering/resolve-issues/scripts/run-state-review6-cases.mjs +334 -0
- package/skills/engineering/resolve-issues/scripts/run-state.mjs +4784 -0
- package/skills/engineering/resolve-issues/scripts/sandbox-selftest.mjs +395 -0
- package/skills/engineering/resolve-issues/scripts/spawn-contract.mjs +290 -0
- package/skills/engineering/resolve-issues/scripts/terminal-dispositions.mjs +170 -0
- package/skills/engineering/resolve-issues/scripts/terminal-evidence-journal.mjs +293 -0
- package/skills/engineering/resolve-issues/scripts/unit-kind.mjs +197 -0
- package/skills/engineering/resolve-issues/scripts/unit-lifecycle.mjs +127 -0
- package/skills/engineering/resolve-issues/scripts/watch-delivery.mjs +893 -0
- package/skills/engineering/resolve-issues/scripts/workspaces.mjs +829 -0
- package/skills/engineering/resolve-issues/workflows/independent-review.workflow.js +290 -0
- package/skills/engineering/resolve-issues/workflows/prior-art-scan.workflow.js +80 -0
- package/skills/engineering/resolve-issues/workflows/workflow-smoke.mjs +102 -0
- package/skills/engineering/resolve-release/LICENSE +3 -0
- package/skills/engineering/resolve-release/SKILL.md +112 -0
- package/skills/engineering/resolve-release/references/assembly.md +137 -0
- package/skills/engineering/resolve-release/references/auto-when-green.md +56 -0
- package/skills/engineering/resolve-release/references/candidate.md +167 -0
- package/skills/engineering/resolve-release/references/exposure.md +178 -0
- package/skills/engineering/resolve-release/references/handoff.md +24 -0
- package/skills/engineering/resolve-release/references/postmortem.md +230 -0
- package/skills/engineering/resolve-release/references/preflight.md +207 -0
- package/skills/engineering/resolve-release/references/principles.md +94 -0
- package/skills/engineering/resolve-release/references/regression-checklist.md +36 -0
- package/skills/engineering/resolve-release/references/related-skills.md +12 -0
- package/skills/engineering/resolve-release/references/routing.md +149 -0
- package/skills/engineering/resolve-release/references/verified-sha-github-flow.md +285 -0
- package/skills/engineering/resolve-release/references/versioning.md +202 -0
- package/skills/engineering/resolve-release/references/why.md +53 -0
- package/skills/engineering/resolve-release/scripts/adapter-completion-artifact.mjs +389 -0
- package/skills/engineering/resolve-release/scripts/build-changes.mjs +209 -0
- package/skills/engineering/resolve-release/scripts/candidate-hygiene.mjs +407 -0
- package/skills/engineering/resolve-release/scripts/candidate-identity.mjs +904 -0
- package/skills/engineering/resolve-release/scripts/candidate-traffic.mjs +81 -0
- package/skills/engineering/resolve-release/scripts/checked-adapter-loader.mjs +612 -0
- package/skills/engineering/resolve-release/scripts/close-attempt.mjs +135 -0
- package/skills/engineering/resolve-release/scripts/closeout-release.mjs +161 -0
- package/skills/engineering/resolve-release/scripts/doctrine.mjs +106 -0
- package/skills/engineering/resolve-release/scripts/durable-processing.mjs +522 -0
- package/skills/engineering/resolve-release/scripts/ensure-target-green.mjs +659 -0
- package/skills/engineering/resolve-release/scripts/evidence-bundle.mjs +1014 -0
- package/skills/engineering/resolve-release/scripts/finalize-release.mjs +526 -0
- package/skills/engineering/resolve-release/scripts/fixtures/durable-processing-adapter.mjs +169 -0
- package/skills/engineering/resolve-release/scripts/green-gate.mjs +599 -0
- package/skills/engineering/resolve-release/scripts/isolated-adapter-evaluator.mjs +752 -0
- package/skills/engineering/resolve-release/scripts/metadata-pr-status.mjs +56 -0
- package/skills/engineering/resolve-release/scripts/metadata-sync.mjs +1538 -0
- package/skills/engineering/resolve-release/scripts/postmortem.mjs +381 -0
- package/skills/engineering/resolve-release/scripts/preflight-probes.mjs +498 -0
- package/skills/engineering/resolve-release/scripts/production-endpoints.mjs +326 -0
- package/skills/engineering/resolve-release/scripts/rc-circuit-breaker.mjs +272 -0
- package/skills/engineering/resolve-release/scripts/report.mjs +417 -0
- package/skills/engineering/resolve-release/scripts/reprobe-credentials.mjs +114 -0
- package/skills/engineering/resolve-release/scripts/revalidate-candidate.mjs +238 -0
- package/skills/engineering/resolve-release/scripts/review-packet.mjs +503 -0
- package/skills/engineering/resolve-release/scripts/rollback-floor.mjs +263 -0
- package/skills/engineering/resolve-release/scripts/version-assert.mjs +339 -0
- package/skills/engineering/resolve-release/scripts/version-postmortem.mjs +485 -0
- package/skills/engineering/resolve-release/scripts/version.mjs +1199 -0
- package/skills/engineering/resolve-release/scripts/watch-candidate-delivery.mjs +449 -0
- package/skills/engineering/resolve-release/vendor/ACORN-LICENSE +21 -0
- package/skills/engineering/resolve-release/vendor/README.md +60 -0
- package/skills/engineering/resolve-release/vendor/acorn.mjs +6233 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/LICENSE +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/README.md +341 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/README.template.md +70 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs +7 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.mts +2033 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.ts +2033 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js +7 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/package.json +49 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/LICENSE +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/README.md +5 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.mts +549 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.ts +549 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/package.json +36 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/LICENSE +47 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/README.md +82 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.d.ts +11 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.mjs +22 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cjs +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.cjs +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.d.ts +11 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.d.ts +11 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.mjs +25 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.wasm +0 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.mts +85 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.ts +85 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.mts +20 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.ts +20 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/package.json +61 -0
- package/skills/engineering/review-pr/LICENSE +3 -0
- package/skills/engineering/review-pr/SKILL.md +123 -0
- package/skills/engineering/review-pr/references/adversarial-reviewer-prompt.md +42 -0
- package/skills/engineering/review-pr/references/code-correctness.md +5 -0
- package/skills/engineering/review-pr/references/contract-freshness.md +9 -0
- package/skills/engineering/review-pr/references/coordination.md +18 -0
- package/skills/engineering/review-pr/references/domain-hazards.md +123 -0
- package/skills/engineering/review-pr/references/finding-themes.md +7 -0
- package/skills/engineering/review-pr/references/github-posting.md +98 -0
- package/skills/engineering/review-pr/references/golden-path-smoke.md +5 -0
- package/skills/engineering/review-pr/references/incremental-output.md +16 -0
- package/skills/engineering/review-pr/references/inputs-and-discovery.md +31 -0
- package/skills/engineering/review-pr/references/output-format.md +99 -0
- package/skills/engineering/review-pr/references/over-mock-screen.md +7 -0
- package/skills/engineering/review-pr/references/promotion-prs.md +16 -0
- package/skills/engineering/review-pr/references/re-review.md +18 -0
- package/skills/engineering/review-pr/references/review-method.md +199 -0
- package/skills/engineering/review-pr/references/review-mode.md +30 -0
- package/skills/engineering/review-pr/references/review-posture.md +53 -0
- package/skills/engineering/review-pr/references/round1-depth.md +62 -0
- package/skills/engineering/review-pr/references/scripts.md +17 -0
- package/skills/engineering/review-pr/references/workflow.md +16 -0
- package/skills/engineering/review-pr/schemas/findings.schema.json +282 -0
- package/skills/engineering/review-pr/scripts/finding-contract.mjs +285 -0
- package/skills/engineering/review-pr/scripts/post-review.mjs +405 -0
- package/skills/engineering/review-pr/scripts/pr-context.mjs +207 -0
- package/skills/engineering/review-pr/scripts/scan-diff.mjs +365 -0
- package/skills/engineering/review-pr/scripts/theme-contract.mjs +57 -0
- package/skills/engineering/smoke/LICENSE +3 -0
- package/skills/engineering/smoke/SKILL.md +131 -0
- package/skills/engineering/smoke/assets/smoke.manifest.example.json +53 -0
- package/skills/engineering/smoke/references/manifest.md +192 -0
- package/skills/engineering/smoke/scripts/smoke.mjs +713 -0
- package/skills/fullstack/better-auth/LICENSE +3 -0
- package/skills/fullstack/better-auth/SKILL.md +601 -0
- package/skills/fullstack/better-auth/references/feishu-api.md +270 -0
- package/skills/fullstack/monorepo/LICENSE +3 -0
- package/skills/fullstack/monorepo/SKILL.md +465 -0
- package/skills/fullstack/nextjs-fullstack/LICENSE +3 -0
- package/skills/fullstack/nextjs-fullstack/SKILL.md +210 -0
- package/skills/fullstack/nextjs-fullstack/conventions.md +318 -0
- package/skills/fullstack/nextjs-fullstack/frontend-conventions.md +61 -0
- package/skills/fullstack/nextjs-fullstack/nextjs16.md +287 -0
- package/skills/fullstack/nextjs-fullstack/server-actions.md +409 -0
- package/skills/fullstack/prisma-setup/LICENSE +3 -0
- package/skills/fullstack/prisma-setup/SKILL.md +180 -0
- package/skills/fullstack/prisma-setup/nextjs.md +258 -0
- package/skills/fullstack/prisma-setup/turborepo.md +301 -0
- package/skills/fullstack/shadcn/LICENSE +3 -0
- package/skills/fullstack/shadcn/SKILL.md +119 -0
- package/skills/fullstack/shadcn/assets/shadcn-small.png +0 -0
- package/skills/fullstack/shadcn/assets/shadcn.png +0 -0
- package/skills/fullstack/shadcn/cli.md +411 -0
- package/skills/fullstack/shadcn/customization.md +224 -0
- package/skills/fullstack/shadcn/evals/evals.json +90 -0
- package/skills/fullstack/shadcn/mcp.md +101 -0
- package/skills/fullstack/shadcn/rules/base-vs-radix.md +323 -0
- package/skills/fullstack/shadcn/rules/component-selection.md +67 -0
- package/skills/fullstack/shadcn/rules/composition.md +195 -0
- package/skills/fullstack/shadcn/rules/data-table.md +201 -0
- package/skills/fullstack/shadcn/rules/forms.md +255 -0
- package/skills/fullstack/shadcn/rules/icons.md +103 -0
- package/skills/fullstack/shadcn/rules/styling.md +167 -0
- package/skills/fullstack/zod-v4/LICENSE +3 -0
- package/skills/fullstack/zod-v4/SKILL.md +287 -0
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
# IAM Patterns
|
|
2
|
+
|
|
3
|
+
IAM configuration for GCP resources, service accounts, and access control.
|
|
4
|
+
|
|
5
|
+
## Service Account Operations
|
|
6
|
+
|
|
7
|
+
### Create Service Account
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
gcloud iam service-accounts create $NAME \
|
|
11
|
+
--display-name="$DISPLAY_NAME" \
|
|
12
|
+
--description="$DESCRIPTION" \
|
|
13
|
+
--project=$PROJECT_ID
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### List Service Accounts
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# All service accounts in project
|
|
20
|
+
gcloud iam service-accounts list --project=$PROJECT_ID
|
|
21
|
+
|
|
22
|
+
# Filter by email pattern
|
|
23
|
+
gcloud iam service-accounts list \
|
|
24
|
+
--filter="email:~$PATTERN" \
|
|
25
|
+
--project=$PROJECT_ID
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Get Service Account Email
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# From name
|
|
32
|
+
SA_EMAIL="$NAME@$PROJECT_ID.iam.gserviceaccount.com"
|
|
33
|
+
|
|
34
|
+
# From project number
|
|
35
|
+
SA_EMAIL="$NAME@$PROJECT_NUMBER.iam.gserviceaccount.com"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Role Bindings
|
|
41
|
+
|
|
42
|
+
### Grant Role to Service Account
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
gcloud projects add-iam-policy-binding $PROJECT_ID \
|
|
46
|
+
--member="serviceAccount:$SA_EMAIL" \
|
|
47
|
+
--role="roles/$ROLE"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Grant Role to User
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
gcloud projects add-iam-policy-binding $PROJECT_ID \
|
|
54
|
+
--member="user:$EMAIL" \
|
|
55
|
+
--role="roles/$ROLE"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Grant Role to Group
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
gcloud projects add-iam-policy-binding $PROJECT_ID \
|
|
62
|
+
--member="group:$EMAIL" \
|
|
63
|
+
--role="roles/$ROLE"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Grant Role to Domain
|
|
67
|
+
|
|
68
|
+
Grant access to all users in a Google Workspace domain:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Grant domain-wide access (e.g., all $YOUR_ORG employees)
|
|
72
|
+
gcloud projects add-iam-policy-binding $PROJECT_ID \
|
|
73
|
+
--member="domain:$YOUR_DOMAIN" \
|
|
74
|
+
--role="roles/$ROLE"
|
|
75
|
+
|
|
76
|
+
# Common roles for domain access
|
|
77
|
+
# roles/viewer - Read-only access
|
|
78
|
+
# roles/browser - Can browse resources
|
|
79
|
+
# roles/editor - Read/write access
|
|
80
|
+
# roles/owner - Full ownership (use with caution)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Remove Role
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
gcloud projects remove-iam-policy-binding $PROJECT_ID \
|
|
87
|
+
--member="serviceAccount:$SA_EMAIL" \
|
|
88
|
+
--role="roles/$ROLE"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Common Roles
|
|
94
|
+
|
|
95
|
+
| Role | Use Case |
|
|
96
|
+
|------|----------|
|
|
97
|
+
| `roles/secretmanager.secretAccessor` | Read secrets from Secret Manager |
|
|
98
|
+
| `roles/secretmanager.admin` | Create/manage secrets |
|
|
99
|
+
| `roles/iam.serviceAccountOpenIdTokenCreator` | Mint ID tokens for SAs |
|
|
100
|
+
| `roles/iam.serviceAccountKeyAdmin` | Create/manage SA keys |
|
|
101
|
+
| `roles/run.invoker` | Invoke Cloud Run services |
|
|
102
|
+
| `roles/run.admin` | Manage Cloud Run resources |
|
|
103
|
+
| `roles/cloudbuild.builds.builder` | Run Cloud Build builds |
|
|
104
|
+
| `roles/clouddeploy.operator` | Manage Cloud Deploy pipelines |
|
|
105
|
+
| `roles/composer.viewer` | View Airflow environments |
|
|
106
|
+
| `roles/composer.worker` | Run Airflow tasks |
|
|
107
|
+
| `roles/iap.httpsResourceAccessor` | Access IAP-protected resources |
|
|
108
|
+
| `roles/iap.httpsResourceAdmin` | Manage IAP settings |
|
|
109
|
+
| `roles/cloudsql.client` | Connect to Cloud SQL |
|
|
110
|
+
| `roles/storage.objectViewer` | Read from GCS |
|
|
111
|
+
| `roles/storage.objectAdmin` | Manage GCS objects |
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Token Minting
|
|
116
|
+
|
|
117
|
+
### Mint ID Token (IAMCredentials)
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# Get ID token for service account
|
|
121
|
+
gcloud auth print-identity-token \
|
|
122
|
+
--audiences=$AUDIENCE \
|
|
123
|
+
--impersonate-service-account=$SA_EMAIL
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Sign JWT with Service Account
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# Create claims file
|
|
130
|
+
cat > /tmp/claims.json <<EOF
|
|
131
|
+
{
|
|
132
|
+
"iss": "$SA_EMAIL",
|
|
133
|
+
"sub": "$SA_EMAIL",
|
|
134
|
+
"aud": "$SERVICE_URL/*",
|
|
135
|
+
"iat": $(date +%s),
|
|
136
|
+
"exp": $(($(date +%s) + 600))
|
|
137
|
+
}
|
|
138
|
+
EOF
|
|
139
|
+
|
|
140
|
+
# Sign JWT
|
|
141
|
+
gcloud iam service-accounts sign-jwt /tmp/claims.json /tmp/signed.jwt \
|
|
142
|
+
--iam-account=$SA_EMAIL
|
|
143
|
+
|
|
144
|
+
# Extract token
|
|
145
|
+
TOKEN=$(cat /tmp/signed.jwt)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## IAP Access Patterns
|
|
151
|
+
|
|
152
|
+
### Cloud Run Native IAP
|
|
153
|
+
|
|
154
|
+
**Preferred method** — no load balancer or NEG required. Cloud Run supports IAP natively via the `--iap` flag (beta).
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# Enable IAP on a new Cloud Run service
|
|
158
|
+
gcloud beta run deploy $SERVICE \
|
|
159
|
+
--region=us-central1 \
|
|
160
|
+
--image=$IMAGE \
|
|
161
|
+
--no-allow-unauthenticated \
|
|
162
|
+
--iap
|
|
163
|
+
|
|
164
|
+
# Enable IAP on an existing service
|
|
165
|
+
gcloud beta run services update $SERVICE \
|
|
166
|
+
--region=us-central1 \
|
|
167
|
+
--iap
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Grant access** via `iap web` with `--resource-type=cloud-run`:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# Grant access to entire domain (e.g., all $YOUR_ORG employees)
|
|
174
|
+
gcloud beta iap web add-iam-policy-binding \
|
|
175
|
+
--resource-type=cloud-run \
|
|
176
|
+
--service=$SERVICE \
|
|
177
|
+
--region=us-central1 \
|
|
178
|
+
--member="domain:$YOUR_DOMAIN" \
|
|
179
|
+
--role="roles/iap.httpsResourceAccessor" \
|
|
180
|
+
--project=$PROJECT_ID
|
|
181
|
+
|
|
182
|
+
# Grant access to specific user
|
|
183
|
+
gcloud beta iap web add-iam-policy-binding \
|
|
184
|
+
--resource-type=cloud-run \
|
|
185
|
+
--service=$SERVICE \
|
|
186
|
+
--region=us-central1 \
|
|
187
|
+
--member="user:$EMAIL" \
|
|
188
|
+
--role="roles/iap.httpsResourceAccessor" \
|
|
189
|
+
--project=$PROJECT_ID
|
|
190
|
+
|
|
191
|
+
# Grant access to service account
|
|
192
|
+
gcloud beta iap web add-iam-policy-binding \
|
|
193
|
+
--resource-type=cloud-run \
|
|
194
|
+
--service=$SERVICE \
|
|
195
|
+
--region=us-central1 \
|
|
196
|
+
--member="serviceAccount:$SA_EMAIL" \
|
|
197
|
+
--role="roles/iap.httpsResourceAccessor" \
|
|
198
|
+
--project=$PROJECT_ID
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Check IAP policy:**
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
gcloud beta iap web get-iam-policy \
|
|
205
|
+
--resource-type=cloud-run \
|
|
206
|
+
--service=$SERVICE \
|
|
207
|
+
--region=us-central1 \
|
|
208
|
+
--project=$PROJECT_ID
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**In Cloud Build (`cloudbuild.yaml`):**
|
|
212
|
+
|
|
213
|
+
```yaml
|
|
214
|
+
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
|
|
215
|
+
entrypoint: bash
|
|
216
|
+
args:
|
|
217
|
+
- '-c'
|
|
218
|
+
- |
|
|
219
|
+
gcloud beta run deploy $SERVICE \
|
|
220
|
+
--image=$IMAGE \
|
|
221
|
+
--region=$REGION \
|
|
222
|
+
--no-allow-unauthenticated \
|
|
223
|
+
--iap
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Enable IAP on Cloud Run (via gcloud run):**
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# Deploy with --no-allow-unauthenticated to block public access
|
|
230
|
+
gcloud run deploy {service}-{env} \
|
|
231
|
+
--image=$LOCATION-docker.pkg.dev/$PROJECT_ID/{repo}/{service}:latest \
|
|
232
|
+
--region=$LOCATION \
|
|
233
|
+
--platform=managed \
|
|
234
|
+
--no-allow-unauthenticated
|
|
235
|
+
|
|
236
|
+
# Enable IAP protection
|
|
237
|
+
gcloud beta run services update {service}-{env} \
|
|
238
|
+
--region=$LOCATION \
|
|
239
|
+
--iap
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
**Grant IAP access via gcloud run:**
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# Grant $YOUR_ORG domain users access to IAP-protected Cloud Run
|
|
246
|
+
gcloud run services add-iam-policy-binding {service}-{env} \
|
|
247
|
+
--project=$PROJECT_ID \
|
|
248
|
+
--region=$LOCATION \
|
|
249
|
+
--member="domain:$YOUR_DOMAIN" \
|
|
250
|
+
--role="roles/iap.httpsResourceAccessor"
|
|
251
|
+
|
|
252
|
+
# Grant specific service account for E2E runners or CI/CD
|
|
253
|
+
gcloud run services add-iam-policy-binding {service}-{env} \
|
|
254
|
+
--project=$PROJECT_ID \
|
|
255
|
+
--region=$LOCATION \
|
|
256
|
+
--member="serviceAccount:e2e-runner@$PROJECT_ID.iam.gserviceaccount.com" \
|
|
257
|
+
--role="roles/run.invoker"
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Known limitations:**
|
|
261
|
+
- Project must be within a Google Cloud organization
|
|
262
|
+
- Identities must be from within the same organization
|
|
263
|
+
- Cannot configure IAP on both a load balancer and the Cloud Run service
|
|
264
|
+
- Some integrations (e.g., Pub/Sub) may not work with IAP enabled
|
|
265
|
+
|
|
266
|
+
### Load Balancer-Based IAP (Legacy)
|
|
267
|
+
|
|
268
|
+
Use only when Cloud Run native IAP is not suitable (e.g., custom domain SSL, multi-service routing).
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
# Grant IAP access on backend service
|
|
272
|
+
gcloud iap web add-iam-policy-binding \
|
|
273
|
+
--project=$PROJECT_ID \
|
|
274
|
+
--resource-type=backend-services \
|
|
275
|
+
--service=BACKEND_SERVICE_NAME \
|
|
276
|
+
--member="serviceAccount:$SA_EMAIL" \
|
|
277
|
+
--role="roles/iap.httpsResourceAccessor"
|
|
278
|
+
|
|
279
|
+
# Grant to user
|
|
280
|
+
gcloud iap web add-iam-policy-binding \
|
|
281
|
+
--project=$PROJECT_ID \
|
|
282
|
+
--resource-type=backend-services \
|
|
283
|
+
--service=BACKEND_SERVICE_NAME \
|
|
284
|
+
--member="user:$EMAIL" \
|
|
285
|
+
--role="roles/iap.httpsResourceAccessor"
|
|
286
|
+
|
|
287
|
+
# Grant to domain
|
|
288
|
+
gcloud iap web add-iam-policy-binding \
|
|
289
|
+
--project=$PROJECT_ID \
|
|
290
|
+
--resource-type=backend-services \
|
|
291
|
+
--service=BACKEND_SERVICE_NAME \
|
|
292
|
+
--member="domain:$YOUR_DOMAIN" \
|
|
293
|
+
--role="roles/iap.httpsResourceAccessor"
|
|
294
|
+
|
|
295
|
+
# Get IAP OAuth Client ID
|
|
296
|
+
gcloud iap web describe \
|
|
297
|
+
--project=$PROJECT_ID \
|
|
298
|
+
--resource-type=backend-services \
|
|
299
|
+
--service=BACKEND_SERVICE_NAME \
|
|
300
|
+
--format="value(oauth2ClientId)"
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Service Account Authentication (JWT Pattern)
|
|
304
|
+
|
|
305
|
+
For E2E tests, automated runners, or services that need to call IAP-protected Cloud Run endpoints programmatically using a service account signed JWT:
|
|
306
|
+
|
|
307
|
+
**1. Grant IAP access to the service account**
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
# Allow the service account to access the IAP-protected Cloud Run service
|
|
311
|
+
gcloud beta iap web add-iam-policy-binding \
|
|
312
|
+
--member="serviceAccount:$SA_EMAIL" \
|
|
313
|
+
--role="roles/iap.httpsResourceAccessor" \
|
|
314
|
+
--resource-type=cloud-run \
|
|
315
|
+
--service={service}-{env} \
|
|
316
|
+
--project=$PROJECT_ID \
|
|
317
|
+
--region=$LOCATION
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**2. Create and sign JWT payload**
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
# Define variables
|
|
324
|
+
SA_EMAIL="e2e-runner@$PROJECT_ID.iam.gserviceaccount.com"
|
|
325
|
+
BASE_URL="https://{service}-{env}-$LOCATION.a.run.app"
|
|
326
|
+
|
|
327
|
+
# Create JWT payload
|
|
328
|
+
JWT_PAYLOAD=$(printf '{"iss":"%s","sub":"%s","aud":"%s/*","iat":%d,"exp":%d}' \
|
|
329
|
+
"$SA_EMAIL" "$SA_EMAIL" "$BASE_URL" "$(date +%s)" "$(($(date +%s)+3600))")
|
|
330
|
+
|
|
331
|
+
# Sign via IAMCredentials signJwt API
|
|
332
|
+
# gcloud sign-jwt already returns a valid JWT (header.payload.signature)
|
|
333
|
+
# NO base64 encoding needed - that would double-encode it!
|
|
334
|
+
SIGNED_JWT=$(gcloud iam service-accounts sign-jwt \
|
|
335
|
+
--iam-account="$SA_EMAIL" \
|
|
336
|
+
/dev/stdin /dev/stdout <<< "$JWT_PAYLOAD")
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
**Key JWT claims:**
|
|
340
|
+
- `iss` = service account email
|
|
341
|
+
- `sub` = service account email
|
|
342
|
+
- `aud` = `${BASE_URL}/*` (must include the wildcard)
|
|
343
|
+
- `iat` / `exp` = now / now + 1 hour
|
|
344
|
+
|
|
345
|
+
**3. Use as Bearer token in Playwright**
|
|
346
|
+
|
|
347
|
+
```typescript
|
|
348
|
+
// In test setup / globalSetup
|
|
349
|
+
const token = process.env.IAP_ID_TOKEN;
|
|
350
|
+
const context = await browser.newContext({
|
|
351
|
+
extraHTTPHeaders: {
|
|
352
|
+
'Authorization': `Bearer ${token}`,
|
|
353
|
+
},
|
|
354
|
+
});
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
**4. Preflight check (recommended)**
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
# Add a GET to ${BASE_URL}/ before running tests — fail fast if IAP token is rejected
|
|
361
|
+
curl -H "Authorization: Bearer $SIGNED_JWT" "${BASE_URL}/"
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
**Why this pattern:**
|
|
365
|
+
- Uses `gcloud iam service-accounts sign-jwt` via IAMCredentials API
|
|
366
|
+
- Signed JWT directly as Bearer token (no OAuth exchange needed)
|
|
367
|
+
- Works for E2E tests, CI/CD runners, and programmatic access
|
|
368
|
+
- Service account can sign JWT without storing private keys
|
|
369
|
+
|
|
370
|
+
**Common mistake:** Using the metadata server's ID token instead of a signed JWT, or setting `aud` to the base URL without the wildcard.
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
## Cloud Run SA Permissions
|
|
374
|
+
|
|
375
|
+
### Grant Cloud Run Invoker
|
|
376
|
+
|
|
377
|
+
```bash
|
|
378
|
+
gcloud run services add-iam-policy-binding $SERVICE \
|
|
379
|
+
--project=$PROJECT_ID \
|
|
380
|
+
--region=us-central1 \
|
|
381
|
+
--member="serviceAccount:$SA_EMAIL" \
|
|
382
|
+
--role="roles/run.invoker"
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
### Grant Cloud Run Admin (Deployments)
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
gcloud run services add-iam-policy-binding $SERVICE \
|
|
389
|
+
--project=$PROJECT_ID \
|
|
390
|
+
--region=us-central1 \
|
|
391
|
+
--member="serviceAccount:$SA_EMAIL" \
|
|
392
|
+
--role="roles/run.admin"
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## Cloud SQL Access
|
|
398
|
+
|
|
399
|
+
### Connect with SA (Automatic IAM Auth)
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
# Grant Cloud SQL Client role
|
|
403
|
+
gcloud projects add-iam-policy-binding $PROJECT_ID \
|
|
404
|
+
--member="serviceAccount:$SA_EMAIL" \
|
|
405
|
+
--role="roles/cloudsql.client"
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### Generate Connection String (Cloud SQL Auth Proxy)
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
# Format: /cloudsql/INSTANCE_CONNECTION_NAME
|
|
412
|
+
CONN_STRING="/cloudsql/$PROJECT:$REGION:$INSTANCE"
|
|
413
|
+
|
|
414
|
+
# Use in DATABASE_URL
|
|
415
|
+
postgresql://$USER:$PASSWORD@localhost/$DB?host=$CONN_STRING
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## Debug IAM Issues
|
|
421
|
+
|
|
422
|
+
### Check Effective Policy
|
|
423
|
+
|
|
424
|
+
```bash
|
|
425
|
+
# For service account
|
|
426
|
+
gcloud iam service-accounts get-iam-policy $SA_EMAIL
|
|
427
|
+
|
|
428
|
+
# For project
|
|
429
|
+
gcloud projects get-iam-policy $PROJECT_ID
|
|
430
|
+
|
|
431
|
+
# For specific resource
|
|
432
|
+
gcloud run services get-iam-policy $SERVICE --region=us-central1
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### Test Permissions
|
|
436
|
+
|
|
437
|
+
```bash
|
|
438
|
+
# Test if SA can perform action
|
|
439
|
+
gcloud auth list --impersonate-service-account=$SA_EMAIL
|
|
440
|
+
gcloud run services describe $SERVICE --region=us-central1
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### Common Permission Errors
|
|
444
|
+
|
|
445
|
+
| Error | Missing Permission | Fix |
|
|
446
|
+
|-------|-------------------|-----|
|
|
447
|
+
| `iam.serviceAccounts.getOpenIdToken` | Token creator | Add `roles/iam.serviceAccountOpenIdTokenCreator` |
|
|
448
|
+
| `secretmanager.versions.access` | Secret accessor | Add `roles/secretmanager.secretAccessor` |
|
|
449
|
+
| `run.services.invoke` | Run invoker | Add `roles/run.invoker` |
|
|
450
|
+
| `cloudsql.instances.connect` | SQL client | Add `roles/cloudsql.client` |
|
|
451
|
+
| `iap.web.getIamPolicy` | IAP access | Add `roles/iap.httpsResourceAccessor` |
|