Wire Forge-native release infrastructure
Some checks failed
Cache: Publish Nix / Publish Nix Cache (push) Waiting to run
Build Rust / Cargo Test (push) Successful in 4m14s
Build Site / Next.js Build (push) Failing after 6s
Infra: OpenTofu / OpenTofu (grafana) (push) Successful in 5s
Lint Governance / BEP Metadata (push) Successful in 0s
Build: Android / Android Rust Core Stub (push) Failing after 23s
Some checks failed
Cache: Publish Nix / Publish Nix Cache (push) Waiting to run
Build Rust / Cargo Test (push) Successful in 4m14s
Build Site / Next.js Build (push) Failing after 6s
Infra: OpenTofu / OpenTofu (grafana) (push) Successful in 5s
Lint Governance / BEP Metadata (push) Successful in 0s
Build: Android / Android Rust Core Stub (push) Failing after 23s
This commit is contained in:
parent
97c569fb35
commit
002bd382e9
199 changed files with 14268 additions and 185 deletions
116
infra/releases/storage.tf
Normal file
116
infra/releases/storage.tf
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
locals {
|
||||
google_required_services = toset([
|
||||
"storage.googleapis.com",
|
||||
])
|
||||
|
||||
release_storage_buckets = {
|
||||
releases = {
|
||||
name = var.google_release_bucket_name
|
||||
description = "Burrow release artifacts"
|
||||
public = var.google_release_public_read
|
||||
}
|
||||
packages = {
|
||||
name = var.google_package_bucket_name
|
||||
description = "Burrow signed package repositories"
|
||||
public = var.google_package_public_read
|
||||
}
|
||||
nix-cache = {
|
||||
name = var.google_nix_cache_bucket_name
|
||||
description = "Burrow Nix cache backups"
|
||||
public = var.google_nix_cache_public_read
|
||||
}
|
||||
}
|
||||
|
||||
release_storage_writer_members = setunion(
|
||||
var.google_release_extra_writer_members,
|
||||
toset(["serviceAccount:${var.google_runner_service_account_email}"]),
|
||||
)
|
||||
|
||||
release_storage_writer_grants = var.manage_google ? {
|
||||
for grant in flatten([
|
||||
for bucket_key in keys(local.release_storage_buckets) : [
|
||||
for member in local.release_storage_writer_members : {
|
||||
id = "${bucket_key}|${member}"
|
||||
bucket_key = bucket_key
|
||||
member = member
|
||||
}
|
||||
]
|
||||
]) : grant.id => grant
|
||||
} : {}
|
||||
|
||||
release_storage_public_grants = var.manage_google ? {
|
||||
for bucket_key, bucket in local.release_storage_buckets : bucket_key => bucket
|
||||
if bucket.public
|
||||
} : {}
|
||||
}
|
||||
|
||||
resource "google_project_service" "release_storage" {
|
||||
for_each = var.manage_google ? local.google_required_services : toset([])
|
||||
|
||||
project = var.google_project_id
|
||||
service = each.value
|
||||
disable_on_destroy = false
|
||||
}
|
||||
|
||||
resource "google_storage_bucket" "release_storage" {
|
||||
for_each = var.manage_google ? local.release_storage_buckets : {}
|
||||
|
||||
project = var.google_project_id
|
||||
name = each.value.name
|
||||
location = var.google_storage_location
|
||||
uniform_bucket_level_access = true
|
||||
public_access_prevention = each.value.public ? "inherited" : "enforced"
|
||||
force_destroy = false
|
||||
|
||||
labels = merge(
|
||||
{
|
||||
project = "burrow"
|
||||
component = "release-storage"
|
||||
managed_by = "opentofu"
|
||||
bucket = each.key
|
||||
},
|
||||
var.tags,
|
||||
)
|
||||
|
||||
versioning {
|
||||
enabled = true
|
||||
}
|
||||
|
||||
cors {
|
||||
origin = var.google_storage_cors_origins
|
||||
method = ["GET", "HEAD", "OPTIONS"]
|
||||
response_header = ["Content-Type", "Content-Length", "ETag", "Cache-Control"]
|
||||
max_age_seconds = 3600
|
||||
}
|
||||
|
||||
lifecycle_rule {
|
||||
condition {
|
||||
age = 30
|
||||
with_state = "ARCHIVED"
|
||||
num_newer_versions = 5
|
||||
matches_storage_class = ["STANDARD"]
|
||||
}
|
||||
|
||||
action {
|
||||
type = "Delete"
|
||||
}
|
||||
}
|
||||
|
||||
depends_on = [google_project_service.release_storage]
|
||||
}
|
||||
|
||||
resource "google_storage_bucket_iam_member" "release_storage_public_viewer" {
|
||||
for_each = local.release_storage_public_grants
|
||||
|
||||
bucket = google_storage_bucket.release_storage[each.key].name
|
||||
role = "roles/storage.objectViewer"
|
||||
member = "allUsers"
|
||||
}
|
||||
|
||||
resource "google_storage_bucket_iam_member" "release_storage_writer" {
|
||||
for_each = local.release_storage_writer_grants
|
||||
|
||||
bucket = google_storage_bucket.release_storage[each.value.bucket_key].name
|
||||
role = "roles/storage.objectAdmin"
|
||||
member = each.value.member
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue