feat(posts): support scheduled publishing#3974
Merged
Merged
Pulumi / api/prod - Update (preview)
succeeded
Jul 2, 2026 in 3m 29s
Update (preview)
🍹 The Update (preview) for dailydotdev/api/prod was successful.
Visit the Pulumi Service for more information.
Details
Resource Changes
Name Type Operation
~ vpc-native-check-analytics-report-cron kubernetes:batch/v1:CronJob update
~ vpc-native-temporal-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-hourly-notification-cron kubernetes:batch/v1:CronJob update
~ vpc-native-materialize-monthly-best-post-archives-cron kubernetes:batch/v1:CronJob update
~ vpc-native-bg-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-squad-posts-analytics-refresh-cron kubernetes:batch/v1:CronJob update
~ vpc-native-personalized-digest-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-tags-str-cron kubernetes:batch/v1:CronJob update
~ vpc-native-sync-subscription-with-cio-cron kubernetes:batch/v1:CronJob update
~ vpc-native-clean-zombie-opportunities-cron kubernetes:batch/v1:CronJob update
~ vpc-native-clean-gifted-plus-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-highlighted-views-cron kubernetes:batch/v1:CronJob update
~ vpc-native-user-profile-analytics-clickhouse-cron kubernetes:batch/v1:CronJob update
~ vpc-native-validate-active-users-cron kubernetes:batch/v1:CronJob update
~ vpc-native-channel-highlights-cron kubernetes:batch/v1:CronJob update
~ vpc-native-ws-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-personalized-digest-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-update-achievement-rarity-cron kubernetes:batch/v1:CronJob update
~ vpc-native-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-worker-job-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-private-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-expire-super-agent-trial-cron kubernetes:batch/v1:CronJob update
- vpc-native-api-clickhouse-migration-6c5c6ea8 kubernetes:batch/v1:Job delete
~ vpc-native-user-posts-analytics-refresh-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-source-public-threshold-cron kubernetes:batch/v1:CronJob update
~ vpc-native-subscription-anniversary-achievements-cron kubernetes:batch/v1:CronJob update
~ vpc-native-generic-referral-reminder-cron kubernetes:batch/v1:CronJob update
~ vpc-native-post-lifecycle-state-clickhouse-cron kubernetes:batch/v1:CronJob update
~ vpc-native-clean-zombie-user-companies-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-tag-materialized-views-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-current-streak-cron kubernetes:batch/v1:CronJob update
~ vpc-native-clean-zombie-images-cron kubernetes:batch/v1:CronJob update
~ vpc-native-clean-stale-user-transactions-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-trending-cron kubernetes:batch/v1:CronJob update
- vpc-native-api-db-migration-6c5c6ea8 kubernetes:batch/v1:Job delete
+ vpc-native-api-clickhouse-migration-0fcce16f kubernetes:batch/v1:Job create
~ vpc-native-user-profile-updated-sync-cron kubernetes:batch/v1:CronJob update
~ vpc-native-clean-expired-better-auth-sessions-cron kubernetes:batch/v1:CronJob update
~ vpc-native-calculate-top-readers-cron kubernetes:batch/v1:CronJob update
~ vpc-native-rotate-daily-quests-cron kubernetes:batch/v1:CronJob update
~ vpc-native-daily-digest-cron kubernetes:batch/v1:CronJob update
~ vpc-native-post-analytics-clickhouse-cron kubernetes:batch/v1:CronJob update
~ vpc-native-materialize-yearly-best-post-archives-cron kubernetes:batch/v1:CronJob update
~ vpc-native-clean-zombie-users-cron kubernetes:batch/v1:CronJob update
~ vpc-native-post-analytics-achievements-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-views-cron kubernetes:batch/v1:CronJob update
~ vpc-native-rotate-weekly-quests-cron kubernetes:batch/v1:CronJob update
~ vpc-native-generate-search-invites-cron kubernetes:batch/v1:CronJob update
~ vpc-native-post-analytics-history-day-clickhouse-cron kubernetes:batch/v1:CronJob update
~ vpc-native-channel-digests-cron kubernetes:batch/v1:CronJob update
~ vpc-native-user-profile-analytics-history-clickhouse-cron kubernetes:batch/v1:CronJob update
+ vpc-native-api-db-migration-0fcce16f kubernetes:batch/v1:Job create
~ vpc-native-clean-old-notifications-cron kubernetes:batch/v1:CronJob update
~ vpc-native-clean-channel-highlights-cron kubernetes:batch/v1:CronJob update
Detailed Diff
View diff
pulumi:pulumi:Stack: (same)
[urn=urn:pulumi:prod::api::pulumi:pulumi:Stack::api-prod]
--outputs:--
redisHost: "10.23.0.187"
> pulumi:pulumi:StackReference: (read)
[urn=urn:pulumi:prod::api::pulumi:pulumi:StackReference::dailydotdev/infra/prod]
name: "dailydotdev/infra/prod"
warning: failed to get regions list: failed to create compute service: credentials: could not find default credentials. See https://cloud.google.com/docs/authentication/external/set-up-adc for more information
+ kubernetes:batch/v1:Job: (create)
[urn=urn:pulumi:prod::api::kubernetes:batch/v1:Job::vpc-native-api-clickhouse-migration-0fcce16f]
[provider=urn:pulumi:prod::api::dailydotdev:kubernetes:GkeCluster$pulumi:providers:kubernetes::vpc-native::fcfbd2f7-4f6b-44a5-b398-0533832a829e]
+ kubernetes:batch/v1:Job: (create)
[urn=urn:pulumi:prod::api::kubernetes:batch/v1:Job::vpc-native-api-db-migration-0fcce16f]
[provider=urn:pulumi:prod::api::dailydotdev:kubernetes:GkeCluster$pulumi:providers:kubernetes::vpc-native::fcfbd2f7-4f6b-44a5-b398-0533832a829e]
--outputs:--
+ metadata : {
+ creationTimestamp: "2026-07-02T13:30:10Z"
+ generation : 1
+ labels : {
+ app : "[secret]-db-migration"
+ app.kubernetes.io/name : "[secret]-db-migration"
+ app.kubernetes.io/version: "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
+ managedFields : [
+ [0]: {
+ apiVersion: "batch/v1"
+ fieldsType: "FieldsV1"
+ fieldsV1 : {
+ f:metadata: {
+ f:labels: {
+ f:app : {}
+ f:app.kubernetes.io/name : {}
+ f:app.kubernetes.io/version: {}
}
}
+ f:spec : {
+ f:completions: {}
+ f:template : {
+ f:metadata: {
+ f:labels: {
+ f:app : {}
+ f:app.kubernetes.io/name : {}
+ f:app.kubernetes.io/version: {}
}
}
+ f:spec : {
+ f:containers : {
+ k:{"name":"api-db-migration"}: {
+ . : {}
+ f:args : {}
+ f:env : {
+ k:{"name":"OTEL_SERVICE_NAME"} : {
+ . : {}
+ f:name : {}
+ f:value: {}
}
+ k:{"name":"OTEL_SERVICE_VERSION"}: {
+ . : {}
+ f:name : {}
+ f:value: {}
}
}
+ f:envFrom: {}
+ f:image : {}
+ f:name : {}
}
}
+ f:restartPolicy : {}
+ f:serviceAccountName: {}
+ f:tolerations : {}
}
}
}
}
+ manager : "pulumi-kubernetes-c16fa402"
+ operation : "Apply"
+ time : "2026-07-02T13:30:10Z"
}
]
+ name : "[secret]-db-migration-0fcce16f"
+ namespace : "daily"
+ uid : "9f404a61-8346-4fb4-b597-86137e0864e0"
}
+ spec : {
+ backoffLimit : 6
+ completionMode : "NonIndexed"
+ completions : 1
+ manualSelector : false
+ parallelism : 1
+ podReplacementPolicy: "TerminatingOrFailed"
+ selector : {
+ matchLabels: {
+ batch.kubernetes.io/controller-uid: "9f404a61-8346-4fb4-b597-86137e0864e0"
}
}
+ suspend : false
+ template : {
+ metadata: {
+ labels: {
+ app : "[secret]-db-migration"
+ app.kubernetes.io/name : "[secret]-db-migration"
+ app.kubernetes.io/version : "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
+ batch.kubernetes.io/controller-uid: "9f404a61-8346-4fb4-b597-86137e0864e0"
+ batch.kubernetes.io/job-name : "[secret]-db-migration-0fcce16f"
+ controller-uid : "9f404a61-8346-4fb4-b597-86137e0864e0"
+ job-name : "[secret]-db-migration-0fcce16f"
}
}
+ spec : {
+ containers : [
+ [0]: {
+ args : [
+ [0]: "node"
+ [1]: "./node_modules/typeorm/cli.js"
+ [2]: "migration:run"
+ [3]: "-d"
+ [4]: "src/data-source.js"
]
+ env : [
+ [0]: {
+ name : "OTEL_SERVICE_NAME"
+ value: "[secret]-db-migration"
}
+ [1]: {
+ name : "OTEL_SERVICE_VERSION"
+ value: "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
]
+ envFrom : [
+ [0]: {
+ secretRef: {
+ name: "[secret]"
}
}
]
+ image : "us.gcr.io/daily-ops/daily-[secret]:d33b9471f23e05e39ab591be90e7e7f70fcce16f"
+ imagePullPolicy : "IfNotPresent"
+ name : "[secret]-db-migration"
+ resources : {}
+ terminationMessagePath : "/dev/termination-log"
+ terminationMessagePolicy: "File"
}
]
+ dnsPolicy : "ClusterFirst"
+ restartPolicy : "Never"
+ schedulerName : "default-scheduler"
+ securityContext : {}
+ serviceAccount : "[secret]"
+ serviceAccountName : "[secret]"
+ terminationGracePeriodSeconds: 30
+ tolerations : [
+ [0]: {
+ effect : "NoSchedule"
+ key : "spot"
+ operator: "Equal"
+ value : "true"
}
+ [1]: {
+ effect : "NoSchedule"
+ key : "preemptible"
+ operator: "Equal"
+ value : "true"
}
]
}
}
}
--outputs:--
+ metadata : {
+ creationTimestamp: "2026-07-02T13:30:10Z"
+ generation : 1
+ labels : {
+ app : "[secret]-clickhouse-migration"
+ app.kubernetes.io/name : "[secret]-clickhouse-migration"
+ app.kubernetes.io/version: "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
+ managedFields : [
+ [0]: {
+ apiVersion: "batch/v1"
+ fieldsType: "FieldsV1"
+ fieldsV1 : {
+ f:metadata: {
+ f:labels: {
+ f:app : {}
+ f:app.kubernetes.io/name : {}
+ f:app.kubernetes.io/version: {}
}
}
+ f:spec : {
+ f:completions: {}
+ f:template : {
+ f:metadata: {
+ f:labels: {
+ f:app : {}
+ f:app.kubernetes.io/name : {}
+ f:app.kubernetes.io/version: {}
}
}
+ f:spec : {
+ f:containers : {
+ k:{"name":"api-clickhouse-migration"}: {
+ . : {}
+ f:args : {}
+ f:env : {
+ k:{"name":"OTEL_SERVICE_NAME"} : {
+ . : {}
+ f:name : {}
+ f:value: {}
}
+ k:{"name":"OTEL_SERVICE_VERSION"}: {
+ . : {}
+ f:name : {}
+ f:value: {}
}
}
+ f:envFrom: {}
+ f:image : {}
+ f:name : {}
}
}
+ f:restartPolicy : {}
+ f:serviceAccountName: {}
}
}
}
}
+ manager : "pulumi-kubernetes-a8309879"
+ operation : "Apply"
+ time : "2026-07-02T13:30:10Z"
}
]
+ name : "[secret]-clickhouse-migration-0fcce16f"
+ namespace : "daily"
+ uid : "d6c4f3b4-c4f7-4b92-a274-968c5ab2bd80"
}
+ spec : {
+ backoffLimit : 6
+ completionMode : "NonIndexed"
+ completions : 1
+ manualSelector : false
+ parallelism : 1
+ podReplacementPolicy: "TerminatingOrFailed"
+ selector : {
+ matchLabels: {
+ batch.kubernetes.io/controller-uid: "d6c4f3b4-c4f7-4b92-a274-968c5ab2bd80"
}
}
+ suspend : false
+ template : {
+ metadata: {
+ labels: {
+ app : "[secret]-clickhouse-migration"
+ app.kubernetes.io/name : "[secret]-clickhouse-migration"
+ app.kubernetes.io/version : "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
+ batch.kubernetes.io/controller-uid: "d6c4f3b4-c4f7-4b92-a274-968c5ab2bd80"
+ batch.kubernetes.io/job-name : "[secret]-clickhouse-migration-0fcce16f"
+ controller-uid : "d6c4f3b4-c4f7-4b92-a274-968c5ab2bd80"
+ job-name : "[secret]-clickhouse-migration-0fcce16f"
}
}
+ spec : {
+ containers : [
+ [0]: {
+ args : [
+ [0]: "node"
+ [1]: "./bin/runClickhouseMigrations.js"
]
+ env : [
+ [0]: {
+ name : "OTEL_SERVICE_NAME"
+ value: "[secret]-clickhouse-migration"
}
+ [1]: {
+ name : "OTEL_SERVICE_VERSION"
+ value: "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
]
+ envFrom : [
+ [0]: {
+ secretRef: {
+ name: "[secret]"
}
}
]
+ image : "us.gcr.io/daily-ops/daily-[secret]:d33b9471f23e05e39ab591be90e7e7f70fcce16f"
+ imagePullPolicy : "IfNotPresent"
+ name : "[secret]-clickhouse-migration"
+ resources : {}
+ terminationMessagePath : "/dev/termination-log"
+ terminationMessagePolicy: "File"
}
]
+ dnsPolicy : "ClusterFirst"
+ restartPolicy : "Never"
+ schedulerName : "default-scheduler"
+ securityContext : {}
+ serviceAccount : "[secret]"
+ serviceAccountName : "[secret]"
+ terminationGracePeriodSeconds: 30
}
}
}
~ kubernetes:batch/v1:CronJob: (update)
[urn=urn:pulumi:prod::api::kubernetes:batch/v1:CronJob::vpc-native-materialize-monthly-best-post-archives-cron]
[provider=urn:pulumi:prod::api::dailydotdev:kubernetes:GkeCluster$pulumi:providers:kubernetes::vpc-native::fcfbd2f7-4f6b-44a5-b398-0533832a829e]
~ metadata: {
~ labels: {
~ app.kubernetes.io/version: "9a0290b005f7804761c1c66f478274476c5c6ea8" => "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
}
~ spec : {
~ jobTemplate: {
~ spec: {
~ template: {
~ metadata: {
~ labels: {
~ app.kubernetes.io/version: "9a0290b005f7804761c1c66f478274476c5c6ea8" => "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
}
~ spec : {
~ containers: [
~ [0]: {
~ env : [
~ [1]: {
~ value: "9a0290b005f7804761c1c66f478274476c5c6ea8" => "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
]
~ image: "us.gcr.io/daily-ops/daily-[secret]:9a0290b005f7804761c1c66f478274476c5c6ea8" => "us.gcr.io/daily-ops/daily-[secret]:d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
]
}
}
}
}
}
--outputs:--
~ metadata : {
creationTimestamp: "2026-04-01T11:51:30Z"
~ generation : 272 => 273
~ labels : {
app : "[secret]-materialize-monthly-best-post-archives"
app-type : "cron"
app.kubernetes.io/name : "[secret]-materialize-monthly-best-post-archives"
~ app.kubernetes.io/version: "9a0290b005f7804761c1c66f478274476c5c6ea8" => "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
~ managedFields : [
~ [0]: {
apiVersion: "batch/v1"
fieldsType: "FieldsV1"
fieldsV1 : {
f:metadata: {
f:labels: {
f:app : {}
f:app-type : {}
f:app.kubernetes.io/name : {}
f:app.kubernetes.io/version: {}
}
}
f:spec : {
f:concurrencyPolicy : {}
f:failedJobsHistoryLimit : {}
f:jobTemplate : {
f:spec: {
f:activeDeadlineSeconds: {}
f:template : {
f:metadata: {
f:annotations: {
f:gke-gcsfuse/cpu-limit : {}
f:gke-gcsfuse/cpu-request : {}
f:gke-gcsfuse/memory-limit : {}
f:gke-gcsfuse/memory-request: {}
f:gke-gcsfuse/volumes : {}
}
f:labels : {
f:app : {}
f:app-type : {}
f:app.kubernetes.io/name : {}
f:app.kubernetes.io/version: {}
}
}
f:spec : {
f:affinity : {
f:nodeAffinity: {
f:preferredDuringSchedulingIgnoredDuringExecution: {}
}
}
f:containers : {
k:{"name":"api-materialize-monthly-best-post-archives"}: {
. : {}
f:args : {}
f:env : {
k:{"name":"OTEL_SERVICE_NAME"} : {
. : {}
f:name : {}
f:value: {}
}
k:{"name":"OTEL_SERVICE_VERSION"}: {
. : {}
f:name : {}
f:value: {}
}
}
f:envFrom : {}
f:image : {}
f:name : {}
f:resources : {
f:limits : {
f:memory: {}
}
f:requests: {
f:cpu : {}
f:memory: {}
}
}
f:volumeMounts: {
k:{"mountPath":"/opt/app/apple"} : {
. : {}
f:mountPath: {}
f:name : {}
}
k:{"mountPath":"/opt/app/cert"} : {
. : {}
f:mountPath: {}
f:name : {}
}
k:{"mountPath":"/opt/app/temporal"}: {
. : {}
f:mountPath: {}
f:name : {}
}
k:{"mountPath":"/usr/share/geoip"} : {
. : {}
f:mountPath: {}
f:name : {}
f:readOnly : {}
}
}
}
}
f:restartPolicy : {}
f:serviceAccountName: {}
f:tolerations : {}
f:volumes : {
k:{"name":"apple-auth"}: {
. : {}
f:name : {}
f:secret: {
f:secretName: {}
}
}
k:{"name":"cert"} : {
. : {}
f:name : {}
f:secret: {
f:secretName: {}
}
}
k:{"name":"geoip-data"}: {
. : {}
f:csi : {
f:driver : {}
f:volumeAttributes: {
f:bucketName : {}
f:mountOptions: {}
}
}
f:name: {}
}
k:{"name":"temporal"} : {
. : {}
f:name : {}
f:secret: {
f:secretName: {}
}
}
}
}
}
}
}
f:schedule : {}
f:successfulJobsHistoryLimit: {}
f:suspend : {}
}
}
manager : "pulumi-kubernetes-0cf88b15"
operation : "Apply"
~ time : "2026-07-02T13:27:59Z" => "2026-07-02T13:30:16Z"
}
[1]: {
apiVersion : "batch/v1"
fieldsType : "FieldsV1"
fieldsV1 : {
f:status: {
f:lastScheduleTime : {}
f:lastSuccessfulTime: {}
}
}
manager : "kube-controller-manager"
operation : "Update"
subresource: "status"
time : "2026-07-01T00:13:26Z"
}
]
name : "[secret]-materialize-monthly-best-post-archives"
namespace : "daily"
resourceVersion : "1782998879335391000"
uid : "0a2f1d0b-8793-49d9-aaf8-d3fbecca4aec"
}
~ spec : {
concurrencyPolicy : "Forbid"
failedJobsHistoryLimit : 3
~ jobTemplate : {
~ spec : {
activeDeadlineSeconds: 300
~ template : {
~ metadata: {
annotations: {
gke-gcsfuse/cpu-limit : "0"
gke-gcsfuse/cpu-request : "10m"
gke-gcsfuse/memory-limit : "0"
gke-gcsfuse/memory-request: "32Mi"
gke-gcsfuse/volumes : "true"
}
~ labels : {
app : "[secret]-materialize-monthly-best-post-archives"
app-type : "cron"
app.kubernetes.io/name : "[secret]-materialize-monthly-best-post-archives"
~ app.kubernetes.io/version: "9a0290b005f7804761c1c66f478274476c5c6ea8" => "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
}
~ spec : {
affinity : {
nodeAffinity: {
preferredDuringSchedulingIgnoredDuringExecution: [
[0]: {
preference: {
matchExpressions: [
[0]: {
key : "node.daily.dev/spot"
operator: "Exists"
}
]
}
weight : 1
}
[1]: {
preference: {
matchExpressions: [
[0]: {
key : "node.daily.dev/preemptible"
operator: "Exists"
}
]
}
weight : 1
}
]
}
}
~ containers : [
~ [0]: {
args : [
[0]: "dumb-init"
[1]: "node"
[2]: "--require"
[3]: "./src/telemetry/register.js"
[4]: "bin/cli"
[5]: "cron"
[6]: "materialize-monthly-best-post-archives"
]
~ env : [
[0]: {
name : "OTEL_SERVICE_NAME"
value: "[secret]-materialize-monthly-best-post-archives"
}
~ [1]: {
name : "OTEL_SERVICE_VERSION"
~ value: "9a0290b005f7804761c1c66f478274476c5c6ea8" => "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
]
envFrom : [
[0]: {
secretRef: {
name: "[secret]"
}
}
]
~ image : "us.gcr.io/daily-ops/daily-[secret]:9a0290b005f7804761c1c66f478274476c5c6ea8" => "us.gcr.io/daily-ops/daily-[secret]:d33b9471f23e05e39ab591be90e7e7f70fcce16f"
imagePullPolicy : "IfNotPresent"
name : "[secret]-materialize-monthly-best-post-archives"
resources : {
limits : {
memory: "512Mi"
}
requests: {
cpu : "50m"
memory: "256Mi"
}
}
terminationMessagePath : "/dev/termination-log"
terminationMessagePolicy: "File"
volumeMounts : [
[0]: {
mountPath: "/opt/app/cert"
name : "cert"
}
[1]: {
mountPath: "/opt/app/temporal"
name : "temporal"
}
[2]: {
mountPath: "/opt/app/apple"
name : "apple-auth"
}
[3]: {
mountPath: "/usr/share/geoip"
name : "geoip-data"
readOnly : true
}
]
}
]
dnsPolicy : "ClusterFirst"
restartPolicy : "OnFailure"
schedulerName : "default-scheduler"
serviceAccount : "[secret]"
serviceAccountName : "[secret]"
terminationGracePeriodSeconds: 30
tolerations : [
[0]: {
effect : "NoSchedule"
key : "spot"
operator: "Equal"
value : "true"
}
[1]: {
effect : "NoSchedule"
key : "preemptible"
operator: "Equal"
value : "true"
}
]
volumes : [
[0]: {
name : "cert"
secret: {
defaultMode: 420
secretName : "cert-secret"
}
}
[1]: {
name : "temporal"
secret: {
defaultMode: 420
secretName : "temporal-secret"
}
}
[2]: {
name : "apple-auth"
secret: {
defaultMode: 420
secretName : "apple-auth-secret"
}
}
[3]: {
csi : {
driver : "gcsfuse.csi.storage.gke.io"
volumeAttributes: {
bucketName : "geoipupdate-storage"
mountOptions: "implicit-dirs"
}
}
name: "geoip-data"
}
]
}
}
}
}
schedule : "10 0 1 * *"
successfulJobsHistoryLimit: 3
suspend : false
}
~ kubernetes:batch/v1:CronJob: (update)
[urn=urn:pulumi:prod::api::kubernetes:batch/v1:CronJob::vpc-native-clean-zombie-users-cron]
[provider=urn:pulumi:prod::api::dailydotdev:kubernetes:GkeCluster$pulumi:providers:kubernetes::vpc-native::fcfbd2f7-4f6b-44a5-b398-0533832a829e]
~ metadata: {
~ labels: {
~ app.kubernetes.io/version: "9a0290b005f7804761c1c66f478274476c5c6ea8" => "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
}
~ spec : {
~ jobTemplate: {
~ spec: {
~ template: {
~ metadata: {
~ labels: {
~ app.kubernetes.io/version: "9a0290b005f7804761c1c66f478274476c5c6ea8" => "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
}
~ spec : {
~ containers: [
~ [0]: {
~ env : [
~ [1]: {
~ value: "9a0290b005f7804761c1c66f478274476c5c6ea8" => "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
]
~ image: "us.gcr.io/daily-ops/daily-[secret]:9a0290b005f7804761c1c66f478274476c5c6ea8" => "us.gcr.io/daily-ops/daily-[secret]:d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
]
}
}
}
}
}
--outputs:--
~ metadata : {
creationTimestamp: "2026-02-21T12:17:57Z"
~ generation : 473 => 474
~ labels : {
app : "[secret]-clean-zombie-users"
app-type : "cron"
app.kubernetes.io/name : "[secret]-clean-zombie-users"
~ app.kubernetes.io/version: "9a0290b005f7804761c1c66f478274476c5c6ea8" => "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
~ managedFields : [
~ [0]: {
apiVersion: "batch/v1"
fieldsType: "FieldsV1"
fieldsV1 : {
f:metadata: {
f:labels: {
f:app : {}
f:app-type : {}
f:app.kubernetes.io/name : {}
f:app.kubernetes.io/version: {}
}
}
f:spec : {
f:concurrencyPolicy : {}
f:failedJobsHistoryLimit : {}
f:jobTemplate : {
f:spec: {
f:activeDeadlineSeconds: {}
f:template : {
f:metadata: {
f:annotations: {
f:gke-gcsfuse/cpu-limit : {}
f:gke-gcsfuse/cpu-request : {}
f:gke-gcsfuse/memory-limit : {}
f:gke-gcsfuse/memory-request: {}
f:gke-gcsfuse/volumes : {}
}
f:labels : {
f:app : {}
f:app-type : {}
f:app.kubernetes.io/name : {}
f:app.kubernetes.io/version: {}
}
}
f:spec : {
f:affinity : {
f:nodeAffinity: {
f:preferredDuringSchedulingIgnoredDuringExecution: {}
}
}
f:containers : {
k:{"name":"api-clean-zombie-users"}: {
. : {}
f:args : {}
f:env : {
k:{"name":"OTEL_SERVICE_NAME"} : {
. : {}
f:name : {}
f:value: {}
}
k:{"name":"OTEL_SERVICE_VERSION"}: {
. : {}
f:name : {}
f:value: {}
}
}
f:envFrom : {}
f:image : {}
f:name : {}
f:resources : {
f:limits : {
f:memory: {}
}
f:requests: {
f:cpu : {}
f:memory: {}
}
}
f:volumeMounts: {
k:{"mountPath":"/opt/app/apple"} : {
. : {}
f:mountPath: {}
f:name : {}
}
k:{"mountPath":"/opt/app/cert"} : {
. : {}
f:mountPath: {}
f:name : {}
}
k:{"mountPath":"/opt/app/temporal"}: {
. : {}
f:mountPath: {}
f:name : {}
}
k:{"mountPath":"/usr/share/geoip"} : {
. : {}
f:mountPath: {}
f:name : {}
f:readOnly : {}
}
}
}
}
f:restartPolicy : {}
f:serviceAccountName: {}
f:tolerations : {}
f:volumes : {
k:{"name":"apple-auth"}: {
. : {}
f:name : {}
f:secret: {
f:secretName: {}
}
}
k:{"name":"cert"} : {
. : {}
f:name : {}
f:secret: {
f:secretName: {}
}
}
k:{"name":"geoip-data"}: {
. : {}
f:csi : {
f:driver : {}
f:volumeAttributes: {
f:bucketName : {}
f:mountOptions: {}
}
}
f:name: {}
}
k:{"name":"temporal"} : {
. : {}
f:name : {}
f:secret: {
f:secretName: {}
}
}
}
}
}
}
}
f:schedule : {}
f:successfulJobsHistoryLimit: {}
f:suspend : {}
}
}
manager : "pulumi-kubernetes-9e3ba038"
operation : "Apply"
~ time : "2026-07-02T13:26:16Z" => "2026-07-02T13:30:21Z"
}
[1]: {
apiVersion: "batch/v1"
fieldsType: "FieldsV1"
fieldsV1 : {
f:spec: {
f:suspend: {}
}
}
manager : "unknown"
operation : "Update"
time : "2026-02-24T18:50:23Z"
}
[2]: {
apiVersion : "batch/v1"
fieldsType : "FieldsV1"
fieldsV1 : {
f:status: {
f:lastScheduleTime : {}
f:lastSuccessfulTime: {}
}
}
manager : "kube-controller-manager"
operation : "Update"
subresource: "status"
time : "2026-07-02T12:32:41Z"
}
]
name : "[secret]-clean-zombie-users"
namespace : "daily"
resourceVersion : "1782998776363471005"
uid : "94a31f09-5c8a-4d76-bd47-0119af7c5acd"
}
~ spec : {
concurrencyPolicy : "Forbid"
failedJobsHistoryLimit : 3
~ jobTemplate : {
~ spec : {
activeDeadlineSeconds: 300
~ template : {
~ metadata: {
annotations: {
gke-gcsfuse/cpu-limit : "0"
gke-gcsfuse/cpu-request : "10m"
gke-gcsfuse/memory-limit : "0"
gke-gcsfuse/memory-request: "32Mi"
gke-gcsfuse/volumes : "true"
}
~ labels : {
app : "[secret]-clean-zombie-users"
app-type : "cron"
app.kubernetes.io/name : "[secret]-clean-zombie-users"
~ app.kubernetes.io/version: "9a0290b005f7804761c1c66f478274476c5c6ea8" => "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
}
~ spec : {
affinity : {
nodeAffinity: {
preferredDuringSchedulingIgnoredDuringExecution: [
[0]: {
preference: {
matchExpressions: [
[0]: {
key : "node.daily.dev/spot"
operator: "Exists"
}
]
}
weight : 1
}
[1]: {
preference: {
matchExpressions: [
[0]: {
key : "node.daily.dev/preemptible"
operator: "Exists"
}
]
}
weight : 1
}
]
}
}
~ containers : [
~ [0]: {
args : [
[0]: "dumb-init"
[1]: "node"
[2]: "--require"
[3]: "./src/telemetry/register.js"
[4]: "bin/cli"
[5]: "cron"
[6]: "clean-zombie-users"
]
~ env : [
[0]: {
name : "OTEL_SERVICE_NAME"
value: "[secret]-clean-zombie-users"
}
~ [1]: {
name : "OTEL_SERVICE_VERSION"
~ value: "9a0290b005f7804761c1c66f478274476c5c6ea8" => "d33b9471f23e05e39ab591be90e7e7f70fcce16f"
}
]
envFrom : [
[0]: {
secretRef: {
name: "[secret]"
}
}
]
~ image : "us.gcr.io/daily-ops/daily-[secret]:9a0290b005f7804761c1c66f478274476c5c6ea8" => "us.gcr.io/daily-ops/daily-[secret]:d33b9471f23e05e39ab591be90e7e7f70fcce16f"
imagePullPolicy : "IfNotPresent"
name : "[secret]-clean-zombie-users"
resources : {
limits : {
memory: "512Mi"
}
requests: {
cpu : "50m"
memory: "256Mi"
}
}
terminationMessagePath : "/dev/termination-log"
terminationMessagePolicy: "File"
volumeMounts : [
[0]: {
mountPath: "/opt/app/cert"
name : "cert"
}
[1]: {
mountPath: "/opt/app/temporal"
name : "temporal"
}
[2]: {
mountPath: "/opt/app/apple"
name : "apple-auth"
}
[3]: {
mountPath: "/usr/share/geoip"
name : "geoip-data"
readOnly : true
}
]
}
]
dnsPolicy : "ClusterFirst"
restartPolicy : "OnFailure"
schedulerName : "default-scheduler"
serviceAccount : "[secret]"
serviceAccountName : "[secret]"
terminationGracePeriodSeconds: 30
tolerations : [
[0]: {
effect : "NoSchedule"
key : "spot"
operator: "Equal"
value : "true"
}
[1]: {
effect : "NoSchedule"
key : "preemptible"
operator: "Equal"
value : "true"
}
]
volumes : [
[0]: {
name : "cert"
secret: {
defaultMode: 420
secretNam
---
*Output truncated. View full details in the Pulumi Console.*
Loading