-
Cross-Project Artifact Promotion Support: Added support for promoting container images and GCE disk images between projects (e.g., dev → prod).
For
project-factory:- Added
cross_project_artifact_accessvariable for single-project use cases - Added
google_artifact_registry_repository_iam_member.cross_project_readerresource - Added
google_storage_bucket_iam_member.cross_project_bucket_readerresource - Artifact Registry API (
artifactregistry.googleapis.com) now included in defaultactivate_apislist
For
environment-factory:- Added
enable_cross_env_artifactsvariable (default:false). When enabled, creates standalone IAM resources that grant each environment read access to ALL lower environments (prod can read from stg and dev, stg can read from dev) - Added
regionvariable for artifact registry location configuration - Implements automatic waterfall promotion chain: dev (index 0) → stg (index 1) → prod (index 2)
- Architecture Note: Cross-project IAM bindings are created as standalone resources after all projects are created, avoiding circular dependency issues
Use Case: Enable CI/CD pipelines to copy tested artifacts from dev to prod without rebuilding, ensuring immutable, traceable deployments.
- Added
project-factory.cross_project_artifact_accessvariable - Configure cross-project artifact registry and GCS access (for single-project use)environment-factory.enable_cross_env_artifactsvariable - Enable automatic cross-environment artifact accessenvironment-factory.regionvariable - Configure region for artifact registries (default: us-central1)environment-factorystandalone IAM resources for cross-environment access (avoids circular dependencies)- Artifact Registry API to default activated APIs list
- Resolved circular dependency in
environment-factorywhenenable_cross_env_artifacts = true. The module now creates cross-project IAM bindings as standalone resources that depend on all projects being created first, rather than passing them as inputs to the project-factory module.
- Updated all READMEs and examples to document new artifact promotion features
- Clarified architecture:
environment-factorycreates standalone IAM resources;project-factoryacceptscross_project_artifact_accessas input for single-project use cases - Added example showing cross-project artifact access configuration
-
WIF Refactor - Hub & Spoke Model: The
project-factoryandenvironment-factorymodules no longer create Workload Identity Pools and Providers. Instead, they consume a global pool created byopenjusticeok/infrastructure.Migration Required:
- Remove
wif_pool_idandwif_provider_idvariables (no longer supported) - Add
wif_pool_namevariable with the full resource name fromopenjusticeok/infrastructure - Example:
wif_pool_name = "projects/12345/locations/global/workloadIdentityPools/github-pool"
Why: This prevents hitting GCP quota limits on WIF pools (max 10 per project) and centralizes identity security policy in
openjusticeok/infrastructure. This is the "Hub & Spoke" architecture. - Remove
-
New required variable:
wif_pool_name(string) - The full resource name of the global WIF pool
- Support for Hub & Spoke WIF architecture
- Validation for
wif_pool_nameformat - Demo project in
openjusticeok/infrastructureto validate the new pattern
wif_pool_idvariable (no longer creates pools)wif_provider_idvariable (no longer creates providers)google_iam_workload_identity_poolresource from project-factorygoogle_iam_workload_identity_pool_providerresource from project-factory
- environment-factory: Added a new module,
environment-factory, to simplify the creation of multi-environment GCP setups. This module uses theproject-factoryto provision consistent, isolated projects for environments likedev,stg, andprod.
- Updated the top-level
README.mdto include information about the newenvironment-factorymodule. - Created a comprehensive
README.mdfor theenvironment-factorymodule, including features, usage examples, and a full list of inputs and outputs.
- multi-env-project-factory: Removed the
multi-env-project-factorymodule.
- project-factory: Fixed an 'Invalid count argument' error in
project-factorymodule'smain.tfrelated to conditional IAM binding for the user service account.
- project-factory: Refactored to be an opinionated wrapper around
terraform-google-modules/terraform-google-project-factory - Removed
service_account_display_nameandservice_account_descriptionvariables (no longer supported by upstream module)
- project-factory: Now leverages the battle-tested terraform-google-modules project factory
- Added opinionated defaults for OpenJustice OK: auto-network creation disabled, default service account removed
- Enhanced security posture with better defaults
- Maintained backward compatibility for most variables and all outputs
- Added comprehensive documentation and examples
- Improved reliability by using the widely-adopted upstream module
- project-factory: Corrected the
user_service_account_project_rolevariable in the documentation and example, which was previously listed as a list instead of a string. - project-factory: Removed the non-existent
github_actions_conditionsvariable from the documentation. - project-factory: Added a warning to the documentation to clarify that the Tofu provisioner service account will become the sole project owner.
- project-factory: Clarified the Workload Identity Federation (WIF) behavior in the documentation.
- project-factory: Removed the unnecessary
github-actions-workflow.ymlfrom the example.
- Initial release of the
project-factorymodule for Google Cloud Platform. - Adopted semantic versioning for better referencing of the modules.