From 959920c3eb94bb8f671207d2b997365021fb8222 Mon Sep 17 00:00:00 2001 From: Shahab Dogar Date: Mon, 1 Dec 2025 22:47:01 +0500 Subject: [PATCH] feat: GoCache | deploy go package cache --- cache-infrastructure/go/index.ts | 41 +++++++++++++++++++++++++++++ cache-infrastructure/go/values.yaml | 19 +++++++++++++ cache-infrastructure/index.ts | 26 +++++++++++++++--- 3 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 cache-infrastructure/go/index.ts create mode 100644 cache-infrastructure/go/values.yaml diff --git a/cache-infrastructure/go/index.ts b/cache-infrastructure/go/index.ts new file mode 100644 index 0000000..3388bbf --- /dev/null +++ b/cache-infrastructure/go/index.ts @@ -0,0 +1,41 @@ +import * as fs from "fs"; +import * as path from "path"; +import { Release } from "@cdktf/provider-helm/lib/release"; +import { Construct } from "constructs"; + +import { PublicIngressRoute } from "../../utils"; +import { Providers } from "../../types"; + +type GoCacheOptions = { + providers: Providers; + namespace: string; + name: string; + host: string; +}; + +export class GoCache extends Construct { + constructor(scope: Construct, id: string, opts: GoCacheOptions) { + super(scope, id); + + const { namespace, name, host } = opts; + const { helm, kubernetes } = opts.providers; + + new Release(this, "helm-release", { + provider: helm, + name, + namespace, + repository: "https://gomods.github.io/athens-charts", + chart: "athens-proxy", + values: [fs.readFileSync(path.join(__dirname, "values.yaml"), "utf8")], + }); + + new PublicIngressRoute(this, "ingress", { + provider: kubernetes, + namespace, + name, + host, + serviceName: `${name}-athens-proxy`, + servicePort: 80, + }); + } +} diff --git a/cache-infrastructure/go/values.yaml b/cache-infrastructure/go/values.yaml new file mode 100644 index 0000000..04d4fcd --- /dev/null +++ b/cache-infrastructure/go/values.yaml @@ -0,0 +1,19 @@ +replicaCount: 3 +image: + runAsNonRoot: true +nodeSelector: + nodepool: worker +strategy: + type: Recreate +storage: + disk: + persistence: + enabled: true + accessMode: ReadWriteMany + size: 64Gi + storageClass: longhorn +configEnvVars: + ATHENS_DOWNLOAD_MODE: "sync" +upstreamProxy: + enabled: true + url: "https://proxy.golang.org" diff --git a/cache-infrastructure/index.ts b/cache-infrastructure/index.ts index 4bd7603..ecee2c6 100644 --- a/cache-infrastructure/index.ts +++ b/cache-infrastructure/index.ts @@ -5,15 +5,23 @@ import { NamespaceV1 } from "@cdktf/provider-kubernetes/lib/namespace-v1"; import { NixCache } from "./nix"; import { NpmCache } from "./npm"; import { PipCache } from "./pip"; +import { GoCache } from "./go"; +import { HelmProvider } from "@cdktf/provider-helm/lib/provider"; export class CacheInfrastructure extends TerraformStack { constructor(scope: Construct, id: string) { super(scope, id); - const provider = new KubernetesProvider(this, "kubernetes", { + const kubernetes = new KubernetesProvider(this, "kubernetes", { configPath: "~/.kube/config", }); + const helm = new HelmProvider(this, "helm", { + kubernetes: { + configPath: "~/.kube/config", + }, + }); + const namespace = "package-cache"; new NamespaceV1(this, "package-cache-namespace", { @@ -24,24 +32,34 @@ export class CacheInfrastructure extends TerraformStack { // Add cache-related infrastructure components here new NixCache(this, "nix-cache", { - provider, + provider: kubernetes, namespace, name: "nix-cache", host: "nix.dogar.dev", }); new NpmCache(this, "npm-cache", { - provider, + provider: kubernetes, namespace, name: "npm-cache", host: "npm.dogar.dev", }); new PipCache(this, "pip-cache", { - provider, + provider: kubernetes, namespace, name: "pip-cache", host: "pip.dogar.dev", }); + + new GoCache(this, "go-cache", { + providers: { + kubernetes, + helm, + }, + namespace, + name: "go-cache", + host: "go.dogar.dev", + }); } }