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
116 lines
3.2 KiB
HCL
116 lines
3.2 KiB
HCL
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
|
|
}
|