Skip to content

MEIER-223: update docs nav and add cloudflare tunnel deployment#16

Merged
andymeierdev merged 2 commits intomainfrom
ameier/MEIER-223
Feb 26, 2026
Merged

MEIER-223: update docs nav and add cloudflare tunnel deployment#16
andymeierdev merged 2 commits intomainfrom
ameier/MEIER-223

Conversation

@andymeierdev
Copy link
Copy Markdown
Collaborator

@andymeierdev andymeierdev commented Feb 26, 2026

Summary

  • add Cloudflare tunnel resources in pulumi/ (remote-managed tunnel config, DNS record lookup by zone name, and cloudflared sidecar)
  • update Pulumi config/environment wiring for fsharpviewengine/prod
  • remove Quickstart docs page and rename Giraffe docs page to Usage (/usage, keeping /giraffe as alias)
  • update docs/theme/header spacing and assets (logo/favicon outputs)
  • ignore .pi* files in git

Notes

  • this PR includes committed deletions of AGENTS.md and CLAUDE.md as present in the working tree

@github-actions
Copy link
Copy Markdown

🍹 preview on fsharp-view-engine/prod

Pulumi report

View in Pulumi Cloud

  Previewing update (prod)

View Live: https://app.pulumi.com/meiermade/fsharp-view-engine/prod/previews/5725bdfd-af90-44b6-9ccf-c75ac99cdbb6

pulumi:pulumi:Stack: (same)
  [urn=urn:pulumi:prod::fsharp-view-engine::pulumi:pulumi:Stack::fsharp-view-engine-prod]
  + cloudflare:index/zeroTrustTunnelCloudflared:ZeroTrustTunnelCloudflared: (create)
      [urn=urn:pulumi:prod::fsharp-view-engine::cloudflare:index/zeroTrustTunnelCloudflared:ZeroTrustTunnelCloudflared::fsharpviewengine]
      accountId: "[secret]"
      configSrc: "cloudflare"
      name     : "fsharpviewengine"
  + aws:ecr/repository:Repository: (create)
      [urn=urn:pulumi:prod::fsharp-view-engine::aws:ecr/repository:Repository::fsharpviewengine]
      imageTagMutability: "MUTABLE"
      name              : "fsharpviewengine"
      region            : "us-east-1"
      tagsAll           : {}
  + kubernetes:core/v1:ConfigMap: (create)
      [urn=urn:pulumi:prod::fsharp-view-engine::kubernetes:core/v1:ConfigMap::fsharpviewengine]
      apiVersion: "v1"
      data      : {
          SERVER_URL: "http://0.0.0.0:5000"
      }
      immutable : true
      kind      : "ConfigMap"
      metadata  : {
          name     : "fsharpviewengine"
          namespace: "fsharpviewengine"
      }
  + kubernetes:core/v1:Secret: (create)
      [urn=urn:pulumi:prod::fsharp-view-engine::kubernetes:core/v1:Secret::fsharpviewengine-cloudflared]
      apiVersion: "v1"
      kind      : "Secret"
      metadata  : {
          name     : "fsharpviewengine-cloudflared"
          namespace: "fsharpviewengine"
      }
      stringData: [secret]
  + cloudflare:index/dnsRecord:DnsRecord: (create)
      [urn=urn:pulumi:prod::fsharp-view-engine::cloudflare:index/dnsRecord:DnsRecord::fsharpviewengine]
      content: [unknown]
      name   : "fsharpviewengine"
      proxied: true
      ttl    : 1
      type   : "CNAME"
      zoneId : "1d09a5f3c5efd0a617f98a9ac32abfc4"
  + cloudflare:index/zeroTrustTunnelCloudflaredConfig:ZeroTrustTunnelCloudflaredConfig: (create)
      [urn=urn:pulumi:prod::fsharp-view-engine::cloudflare:index/zeroTrustTunnelCloudflaredConfig:ZeroTrustTunnelCloudflaredConfig::fsharpviewengine]
      accountId: "[secret]"
      config   : {
          ingresses: [
              [0]: {
                  hostname: "fsharpviewengine.meiermade.com"
                  service : "http://fsharpviewengine.fsharpviewengine.svc.cluster.local:80"
              }
              [1]: {
                  service: "http_status:404"
              }
          ]
      }
      source   : "cloudflare"
      tunnelId : [unknown]
  + docker-build:index:Image: (create)
      [urn=urn:pulumi:prod::fsharp-view-engine::docker-build:index:Image::fsharpviewengine]
      buildOnPreview: true
      context       : {
          location: "/home/runner/work/FSharp.ViewEngine/FSharp.ViewEngine/sln"
      }
      dockerfile    : {
          inline  : ""
          location: "/home/runner/work/FSharp.ViewEngine/FSharp.ViewEngine/sln/Dockerfile"
      }
      exec          : false
      load          : false
      network       : "default"
      noCache       : false
      platforms     : [
          [0]: "linux/arm64"
      ]
      pull          : false
      push          : true
      registries    : [
          [0]: {
              address : [unknown]
              password: [secret]
              username: [unknown]
          }
      ]
      tags          : [
          [0]: [unknown]
      ]
      target        : ""
  + aws:ecr/repositoryPolicy:RepositoryPolicy: (create)
      [urn=urn:pulumi:prod::fsharp-view-engine::aws:ecr/repositoryPolicy:RepositoryPolicy::fsharpviewengine]
      policy    : (json) {
          Statement: [
              [0]: {
                  Action   : [
                      [0]: "ecr:GetDownloadUrlForLayer"
                      [1]: "ecr:BatchGetImage"
                      [2]: "ecr:BatchCheckLayerAvailability"
                  ]
                  Effect   : "Allow"
                  Principal: {
                      AWS: "arn:aws:iam::941377122014:role/eks-node-manager"
                  }
              }
          ]
          Version  : "2012-10-17"
      }

      region    : "us-east-1"
      repository: "fsharpviewengine"
  + aws:ecr/lifecyclePolicy:LifecyclePolicy: (create)
      [urn=urn:pulumi:prod::fsharp-view-engine::aws:ecr/lifecyclePolicy:LifecyclePolicy::fsharpviewengine]
      policy    : (json) {
          rules: [
              [0]: {
                  action      : {
                      type: "expire"
                  }
                  rulePriority: 1
                  selection   : {
                      countNumber: 1
                      countType  : "imageCountMoreThan"
                      tagStatus  : "any"
                  }
              }
          ]
      }

      region    : "us-east-1"
      repository: "fsharpviewengine"
  + kubernetes:apps/v1:Deployment: (create)
      [urn=urn:pulumi:prod::fsharp-view-engine::kubernetes:apps/v1:Deployment::fsharpviewengine]
      apiVersion: "apps/v1"
      kind      : "Deployment"
      metadata  : {
          name     : "fsharpviewengine"
          namespace: "fsharpviewengine"
      }
      spec      : {
          replicas: 1
          selector: {
              matchLabels: {
                  app.kubernetes.io/name: "fsharpviewengine"
              }
          }
          template: {
              metadata: {
                  labels: {
                      app.kubernetes.io/name: "fsharpviewengine"
                  }
              }
              spec    : {
                  containers: [
                      [0]: {
                          envFrom        : [
                              [0]: {
                                  configMapRef: {
                                      name: "fsharpviewengine"
                                  }
                              }
                          ]
                          image          : [unknown]
                          imagePullPolicy: "IfNotPresent"
                          livenessProbe  : {
                              httpGet            : {
                                  path: "/health"
                                  port: 5000
                              }
                              initialDelaySeconds: 5
                          }
                          name           : "fsharpviewengine"
                          readinessProbe : {
                              httpGet            : {
                                  path: "/health"
                                  port: 5000
                              }
                              initialDelaySeconds: 5
                          }
                      }
                      [1]: {
                          args          : [
                              [0]: "tunnel"
                              [1]: "--no-autoupdate"
                              [2]: "--metrics"
                              [3]: "0.0.0.0:2000"
                              [4]: "run"
                          ]
                          env           : [
                              [0]: {
                                  name     : "TUNNEL_TOKEN"
                                  valueFrom: {
                                      secretKeyRef: {
                                          key : "TUNNEL_TOKEN"
                                          name: "fsharpviewengine-cloudflared"
                                      }
                                  }
                              }
                          ]
                          image         : "cloudflare/cloudflared:2026.2.0"
                          livenessProbe : {
                              failureThreshold   : 1
                              httpGet            : {
                                  path: "/ready"
                                  port: 2000
                              }
                              initialDelaySeconds: 10
                              periodSeconds      : 10
                          }
                          name          : "cloudflared"
                          readinessProbe: {
                              httpGet            : {
                                  path: "/ready"
                                  port: 2000
                              }
                              initialDelaySeconds: 10
                              periodSeconds      : 10
                          }
                      }
                  ]
              }
          }
      }
  + kubernetes:core/v1:Service: (create)
      [urn=urn:pulumi:prod::fsharp-view-engine::kubernetes:core/v1:Service::fsharpviewengine]
      apiVersion: "v1"
      kind      : "Service"
      metadata  : {
          name     : "fsharpviewengine"
          namespace: "fsharpviewengine"
      }
      spec      : {
          ports   : [
              [0]: {
                  name      : "http"
                  port      : 80
                  targetPort: 5000
              }
          ]
          selector: {
              app.kubernetes.io/name: "fsharpviewengine"
          }
          type    : "ClusterIP"
      }
  - kubernetes:core/v1:Service: (delete)
      [id=fsharp-view-engine/fsharp-view-engine]
      [urn=urn:pulumi:prod::fsharp-view-engine::kubernetes:core/v1:Service::fsharp-view-engine]
      apiVersion: "v1"
      kind      : "Service"
      metadata  : {
          name     : "fsharp-view-engine"
          namespace: "fsharp-view-engine"
      }
      spec      : {
          ports   : [
              [0]: {
                  name      : "http"
                  port      : 80
                  targetPort: 5000
              }
          ]
          selector: {
              app.kubernetes.io/name: "fsharp-view-engine"
          }
          type    : "ClusterIP"
      }
  - kubernetes:apps/v1:Deployment: (delete)
      [id=fsharp-view-engine/fsharp-view-engine]
      [urn=urn:pulumi:prod::fsharp-view-engine::kubernetes:apps/v1:Deployment::fsharp-view-engine]
      apiVersion: "apps/v1"
      kind      : "Deployment"
      metadata  : {
          name     : "fsharp-view-engine"
          namespace: "fsharp-view-engine"
      }
      spec      : {
          replicas: 1
          selector: {
              matchLabels: {
                  app.kubernetes.io/name: "fsharp-view-engine"
              }
          }
          template: {
              metadata: {
                  labels: {
                      app.kubernetes.io/name: "fsharp-view-engine"
                  }
              }
              spec    : {
                  containers: [
                      [0]: {
                          envFrom        : [
                              [0]: {
                                  configMapRef: {
                                      name: "fsharp-view-engine"
                                  }
                              }
                          ]
                          image          : "941377122014.dkr.ecr.us-east-1.amazonaws.com/fsharp-view-engine:latest@sha256:5055b237ec0a209a94d027002a8d65d55a1e0f611145862bd905cc6f2b2e24e2"
                          imagePullPolicy: "IfNotPresent"
                          livenessProbe  : {
                              httpGet            : {
                                  path: "/health"
                                  port: 5000
                              }
                              initialDelaySeconds: 5
                          }
                          name           : "fsharp-view-engine"
                          readinessProbe : {
                              httpGet            : {
                                  path: "/health"
                                  port: 5000
                              }
                              initialDelaySeconds: 5
                          }
                      }
                  ]
              }
          }
      }
  - aws:ecr/lifecyclePolicy:LifecyclePolicy: (delete)
      [id=fsharp-view-engine]
      [urn=urn:pulumi:prod::fsharp-view-engine::aws:ecr/lifecyclePolicy:LifecyclePolicy::fsharp-view-engine]
      policy    : (json) {
          rules: [
              [0]: {
                  action      : {
                      type: "expire"
                  }
                  rulePriority: 1
                  selection   : {
                      countNumber: 1
                      countType  : "imageCountMoreThan"
                      tagStatus  : "any"
                  }
              }
          ]
      }

      region    : "us-east-1"
      repository: "fsharp-view-engine"
  - aws:ecr/repositoryPolicy:RepositoryPolicy: (delete)
      [id=fsharp-view-engine]
      [urn=urn:pulumi:prod::fsharp-view-engine::aws:ecr/repositoryPolicy:RepositoryPolicy::fsharp-view-engine]
      policy    : (json) {
          Statement: [
              [0]: {
                  Action   : [
                      [0]: "ecr:GetDownloadUrlForLayer"
                      [1]: "ecr:BatchGetImage"
                      [2]: "ecr:BatchCheckLayerAvailability"
                  ]
                  Effect   : "Allow"
                  Principal: {
                      AWS: "arn:aws:iam::941377122014:role/eks-node-manager"
                  }
              }
          ]
          Version  : "2012-10-17"
      }

      region    : "us-east-1"
      repository: "fsharp-view-engine"
  - docker-build:index:Image: (delete)
      [id=sha256:65cea560cd1495776a0d5c3fe95a43dd43e45b4aa3f7dd5a5903d3894c076c50]
      [urn=urn:pulumi:prod::fsharp-view-engine::docker-build:index:Image::fsharp-view-engine]
      buildOnPreview: true
      context       : {
          location: "/home/runner/work/FSharp.ViewEngine/FSharp.ViewEngine/sln"
      }
      dockerfile    : {
          inline  : ""
          location: "/home/runner/work/FSharp.ViewEngine/FSharp.ViewEngine/sln/Dockerfile"
      }
      exec          : false
      load          : false
      network       : "default"
      noCache       : false
      platforms     : [
          [0]: "linux/arm64"
      ]
      pull          : false
      push          : true
      registries    : [
          [0]: {
              address : "941377122014.dkr.ecr.us-east-1.amazonaws.com/fsharp-view-engine"
              password: [secret]
              username: "AWS"
          }
      ]
      tags          : [
          [0]: "941377122014.dkr.ecr.us-east-1.amazonaws.com/fsharp-view-engine:latest"
      ]
      target        : ""
  - kubernetes:core/v1:ConfigMap: (delete)
      [id=fsharp-view-engine/fsharp-view-engine]
      [urn=urn:pulumi:prod::fsharp-view-engine::kubernetes:core/v1:ConfigMap::fsharp-view-engine]
      apiVersion: "v1"
      data      : {
          SERVER_URL: "http://0.0.0.0:5000"
      }
      immutable : true
      kind      : "ConfigMap"
      metadata  : {
          name     : "fsharp-view-engine"
          namespace: "fsharp-view-engine"
      }
  - aws:ecr/repository:Repository: (delete)
      [id=fsharp-view-engine]
      [urn=urn:pulumi:prod::fsharp-view-engine::aws:ecr/repository:Repository::fsharp-view-engine]
      imageTagMutability: "MUTABLE"
      name              : "fsharp-view-engine"
      region            : "us-east-1"
      tagsAll           : {}
Resources:
  + 11 to create
  - 7 to delete
  18 changes. 1 unchanged
  

@andymeierdev andymeierdev merged commit 4a66b8c into main Feb 26, 2026
2 checks passed
@andymeierdev andymeierdev deleted the ameier/MEIER-223 branch February 26, 2026 16:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant