ai cooking
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Secretbreakup (#401)

* break up secrets and get ready for walmart

* signifcant whitespace was a mistake

---------

Co-authored-by: paul miller <paul.miller>

authored by

Paul Miller
paul miller
and committed by
GitHub
ce3cbbf0 7bc477e1

+149 -26
+1
.gitignore
··· 31 31 .env 32 32 .envtest 33 33 .envprod 34 + secrets/**/*.env 34 35 35 36 tailwind/node_modules/ 36 37
+11 -1
deploy/cronjob-careme-mail.yaml
··· 30 30 args: ["-mail"] 31 31 envFrom: 32 32 - secretRef: 33 - name: careme-secrets3 33 + name: ai 34 + - secretRef: 35 + name: auth 36 + - secretRef: 37 + name: mail 38 + - secretRef: 39 + name: kroger 40 + - secretRef: 41 + name: storage 42 + - secretRef: 43 + name: walmart 34 44 env: 35 45 - name: APPLICATIONINSIGHTS_CONNECTION_STRING 36 46 value: "InstrumentationKey=a532fcc7-5098-4f44-8dde-ff2f32d6a59b;IngestionEndpoint=https://westus3-1.in.applicationinsights.azure.com/;LiveEndpoint=https://westus3.livediagnostics.monitor.azure.com/;ApplicationId=fdc94780-6135-4a29-980e-ab114a402e58"
+1 -1
deploy/cronjob-wholefoods-scrape.yaml
··· 29 29 imagePullPolicy: IfNotPresent 30 30 envFrom: 31 31 - secretRef: 32 - name: careme-secrets3 32 + name: storage 33 33 env: 34 34 - name: APPLICATIONINSIGHTS_CONNECTION_STRING 35 35 value: "InstrumentationKey=a532fcc7-5098-4f44-8dde-ff2f32d6a59b;IngestionEndpoint=https://westus3-1.in.applicationinsights.azure.com/;LiveEndpoint=https://westus3.livediagnostics.monitor.azure.com/;ApplicationId=fdc94780-6135-4a29-980e-ab114a402e58"
+10 -3
deploy/deploy.yaml
··· 28 28 name: http 29 29 envFrom: 30 30 - secretRef: 31 - name: careme-secrets3 31 + name: ai 32 + - secretRef: 33 + name: auth 34 + - secretRef: 35 + name: kroger 36 + - secretRef: 37 + name: storage 38 + - secretRef: 39 + name: walmart 32 40 env: 33 41 - name: CLARITY_PROJECT_ID 34 42 value: "td2gxd3sq9" ··· 38 46 value: "xDzACMu074AcEI_x3dhC" 39 47 - name: ADMIN_EMAILS 40 48 value: "paul.miller@gmail.com" 41 - - name: WHOLEFOODS_ENABLE 42 - value: "1" 43 49 - name: APPLICATIONINSIGHTS_CONNECTION_STRING 44 50 value: "InstrumentationKey=a532fcc7-5098-4f44-8dde-ff2f32d6a59b;IngestionEndpoint=https://westus3-1.in.applicationinsights.azure.com/;LiveEndpoint=https://westus3.livediagnostics.monitor.azure.com/;ApplicationId=fdc94780-6135-4a29-980e-ab114a402e58" 51 + 45 52 volumeMounts: 46 53 - name: recipes 47 54 mountPath: /recipes
+125 -20
getsecret.sh
··· 1 1 #!/usr/bin/env bash 2 2 set -euo pipefail 3 3 4 - if [[ $# -gt 3 ]]; then 5 - echo "Usage: $0 <secret-name> [namespace] [output-file]" 6 - echo " secret-name - name of the Kubernetes Secret" 7 - echo " namespace - Kubernetes namespace (default: default)" 8 - echo " output-file - path to .env file (default: .env)" 9 - exit 1 10 - fi 4 + usage() { 5 + cat <<'EOF' 6 + Usage: 7 + ./getsecret.sh get [secrets-dir] [namespace] 8 + ./getsecret.sh put [secrets-dir] [namespace] 9 + 10 + Commands: 11 + get Fetch each Kubernetes Secret named by a *.env file in secrets-dir 12 + and write it back to that file. 13 + put Apply each *.env file in secrets-dir to the Kubernetes Secret with 14 + the same basename. 15 + 16 + Arguments: 17 + secrets-dir Directory containing split env files (default: secrets/prod) 18 + namespace Kubernetes namespace (default: careme) 19 + 20 + Examples: 21 + ./getsecret.sh get 22 + ./getsecret.sh put secrets/prod 23 + ./getsecret.sh get secrets/test careme 24 + EOF 25 + } 26 + 27 + require_command() { 28 + if ! command -v "$1" >/dev/null 2>&1; then 29 + echo "error: required command not found: $1" >&2 30 + exit 1 31 + fi 32 + } 33 + 34 + sync_get() { 35 + local secrets_dir="$1" 36 + local namespace="$2" 37 + local files=() 38 + 39 + mkdir -p "${secrets_dir}" 40 + shopt -s nullglob 41 + files=("${secrets_dir}"/*.env) 42 + shopt -u nullglob 43 + 44 + if [[ ${#files[@]} -eq 0 ]]; then 45 + echo "error: no .env files found in ${secrets_dir}" >&2 46 + exit 1 47 + fi 48 + 49 + local file 50 + for file in "${files[@]}"; do 51 + local secret_name 52 + local tmp_file 53 + secret_name="$(basename "${file}" .env)" 54 + tmp_file="$(mktemp)" 55 + 56 + kubectl get secret "${secret_name}" \ 57 + -n "${namespace}" \ 58 + -o json \ 59 + | jq -r ' 60 + .data 61 + | to_entries 62 + | sort_by(.key)[] 63 + | "\(.key)=\(.value | @base64d)" 64 + ' > "${tmp_file}" 65 + 66 + mv "${tmp_file}" "${file}" 67 + echo "synced secret '${secret_name}' from namespace '${namespace}' to ${file}" 68 + done 69 + } 70 + 71 + sync_put() { 72 + local secrets_dir="$1" 73 + local namespace="$2" 74 + local files=() 75 + 76 + shopt -s nullglob 77 + files=("${secrets_dir}"/*.env) 78 + shopt -u nullglob 11 79 12 - SECRET_NAME="${1:-careme-secrets3}" 13 - NAMESPACE="${2:-careme}" 14 - OUTPUT_FILE="${3:-.env}" 80 + if [[ ${#files[@]} -eq 0 ]]; then 81 + echo "error: no .env files found in ${secrets_dir}" >&2 82 + exit 1 83 + fi 15 84 16 - # Fetch secret and convert to KEY=VALUE lines 17 - kubectl get secret "${SECRET_NAME}" \ 18 - -n "${NAMESPACE}" \ 19 - -o json \ 20 - | jq -r ' 21 - .data 22 - | to_entries[] 23 - | "\(.key)=\(.value | @base64d)" 24 - ' > "${OUTPUT_FILE}" 85 + local file 86 + for file in "${files[@]}"; do 87 + local secret_name 88 + secret_name="$(basename "${file}" .env)" 25 89 26 - echo "Wrote environment variables from secret '${SECRET_NAME}' (ns: ${NAMESPACE}) to ${OUTPUT_FILE}" 90 + kubectl create secret generic "${secret_name}" \ 91 + --from-env-file="${file}" \ 92 + --dry-run=client \ 93 + -o yaml \ 94 + | kubectl apply -n "${namespace}" -f - 95 + 96 + echo "applied ${file} to secret '${secret_name}' in namespace '${namespace}'" 97 + done 98 + } 99 + 100 + main() { 101 + if [[ $# -lt 1 || $# -gt 3 ]]; then 102 + usage 103 + exit 1 104 + fi 105 + 106 + require_command kubectl 107 + require_command jq 108 + 109 + local command="$1" 110 + local secrets_dir="${2:-secrets/prod}" 111 + local namespace="${3:-careme}" 112 + 113 + case "${command}" in 114 + get) 115 + sync_get "${secrets_dir}" "${namespace}" 116 + ;; 117 + put) 118 + sync_put "${secrets_dir}" "${namespace}" 119 + ;; 120 + -h|--help|help) 121 + usage 122 + ;; 123 + *) 124 + echo "error: unknown command '${command}'" >&2 125 + usage 126 + exit 1 127 + ;; 128 + esac 129 + } 130 + 131 + main "$@"
+1 -1
internal/walmart/locations.go
··· 31 31 lon := store.Coordinates.Longitude 32 32 return locationtypes.Location{ 33 33 ID: "walmart_" + strconv.Itoa(store.No), 34 - Name: store.Name, 34 + Name: "Walmart " + store.Name, 35 35 Address: store.StreetAddress, 36 36 State: store.StateProvCode, 37 37 ZipCode: store.Zip,