#!/usr/bin/env nu # Derived variables for forgejo bundle rendering. def zone_to_cf_secret [zone: string]: nothing -> string { $"dns-($zone | str replace --all '.' '-')" } def resolve_fip_ip [fip_name: string]: nothing -> string { let result = (do { ^hcloud floating-ip list -o json } | complete) if $result.exit_code != 0 { return "" } let matched = ($result.stdout | from json | where name == $fip_name) if ($matched | is-empty) { return "" } $matched | first | get ip } def main [component_json: string]: nothing -> nothing { let d = ($component_json | from json) let dns_zone = ($d | get -o dns_zone | default "") let gateway_fip = ($d | get -o gateway_fip | default "") let gateway_ip = ($d | get -o gateway_ip | default "") let name = ($d | get -o name | default "forgejo") let resolved_cf_secret = if ($dns_zone | is-not-empty) { zone_to_cf_secret $dns_zone } else { "" } let resolved_gateway_ip = if ($gateway_ip | is-not-empty) { $gateway_ip } else if ($gateway_fip | is-not-empty) { resolve_fip_ip $gateway_fip } else { "" } { cf_secret_name: $resolved_cf_secret, gateway_ip: $resolved_gateway_ip, tls_secret: $"($name)-tls", } | to json --raw | print }