Ctrl K
ComunidadGuías…

Taskfile.yaml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
version: "3"
dotenv: [".env"]
includes:
  web:
    taskfile: ./apps/web

tasks:
  py:init: POETRY_VIRTUALENVS_IN_PROJECT=true poetry install --no-cache --no-interaction --all-extras
  py:run: poetry run python3 {{.CLI_ARGS}}

  stripe:
    cmds:
      - stripe listen --print-secret | tr -d '\r\n' | (echo -n 'STRIPE_WEBHOOK_SECRET="'; cat; echo '"') > .env.stripe
      - stripe listen --skip-verify --forward-to http://localhost:8788/webhook/stripe
  bacon: bacon {{.CLI_ARGS}}

  stat: btop -f anarlog -u 500 --preset 1

  clean-plugins:
    cmds:
      - find plugins -mindepth 1 -maxdepth 1 -type d ! -exec test -f {}/Cargo.toml \; -exec rm -rf {} \;

  diff:
    vars:
      DIFF_FROM: "desktop_v0.0.79"
      DIFF_TO: "desktop_v0.0.80"
      PATHS: "apps/desktop/src-tauri plugins crates"
    cmds:
      - git diff {{.DIFF_FROM}} {{.DIFF_TO}} -- {{.PATHS}} | diff2html -i stdin

  jsonschema:
    cmds:
      - |
          jsonschema validate ./plugins/db/seed/schema.json ./plugins/db/seed/onboarding.json
          jsonschema validate ./plugins/db/seed/schema.json ./plugins/db/seed/dev.json

  i18n:
    cmds:
      - |
          pnpm -F desktop lingui:extract |
          awk -F '│' '($2 ~ /[^ ]/ && $3 ~ /[0-9-]/) {
            gsub(/^ *| *$/, "", $2);
            gsub(/[^0-9-]/, "", $3);
            gsub(/^ *| *$/, "", $4);
            printf "{\"language\":\"%s\",\"total\":%d,\"missing\":%d}\n",
              $2,
              ($3 == "-" ? 0: $3),
              ($4 == "-" ? 0: $4)
          }'

  stt:
    cmds:
      - chmod +x ./apps/desktop/src-tauri/resources/stt-aarch64-apple-darwin
      - chmod +x ./apps/desktop/src-tauri/resources/passthrough-aarch64-apple-darwin

  db:
    env:
      DB: /Users/yujonglee/Library/Application Support/hyprnote/db.sqlite
    cmds:
      - |
          sqlite3 -json "$DB" 'SELECT store FROM main LIMIT 1;' |
          jq -r '.[0].store' |
          jless

  env-sample:
    vars:
      INPUT_ENV: '{{.INPUT_ENV | default ".env"}}'
      OUTPUT_ENV: '{{.OUTPUT_ENV | default ".env.sample"}}'
    cmds:
      - sed -E '/^[A-Z_][A-Z0-9_]*=/s/=.*/=""/' {{.INPUT_ENV}} > {{.OUTPUT_ENV}}

  supabase:
    cmds:
      - pnpm exec supabase {{.CLI_ARGS}}

  supabase-stop:
    cmds:
      - pnpm exec supabase stop
      - task: supabase-tunnel-stop

  supabase-tunnel-start:
    platforms: [darwin]
    cmds:
      - bash scripts/supabase-tunnel-start.sh

  supabase-expose:
    platforms: [darwin]
    cmds:
      - task: supabase-tunnel-stop
      - task: supabase-env
      - task: supabase-tunnel-start

  supabase-no-expose:
    platforms: [darwin]
    cmds:
      - task: supabase-tunnel-stop
      - task: supabase-env

  supabase-tunnel-stop:
    platforms: [darwin]
    cmds:
      - bash scripts/supabase-tunnel-stop.sh

  supabase-env:
    internal: true
    cmds:
      - |
          pnpm exec supabase status --output=env | awk -F= '
            /^ANON_KEY=/ { print "SUPABASE_ANON_KEY=" $2; print "VITE_SUPABASE_ANON_KEY=" $2 }
            /^API_URL=/ { print "SUPABASE_URL=" $2; print "VITE_SUPABASE_URL=" $2 }
            /^DB_URL=/ { print "DATABASE_URL=" $2 }
            /^FUNCTIONS_URL=/ { print "SUPABASE_FUNCTIONS_URL=" $2; print "VITE_SUPABASE_FUNCTIONS_URL=" $2 }
            /^GRAPHQL_URL=/ { print "SUPABASE_GRAPHQL_URL=" $2; print "VITE_SUPABASE_GRAPHQL_URL=" $2 }
            /^INBUCKET_URL=/ { print "SUPABASE_INBUCKET_URL=" $2 }
            /^JWT_SECRET=/ { print "SUPABASE_JWT_SECRET=" $2 }
            /^MAILPIT_URL=/ { print "SUPABASE_MAILPIT_URL=" $2 }
            /^MCP_URL=/ { print "SUPABASE_MCP_URL=" $2 }
            /^PUBLISHABLE_KEY=/ { print "SUPABASE_PUBLISHABLE_KEY=" $2; print "VITE_SUPABASE_PUBLISHABLE_KEY=" $2 }
            /^REST_URL=/ { print "SUPABASE_REST_URL=" $2; print "VITE_SUPABASE_REST_URL=" $2 }
            /^SECRET_KEY=/ { print "SUPABASE_SECRET_KEY=" $2 }
            /^SERVICE_ROLE_KEY=/ { print "SUPABASE_SERVICE_ROLE_KEY=" $2 }
            /^STUDIO_URL=/ { print "SUPABASE_STUDIO_URL=" $2 }
          ' > .env.supabase

  supabase-storage-seed-config:
    internal: true
    vars:
      SUPABASE_STORAGE_ASSETS_DIR: '{{.SUPABASE_STORAGE_ASSETS_DIR | default "./.seed/storage/assets"}}'
      SUPABASE_STORAGE_ASSETS_BUCKET: '{{.SUPABASE_STORAGE_ASSETS_BUCKET | default "assets"}}'
      SUPABASE_STORAGE_MODELS_DIR: '{{.SUPABASE_STORAGE_MODELS_DIR | default "./.seed/storage/models"}}'
      SUPABASE_STORAGE_MODELS_BUCKET: '{{.SUPABASE_STORAGE_MODELS_BUCKET | default "models"}}'
      SUPABASE_STORAGE_AUDIO_FILES_DIR: '{{.SUPABASE_STORAGE_AUDIO_FILES_DIR | default "./.seed/storage/audio-files"}}'
      SUPABASE_STORAGE_AUDIO_FILES_BUCKET: '{{.SUPABASE_STORAGE_AUDIO_FILES_BUCKET | default "audio-files"}}'
    cmds:
      - mkdir -p supabase/{{.SUPABASE_STORAGE_ASSETS_DIR}} supabase/{{.SUPABASE_STORAGE_MODELS_DIR}} supabase/{{.SUPABASE_STORAGE_AUDIO_FILES_DIR}}
      - |
          cargo xtask toml-set supabase/config.toml \
            storage.buckets.{{.SUPABASE_STORAGE_ASSETS_BUCKET}}.public true \
            storage.buckets.{{.SUPABASE_STORAGE_ASSETS_BUCKET}}.file_size_limit '"5GiB"' \
            storage.buckets.{{.SUPABASE_STORAGE_ASSETS_BUCKET}}.allowed_mime_types '[]' \
            storage.buckets.{{.SUPABASE_STORAGE_ASSETS_BUCKET}}.objects_path '"{{.SUPABASE_STORAGE_ASSETS_DIR}}"' \
            storage.buckets.{{.SUPABASE_STORAGE_MODELS_BUCKET}}.public true \
            storage.buckets.{{.SUPABASE_STORAGE_MODELS_BUCKET}}.file_size_limit '"5GiB"' \
            storage.buckets.{{.SUPABASE_STORAGE_MODELS_BUCKET}}.allowed_mime_types '[]' \
            storage.buckets.{{.SUPABASE_STORAGE_MODELS_BUCKET}}.objects_path '"{{.SUPABASE_STORAGE_MODELS_DIR}}"' \
            storage.buckets.{{.SUPABASE_STORAGE_AUDIO_FILES_BUCKET}}.public true \
            storage.buckets.{{.SUPABASE_STORAGE_AUDIO_FILES_BUCKET}}.file_size_limit '"5GiB"' \
            storage.buckets.{{.SUPABASE_STORAGE_AUDIO_FILES_BUCKET}}.allowed_mime_types '[]' \
            storage.buckets.{{.SUPABASE_STORAGE_AUDIO_FILES_BUCKET}}.objects_path '"{{.SUPABASE_STORAGE_AUDIO_FILES_DIR}}"'

  # infisical run --env=dev --projectId=87dad7b5-72a6-4791-9228-b3b86b169db1 --path="/supabase" -- task supabase-start
  supabase-start:
    cmds:
      - cp supabase/config.default.toml supabase/config.toml
      - cargo xtask supabase-patch
      # - task: supabase-storage-seed-config
      # - '[ ! -f supabase/signing_keys.json ] && pnpm exec supabase gen signing-key --algorithm ES256 | jq -s ''.'' > supabase/signing_keys.json || true'
      # - cargo xtask toml-set supabase/config.toml auth.signing_keys_path '"./signing_keys.json"'
      - pnpm exec dprint fmt supabase/config.toml
      - pnpm exec supabase start -x realtime,logflare
      - task: supabase-env
      - pnpm exec supabase migration up --local

  nango-dev-connection:
    silent: true
    requires:
      vars: [DEV_NANGO_CONNECTION_ID]
    vars:
      USER_ID: '{{.USER_ID | default ""}}'
      INTEGRATION_ID: '{{.INTEGRATION_ID | default "google-calendar"}}'
      PROVIDER: '{{.PROVIDER | default "google-calendar"}}'
    cmds:
      - |
          DB_URL=$(pnpm exec supabase status --output=env 2>/dev/null | awk -F= '/^DB_URL=/{gsub(/^"|"$/, "", $2); print $2}')
          if [ -z "$DB_URL" ]; then
            echo "DB_URL not found. Start local Supabase first (e.g. task supabase-start)." >&2
            exit 1
          fi

          USER_ID="{{.USER_ID}}"
          if [ -z "$USER_ID" ]; then
            USER_ID=$(psql "$DB_URL" -tAc "SELECT id::text FROM auth.users ORDER BY created_at DESC LIMIT 1")
          fi
          if [ -z "$USER_ID" ]; then
            echo "No user found in auth.users. Sign in once, or pass USER_ID explicitly." >&2
            exit 1
          fi

          psql "$DB_URL" \
            -v ON_ERROR_STOP=1 \
            -c "INSERT INTO nango_connections (user_id, integration_id, connection_id, provider) VALUES ('$USER_ID'::uuid, '{{.INTEGRATION_ID}}', '{{.DEV_NANGO_CONNECTION_ID}}', '{{.PROVIDER}}') ON CONFLICT (user_id, integration_id) DO UPDATE SET connection_id = EXCLUDED.connection_id, provider = EXCLUDED.provider, updated_at = now(), status = 'connected', last_error_type = NULL, last_error_description = NULL, last_error_at = NULL;" \
            >/dev/null

          printf 'ok user_id=%s integration_id=%s connection_id=%s\n' "$USER_ID" "{{.INTEGRATION_ID}}" "{{.DEV_NANGO_CONNECTION_ID}}"

  nango-dev-user-id:
    silent: true
    internal: true
    cmds:
      - |
          DB_URL=$(pnpm exec supabase status --output=env 2>/dev/null | awk -F= '/^DB_URL=/{gsub(/^"|"$/, "", $2); print $2}')
          if [ -z "$DB_URL" ]; then
            echo "DB_URL not found. Start local Supabase first (e.g. task supabase-start)." >&2
            exit 1
          fi

          USER_ID=$(psql "$DB_URL" -tAc "SELECT id::text FROM auth.users ORDER BY created_at DESC LIMIT 1")
          if [ -z "$USER_ID" ]; then
            echo "No user found in auth.users. Sign in once first." >&2
            exit 1
          fi

          printf 'user_id=%s\n' "$USER_ID"