From a198beb3f5deb0b667b81f8470bc682a5c42ba6b Mon Sep 17 00:00:00 2001 From: Tahmid Ahmed Date: Sat, 10 Oct 2026 03:23:19 -0400 Subject: [PATCH] TAN-1090: remove old cicd files, migrate to new ts7/oxlint/oxfmt mode, move team checks from dino to tan (& run check on /copy command). --- .github/composite/build-image/action.yml | 38 +- .../internal/standup-bot/action.yml | 17 +- .github/composite/load-secrets/action.yml | 41 -- .github/composite/notion-checks/action.yml | 37 -- .../composite/pr-description-check/action.yml | 20 - .github/composite/redeploy/action.yml | 34 +- .../redeploy/internal/standup-bot/action.yml | 5 +- .../test/backend-pre-test/action.yml | 18 +- .../composite/test/backend-test/action.yml | 38 +- .../test/frontend-pre-test/action.yml | 31 +- .../composite/test/frontend-test/action.yml | 38 +- .github/composite/validate-db/action.yml | 18 +- .github/scripts/.prettierignore | 1 - .github/scripts/.prettierrc | 4 - .github/scripts/README.md | 1 - .github/scripts/auto-approval/index.ts | 127 ----- .github/scripts/build-image/index.ts | 65 +-- .github/scripts/bun.lock | 510 ++++++++---------- .github/scripts/copy-prod-db/index.ts | 277 ++++++---- .github/scripts/eslint.config.js | 52 -- .github/scripts/help-message/index.ts | 5 +- .github/scripts/load-secrets/env/load.ts | 107 ---- .github/scripts/load-secrets/index.ts | 77 --- .github/scripts/load-slash-commands/index.ts | 2 +- .github/scripts/notion/commits/index.ts | 49 -- .github/scripts/notion/index.ts | 102 ---- .github/scripts/notion/pr/index.ts | 50 -- .github/scripts/notion/pr/types.ts | 8 - .github/scripts/notion/pr/utils.ts | 90 ---- .github/scripts/notion/pr/validate-ticket.ts | 54 -- .github/scripts/notion/sdk.ts | 7 - .github/scripts/notion/task/index.ts | 113 ---- .github/scripts/oxfmt.config.ts | 6 + .github/scripts/oxlint.config.ts | 6 + .github/scripts/package.json | 46 +- .../patches/@digitalocean%2Fdots@1.7.0.patch | 13 - .github/scripts/pr-description-check/index.ts | 7 +- .github/scripts/redeploy/db/index.ts | 26 +- .github/scripts/redeploy/db/util.ts | 10 +- .github/scripts/redeploy/index.ts | 10 +- .github/scripts/test/run-backend-tests.ts | 11 +- .github/scripts/test/run-e2e-tests.ts | 9 +- .../scripts/test/run-frontend-pre-tests.ts | 7 +- .github/scripts/test/run-frontend-tests.ts | 9 +- .github/scripts/tsconfig.json | 34 +- .github/scripts/utils/env.ts | 15 + .github/scripts/utils/run-backend-instance.ts | 25 +- .../scripts/utils/run-frontend-instance.ts | 5 +- .github/scripts/utils/run-local-db.ts | 12 +- .github/scripts/utils/send-message/gha.ts | 2 +- .github/scripts/utils/send-message/index.ts | 8 +- .../utils/update-commit-status/index.ts | 53 -- .../scripts/utils/update-pr-description.ts | 4 +- .github/scripts/utils/upload.ts | 31 +- .github/scripts/validate-db/index.ts | 19 +- .github/workflows/ai-command.yml | 92 ---- .github/workflows/ai-review.yml | 174 ------ .github/workflows/approval.yml | 76 --- .github/workflows/ci-cd.yml | 45 +- .github/workflows/copy-command.yml | 68 +-- .github/workflows/e2e.yml | 31 +- .github/workflows/help-command.yml | 2 +- .github/workflows/migrate-command.yml | 15 +- .github/workflows/pr-verifications.yml | 37 -- .github/workflows/slash.yml | 4 +- 65 files changed, 681 insertions(+), 2267 deletions(-) delete mode 100644 .github/composite/load-secrets/action.yml delete mode 100644 .github/composite/notion-checks/action.yml delete mode 100644 .github/composite/pr-description-check/action.yml delete mode 100644 .github/scripts/.prettierignore delete mode 100644 .github/scripts/.prettierrc delete mode 100644 .github/scripts/auto-approval/index.ts delete mode 100644 .github/scripts/eslint.config.js delete mode 100644 .github/scripts/load-secrets/env/load.ts delete mode 100644 .github/scripts/load-secrets/index.ts delete mode 100644 .github/scripts/notion/commits/index.ts delete mode 100644 .github/scripts/notion/index.ts delete mode 100644 .github/scripts/notion/pr/index.ts delete mode 100644 .github/scripts/notion/pr/types.ts delete mode 100644 .github/scripts/notion/pr/utils.ts delete mode 100644 .github/scripts/notion/pr/validate-ticket.ts delete mode 100644 .github/scripts/notion/sdk.ts delete mode 100644 .github/scripts/notion/task/index.ts create mode 100644 .github/scripts/oxfmt.config.ts create mode 100644 .github/scripts/oxlint.config.ts delete mode 100644 .github/scripts/patches/@digitalocean%2Fdots@1.7.0.patch create mode 100644 .github/scripts/utils/env.ts delete mode 100644 .github/scripts/utils/update-commit-status/index.ts delete mode 100644 .github/workflows/ai-command.yml delete mode 100644 .github/workflows/ai-review.yml delete mode 100644 .github/workflows/approval.yml delete mode 100644 .github/workflows/pr-verifications.yml diff --git a/.github/composite/build-image/action.yml b/.github/composite/build-image/action.yml index 72fb703c8..39c81f981 100644 --- a/.github/composite/build-image/action.yml +++ b/.github/composite/build-image/action.yml @@ -26,41 +26,27 @@ runs: using: "composite" steps: - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true SECRETS: ${{ inputs.SECRETS }} - - - name: Set up pnpm - uses: pnpm/action-setup@v5 - with: - version: 10.24.0 - cache: true - cache_dependency_path: js/pnpm-lock.yaml - package_json_file: js/package.json + INSTALL_JAVA: true + JAVA_VERSION: "25" + JAVA_CACHE_KEY: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} + JAVA_CACHE_PATH: | + ~/.m2 + ~/repository + INSTALL_PNPM: true + PNPM_VERSION: "10.24.0" + PNPM_CACHE: true + PNPM_CACHE_DEPENDENCY_PATH: js/pnpm-lock.yaml + PNPM_PACKAGE_JSON_FILE: js/package.json - name: Install JS dependencies shell: bash run: pnpm install --frozen-lockfile working-directory: js - - name: Set up OpenJDK 25 - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "25" - - - name: Cache Maven packages - uses: actions/cache@v5 - with: - path: | - ~/.m2 - ~/repository - key: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} - - - name: Expose GitHub Runtime - uses: crazy-max/ghaction-github-runtime@v4 - - name: Run script id: build-image shell: bash diff --git a/.github/composite/build-image/internal/standup-bot/action.yml b/.github/composite/build-image/internal/standup-bot/action.yml index 8db941c71..3e8279e16 100644 --- a/.github/composite/build-image/internal/standup-bot/action.yml +++ b/.github/composite/build-image/internal/standup-bot/action.yml @@ -27,19 +27,16 @@ runs: using: "composite" steps: - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true SECRETS: ${{ inputs.SECRETS }} - - - name: Set up OpenJDK 25 - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "25" - - - name: Expose GitHub Runtime - uses: crazy-max/ghaction-github-runtime@v4 + INSTALL_JAVA: true + JAVA_VERSION: "25" + JAVA_CACHE_KEY: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} + JAVA_CACHE_PATH: | + ~/.m2 + ~/repository - name: Run script id: build-image diff --git a/.github/composite/load-secrets/action.yml b/.github/composite/load-secrets/action.yml deleted file mode 100644 index b5b236b2f..000000000 --- a/.github/composite/load-secrets/action.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: "Load Secrets" -description: "Load secrets & mask all loaded secrets" - -inputs: - GPG_PRIVATE_KEY: - description: "GPG Private Key" - required: true - GPG_PASSPHRASE: - description: "GPG Passphrase" - required: true - UNLOAD_ENVIRONMENTS: - description: "Comma separated string of what environment files to load" - -runs: - using: "composite" - steps: - - name: Check GPG secret key & passphrase exists - shell: bash - run: | - [ -n "${GPG_PRIVATE_KEY:-}" ] && echo "GPG_PRIVATE_KEY found" || echo "GPG_PRIVATE_KEY missing or empty" - [ -n "${GPG_PASSPHRASE:-}" ] && echo "GPG_PASSPHRASE found" || echo "GPG_PASSPHRASE missing or empty" - env: - GPG_PRIVATE_KEY: ${{ inputs.GPG_PRIVATE_KEY }} - GPG_PASSPHRASE: ${{ inputs.GPG_PASSPHRASE }} - - - name: Load GPG secret key - uses: crazy-max/ghaction-import-gpg@v7 - with: - gpg_private_key: ${{ inputs.GPG_PRIVATE_KEY }} - passphrase: ${{ inputs.GPG_PASSPHRASE }} - - - name: Install git-crypt - uses: flydiverny/setup-git-crypt@v4 - - - name: Verify git-crypt version - shell: bash - run: git-crypt --version - - - name: Run script - shell: bash - run: bun run .github/scripts/load-secrets --envs=${{ inputs.UNLOAD_ENVIRONMENTS }} diff --git a/.github/composite/notion-checks/action.yml b/.github/composite/notion-checks/action.yml deleted file mode 100644 index 62e7f4ffd..000000000 --- a/.github/composite/notion-checks/action.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: "Run Notion Checks" -description: "Run Notion validation(s) on the given PR ID" - -inputs: - PR_ID: - description: "PR ID" - required: true - SECRETS: - description: "Pass toJSON(secrets) from the calling workflow to expose all secrets as env vars." - required: false - GET_GHA_OUTPUT: - description: "If set to `true`, will output an object with data that can be interfaced in GitHub Actions." - required: false - default: "false" - VALIDATE_TICKET: - description: "If set to `true`, will validate the ticket fields." - required: false - default: "true" - -outputs: - context: - description: "Notion task context for AI review" - value: ${{ steps.run_script.outputs.context }} - -runs: - using: "composite" - steps: - - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 - with: - LINT_CI: true - SECRETS: ${{ inputs.SECRETS }} - - - name: Run script - id: run_script - shell: bash - run: bun .github/scripts/notion --prId=${{ inputs.PR_ID }} --getGhaOutput=${{ inputs.GET_GHA_OUTPUT }} --githubOutput=${{ inputs.GITHUB_OUTPUT }} --validateTicket=${{ inputs.VALIDATE_TICKET }} diff --git a/.github/composite/pr-description-check/action.yml b/.github/composite/pr-description-check/action.yml deleted file mode 100644 index 0fa9784ea..000000000 --- a/.github/composite/pr-description-check/action.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: "Verify PR Description" -description: "Ensure the GH PR description is filled out" - -inputs: - PR_ID: - description: "PR ID" - required: true - -runs: - using: "composite" - steps: - - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 - with: - LINT_CI: true - - - name: Run script - id: run_script - shell: bash - run: bun .github/scripts/pr-description-check --prId=${{ inputs.PR_ID }} diff --git a/.github/composite/redeploy/action.yml b/.github/composite/redeploy/action.yml index 8ee4b415e..84fddea91 100644 --- a/.github/composite/redeploy/action.yml +++ b/.github/composite/redeploy/action.yml @@ -26,38 +26,24 @@ runs: using: "composite" steps: - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true SECRETS: ${{ inputs.SECRETS }} HEADSCALE_ADDRESS: ${{ inputs.HEADSCALE_ADDRESS }} HEADSCALE_USER: ${{ inputs.HEADSCALE_USER }} HEADSCALE_PREAUTHKEY: ${{ inputs.HEADSCALE_PREAUTHKEY }} - - - name: Set up pnpm - uses: pnpm/action-setup@v5 - with: - version: 10.24.0 - cache: true - cache_dependency_path: js/pnpm-lock.yaml - package_json_file: js/package.json - - - name: Set up OpenJDK 25 - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "25" - - - name: Cache Maven packages - uses: actions/cache@v5 - with: - path: | + INSTALL_JAVA: true + JAVA_VERSION: "25" + JAVA_CACHE_KEY: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} + JAVA_CACHE_PATH: | ~/.m2 ~/repository - key: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} - - - name: Expose GitHub Runtime - uses: crazy-max/ghaction-github-runtime@v4 + INSTALL_PNPM: true + PNPM_VERSION: "10.24.0" + PNPM_CACHE: true + PNPM_CACHE_DEPENDENCY_PATH: js/pnpm-lock.yaml + PNPM_PACKAGE_JSON_FILE: js/package.json - name: Run script shell: bash diff --git a/.github/composite/redeploy/internal/standup-bot/action.yml b/.github/composite/redeploy/internal/standup-bot/action.yml index 76773a012..f1fe9dc1f 100644 --- a/.github/composite/redeploy/internal/standup-bot/action.yml +++ b/.github/composite/redeploy/internal/standup-bot/action.yml @@ -17,14 +17,11 @@ runs: using: "composite" steps: - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true SECRETS: ${{ inputs.SECRETS }} - - name: Expose GitHub Runtime - uses: crazy-max/ghaction-github-runtime@v4 - - name: Run script shell: bash run: | diff --git a/.github/composite/test/backend-pre-test/action.yml b/.github/composite/test/backend-pre-test/action.yml index bb156a1b9..8e165f3e5 100644 --- a/.github/composite/test/backend-pre-test/action.yml +++ b/.github/composite/test/backend-pre-test/action.yml @@ -4,23 +4,15 @@ runs: using: "composite" steps: - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true - - - name: Set up OpenJDK 25 - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "25" - - - name: Cache Maven packages - uses: actions/cache@v5 - with: - path: | + INSTALL_JAVA: true + JAVA_VERSION: "25" + JAVA_CACHE_KEY: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} + JAVA_CACHE_PATH: | ~/.m2 ~/repository - key: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} - name: Run script shell: bash diff --git a/.github/composite/test/backend-test/action.yml b/.github/composite/test/backend-test/action.yml index 675669f6b..108922e80 100644 --- a/.github/composite/test/backend-test/action.yml +++ b/.github/composite/test/backend-test/action.yml @@ -14,41 +14,27 @@ runs: using: "composite" steps: - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true SECRETS: ${{ inputs.SECRETS }} - - - name: Set up pnpm - uses: pnpm/action-setup@v5 - with: - version: 10.24.0 - cache: true - cache_dependency_path: js/pnpm-lock.yaml - package_json_file: js/package.json + INSTALL_JAVA: true + JAVA_VERSION: "25" + JAVA_CACHE_KEY: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} + JAVA_CACHE_PATH: | + ~/.m2 + ~/repository + INSTALL_PNPM: true + PNPM_VERSION: "10.24.0" + PNPM_CACHE: true + PNPM_CACHE_DEPENDENCY_PATH: js/pnpm-lock.yaml + PNPM_PACKAGE_JSON_FILE: js/package.json - name: Install JS dependencies shell: bash run: pnpm install --frozen-lockfile working-directory: js - - name: Set up OpenJDK 25 - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "25" - - - name: Cache Maven packages - uses: actions/cache@v5 - with: - path: | - ~/.m2 - ~/repository - key: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} - - - name: Expose GitHub Runtime - uses: crazy-max/ghaction-github-runtime@v4 - - name: Run script shell: bash run: bun run .github/scripts/test/run-backend-tests --should-upload-coverage=${{ inputs.UPLOAD_TEST_COV }} diff --git a/.github/composite/test/frontend-pre-test/action.yml b/.github/composite/test/frontend-pre-test/action.yml index 022f5f412..475182209 100644 --- a/.github/composite/test/frontend-pre-test/action.yml +++ b/.github/composite/test/frontend-pre-test/action.yml @@ -10,32 +10,21 @@ runs: using: "composite" steps: - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true SECRETS: ${{ inputs.SECRETS }} - - - name: Set up OpenJDK 25 - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "25" - - - name: Cache Maven packages - uses: actions/cache@v5 - with: - path: | + INSTALL_JAVA: true + JAVA_VERSION: "25" + JAVA_CACHE_KEY: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} + JAVA_CACHE_PATH: | ~/.m2 ~/repository - key: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} - - - name: Set up pnpm - uses: pnpm/action-setup@v5 - with: - version: 10.24.0 - cache: true - cache_dependency_path: js/pnpm-lock.yaml - package_json_file: js/package.json + INSTALL_PNPM: true + PNPM_VERSION: "10.24.0" + PNPM_CACHE: true + PNPM_CACHE_DEPENDENCY_PATH: js/pnpm-lock.yaml + PNPM_PACKAGE_JSON_FILE: js/package.json - name: Install JS dependencies shell: bash diff --git a/.github/composite/test/frontend-test/action.yml b/.github/composite/test/frontend-test/action.yml index 73d4460c1..becb884a5 100644 --- a/.github/composite/test/frontend-test/action.yml +++ b/.github/composite/test/frontend-test/action.yml @@ -14,41 +14,27 @@ runs: using: "composite" steps: - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true SECRETS: ${{ inputs.SECRETS }} - - - name: Set up pnpm - uses: pnpm/action-setup@v5 - with: - version: 10.24.0 - cache: true - cache_dependency_path: js/pnpm-lock.yaml - package_json_file: js/package.json + INSTALL_JAVA: true + JAVA_VERSION: "25" + JAVA_CACHE_KEY: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} + JAVA_CACHE_PATH: | + ~/.m2 + ~/repository + INSTALL_PNPM: true + PNPM_VERSION: "10.24.0" + PNPM_CACHE: true + PNPM_CACHE_DEPENDENCY_PATH: js/pnpm-lock.yaml + PNPM_PACKAGE_JSON_FILE: js/package.json - name: Install JS dependencies shell: bash run: pnpm install --frozen-lockfile working-directory: js - - name: Set up OpenJDK 25 - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "25" - - - name: Cache Maven packages - uses: actions/cache@v5 - with: - path: | - ~/.m2 - ~/repository - key: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} - - - name: Expose GitHub Runtime - uses: crazy-max/ghaction-github-runtime@v4 - - name: Run script shell: bash run: bun run .github/scripts/test/run-frontend-tests --should-upload-coverage=${{ inputs.UPLOAD_TEST_COV }} diff --git a/.github/composite/validate-db/action.yml b/.github/composite/validate-db/action.yml index ef9a6aff7..f07d80c76 100644 --- a/.github/composite/validate-db/action.yml +++ b/.github/composite/validate-db/action.yml @@ -26,27 +26,19 @@ runs: using: "composite" steps: - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true SECRETS: ${{ inputs.SECRETS }} HEADSCALE_ADDRESS: ${{ inputs.HEADSCALE_ADDRESS }} HEADSCALE_USER: ${{ inputs.HEADSCALE_USER }} HEADSCALE_PREAUTHKEY: ${{ inputs.HEADSCALE_PREAUTHKEY }} - - - name: Set up OpenJDK 25 - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "25" - - - name: Cache Maven packages - uses: actions/cache@v5 - with: - path: | + INSTALL_JAVA: true + JAVA_VERSION: "25" + JAVA_CACHE_KEY: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} + JAVA_CACHE_PATH: | ~/.m2 ~/repository - key: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} - name: Run script shell: bash diff --git a/.github/scripts/.prettierignore b/.github/scripts/.prettierignore deleted file mode 100644 index ea7f33b0d..000000000 --- a/.github/scripts/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -bun.lock diff --git a/.github/scripts/.prettierrc b/.github/scripts/.prettierrc deleted file mode 100644 index c70c4d8a1..000000000 --- a/.github/scripts/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "experimentalTernaries": true, - "semi": true -} diff --git a/.github/scripts/README.md b/.github/scripts/README.md index 838430543..6dc9e5a00 100644 --- a/.github/scripts/README.md +++ b/.github/scripts/README.md @@ -21,7 +21,6 @@ This directory contains helper scripts that are used in our CI/CD workflows. The │   ├── run-frontend-instance.ts # shared function to run frontend in CI asynchronously │   ├── run-local-db.ts # shared function to run a local pg db in CI asynchronously │   ├── send-message # shared function to send a message to GitHub PR -│   ├── update-commit-status # shared function to add/update commit status to GitHub commit │   ├── update-pr-description.ts # shared function to update description of GitHub PR │   └── upload.ts # shared function to deploy test coverage information to our test coverage providers └── validate-db # helps validate current db changes against a certain database to ensure data integrity diff --git a/.github/scripts/auto-approval/index.ts b/.github/scripts/auto-approval/index.ts deleted file mode 100644 index 5a28d5089..000000000 --- a/.github/scripts/auto-approval/index.ts +++ /dev/null @@ -1,127 +0,0 @@ -import type { RestEndpointMethodTypes } from "@octokit/rest"; - -import { checkNotionPrAndGetTask } from "notion/pr"; -import { getNotionClient } from "notion/sdk"; -import { Octokit } from "octokit"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; - -const AUTHORIZED_USERS = ["tahminator", "Arshadul-Monir"]; - -const { - githubToken, - repo: rawRepo, - prId, -} = await yargs(hideBin(process.argv)) - .option("githubToken", { - type: "string", - describe: "GitHub token", - default: process.env.GH_TOKEN, - demandOption: true, - }) - .option("repo", { - type: "string", - describe: "Repository in owner/repo form", - default: process.env.GITHUB_REPOSITORY, - demandOption: true, - }) - .option("prId", { - type: "number", - describe: "Pull request number", - demandOption: true, - }) - .strict() - .parse(); - -function parseCiEnv(ciEnv: Record) { - const notionDbId = (() => { - const v = ciEnv["NOTION_TASK_DB_ID"]; - if (!v) { - throw new Error("Missing NOTION_TASK_DB_ID from .env.ci"); - } - return v; - })(); - - const notionSecret = (() => { - const v = ciEnv["NOTION_SECRET"]; - if (!v) { - throw new Error("Missing NOTION_SECRET from .env.ci"); - } - return v; - })(); - - return { - notionDbId, - notionSecret, - }; -} - -const { notionDbId, notionSecret } = parseCiEnv(process.env); -const notionClient = getNotionClient(notionSecret); - -const taskAndPr = await checkNotionPrAndGetTask(notionClient, prId, notionDbId); - -const priorityProp = taskAndPr.task.properties["Priority"]; -const taskPriority = - priorityProp?.type === "select" ? priorityProp.select?.name : undefined; - -const [owner, repo] = (() => { - const v = rawRepo; - if (!v) { - throw new Error("GITHUB_REPOSITORY is required"); - } - return v.split("/") as [string, string]; -})(); - -async function main() { - const client = new Octokit({ - auth: githubToken, - }); - - let res: RestEndpointMethodTypes["pulls"]["get"]["response"]; - try { - res = await client.rest.pulls.get({ - owner, - repo, - pull_number: prId, - }); - } catch (e) { - const s = JSON.stringify(e); - throw new Error(`GitHub API Error\n\n${s}`); - } - - const { login: username } = res.data.user; - - const isCollaborator = await client.rest.repos - .checkCollaborator({ owner, repo, username }) - .then(() => true) - .catch(() => false); - - const isSupportTicketOverride = taskPriority === "Support" && isCollaborator; - const isOwnerOverride = AUTHORIZED_USERS.includes(username); - - if (isSupportTicketOverride || isOwnerOverride) { - try { - await client.rest.pulls.createReview({ - owner, - repo, - pull_number: prId, - event: "APPROVE", - }); - } catch (e) { - const s = JSON.stringify(e); - throw new Error(`GitHub API Error\n\n${s}`); - } - } else { - console.log("Skipping auto approval..."); - } -} - -main() - .then(() => { - process.exit(0); - }) - .catch((e) => { - console.error(e); - process.exit(1); - }); diff --git a/.github/scripts/build-image/index.ts b/.github/scripts/build-image/index.ts index 317970e98..99cbea43e 100644 --- a/.github/scripts/build-image/index.ts +++ b/.github/scripts/build-image/index.ts @@ -1,24 +1,19 @@ -import type { Environment, Type } from "types"; - import { DockerClient, GitHubClient } from "@tahminator/pipeline"; import { $ } from "bun"; -import { getEnvVariablesByPrefix } from "load-secrets/env/load"; -import { backend } from "utils/run-backend-instance"; -import { db } from "utils/run-local-db"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; +import type { Environment, Type } from "@/types"; + +import { getEnvVariablesByPrefix } from "@/utils/env"; +import { backend } from "@/utils/run-backend-instance"; +import { db } from "@/utils/run-local-db"; + process.env.TZ = "America/New_York"; -const { - environment, - dockerUpload, - getGhaOutput, - githubOutputFile, - type, - arch, - prId, -} = await yargs(hideBin(process.argv)) +const { environment, dockerUpload, getGhaOutput, githubOutputFile, type, arch, prId } = await yargs( + hideBin(process.argv), +) .option("environment", { choices: ["staging", "production"] satisfies Environment[], describe: "Deployment environment (staging or production)", @@ -31,8 +26,7 @@ const { }) .option("getGhaOutput", { type: "boolean", - describe: - "Enable GitHub Actions output to receive latest built tag version", + describe: "Enable GitHub Actions output to receive latest built tag version", default: false, }) .option("githubOutputFile", { @@ -63,12 +57,13 @@ const { const tagPrefix = environment === "staging" ? "staging-" : ""; const dockerRepository = - type === "web" ? - arch === "arm64" ? - "codebloom-arm" - : "codebloom" - : arch === "arm64" ? "codebloom-standup-bot-arm" - : "codebloom-standup-bot"; + type === "web" + ? arch === "arm64" + ? "codebloom-arm" + : "codebloom" + : arch === "arm64" + ? "codebloom-standup-bot-arm" + : "codebloom-standup-bot"; // both types build natively per-arch on their own runner (no QEMU), one // repo per arch, matrixed at the workflow level. const platforms = [`linux/${arch}`]; @@ -116,33 +111,25 @@ async function main() { const gitSha = (await $`git rev-parse --short HEAD`.text()).trim(); - await using dockerClient = await DockerClient.create( - dockerHubUsername, - dockerHubPat, - ); + await using dockerClient = await DockerClient.create(dockerHubUsername, dockerHubPat); - const tags = [ - `${tagPrefix}latest`, - `${tagPrefix}${timestamp}`, - `${tagPrefix}${gitSha}`, - ]; + const tags = [`${tagPrefix}latest`, `${tagPrefix}${timestamp}`, `${tagPrefix}${gitSha}`]; console.log("Building image with following tags:"); tags.forEach((tag) => console.log(tag)); const buildArgs = { ...(type === "web" ? { COMMIT_SHA: gitSha } : {}), - ...(environment === "staging" ? - { - VITE_STAGING: true, - } - : {}), + ...(environment === "staging" + ? { + VITE_STAGING: true, + } + : {}), }; await dockerClient.buildImage({ dockerRepository, - dockerFileLocation: - type === "web" ? "infra/Dockerfile" : "internal/standup-bot/Dockerfile", + dockerFileLocation: type === "web" ? "infra/Dockerfile" : "internal/standup-bot/Dockerfile", tags, shouldUpload: dockerUpload, buildArgs, @@ -228,4 +215,4 @@ function parseCiEnv(ciEnv: Record) { }; } -main(); +await main(); diff --git a/.github/scripts/bun.lock b/.github/scripts/bun.lock index b70e775d2..f6b9d5d83 100644 --- a/.github/scripts/bun.lock +++ b/.github/scripts/bun.lock @@ -6,34 +6,28 @@ "name": "scripts", "dependencies": { "@actions/artifact": "^5.0.2", - "@digitalocean/dots": "^1.7.0", - "@notionhq/client": "^5.7.0", "@octokit/rest": "^22.0.1", - "@tahminator/pipeline": "1.0.90", + "@tahminator/pipeline": "1.0.97", "@types/yargs": "^17.0.35", "bun": "^1.3.6", - "coolify": "https://github.com/tahminator/Coolify-TypeScript-SDK#8e19e18635ea2b095a9c39c574d22eefd938441f", "discord.js": "^14.25.1", "octokit": "^5.0.5", "yargs": "^18.0.0", "zod": "^4.3.6", }, "devDependencies": { - "@eslint/js": "^9.39.2", - "@types/bun": "^1.3.6", - "eslint-plugin-no-relative-import-paths": "^1.6.1", - "eslint-plugin-perfectionist": "^5.3.1", - "global": "^4.4.0", - "prettier": "^3.8.0", - "typescript": "^5.9.0", - "typescript-eslint": "^8.53.0", + "@Patina-Network/cicd-config": "github:Patina-Network/cicd-config#a54b3e5d8b373be5254ce1cec44cfabdec1d5189", + "@types/bun": "^1.4.2", + "oxfmt": "^0.72.0", + "oxlint": "^1.87.0", + "oxlint-tsgolint": "^7.0.2003", + "typescript": "7", }, }, }, - "patchedDependencies": { - "@digitalocean/dots@1.7.0": "patches/@digitalocean%2Fdots@1.7.0.patch", - }, "packages": { + "@Patina-Network/cicd-config": ["@patina-network/cicd-config@github:Patina-Network/cicd-config#a54b3e5", { "peerDependencies": { "oxfmt": ">=0.72.0", "oxlint": ">=1.87.0" } }, "Patina-Network-cicd-config-a54b3e5", "sha512-ucuxmibyfnHWzqqsSTLUXyrTas123gLjYDkEFz8VBhIgQfP6plcwC5wP+ufMHRW85OuHxCKbuV9MRF7phsuWPA=="], + "@actions/artifact": ["@actions/artifact@5.0.2", "", { "dependencies": { "@actions/core": "^2.0.0", "@actions/github": "^6.0.1", "@actions/http-client": "^3.0.1", "@azure/storage-blob": "^12.29.1", "@octokit/core": "^5.2.1", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-retry": "^3.0.9", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@protobuf-ts/plugin": "^2.2.3-alpha.1", "archiver": "^7.0.1", "jwt-decode": "^3.1.2", "unzip-stream": "^0.3.1" } }, "sha512-NmA+THO1s/Ubqf5y34EZofB1FRORcToa3T8Mb3/Z87TCCozTtvBUaxDn8OPPwgyYQ4ft0nd01Z4kFSu2DTWqGw=="], "@actions/core": ["@actions/core@2.0.2", "", { "dependencies": { "@actions/exec": "^2.0.0", "@actions/http-client": "^3.0.1" } }, "sha512-Ast1V7yHbGAhplAsuVlnb/5J8Mtr/Zl6byPPL+Qjq3lmfIgWF1ak1iYfF/079cRERiuTALTXkSuEUdZeDCfGtA=="], @@ -52,8 +46,6 @@ "@azure/core-client": ["@azure/core-client@1.10.1", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.10.0", "@azure/core-rest-pipeline": "^1.22.0", "@azure/core-tracing": "^1.3.0", "@azure/core-util": "^1.13.0", "@azure/logger": "^1.3.0", "tslib": "^2.6.2" } }, "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w=="], - "@azure/core-http": ["@azure/core-http@3.0.5", "", { "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.3.0", "@azure/core-tracing": "1.0.0-preview.13", "@azure/core-util": "^1.1.1", "@azure/logger": "^1.0.0", "@types/node-fetch": "^2.5.0", "@types/tunnel": "^0.0.3", "form-data": "^4.0.0", "node-fetch": "^2.6.7", "process": "^0.11.10", "tslib": "^2.2.0", "tunnel": "^0.0.6", "uuid": "^8.3.0", "xml2js": "^0.5.0" } }, "sha512-T8r2q/c3DxNu6mEJfPuJtptUVqwchxzjj32gKcnMi06rdiVONS9rar7kT9T2Am+XvER7uOzpsP79WsqNbdgdWg=="], - "@azure/core-http-compat": ["@azure/core-http-compat@2.3.1", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-client": "^1.10.0", "@azure/core-rest-pipeline": "^1.22.0" } }, "sha512-az9BkXND3/d5VgdRRQVkiJb2gOmDU8Qcq4GvjtBmDICNiQ9udFmDk4ZpSB5Qq1OmtDJGlQAfBaS4palFsazQ5g=="], "@azure/core-lro": ["@azure/core-lro@2.7.2", "", { "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-util": "^1.2.0", "@azure/logger": "^1.0.0", "tslib": "^2.6.2" } }, "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw=="], @@ -78,8 +70,6 @@ "@bufbuild/protoplugin": ["@bufbuild/protoplugin@2.10.2", "", { "dependencies": { "@bufbuild/protobuf": "2.10.2", "@typescript/vfs": "^1.6.2", "typescript": "5.4.5" } }, "sha512-RAWVs9tCzRqSS3tUtaFhOcauOAazCrm7tlGh0WHFq/44n5Fj6YgefdlZEPIaAK6VAA+FdOoFgtOJK2Ji5U24pw=="], - "@digitalocean/dots": ["@digitalocean/dots@1.7.0", "", { "dependencies": { "@azure/core-http": "^3.0.5", "@microsoft/kiota-authentication-azure": "^1.0.0-preview.61", "@microsoft/kiota-bundle": "^1.0.0-preview.9", "@microsoft/kiota-http-fetchlibrary": "^1.0.0-preview.97", "dotenv": "^17.2.0", "uuid": "^11.1.0" } }, "sha512-4BD52gSlG7xdxMV7sWXTKi9zpl7dmyK+47WNVkLCTw0p5ktlX7VYhV8lDAuCq10fGF4w7LhCh/vOeuB13+x7aQ=="], - "@discordjs/builders": ["@discordjs/builders@1.13.1", "", { "dependencies": { "@discordjs/formatters": "^0.6.2", "@discordjs/util": "^1.2.0", "@sapphire/shapeshift": "^4.0.0", "discord-api-types": "^0.38.33", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.4", "tslib": "^2.6.3" } }, "sha512-cOU0UDHc3lp/5nKByDxkmRiNZBpdp0kx55aarbiAfakfKJHlxv/yFW1zmIqCAmwH5CRlrH9iMFKJMpvW4DPB+w=="], "@discordjs/collection": ["@discordjs/collection@1.5.3", "", {}, "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ=="], @@ -92,24 +82,6 @@ "@discordjs/ws": ["@discordjs/ws@1.2.3", "", { "dependencies": { "@discordjs/collection": "^2.1.0", "@discordjs/rest": "^2.5.1", "@discordjs/util": "^1.1.0", "@sapphire/async-queue": "^1.5.2", "@types/ws": "^8.5.10", "@vladfrangu/async_event_emitter": "^2.2.4", "discord-api-types": "^0.38.1", "tslib": "^2.6.2", "ws": "^8.17.0" } }, "sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw=="], - "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="], - - "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], - - "@eslint/config-array": ["@eslint/config-array@0.21.1", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA=="], - - "@eslint/config-helpers": ["@eslint/config-helpers@0.4.2", "", { "dependencies": { "@eslint/core": "^0.17.0" } }, "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw=="], - - "@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="], - - "@eslint/eslintrc": ["@eslint/eslintrc@3.3.3", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ=="], - - "@eslint/js": ["@eslint/js@9.39.2", "", {}, "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA=="], - - "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="], - - "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], - "@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], "@gar/promise-retry": ["@gar/promise-retry@1.0.3", "", {}, "sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA=="], @@ -118,14 +90,6 @@ "@grpc/proto-loader": ["@grpc/proto-loader@0.8.1", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.5.5", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg=="], - "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], - - "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], - - "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], - - "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], - "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], @@ -136,26 +100,8 @@ "@logdna/tail-file": ["@logdna/tail-file@2.2.0", "", {}, "sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng=="], - "@microsoft/kiota-abstractions": ["@microsoft/kiota-abstractions@1.0.0-preview.99", "", { "dependencies": { "@opentelemetry/api": "^1.7.0", "@std-uritemplate/std-uritemplate": "^2.0.0", "tinyduration": "^3.3.0", "tslib": "^2.6.2" } }, "sha512-6qrlwGCO3DbvpA7tszqk7JNQPFPDg8gv5NGMTziwdtHqaQrUALKusm3vdJGPVGrbNiZL6/lBaY5NSUvLtlhRCg=="], - - "@microsoft/kiota-authentication-azure": ["@microsoft/kiota-authentication-azure@1.0.0-preview.99", "", { "dependencies": { "@azure/core-auth": "^1.5.0", "@microsoft/kiota-abstractions": "^1.0.0-preview.99", "@opentelemetry/api": "^1.7.0", "tslib": "^2.6.2" } }, "sha512-gPmk/vx15sBMfjfLPgqPanmyVR/rA5HGd3318VtPS28mXxH07Zn30R6PVqSemhIwSxfiGnPiq0SlTj28BQhTKQ=="], - - "@microsoft/kiota-bundle": ["@microsoft/kiota-bundle@1.0.0-preview.99", "", { "dependencies": { "@microsoft/kiota-abstractions": "^1.0.0-preview.99", "@microsoft/kiota-http-fetchlibrary": "^1.0.0-preview.99", "@microsoft/kiota-serialization-form": "^1.0.0-preview.99", "@microsoft/kiota-serialization-json": "^1.0.0-preview.99", "@microsoft/kiota-serialization-multipart": "^1.0.0-preview.99", "@microsoft/kiota-serialization-text": "^1.0.0-preview.99" } }, "sha512-AxvO+z6UgWMAT2NfXN36CMhAUm/39tUQt8o32axeEJDS/EvZINDAPstbQV+zK7bJRC8kCqUHhCE/fuHX2dXA+g=="], - - "@microsoft/kiota-http-fetchlibrary": ["@microsoft/kiota-http-fetchlibrary@1.0.0-preview.99", "", { "dependencies": { "@microsoft/kiota-abstractions": "^1.0.0-preview.99", "@opentelemetry/api": "^1.7.0", "tslib": "^2.6.2" } }, "sha512-lIruiYf8L7DPG0Fm92QN5YK4zx4sh76EtTONUAqBCxt5AtEJ7KQceBajaXQsjfcndUAp9LmDVdqR44o8sc9/mA=="], - - "@microsoft/kiota-serialization-form": ["@microsoft/kiota-serialization-form@1.0.0-preview.99", "", { "dependencies": { "@microsoft/kiota-abstractions": "^1.0.0-preview.99", "tslib": "^2.6.2" } }, "sha512-BdXxqNfy+5yWTyxpBguqJYy6E9RRotrDClRcUO89okFcR5N6s6xenjsvGw++q9KWNi7qcHrqaG8xlRz1TLk81Q=="], - - "@microsoft/kiota-serialization-json": ["@microsoft/kiota-serialization-json@1.0.0-preview.99", "", { "dependencies": { "@microsoft/kiota-abstractions": "^1.0.0-preview.99", "tslib": "^2.6.2" } }, "sha512-kDmMYmB7XkRprlLviEynRPDkE45JDxqiuUopfBRMvNK4qhzFiJTXGLihZ2FG6fdVu9LbV3/W0QxbeGP35kDK6A=="], - - "@microsoft/kiota-serialization-multipart": ["@microsoft/kiota-serialization-multipart@1.0.0-preview.99", "", { "dependencies": { "@microsoft/kiota-abstractions": "^1.0.0-preview.99", "tslib": "^2.6.2" } }, "sha512-cfviCAVTlZPD+MUgdTIgsX/IfHND+gKQhem3vJeo7l5Qqz2rvvVFXOHwECI19umO9Un1QFKe1V5wg+M+aj90+g=="], - - "@microsoft/kiota-serialization-text": ["@microsoft/kiota-serialization-text@1.0.0-preview.99", "", { "dependencies": { "@microsoft/kiota-abstractions": "^1.0.0-preview.99", "tslib": "^2.6.2" } }, "sha512-gcBffQRI1soHVAiS4YjfMr3SQ9fC8xVUGMfarTTszU4PjpxyFOknaWoFdt/0rvMeavI9jOtbyvDKAf77cZyYIQ=="], - "@nodable/entities": ["@nodable/entities@3.0.0", "", {}, "sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw=="], - "@notionhq/client": ["@notionhq/client@5.7.0", "", {}, "sha512-On/GI10lJRLSrzU3h/cDl1Oe15qywYrEvyV3KlE4UgtzqMjlPzXG31B7zHjGc/tTgoY8eD3JS4CWlcD64NBmaQ=="], - "@npmcli/agent": ["@npmcli/agent@4.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^11.2.1", "socks-proxy-agent": "^8.0.3" } }, "sha512-EUEuWAxnL07Sp5/iC/1X6Xj+XThUvnbei9zfRWZdEXa7lss9RTHMhAHBeg+MZ5To9s/gGaSI+UwZTPdYMvKSeg=="], "@npmcli/arborist": ["@npmcli/arborist@9.9.1", "", { "dependencies": { "@gar/promise-retry": "^1.0.0", "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^5.0.0", "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/map-workspaces": "^5.0.0", "@npmcli/metavuln-calculator": "^9.0.2", "@npmcli/name-from-folder": "^4.0.0", "@npmcli/node-gyp": "^5.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/query": "^5.0.0", "@npmcli/redact": "^4.0.0", "@npmcli/run-script": "^10.0.0", "bin-links": "^6.0.0", "cacache": "^20.0.1", "common-ancestor-path": "^2.0.0", "hosted-git-info": "^9.0.0", "json-stringify-nice": "^1.1.4", "lru-cache": "^11.2.1", "minimatch": "^10.0.3", "nopt": "^9.0.0", "npm-install-checks": "^8.0.0", "npm-package-arg": "^13.0.0", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", "pacote": "^21.0.2", "parse-conflict-json": "^5.0.1", "proc-log": "^6.0.0", "proggy": "^4.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", "semver": "^7.3.7", "ssri": "^13.0.0", "treeverse": "^3.0.0", "walk-up-path": "^4.0.0" }, "bin": { "arborist": "bin/index.js" } }, "sha512-K0mr16xJ/yiTApeGIFbpgZSvJFOvxO2VJnCBhP543t9NTlHzgL+ewpG0kaWv9xkjeESAlRWHG9Q4lbT/LqHbWw=="], @@ -296,6 +242,94 @@ "@oven/bun-windows-x64-baseline": ["@oven/bun-windows-x64-baseline@1.3.6", "", { "os": "win32", "cpu": "x64" }, "sha512-PFUa7JL4lGoyyppeS4zqfuoXXih+gSE0XxhDMrCPVEUev0yhGNd/tbWBvcdpYnUth80owENoGjc8s5Knopv9wA=="], + "@oxfmt/binding-android-arm-eabi": ["@oxfmt/binding-android-arm-eabi@0.72.0", "", { "os": "android", "cpu": "arm" }, "sha512-u4U1uaDOVBuorGNC/07NLm48nECHOiJJka002YGML16Md2DRvf38RGBt01lH60EOGvNlFVmbLoksQedNBoZHKw=="], + + "@oxfmt/binding-android-arm64": ["@oxfmt/binding-android-arm64@0.72.0", "", { "os": "android", "cpu": "arm64" }, "sha512-GCnM+Ae2mWOKC+92y3FOb6eZJeVnBAVz82e3lITUUg+kxukYKzBNAvJ/hhHIfa2A0md55SYYhdWPddSSy3KPVA=="], + + "@oxfmt/binding-darwin-arm64": ["@oxfmt/binding-darwin-arm64@0.72.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LjQ8tlevdtwraFlWC6AnQ1Forzde0clRmnsP3QmK+ydSElDt/J+5Jc+m+//Ly1G97aP7WCNUw110QMIUw2K7xA=="], + + "@oxfmt/binding-darwin-x64": ["@oxfmt/binding-darwin-x64@0.72.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-+ZbcxhB1C34RQR5IldSyY6Z/yalJIxHXhP36PGE4sEq0f/lgL5jCLmOKoDeVm8dqd9gFGDsd1bNWHSGCAwdSkw=="], + + "@oxfmt/binding-freebsd-x64": ["@oxfmt/binding-freebsd-x64@0.72.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-yGPhA8sePEBFV9iGcprhyOk3Bz3fZshswMH3DpYIPZFLT1DG5LjiZ0j6AJQpSueaL6bUK0av1K+5+fe+ldy5EQ=="], + + "@oxfmt/binding-linux-arm-gnueabihf": ["@oxfmt/binding-linux-arm-gnueabihf@0.72.0", "", { "os": "linux", "cpu": "arm" }, "sha512-/g5axuqFMcAtoQrFLR5EJEMDjR5Ea4GuzpdDmMpPWAgrF1DmL4kD1NPNVlpXEOxpFJnD6lPvLKYj1lzdlrfifA=="], + + "@oxfmt/binding-linux-arm-musleabihf": ["@oxfmt/binding-linux-arm-musleabihf@0.72.0", "", { "os": "linux", "cpu": "arm" }, "sha512-InVitdHbS09PM+w+WinIiyX37rC9R3L7lUP9mKy9uKTEDSUFaLjWsLoreRIxKivnv7Ndqc6Trvi+K+b6ZzhiJg=="], + + "@oxfmt/binding-linux-arm64-gnu": ["@oxfmt/binding-linux-arm64-gnu@0.72.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-WKjlyRAxpPjXoqeuwFBim5LscgvY+RNEiZ971C9JlRQZONhJTsXDki/oHFYQE+fzzRpzXh3owZvOdT3kNL2g+g=="], + + "@oxfmt/binding-linux-arm64-musl": ["@oxfmt/binding-linux-arm64-musl@0.72.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-poafnbsPpJhR+5Mbwpf8CscugTyiRAzjTOxRVn8ra3X2jnURs2xL5Du2xl5g2iW85lICMglpmLf8jDjZEbNgzQ=="], + + "@oxfmt/binding-linux-ppc64-gnu": ["@oxfmt/binding-linux-ppc64-gnu@0.72.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-zNUi0gKRsO7S3IfPzsTbnm88OedPuX32hmZFWZRWHvWJlAoZRwVbeO6Nb3hng4vDgL7qUKp4TGqzPz1mhsycYg=="], + + "@oxfmt/binding-linux-riscv64-gnu": ["@oxfmt/binding-linux-riscv64-gnu@0.72.0", "", { "os": "linux", "cpu": "none" }, "sha512-qTY7z/iyF/rWI2HWwWMevXqZW5PZUOofUy2afK7v6rseXnpld3yjgyIk6pCux3DqWQ0lB+f5atvLJNBwzLvFsw=="], + + "@oxfmt/binding-linux-riscv64-musl": ["@oxfmt/binding-linux-riscv64-musl@0.72.0", "", { "os": "linux", "cpu": "none" }, "sha512-w18qfo8vEMD6EKEHtzTvjc6jH8yCyXIT1Bn7PFWJd0PpZyzH/VQDx4xvjCh0LGz6GRzqiezbisTdG9AoXtpkZQ=="], + + "@oxfmt/binding-linux-s390x-gnu": ["@oxfmt/binding-linux-s390x-gnu@0.72.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-grW8HwEir+vK7fCcq1ZgL3NHQCfZ1PidiERE9Hbf+24xGys+DoDaoqTht4ccfn0PcBwbViLkwkda/KNpJu2KRQ=="], + + "@oxfmt/binding-linux-x64-gnu": ["@oxfmt/binding-linux-x64-gnu@0.72.0", "", { "os": "linux", "cpu": "x64" }, "sha512-wQJRQfWBRIn88Pkr449EUViwRayrYUScg7ty+Ihiem21mQ9BUA6S9e/4RAgyNk9lMag0KBouyKskjq61rOC0WQ=="], + + "@oxfmt/binding-linux-x64-musl": ["@oxfmt/binding-linux-x64-musl@0.72.0", "", { "os": "linux", "cpu": "x64" }, "sha512-T1B0uQzafxuGPjjaPrZJ497nxoi1BiI65JfsYc56nNpmev3msfb/iaTmH2kQuNFqa8PKxpMlf3GhWrWBvBPORQ=="], + + "@oxfmt/binding-openharmony-arm64": ["@oxfmt/binding-openharmony-arm64@0.72.0", "", { "os": "none", "cpu": "arm64" }, "sha512-OKxxgTurl7+hypVplO8QRAbbQlwEs0j1Y6FZv+ZN2qNbdxQk2muMlzuJNBGTCWwxQ0rkkOD1uK/DW1fvzoUSJA=="], + + "@oxfmt/binding-win32-arm64-msvc": ["@oxfmt/binding-win32-arm64-msvc@0.72.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-L78TKzURqvjuZOCo88ixMbPXf/RP7u31Y0cmjJ/KEmrHmfYhmhEvsDaTYPiyTRne64jUgCbADfY0YeoQk4/Xyw=="], + + "@oxfmt/binding-win32-ia32-msvc": ["@oxfmt/binding-win32-ia32-msvc@0.72.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-gQtFW+Ii8BWgtJTAD17TY/WsdNS5gUfAPov8iI1jeq4r9lRRYImmxPL08UU00/RLaCfBJwh2UgINnDY0iOiZ+A=="], + + "@oxfmt/binding-win32-x64-msvc": ["@oxfmt/binding-win32-x64-msvc@0.72.0", "", { "os": "win32", "cpu": "x64" }, "sha512-uhooIN+DCzWX5uH7mQkSVCsODqsGluGJ4n3ch4+mITtWKpESMDjUJUSDBAVFuYQDwqY2McPDKdKJbM0oZVW/Qw=="], + + "@oxlint-tsgolint/darwin-arm64": ["@oxlint-tsgolint/darwin-arm64@7.0.2003", "", { "os": "darwin", "cpu": "arm64" }, "sha512-TgV33rXr6ueXBwvc+0nssUkTBSXHJxv77I8p4RCjDjCnvexHtmoPiudVRDfj3S3puMDdeQdHW6jdUgUPy3nr/w=="], + + "@oxlint-tsgolint/darwin-x64": ["@oxlint-tsgolint/darwin-x64@7.0.2003", "", { "os": "darwin", "cpu": "x64" }, "sha512-hY3FMAjIaPDdK3FNxyRXRfHPOFeoBn6dmnLyKZgQ2IbTTD1adXhl6PfCIqHhCPvurigv7nf7mYuWZZ19MmJzmg=="], + + "@oxlint-tsgolint/linux-arm64": ["@oxlint-tsgolint/linux-arm64@7.0.2003", "", { "os": "linux", "cpu": "arm64" }, "sha512-eAET4JpyfBbg8SO0K74o4R55tEjVC292pIyxGOw2XGf8x/HrPNyxwQ478jMYOM54FIVOHc8sJ6VRHxluy6lucw=="], + + "@oxlint-tsgolint/linux-x64": ["@oxlint-tsgolint/linux-x64@7.0.2003", "", { "os": "linux", "cpu": "x64" }, "sha512-GXdyO/XyqDJ3s/llR/oOktLsYNjZtWSQBy0JMc+/0gsNPvTcseKPhn9c6KcFyWmnr6H4vljYALbujonqSzzEGw=="], + + "@oxlint-tsgolint/win32-arm64": ["@oxlint-tsgolint/win32-arm64@7.0.2003", "", { "os": "win32", "cpu": "arm64" }, "sha512-TWauXnPfet0VgpmrstoAK58eJ4gbuwPUuUTQmYQAzE/RG1CpnxXtrKUJULf6lyerPE4KN3gM+DflIA1hOH+38Q=="], + + "@oxlint-tsgolint/win32-x64": ["@oxlint-tsgolint/win32-x64@7.0.2003", "", { "os": "win32", "cpu": "x64" }, "sha512-DoRmfe7j8VqNlukp8liRVW45GQDhzRccNenjD/pdzelgtffW47pCMd1xbJLkPaPbKnTwID3onn3VZlL7JbebEA=="], + + "@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.87.0", "", { "os": "android", "cpu": "arm" }, "sha512-22tVIHlB9898OYsBKmYB6He1MCSqdTmK1BVWuSNUTVrpS0KWNege+U9uEYqGJ+KatQag0r/oU44i3OOs46z7HQ=="], + + "@oxlint/binding-android-arm64": ["@oxlint/binding-android-arm64@1.87.0", "", { "os": "android", "cpu": "arm64" }, "sha512-JfZQ3MWf74n8ov0DojZpkOduIubYJvZL5tbTMMhDutsal6u1xH1QuNpN+lK+EQwF8AeAfgwTR2fgh5U2br27XA=="], + + "@oxlint/binding-darwin-arm64": ["@oxlint/binding-darwin-arm64@1.87.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-rkx6Xvvw93z2GImVOyvbZwAZcoY0Z6MJW177XNsSB+i/CBsH7ANyelTp01VZyIkM3iSXtqKVb4+ptBgPHap5pQ=="], + + "@oxlint/binding-darwin-x64": ["@oxlint/binding-darwin-x64@1.87.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-cw5nYw7L/pQ2SgGBgOcg/Qo89llQre3vIc/kuBLhSICzu1r5s8L76H3ug6AIFsD98WpROj8/z5JVzkf4daxHaQ=="], + + "@oxlint/binding-freebsd-x64": ["@oxlint/binding-freebsd-x64@1.87.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-x/SuznE6loRZK9gz9AS4ZmzNzSu+5KdeoCS+sVHhnrE8HM6AD8UyTjwldQTTqlXGvkwHASgB0NiTNOc3o3PdAg=="], + + "@oxlint/binding-linux-arm-gnueabihf": ["@oxlint/binding-linux-arm-gnueabihf@1.87.0", "", { "os": "linux", "cpu": "arm" }, "sha512-+JEDmCAXiiFmKhAjZhgAOwaHWY6WENOQ5QA+lFuY59tgsUCDOTRi46B+lENK6CWvtxsXpwkZXNOgpjAQcpIpnA=="], + + "@oxlint/binding-linux-arm-musleabihf": ["@oxlint/binding-linux-arm-musleabihf@1.87.0", "", { "os": "linux", "cpu": "arm" }, "sha512-/uC9XqXLAC9AHFLNycwmSQEvKqGrOCgU+uXALI7gNW0DG81TJ/3T2eHnKdRvcb5R1gFEfjxDwI4e4zIa29rICQ=="], + + "@oxlint/binding-linux-arm64-gnu": ["@oxlint/binding-linux-arm64-gnu@1.87.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-FTRYPsBy/M728vnUv7l+KAwSAa3Qi4BQbhVvy7NYuMTZ0sUa/OWsbMx79HVFw6u/5KWcaYayDsoOiv7xbevzDg=="], + + "@oxlint/binding-linux-arm64-musl": ["@oxlint/binding-linux-arm64-musl@1.87.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-6sC+N7IY0h1egd8SrYUGNN7CUyKJZ4bIZakKa7V7hfinf4jfi8Kq4+klJvFp5DqXcwMn44I5MeBwmJluO1odFg=="], + + "@oxlint/binding-linux-ppc64-gnu": ["@oxlint/binding-linux-ppc64-gnu@1.87.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-d5Mnn+ICbhoJPi37Ccjy+86T5qfH2+mSTrTMBXNPfB+wqSWOayBBLLIrCXdUy1YssluCVdGkl+DO9w5r5ODmUA=="], + + "@oxlint/binding-linux-riscv64-gnu": ["@oxlint/binding-linux-riscv64-gnu@1.87.0", "", { "os": "linux", "cpu": "none" }, "sha512-sf5YWuUo1Dx9loqWCgF8P278MycfcD4JHjDC/LV5j11L3Lqa4PFiwCjD6B8kP4AjsgZZkLn3xbpJEtZBaccs4Q=="], + + "@oxlint/binding-linux-riscv64-musl": ["@oxlint/binding-linux-riscv64-musl@1.87.0", "", { "os": "linux", "cpu": "none" }, "sha512-+aCraYbmK3uU3P0rFojjeaK9pGY6JvBDXh/0CM+gPyWKmNmXmnFe0qj4qj02U4ibFpbd9Pa9CmDvIdjJUd29rA=="], + + "@oxlint/binding-linux-s390x-gnu": ["@oxlint/binding-linux-s390x-gnu@1.87.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-7rzbZQIljo6VLWVPqUyLa2P/WV3VFsJB4M52R4NCUJn1A50yjtUsHxiMHFL9opEKGFIiTbZ3VQzmtcJOPUq4NQ=="], + + "@oxlint/binding-linux-x64-gnu": ["@oxlint/binding-linux-x64-gnu@1.87.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Dry46Fa+AXE/xt9J/YriujU1pU9mzfNWHGQwtOYibAFH8HLrKWCi93AhIGnuUMiwn2JbuBkRyz51f50Ly4r4ow=="], + + "@oxlint/binding-linux-x64-musl": ["@oxlint/binding-linux-x64-musl@1.87.0", "", { "os": "linux", "cpu": "x64" }, "sha512-f/HMZez74gJvnRpGz+b5sdGyWrEgRLmFTXg9sNoqjPWogGxYHUhXKTKyMiYsu9rUGR2ciYqL3fk+Ua4JhMJbRA=="], + + "@oxlint/binding-openharmony-arm64": ["@oxlint/binding-openharmony-arm64@1.87.0", "", { "os": "none", "cpu": "arm64" }, "sha512-lEC6ZfPZm/07JlB7FsOWX9o1RiHlXiBW594LSUGuXmekC8LZmvUPP9XzE2WZcNxJi5cHA/Fw56o02c3JxgMA5g=="], + + "@oxlint/binding-win32-arm64-msvc": ["@oxlint/binding-win32-arm64-msvc@1.87.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-afBWKOD36dUiA9AenaiWpCg8xfyUVPYznyAAVXu413brK4RA5UI/Xoc4yfeGIT8G1a44MV+JR7hioryerBDzGQ=="], + + "@oxlint/binding-win32-ia32-msvc": ["@oxlint/binding-win32-ia32-msvc@1.87.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-daptNsEOuru4/nJTxV4DBHNJ5GepzmaBVQf+jjgKQGi9NRlZKik+RFq4hUL7ewsF1pwjKM+SkYaMbF82UwFGnw=="], + + "@oxlint/binding-win32-x64-msvc": ["@oxlint/binding-win32-x64-msvc@1.87.0", "", { "os": "win32", "cpu": "x64" }, "sha512-k+m/EShyXE29J/r1fjk0HlAzhN5JhIvj044oSJkXTEkCLrWZQgXb/3r4q5LTw/eaKW/4GuMXG2xmiJs3s5rPNw=="], + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], "@protobuf-ts/plugin": ["@protobuf-ts/plugin@2.11.1", "", { "dependencies": { "@bufbuild/protobuf": "^2.4.0", "@bufbuild/protoplugin": "^2.4.0", "@protobuf-ts/protoc": "^2.11.1", "@protobuf-ts/runtime": "^2.11.1", "@protobuf-ts/runtime-rpc": "^2.11.1", "typescript": "^3.9" }, "bin": { "protoc-gen-ts": "bin/protoc-gen-ts", "protoc-gen-dump": "bin/protoc-gen-dump" } }, "sha512-HyuprDcw0bEEJqkOWe1rnXUP0gwYLij8YhPuZyZk6cJbIgc/Q0IFgoHQxOXNIXAcXM4Sbehh6kjVnCzasElw1A=="], @@ -346,9 +380,7 @@ "@sigstore/verify": ["@sigstore/verify@3.1.1", "", { "dependencies": { "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.2.1", "@sigstore/protobuf-specs": "^0.5.0" } }, "sha512-qv7+G3J2cc6wwFj3yKvXOamzqhMwSk1ogPGmhpS8iXllcPrJaIIBA+4HbttlHVu1pqWTdmaCH/WE7UOC51kdoA=="], - "@std-uritemplate/std-uritemplate": ["@std-uritemplate/std-uritemplate@2.0.8", "", {}, "sha512-8oj7jKksoTRxjdPkWKX9FyOKDS8ORBm+ZfTSHm0f3eYha8cI0O1d57gyduOIAX7Y2uUukNDNlxlvGb+FFkE7yQ=="], - - "@tahminator/pipeline": ["@tahminator/pipeline@1.0.90", "", { "dependencies": { "@octokit/auth-app": "^8.2.0", "@octokit/rest": "^22.0.1", "@pulumi/pulumi": "^3.258.0", "ansi-to-html": "^0.7.2", "fast-xml-builder": "^1.1.5", "fast-xml-parser": "^5.7.2", "neverthrow": "^8.2.0", "semver": "^7.7.4", "xml-trueformat": "^0.9.5", "yaml": "^2.8.2", "yargs": "^18.0.0", "zod": "^4.3.6" }, "peerDependencies": { "typescript": "^5" } }, "sha512-QPeHpxkO0i97ZXAozHil7B2rCODO7uzP8x5LInbvM1mMK3APyF0ZXlDFqU4dny3f1yQg5E0YQi1+Jn5yw3cksA=="], + "@tahminator/pipeline": ["@tahminator/pipeline@1.0.97", "", { "dependencies": { "@actions/artifact": "^6.2.1", "@octokit/auth-app": "^8.2.0", "@octokit/rest": "^22.0.1", "@pulumi/pulumi": "^3.258.0", "ansi-to-html": "^0.7.2", "fast-xml-builder": "^1.1.5", "fast-xml-parser": "^5.7.2", "neverthrow": "^8.2.0", "oxlint-tsgolint": "^7.0.2003", "semver": "^7.7.4", "xml-trueformat": "^0.9.5", "yaml": "^2.8.2", "yargs": "^18.0.0", "zod": "^4.3.6" }, "peerDependencies": { "typescript": "^7" } }, "sha512-8i20oL+H72CplvWT4gBB2G79KpbKQ9y5yRLLkjuQXjeXLWzmMAajbKEEC3Ja2J29DrNvYOYLnKaMIFy38bMngg=="], "@tufjs/canonical-json": ["@tufjs/canonical-json@2.0.0", "", {}, "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA=="], @@ -356,47 +388,59 @@ "@types/aws-lambda": ["@types/aws-lambda@8.10.159", "", {}, "sha512-SAP22WSGNN12OQ8PlCzGzRCZ7QDCwI85dQZbmpz7+mAk+L7j+wI7qnvmdKh+o7A5LaOp6QnOZ2NJphAZQTTHQg=="], - "@types/bun": ["@types/bun@1.3.6", "", { "dependencies": { "bun-types": "1.3.6" } }, "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA=="], - - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/bun": ["@types/bun@1.4.2", "", { "dependencies": { "bun-types": "1.4.2" } }, "sha512-GimotNn7+ZV0uVArItBbriZsR1oNf0+WTzPkdcFrzShI7k2norL0uzEaJT8T33dWr7O/c9ZDuAFQrctKCi72oQ=="], "@types/google-protobuf": ["@types/google-protobuf@3.15.12", "", {}, "sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ=="], - "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], - "@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], - "@types/node-fetch": ["@types/node-fetch@2.6.13", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.4" } }, "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw=="], - "@types/semver": ["@types/semver@7.7.1", "", {}, "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA=="], - "@types/tunnel": ["@types/tunnel@0.0.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA=="], - "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], "@types/yargs": ["@types/yargs@17.0.35", "", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg=="], "@types/yargs-parser": ["@types/yargs-parser@21.0.3", "", {}, "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.53.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.53.0", "@typescript-eslint/type-utils": "8.53.0", "@typescript-eslint/utils": "8.53.0", "@typescript-eslint/visitor-keys": "8.53.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.53.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg=="], + "@typescript/typescript-aix-ppc64": ["@typescript/typescript-aix-ppc64@7.0.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ=="], + + "@typescript/typescript-darwin-arm64": ["@typescript/typescript-darwin-arm64@7.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA=="], + + "@typescript/typescript-darwin-x64": ["@typescript/typescript-darwin-x64@7.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA=="], + + "@typescript/typescript-freebsd-arm64": ["@typescript/typescript-freebsd-arm64@7.0.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ=="], + + "@typescript/typescript-freebsd-x64": ["@typescript/typescript-freebsd-x64@7.0.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw=="], + + "@typescript/typescript-linux-arm": ["@typescript/typescript-linux-arm@7.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ=="], + + "@typescript/typescript-linux-arm64": ["@typescript/typescript-linux-arm64@7.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ=="], + + "@typescript/typescript-linux-loong64": ["@typescript/typescript-linux-loong64@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ=="], + + "@typescript/typescript-linux-mips64el": ["@typescript/typescript-linux-mips64el@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA=="], + + "@typescript/typescript-linux-ppc64": ["@typescript/typescript-linux-ppc64@7.0.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.53.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.53.0", "@typescript-eslint/types": "8.53.0", "@typescript-eslint/typescript-estree": "8.53.0", "@typescript-eslint/visitor-keys": "8.53.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-npiaib8XzbjtzS2N4HlqPvlpxpmZ14FjSJrteZpPxGUaYPlvhzlzUZ4mZyABo0EFrOWnvyd0Xxroq//hKhtAWg=="], + "@typescript/typescript-linux-riscv64": ["@typescript/typescript-linux-riscv64@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ=="], - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.53.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.53.0", "@typescript-eslint/types": "^8.53.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg=="], + "@typescript/typescript-linux-s390x": ["@typescript/typescript-linux-s390x@7.0.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.53.0", "", { "dependencies": { "@typescript-eslint/types": "8.53.0", "@typescript-eslint/visitor-keys": "8.53.0" } }, "sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g=="], + "@typescript/typescript-linux-x64": ["@typescript/typescript-linux-x64@7.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A=="], - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.53.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA=="], + "@typescript/typescript-netbsd-arm64": ["@typescript/typescript-netbsd-arm64@7.0.2", "", { "os": "none", "cpu": "arm64" }, "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA=="], - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.53.0", "", { "dependencies": { "@typescript-eslint/types": "8.53.0", "@typescript-eslint/typescript-estree": "8.53.0", "@typescript-eslint/utils": "8.53.0", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw=="], + "@typescript/typescript-netbsd-x64": ["@typescript/typescript-netbsd-x64@7.0.2", "", { "os": "none", "cpu": "x64" }, "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.53.0", "", {}, "sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ=="], + "@typescript/typescript-openbsd-arm64": ["@typescript/typescript-openbsd-arm64@7.0.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.53.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.53.0", "@typescript-eslint/tsconfig-utils": "8.53.0", "@typescript-eslint/types": "8.53.0", "@typescript-eslint/visitor-keys": "8.53.0", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw=="], + "@typescript/typescript-openbsd-x64": ["@typescript/typescript-openbsd-x64@7.0.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg=="], - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.53.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.53.0", "@typescript-eslint/types": "8.53.0", "@typescript-eslint/typescript-estree": "8.53.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA=="], + "@typescript/typescript-sunos-x64": ["@typescript/typescript-sunos-x64@7.0.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.53.0", "", { "dependencies": { "@typescript-eslint/types": "8.53.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw=="], + "@typescript/typescript-win32-arm64": ["@typescript/typescript-win32-arm64@7.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ=="], + + "@typescript/typescript-win32-x64": ["@typescript/typescript-win32-x64@7.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g=="], "@typescript/vfs": ["@typescript/vfs@1.6.2", "", { "dependencies": { "debug": "^4.1.1" }, "peerDependencies": { "typescript": "*" } }, "sha512-hoBwJwcbKHmvd2QVebiytN1aELvpk9B74B4L1mFm/XT1Q/VOYAWl2vQ9AWRFtQq8zmz6enTpfTV8WRc4ATjW/g=="], @@ -408,22 +452,18 @@ "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], - "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], - - "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], - "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], - "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], - "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], - "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "ansi-to-html": ["ansi-to-html@0.7.2", "", { "dependencies": { "entities": "^2.2.0" }, "bin": { "ansi-to-html": "bin/ansi-to-html" } }, "sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g=="], "anynum": ["anynum@1.0.1", "", {}, "sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A=="], + "apache-arrow": ["apache-arrow@21.2.0", "", { "dependencies": { "@types/node": "^25.2.0", "flatbuffers": "^25.1.24", "json-with-bigint": "^3.5.3", "tslib": "^2.6.2" }, "bin": { "arrow2csv": "bin/arrow2csv.js" } }, "sha512-Hxe6Agq26gQOM954qpzYSllJBPJl+e16U5CkfuMUhLrNba+5nKkttIVlflaovN6oaTratqMGAO8H5u/aNhmHWQ=="], + "archiver": ["archiver@7.0.1", "", { "dependencies": { "archiver-utils": "^5.0.2", "async": "^3.2.4", "buffer-crc32": "^1.0.0", "readable-stream": "^4.0.0", "readdir-glob": "^1.1.2", "tar-stream": "^3.0.0", "zip-stream": "^6.0.1" } }, "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ=="], "archiver-utils": ["archiver-utils@5.0.2", "", { "dependencies": { "glob": "^10.0.0", "graceful-fs": "^4.2.0", "is-stream": "^2.0.1", "lazystream": "^1.0.0", "lodash": "^4.17.15", "normalize-path": "^3.0.0", "readable-stream": "^4.0.0" } }, "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA=="], @@ -432,8 +472,6 @@ "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], - "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - "b4a": ["b4a@1.7.3", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q=="], "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], @@ -450,7 +488,7 @@ "bottleneck": ["bottleneck@2.19.5", "", {}, "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="], - "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], @@ -462,18 +500,12 @@ "bun": ["bun@1.3.6", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.3.6", "@oven/bun-darwin-x64": "1.3.6", "@oven/bun-darwin-x64-baseline": "1.3.6", "@oven/bun-linux-aarch64": "1.3.6", "@oven/bun-linux-aarch64-musl": "1.3.6", "@oven/bun-linux-x64": "1.3.6", "@oven/bun-linux-x64-baseline": "1.3.6", "@oven/bun-linux-x64-musl": "1.3.6", "@oven/bun-linux-x64-musl-baseline": "1.3.6", "@oven/bun-windows-x64": "1.3.6", "@oven/bun-windows-x64-baseline": "1.3.6" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bunx.exe" } }, "sha512-Tn98GlZVN2WM7+lg/uGn5DzUao37Yc0PUz7yzYHdeF5hd+SmHQGbCUIKE4Sspdgtxn49LunK3mDNBC2Qn6GJjw=="], - "bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="], + "bun-types": ["bun-types@1.4.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-bxV1FgK7yBIzjRe5zBozIM4Bem11ZJcCXSrjWRG3YWLt8yFDePu4cLjpebO8OvPeIE9trbyPF4fuj3Cia4Fj3w=="], "cacache": ["cacache@20.0.4", "", { "dependencies": { "@npmcli/fs": "^5.0.0", "fs-minipass": "^3.0.0", "glob": "^13.0.0", "lru-cache": "^11.1.0", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^7.0.2", "ssri": "^13.0.0" } }, "sha512-M3Lab8NPYlZU2exsL3bMVvMrMqgwCnMWfdZbK28bn3pK6APT/Te/I8hjRPNu1uwORY9a1eEQoifXbKPQMfMTOA=="], - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - - "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], - "chainsaw": ["chainsaw@0.1.0", "", { "dependencies": { "traverse": ">=0.3.0 <0.4" } }, "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ=="], - "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], "cjs-module-lexer": ["cjs-module-lexer@2.2.1", "", {}, "sha512-Ca8swihM+/4yKecYHY52kgJd300hi2lADU/a1RxNTRe+RJ9jvqQlESpbz9DnG9mowez8qwXHB8qYdIUw9e+F5Q=="], @@ -486,18 +518,12 @@ "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], - "common-ancestor-path": ["common-ancestor-path@2.0.0", "", {}, "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng=="], "compress-commons": ["compress-commons@6.0.2", "", { "dependencies": { "crc-32": "^1.2.0", "crc32-stream": "^6.0.0", "is-stream": "^2.0.1", "normalize-path": "^3.0.0", "readable-stream": "^4.0.0" } }, "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg=="], - "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - "content-type": ["content-type@3.0.0", "", {}, "sha512-AIi5H6p0xk5uknXcN3/rmhP8jgp69OfSe/JuKiQAFprJ7UGw7mwj7m4XcmDzlrnJDG+cGpphAINGdU3g3g7kDw=="], - "coolify": ["coolify@github:tahminator/Coolify-TypeScript-SDK#8e19e18", { "peerDependencies": { "zod": ">= 3" } }, "tahminator-Coolify-TypeScript-SDK-8e19e18", "sha512-UkMpLpeVnJkqOys/wBiTdxIHnvtJxMkMQqK5/7iBZVzOZoQWVLNeW0s0ycDMdyCMDdeBmfAbdBssQsQFW4j0aQ=="], - "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], "crc-32": ["crc-32@1.2.2", "", { "bin": { "crc32": "bin/crc32.njs" } }, "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="], @@ -510,22 +536,12 @@ "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], - - "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], - "deprecation": ["deprecation@2.3.1", "", {}, "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="], "discord-api-types": ["discord-api-types@0.38.40", "", {}, "sha512-P/His8cotqZgQqrt+hzrocp9L8RhQQz1GkrCnC9TMJ8Uw2q0tg8YyqJyGULxhXn/8kxHETN4IppmOv+P2m82lQ=="], "discord.js": ["discord.js@14.25.1", "", { "dependencies": { "@discordjs/builders": "^1.13.0", "@discordjs/collection": "1.5.3", "@discordjs/formatters": "^0.6.2", "@discordjs/rest": "^2.6.0", "@discordjs/util": "^1.2.0", "@discordjs/ws": "^1.2.3", "@sapphire/snowflake": "3.5.3", "discord-api-types": "^0.38.33", "fast-deep-equal": "3.1.3", "lodash.snakecase": "4.1.1", "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.3" } }, "sha512-2l0gsPOLPs5t6GFZfQZKnL1OJNYFcuC/ETWsW4VtKVD/tg4ICa9x+jb9bkPffkMdRpRpuUaO/fKkHCBeiCKh8g=="], - "dom-walk": ["dom-walk@0.1.2", "", {}, "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="], - - "dotenv": ["dotenv@17.2.3", "", {}, "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w=="], - - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], @@ -534,40 +550,10 @@ "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "es-module-lexer": ["es-module-lexer@2.3.2", "", {}, "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw=="], - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], - - "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], - "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], - "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - - "eslint": ["eslint@9.39.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw=="], - - "eslint-plugin-no-relative-import-paths": ["eslint-plugin-no-relative-import-paths@1.6.1", "", {}, "sha512-YZNeOnsOrJcwhFw0X29MXjIzu2P/f5X2BZDPWw1R3VUYBRFxNIh77lyoL/XrMU9ewZNQPcEvAgL/cBOT1P330A=="], - - "eslint-plugin-perfectionist": ["eslint-plugin-perfectionist@5.3.1", "", { "dependencies": { "@typescript-eslint/utils": "^8.52.0", "natural-orderby": "^5.0.0" }, "peerDependencies": { "eslint": ">=8.45.0" } }, "sha512-v8kAP8TarQYqDC4kxr343ZNi++/oOlBnmWovsUZpbJ7A/pq1VHGlgsf/fDh4CdEvEstzkrc8NLvoVKtfpsC4oA=="], - - "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], - - "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], - - "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], - - "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="], - - "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], - - "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], - - "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], - "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], @@ -584,64 +570,30 @@ "fast-fifo": ["fast-fifo@1.3.2", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], - "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], - - "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], - "fast-xml-builder": ["fast-xml-builder@1.3.1", "", { "dependencies": { "path-expression-matcher": "^1.6.2", "xml-naming": "^0.3.0" } }, "sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug=="], "fast-xml-parser": ["fast-xml-parser@5.11.1", "", { "dependencies": { "@nodable/entities": "^3.0.0", "fast-xml-builder": "^1.2.0", "is-unsafe": "^2.0.0", "path-expression-matcher": "^1.6.2", "strnum": "^2.4.2", "xml-naming": "^0.3.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-TBw6K/fxoQGGjCmZDw9w/ZwP3uDcnTM4YH/g+PFRWr8sbe5idXtxNN6vITh4+1ruCZaho6uBFurElsA7F0zzgw=="], "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], - - "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], - - "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], - - "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], + "flatbuffers": ["flatbuffers@25.9.23", "", {}, "sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ=="], "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], - "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], - "fs-minipass": ["fs-minipass@3.0.3", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw=="], - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], "get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="], - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], "glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], - "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], - - "global": ["global@4.4.0", "", { "dependencies": { "min-document": "^2.19.0", "process": "^0.11.10" } }, "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w=="], - - "globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], - "google-protobuf": ["google-protobuf@3.21.4", "", {}, "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ=="], - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - - "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - "hosted-git-info": ["hosted-git-info@9.0.3", "", { "dependencies": { "lru-cache": "^11.1.0" } }, "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg=="], "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], @@ -656,28 +608,18 @@ "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "ignore-walk": ["ignore-walk@8.0.0", "", { "dependencies": { "minimatch": "^10.0.3" } }, "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A=="], - "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], - "import-in-the-middle": ["import-in-the-middle@3.4.0", "", { "dependencies": { "cjs-module-lexer": "^2.2.0", "es-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-Xfjwfarhe+LGmoaof+sexeNo3sGRysb5x56WrZLwHtmqT0OilSKtVWkv0lrCcMgSKyKP9oBogBAisHZvtJH0aw=="], - "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], "ini": ["ini@2.0.0", "", {}, "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="], "ip-address": ["ip-address@10.7.0", "", {}, "sha512-BGFsyJd5mpXp3rK6jIdADLNgpJUK1jnjzvYF8lK+VyDab9JAmqN0YOKDdP17HlgKb2+ehPgDc8EtnRLbGCAMhA=="], - "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], "is-unsafe": ["is-unsafe@2.0.2", "", {}, "sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ=="], @@ -690,14 +632,8 @@ "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], - "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], - "json-parse-even-better-errors": ["json-parse-even-better-errors@5.0.0", "", {}, "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ=="], - "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], - - "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], - "json-stringify-nice": ["json-stringify-nice@1.1.4", "", {}, "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw=="], "json-with-bigint": ["json-with-bigint@3.5.12", "", {}, "sha512-uwbF/wSSuOgC7qqlq27Xp5B6a2MHVug3t0idZdTqu0JnlFvgJuH7ju+KAk/J06C7GfhoYy2gnb9wz2INqcne7w=="], @@ -710,20 +646,12 @@ "jwt-decode": ["jwt-decode@3.1.2", "", {}, "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="], - "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], - "lazystream": ["lazystream@1.0.1", "", { "dependencies": { "readable-stream": "^2.0.5" } }, "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw=="], - "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], - - "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], - "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], - "lodash.snakecase": ["lodash.snakecase@4.1.1", "", {}, "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw=="], "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], @@ -734,19 +662,11 @@ "make-fetch-happen": ["make-fetch-happen@15.0.6", "", { "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/agent": "^4.0.0", "@npmcli/redact": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^6.0.0", "ssri": "^13.0.0" } }, "sha512-Je0fLJ0F5atA7F+eIlLzk+Wkcl57JDf4kf+EW8xiP5E31xOQxkIxTbgf1Oi1Lw9tRI9UEMRdI5Vz2xTzoNU1Jw=="], - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], - "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "min-document": ["min-document@2.19.2", "", { "dependencies": { "dom-walk": "^0.1.0" } }, "sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A=="], - - "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], @@ -770,16 +690,10 @@ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], - - "natural-orderby": ["natural-orderby@5.0.0", "", {}, "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg=="], - "negotiator": ["negotiator@1.1.0", "", { "dependencies": { "content-type": "^2.1.0" } }, "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg=="], "neverthrow": ["neverthrow@8.2.0", "", { "optionalDependencies": { "@rollup/rollup-linux-x64-gnu": "^4.24.0" } }, "sha512-kOCT/1MCPAxY5iUV3wytNFUMUolzuwd/VF/1KCx7kf6CutrOsTie+84zTGTpgQycjvfLdBBdvBvFLqFD2c0wkQ=="], - "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], - "node-gyp": ["node-gyp@12.4.0", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", "nopt": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "tar": "^7.5.4", "tinyglobby": "^0.2.12", "undici": "^6.25.0", "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw=="], "nopt": ["nopt@9.0.0", "", { "dependencies": { "abbrev": "^4.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw=="], @@ -810,11 +724,11 @@ "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + "oxfmt": ["oxfmt@0.72.0", "", { "dependencies": { "tinypool": "2.2.0" }, "optionalDependencies": { "@oxfmt/binding-android-arm-eabi": "0.72.0", "@oxfmt/binding-android-arm64": "0.72.0", "@oxfmt/binding-darwin-arm64": "0.72.0", "@oxfmt/binding-darwin-x64": "0.72.0", "@oxfmt/binding-freebsd-x64": "0.72.0", "@oxfmt/binding-linux-arm-gnueabihf": "0.72.0", "@oxfmt/binding-linux-arm-musleabihf": "0.72.0", "@oxfmt/binding-linux-arm64-gnu": "0.72.0", "@oxfmt/binding-linux-arm64-musl": "0.72.0", "@oxfmt/binding-linux-ppc64-gnu": "0.72.0", "@oxfmt/binding-linux-riscv64-gnu": "0.72.0", "@oxfmt/binding-linux-riscv64-musl": "0.72.0", "@oxfmt/binding-linux-s390x-gnu": "0.72.0", "@oxfmt/binding-linux-x64-gnu": "0.72.0", "@oxfmt/binding-linux-x64-musl": "0.72.0", "@oxfmt/binding-openharmony-arm64": "0.72.0", "@oxfmt/binding-win32-arm64-msvc": "0.72.0", "@oxfmt/binding-win32-ia32-msvc": "0.72.0", "@oxfmt/binding-win32-x64-msvc": "0.72.0" }, "peerDependencies": { "svelte": "^5.0.0", "vite-plus": "*" }, "optionalPeers": ["svelte", "vite-plus"], "bin": { "oxfmt": "bin/oxfmt" } }, "sha512-16OQeL0uhPZbfmT9S9WWM0Nv9+BmVi8Ra1uTYaSKj/qSCs6FB30KOhz9JoNYw6thT+K5bVxsk/tSEOu497i34g=="], - "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + "oxlint": ["oxlint@1.87.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.87.0", "@oxlint/binding-android-arm64": "1.87.0", "@oxlint/binding-darwin-arm64": "1.87.0", "@oxlint/binding-darwin-x64": "1.87.0", "@oxlint/binding-freebsd-x64": "1.87.0", "@oxlint/binding-linux-arm-gnueabihf": "1.87.0", "@oxlint/binding-linux-arm-musleabihf": "1.87.0", "@oxlint/binding-linux-arm64-gnu": "1.87.0", "@oxlint/binding-linux-arm64-musl": "1.87.0", "@oxlint/binding-linux-ppc64-gnu": "1.87.0", "@oxlint/binding-linux-riscv64-gnu": "1.87.0", "@oxlint/binding-linux-riscv64-musl": "1.87.0", "@oxlint/binding-linux-s390x-gnu": "1.87.0", "@oxlint/binding-linux-x64-gnu": "1.87.0", "@oxlint/binding-linux-x64-musl": "1.87.0", "@oxlint/binding-openharmony-arm64": "1.87.0", "@oxlint/binding-win32-arm64-msvc": "1.87.0", "@oxlint/binding-win32-ia32-msvc": "1.87.0", "@oxlint/binding-win32-x64-msvc": "1.87.0" }, "peerDependencies": { "oxlint-tsgolint": ">=7.0.2003", "vite-plus": "*" }, "optionalPeers": ["oxlint-tsgolint", "vite-plus"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-drxVlaW7Oqq7wSy1CN25znRu00aRq8n57Q2wniJRxCmtYVz07ufCm7EVDPQFZURrTgQIjzKrVEHAD/HcvJXObg=="], - "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + "oxlint-tsgolint": ["oxlint-tsgolint@7.0.2003", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "7.0.2003", "@oxlint-tsgolint/darwin-x64": "7.0.2003", "@oxlint-tsgolint/linux-arm64": "7.0.2003", "@oxlint-tsgolint/linux-x64": "7.0.2003", "@oxlint-tsgolint/win32-arm64": "7.0.2003", "@oxlint-tsgolint/win32-x64": "7.0.2003" }, "bin": { "tsgolint": "./bin/tsgolint.js" } }, "sha512-VnK4zlqgmgq/7ZcjzCk/WpN8kKFsYGcB85Io9qT3wL4K8Un3RKmJkp793crNETieMusPMKOA4a+Mw2wbteI6TQ=="], "p-map": ["p-map@7.0.7", "", {}, "sha512-VaWRu2i4FJNRtiRWCuuQRgfQ1B7a6+gMSrO+3j0EQi/k0ULfS9kosRxGoiqwzIjZTDI02tGfk5mXXltLg6QtfQ=="], @@ -822,12 +736,8 @@ "pacote": ["pacote@21.5.1", "", { "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/git": "^7.0.0", "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^9.0.0", "@npmcli/run-script": "^10.0.0", "cacache": "^20.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^13.0.0", "npm-packlist": "^10.0.1", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", "proc-log": "^6.0.0", "sigstore": "^4.0.0", "ssri": "^13.0.0", "tar": "^7.4.3" }, "bin": { "pacote": "bin/index.js" } }, "sha512-KvcJ9iy3crysCsgqc4+PknH/w6jkrp8JN36mpZBPwNaDRwTfMZD37YzRazNstiZUOhuF5pno9f78n9mEJBavwg=="], - "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], - "parse-conflict-json": ["parse-conflict-json@5.0.1", "", { "dependencies": { "json-parse-even-better-errors": "^5.0.0", "just-diff": "^6.0.0", "just-diff-apply": "^5.2.0" } }, "sha512-ZHEmNKMq1wyJXNwLxyHnluPfRAFSIliBvbK/UiOceROt4Xh9Pz0fq49NytIaeaCUf5VR86hwQ/34FCcNU5/LKQ=="], - "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], - "path-expression-matcher": ["path-expression-matcher@1.6.2", "", {}, "sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ=="], "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], @@ -838,10 +748,6 @@ "postcss-selector-parser": ["postcss-selector-parser@7.1.5", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw=="], - "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], - - "prettier": ["prettier@3.8.0", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA=="], - "proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], @@ -856,8 +762,6 @@ "protobufjs": ["protobufjs@7.6.6", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.5", "@protobufjs/eventemitter": "^1.1.1", "@protobufjs/fetch": "^1.1.1", "@protobufjs/float": "^1.0.2", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.1", "@types/node": ">=13.7.0", "long": "^5.3.2" } }, "sha512-dYDWdjSl5RNb7SgPxGQcRU+GtvP7s2fpkrY0r432PcOIaZ0/rBcxEZnQN67iJhFuQiVw754JDoPruPCNdGsbjg=="], - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "read-cmd-shim": ["read-cmd-shim@6.0.0", "", {}, "sha512-1zM5HuOfagXCBWMN83fuFI/x+T/UhZ7k+KIzhrHXcQoeX5+7gmaDYjELQHmmzIodumBHeByBJT4QYS7ufAgs7A=="], "readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], @@ -870,14 +774,10 @@ "require-in-the-middle": ["require-in-the-middle@8.0.1", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3" } }, "sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ=="], - "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], - "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - "sax": ["sax@1.4.4", "", {}, "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw=="], - "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], @@ -922,32 +822,24 @@ "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], - "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - "strnum": ["strnum@2.4.2", "", { "dependencies": { "anynum": "^1.0.1" } }, "sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw=="], - "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "tar": ["tar@7.5.22", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA=="], "tar-stream": ["tar-stream@3.1.7", "", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], "text-decoder": ["text-decoder@1.2.3", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA=="], - "tinyduration": ["tinyduration@3.4.1", "", {}, "sha512-NemFoamVYn7TmtwZKZ3OiliM9fZkr6EWiTM+wKknco6POSy2gS689xx/pXip0JYp40HXpUw6k65CUYHWYUXdaA=="], - "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], - "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="], + "tinypool": ["tinypool@2.2.0", "", {}, "sha512-jBrmx4lYmaC9k/mgPbylxs7kBUxHtD8256up+HjLaDFfXScKJQyil+SWXSvhAtT7XHo+yTVlpB81PGmHP8oLSQ=="], - "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="], "traverse": ["traverse@0.3.9", "", {}, "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ=="], "treeverse": ["treeverse@3.0.0", "", {}, "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ=="], - "ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], - "ts-mixer": ["ts-mixer@6.0.4", "", {}, "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], @@ -956,11 +848,7 @@ "tunnel": ["tunnel@0.0.6", "", {}, "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="], - "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], - - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "typescript-eslint": ["typescript-eslint@8.53.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", "@typescript-eslint/typescript-estree": "8.53.0", "@typescript-eslint/utils": "8.53.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-xHURCQNxZ1dsWn0sdOaOfCSQG0HKeqSj9OexIxrz6ypU6wHYOdX2I3D2b8s8wFSsSOYJb+6q283cLiLlkEsBYw=="], + "typescript": ["typescript@7.0.2", "", { "optionalDependencies": { "@typescript/typescript-aix-ppc64": "7.0.2", "@typescript/typescript-darwin-arm64": "7.0.2", "@typescript/typescript-darwin-x64": "7.0.2", "@typescript/typescript-freebsd-arm64": "7.0.2", "@typescript/typescript-freebsd-x64": "7.0.2", "@typescript/typescript-linux-arm": "7.0.2", "@typescript/typescript-linux-arm64": "7.0.2", "@typescript/typescript-linux-loong64": "7.0.2", "@typescript/typescript-linux-mips64el": "7.0.2", "@typescript/typescript-linux-ppc64": "7.0.2", "@typescript/typescript-linux-riscv64": "7.0.2", "@typescript/typescript-linux-s390x": "7.0.2", "@typescript/typescript-linux-x64": "7.0.2", "@typescript/typescript-netbsd-arm64": "7.0.2", "@typescript/typescript-netbsd-x64": "7.0.2", "@typescript/typescript-openbsd-arm64": "7.0.2", "@typescript/typescript-openbsd-x64": "7.0.2", "@typescript/typescript-sunos-x64": "7.0.2", "@typescript/typescript-win32-arm64": "7.0.2", "@typescript/typescript-win32-x64": "7.0.2" }, "bin": { "tsc": "bin/tsc" } }, "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA=="], "undici": ["undici@6.21.3", "", {}, "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw=="], @@ -974,26 +862,16 @@ "upath": ["upath@1.2.0", "", {}, "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="], - "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - "uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], - "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], "validate-npm-package-name": ["validate-npm-package-name@7.0.2", "", {}, "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A=="], "walk-up-path": ["walk-up-path@4.0.0", "", {}, "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A=="], - "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], - - "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], - "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -1008,10 +886,6 @@ "xml-trueformat": ["xml-trueformat@0.9.5", "", {}, "sha512-npDAcGSttDBmTyfCLExLDceuIhQCkEkAw9wx3JfrcRRevaG8mn+BQLmprK+GB5iULF9yemW+o/3P3ytUpl+dGA=="], - "xml2js": ["xml2js@0.5.0", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA=="], - - "xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], - "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], @@ -1022,8 +896,6 @@ "yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], - "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - "zip-stream": ["zip-stream@6.0.1", "", { "dependencies": { "archiver-utils": "^5.0.0", "compress-commons": "^6.0.2", "readable-stream": "^4.0.0" } }, "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA=="], "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], @@ -1038,12 +910,6 @@ "@actions/http-client/undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="], - "@azure/core-http/@azure/abort-controller": ["@azure/abort-controller@1.1.0", "", { "dependencies": { "tslib": "^2.2.0" } }, "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw=="], - - "@azure/core-http/@azure/core-tracing": ["@azure/core-tracing@1.0.0-preview.13", "", { "dependencies": { "@opentelemetry/api": "^1.0.1", "tslib": "^2.2.0" } }, "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ=="], - - "@azure/core-http/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - "@azure/core-xml/fast-xml-parser": ["fast-xml-parser@5.3.3", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA=="], "@bufbuild/protoplugin/typescript": ["typescript@5.4.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ=="], @@ -1052,8 +918,6 @@ "@discordjs/ws/@discordjs/collection": ["@discordjs/collection@2.1.1", "", {}, "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg=="], - "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@grpc/proto-loader/yargs": ["yargs@17.7.3", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g=="], "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], @@ -1176,13 +1040,11 @@ "@protobuf-ts/plugin/typescript": ["typescript@3.9.10", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q=="], - "@tufjs/models/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], - - "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + "@tahminator/pipeline/@actions/artifact": ["@actions/artifact@6.3.1", "", { "dependencies": { "@actions/core": "^3.0.1", "@actions/github": "^9.1.1", "@actions/http-client": "^4.0.1", "@azure/storage-blob": "^12.31.0", "@octokit/core": "^7.0.6", "@octokit/plugin-request-log": "^6.0.0", "@octokit/plugin-retry": "^8.1.0", "@octokit/request": "^10.0.8", "@octokit/request-error": "^7.1.0", "@protobuf-ts/runtime": "^2.11.1", "@protobuf-ts/runtime-rpc": "^2.11.1", "archiver": "^7.0.1", "jwt-decode": "^4.0.0", "unzip-stream": "^0.3.1" } }, "sha512-DBXgdB9T4yj2KSe0tFg+MTi9T5se+16bdrFQh+3Y6Nq1lZ3gYQk1BjHoTof+7Zf36bEAlfVMf+8ifRKeyGJugQ=="], - "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@tufjs/models/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], - "@typescript-eslint/typescript-estree/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + "apache-arrow/@types/node": ["@types/node@25.9.9", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-b4e2xxj/yMeT2hNlD6x7zNFiQK2Dlmkb9CQ6v3/1G2RezKN4YS2lcEv8lzGm1mhs4f2lM4yNAMI/zUDBZBBt7w=="], "cacache/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], @@ -1224,8 +1086,6 @@ "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "readdir-glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], - "spdx-correct/spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -1238,7 +1098,7 @@ "validate-npm-package-license/spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], - "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -1260,8 +1120,6 @@ "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - "@npmcli/arborist/minimatch/brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], "@npmcli/git/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], @@ -1422,9 +1280,29 @@ "@octokit/rest/@octokit/core/universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], + "@tahminator/pipeline/@actions/artifact/@actions/core": ["@actions/core@3.0.1", "", { "dependencies": { "@actions/exec": "^3.0.0", "@actions/http-client": "^4.0.0" } }, "sha512-a6d/Nwahm9fliVGRhdhofo40HjHQasUPusmc7vBfyky+7Z+P2A1J68zyFVaNcEclc/Se+eO595oAr5nwEIoIUA=="], + + "@tahminator/pipeline/@actions/artifact/@actions/github": ["@actions/github@9.1.1", "", { "dependencies": { "@actions/http-client": "^3.0.2", "@octokit/core": "^7.0.6", "@octokit/plugin-paginate-rest": "^14.0.0", "@octokit/plugin-rest-endpoint-methods": "^17.0.0", "@octokit/request": "^10.0.7", "@octokit/request-error": "^7.1.0", "undici": "^6.23.0" } }, "sha512-tL5JbYOBZHc0ngEnCsaDcryUizIUIlQyIMwy1Wkx93H5HzbBJ7TbiPx2PnFjBwZW0Vh05JmfFZhecE6gglYegA=="], + + "@tahminator/pipeline/@actions/artifact/@actions/http-client": ["@actions/http-client@4.0.1", "", { "dependencies": { "tunnel": "^0.0.6", "undici": "^6.23.0" } }, "sha512-+Nvd1ImaOZBSoPbsUtEhv+1z99H12xzncCkz0a3RuehINE81FZSe2QTj3uvAPTcJX/SCzUQHQ0D1GrPMbrPitg=="], + + "@tahminator/pipeline/@actions/artifact/@azure/storage-blob": ["@azure/storage-blob@12.34.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.9.0", "@azure/core-client": "^1.9.3", "@azure/core-http-compat": "^2.2.0", "@azure/core-lro": "^2.2.0", "@azure/core-paging": "^1.6.2", "@azure/core-rest-pipeline": "^1.19.1", "@azure/core-tracing": "^1.2.0", "@azure/core-util": "^1.11.0", "@azure/core-xml": "^1.4.5", "@azure/logger": "^1.1.4", "@azure/storage-common": "^12.5.0", "apache-arrow": "^21.1.0", "events": "^3.0.0", "tslib": "^2.8.1" } }, "sha512-cXDTCAMwDx8Ng9yUe82kOOd2kPnZ8AQqe4FkLMcpaQ3Mvr3/PXVdvRhyP0FtY5/U5Oh6JGk3EcEibaFOymRLFw=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/core": ["@octokit/core@7.0.6", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.3", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/plugin-request-log": ["@octokit/plugin-request-log@6.0.0", "", { "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/plugin-retry": ["@octokit/plugin-retry@8.1.1", "", { "dependencies": { "@octokit/request-error": "^7.1.1", "@octokit/types": "^17.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": ">=7" } }, "sha512-VCVvZ/R1+u3WuiBWpNavZ0mY4aaJNAsENrpBP9aLSR2QyOpQgd7DhM5j4AW7z4MQpnJYgwBPf0XqPQoNBRdQwg=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/request": ["@octokit/request@10.0.16", "", { "dependencies": { "@octokit/endpoint": "^11.0.5", "@octokit/request-error": "^7.1.2", "@octokit/types": "^18.0.0", "content-type": "^3.0.0", "json-with-bigint": "^3.5.12", "universal-user-agent": "^7.0.2" } }, "sha512-A0zWGjHzISIb+9ccG8s0dq7LKO5zVpJLRICjgUb+sJxEWqn8RUHB1rD3AE51+PECvXHIxqZ1VVvs4fHTSD9nUQ=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/request-error": ["@octokit/request-error@7.1.2", "", { "dependencies": { "@octokit/types": "^18.0.0" } }, "sha512-XZRuT3xZ84D3gYErI1DZvhJ33dCWVV6uzBtWkaBB4TvA/L6eOeTZodxLFVB44bBEEo3vEx7y00UfX1tBLrtLRg=="], + + "@tahminator/pipeline/@actions/artifact/jwt-decode": ["jwt-decode@4.0.0", "", {}, "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA=="], + "@tufjs/models/minimatch/brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], - "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "apache-arrow/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], "cacache/glob/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], @@ -1432,8 +1310,6 @@ "cacache/glob/path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], - "glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "ignore-walk/minimatch/brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], "lazystream/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], @@ -1458,8 +1334,6 @@ "octokit/@octokit/core/universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], - "readdir-glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -1512,6 +1386,38 @@ "@octokit/rest/@octokit/core/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@11.0.2", "", { "dependencies": { "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ=="], + "@tahminator/pipeline/@actions/artifact/@actions/core/@actions/exec": ["@actions/exec@3.0.0", "", { "dependencies": { "@actions/io": "^3.0.2" } }, "sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw=="], + + "@tahminator/pipeline/@actions/artifact/@actions/github/@actions/http-client": ["@actions/http-client@3.0.2", "", { "dependencies": { "tunnel": "^0.0.6", "undici": "^6.23.0" } }, "sha512-JP38FYYpyqvUsz+Igqlc/JG6YO9PaKuvqjM3iGvaLqFnJ7TFmcLyy2IDrY0bI0qCQug8E9K+elv5ZNfw62ZJzA=="], + + "@tahminator/pipeline/@actions/artifact/@actions/github/undici": ["undici@6.28.0", "", {}, "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA=="], + + "@tahminator/pipeline/@actions/artifact/@actions/http-client/undici": ["undici@6.28.0", "", {}, "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA=="], + + "@tahminator/pipeline/@actions/artifact/@azure/storage-blob/@azure/storage-common": ["@azure/storage-common@12.5.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.9.0", "@azure/core-http-compat": "^2.4.0", "@azure/core-rest-pipeline": "^1.24.0", "@azure/core-tracing": "^1.2.0", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.1.4", "events": "^3.3.0", "tslib": "^2.8.1" } }, "sha512-bttzuhQiCIwrkzjPDA+AtAR7dg19L/CC6ztcqJ5LfvWpXuys9mHp0UQ0udYnoUvv9SCT9KTR5kqFvFr0e6k0lQ=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/core/@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/core/@octokit/graphql": ["@octokit/graphql@9.0.3", "", { "dependencies": { "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/core/@octokit/request": ["@octokit/request@10.0.7", "", { "dependencies": { "@octokit/endpoint": "^11.0.2", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/core/@octokit/request-error": ["@octokit/request-error@7.1.0", "", { "dependencies": { "@octokit/types": "^16.0.0" } }, "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/core/before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/core/universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/plugin-retry/@octokit/types": ["@octokit/types@17.0.0", "", { "dependencies": { "@octokit/openapi-types": "^28.0.0" } }, "sha512-ByP1v7YL5SMveFPP7+sj0/ZuWCOOg/Chs4NafOMpq6WNIM/hdGY0S7C0TCGDBWu1aGmOxmUIhMx3cO+IdwYZ1Q=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@11.0.5", "", { "dependencies": { "@octokit/types": "^18.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-iXa654H3yFafF/ieHkukfbgWo2rmXD2ceD0ZOtrPhw1bc3FDch1d9N/TNs0FQ1/cIbwb7kspUX8jzIs8nzb9DQ=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/request/@octokit/types": ["@octokit/types@18.0.0", "", { "dependencies": { "@octokit/openapi-types": "^29.0.1" } }, "sha512-l6bAF43PNxkJp6g+W4PjoUSSkxHomXw2nOum5CTftJz1NlV3vu93NImgOYtLf6CbBUb5j+fiuzW0PPQ5JTSvZA=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/request/universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/request-error/@octokit/types": ["@octokit/types@18.0.0", "", { "dependencies": { "@octokit/openapi-types": "^29.0.1" } }, "sha512-l6bAF43PNxkJp6g+W4PjoUSSkxHomXw2nOum5CTftJz1NlV3vu93NImgOYtLf6CbBUb5j+fiuzW0PPQ5JTSvZA=="], + "@tufjs/models/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "cacache/glob/minimatch/brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], @@ -1522,10 +1428,28 @@ "@grpc/proto-loader/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@grpc/proto-loader/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "@grpc/proto-loader/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "@npmcli/package-json/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "@tahminator/pipeline/@actions/artifact/@actions/core/@actions/exec/@actions/io": ["@actions/io@3.0.2", "", {}, "sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw=="], + + "@tahminator/pipeline/@actions/artifact/@azure/storage-blob/@azure/storage-common/@azure/core-http-compat": ["@azure/core-http-compat@2.5.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2" }, "peerDependencies": { "@azure/core-client": "^1.10.0", "@azure/core-rest-pipeline": "^1.22.0" } }, "sha512-BoSmXPx2er1Ai+wKlDvj29jIQespCNBwEmKyZVHO2kEFsWbGjAjwMCGzug3DJM5/QYIV3vej0S1zcU5bq9fa8w=="], + + "@tahminator/pipeline/@actions/artifact/@azure/storage-blob/@azure/storage-common/@azure/core-rest-pipeline": ["@azure/core-rest-pipeline@1.25.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.10.0", "@azure/core-tracing": "^1.3.0", "@azure/core-util": "^1.13.0", "@azure/logger": "^1.3.0", "@typespec/ts-http-runtime": "^0.3.4", "tslib": "^2.6.2" } }, "sha512-bMs8ekJLjX8wPV+9IPBges1SLPyuDtE9g5gLDWOpxzKcoOFQnpLGkbcT1tdw3FaAmDS1gnPmMmJ6y/T5B96kIA=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/core/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@11.0.2", "", { "dependencies": { "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/plugin-retry/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@28.0.0", "", {}, "sha512-0rFyLuyHvIj6uuZWuDslxkowFYdPXoNIkeAv4b27dzm2Tf4vGWXnPsMcxs7d65kLdMERgP3wc1AEPlqMz8e1cQ=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/request-error/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@29.0.1", "", {}, "sha512-9qWOMFNxxLokERcms42rU0PTLqQmVs7g5E41TI4mCOxmpFayD1rfC7XxOL55cG9MBZLFlC31BrR37myMKardwg=="], + + "@tahminator/pipeline/@actions/artifact/@octokit/request/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@29.0.1", "", {}, "sha512-9qWOMFNxxLokERcms42rU0PTLqQmVs7g5E41TI4mCOxmpFayD1rfC7XxOL55cG9MBZLFlC31BrR37myMKardwg=="], + "cacache/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "@tahminator/pipeline/@actions/artifact/@azure/storage-blob/@azure/storage-common/@azure/core-rest-pipeline/@typespec/ts-http-runtime": ["@typespec/ts-http-runtime@0.3.9", "", { "dependencies": { "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "tslib": "^2.6.2" } }, "sha512-edSdeAqkdxBVzA1yL1LrLCml1YjyCVvPMtMqJpbF+6K609tHe8V6sQUzFQSGcYNhcuhOceZtjvN32+mpIth30A=="], } } diff --git a/.github/scripts/copy-prod-db/index.ts b/.github/scripts/copy-prod-db/index.ts index 9b3f3ade8..74f2f2528 100644 --- a/.github/scripts/copy-prod-db/index.ts +++ b/.github/scripts/copy-prod-db/index.ts @@ -1,132 +1,201 @@ +import { GitHubClient } from "@tahminator/pipeline"; import { $ } from "bun"; -import { getEnvVariablesByPrefix } from "load-secrets/env/load"; -import { updateCommitStatus } from "utils/update-commit-status"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; +import { getEnvVariablesByPrefix } from "@/utils/env"; + const AUTHORIZED_USERS = ["tahminator", "angelayu0530"]; -const { runUrl, username, sha } = await yargs(hideBin(process.argv)) - .options("runUrl", { +const { runUrl, sha, username } = await yargs(hideBin(process.argv)) + .option("runUrl", { type: "string", - describe: "Run url for action", + describe: "Workflow run URL for the status check", + demandOption: true, }) - .options("username", { + .option("sha", { type: "string", - describe: "Username of person who triggered action", + describe: "PR head commit SHA", demandOption: true, }) - .options("sha", { + .option("username", { type: "string", - describe: "Commit SHA", + describe: "Username of the person who triggered the command", demandOption: true, }) .strict() .parse(); -async function main() { +export async function main() { + const { githubAppAppId, githubAppInstallationId, githubAppPrivateKey } = parseCiEnv(process.env); + + const ghClient = await GitHubClient.createWithGithubAppToken({ + appId: githubAppAppId, + installationId: githubAppInstallationId, + privateKey: githubAppPrivateKey, + }); + + const repo = { owner: "Patina-Network", repository: "codebloom" }; + const check = await ghClient.statusCheck({ + ...repo, + action: "create", + sha, + name: "Copy Production DB to Staging", + status: "in_progress", + detailsUrl: runUrl, + output: { + title: "Checking authorization", + summary: + "Verifying the caller's membership in @Patina-Network/dino and the copy allowlist...", + }, + }); + if (!check) { + throw new Error("Failed to create database copy status check."); + } + const update = { + ...repo, + action: "update" as const, + checkRunId: check.id, + detailsUrl: runUrl, + }; + try { - await updateCommitStatus({ - sha, - state: "pending", - description: "Database copy in progress...", - targetUrl: runUrl, - context: "Copy Production DB to Staging", + const isTeamMember = await ghClient.isTeamMember({ + org: "Patina-Network", + teamSlug: "dino", + username, }); + if (!isTeamMember) { + throw new Error( + "Only members of @Patina-Network/dino can copy the production database to staging.", + ); + } if (!AUTHORIZED_USERS.includes(username)) { - throw new Error("You are not authorized!"); + throw new Error( + `Only ${AUTHORIZED_USERS.join(", ")} can copy the production database to staging.`, + ); } - const dbCreds = getEnvVariablesByPrefix("DB_MIGRATIOR_"); - - const prodDb: Record = { - ...dbCreds, - DATABASE_NAME: "codebloom-prod", - }; - const stagingDb: Record = { - ...dbCreds, - DATABASE_NAME: "codebloom-stg", - }; - - const flywayEnv = { - ...stagingDb, - }; - - const pgEnv = { - PROD_DATABASE_HOST: prodDb.DATABASE_HOST, - PROD_DATABASE_PORT: prodDb.DATABASE_PORT, - PROD_DATABASE_USER: prodDb.DATABASE_USER, - PROD_DATABASE_PASSWORD: prodDb.DATABASE_PASSWORD, - PROD_DATABASE_NAME: prodDb.DATABASE_NAME, - STAGING_DATABASE_HOST: stagingDb.DATABASE_HOST, - STAGING_DATABASE_PORT: stagingDb.DATABASE_PORT, - STAGING_DATABASE_USER: stagingDb.DATABASE_USER, - STAGING_DATABASE_PASSWORD: stagingDb.DATABASE_PASSWORD, - STAGING_DATABASE_NAME: stagingDb.DATABASE_NAME, - }; - - console.log("Cleaning staging database..."); - await $.env( - flywayEnv, - )`./mvnw -B -ntp flyway:clean -Dflyway.cleanDisabled=false`; - - console.log("Copying production database to staging..."); - // extensions are provisioned by `platform-infra`, - // and Pulumi doesnt support provisioning extensions via each table's service acct - // (instead, it goes thru root). - // - // this means, we cant try to add them back in this script, or it will fail the entire transaction. - await $.env(pgEnv)`PGPASSWORD="$PROD_DATABASE_PASSWORD" pg_dump \ - --host="$PROD_DATABASE_HOST" \ - --port="$PROD_DATABASE_PORT" \ - --username="$PROD_DATABASE_USER" \ - --dbname="$PROD_DATABASE_NAME" \ - --verbose \ - --clean \ - --if-exists \ - --format=plain \ - | sed -E '/SET transaction_timeout/d; /^(DROP|CREATE|ALTER) EXTENSION/d; /^COMMENT ON EXTENSION/d' \ - | PGPASSWORD="$STAGING_DATABASE_PASSWORD" psql \ - --host="$STAGING_DATABASE_HOST" \ - --port="$STAGING_DATABASE_PORT" \ - --username="$STAGING_DATABASE_USER" \ - --dbname="$STAGING_DATABASE_NAME" \ - --echo-errors \ - --single-transaction`; - - console.log("Cleaning unneccesary data..."); - await $.env(pgEnv)`PGPASSWORD="$STAGING_DATABASE_PASSWORD" psql \ - --host="$STAGING_DATABASE_HOST" \ - --port="$STAGING_DATABASE_PORT" \ - --username="$STAGING_DATABASE_USER" \ - --dbname="$STAGING_DATABASE_NAME" \ - --set ON_ERROR_STOP=on \ - --file ./infra/clean-stg-db.SQL`; - - await updateCommitStatus({ - sha, - state: "success", - description: "Database copy completed successfully", - targetUrl: runUrl, - context: "Copy Production DB to Staging", + await ghClient.statusCheck({ + ...update, + status: "in_progress", + output: { + title: "Copying production database", + summary: "Cleaning codebloom-stg and restoring it from codebloom-prod.", + }, }); - } catch (e) { - await updateCommitStatus({ - sha, - state: "failure", - description: "Database copy failed", - targetUrl: runUrl, - context: "Copy Production DB to Staging", + + await copyProdToStaging(); + + await ghClient.statusCheck({ + ...update, + status: "completed", + conclusion: "success", + output: { + title: "Database copy successful", + summary: "codebloom-prod was copied to codebloom-stg and cleaned.", + }, }); - throw e; + } catch (error) { + await ghClient + .statusCheck({ + ...update, + status: "completed", + conclusion: "failure", + output: { + title: "Database copy failed", + summary: "Database copy failed. See the workflow logs for details.", + }, + }) + .catch((statusError) => { + console.error("Failed to report database copy failure:", statusError); + }); + throw error; } } -main() - .then(() => { - process.exit(); - }) - .catch(() => { - process.exit(1); - }); +async function copyProdToStaging() { + const dbCreds = getEnvVariablesByPrefix("DB_MIGRATIOR_"); + + const prodDb: Record = { + ...dbCreds, + DATABASE_NAME: "codebloom-prod", + }; + const stagingDb: Record = { + ...dbCreds, + DATABASE_NAME: "codebloom-stg", + }; + + const pgEnv = { + PROD_DATABASE_HOST: prodDb.DATABASE_HOST, + PROD_DATABASE_PORT: prodDb.DATABASE_PORT, + PROD_DATABASE_USER: prodDb.DATABASE_USER, + PROD_DATABASE_PASSWORD: prodDb.DATABASE_PASSWORD, + PROD_DATABASE_NAME: prodDb.DATABASE_NAME, + STAGING_DATABASE_HOST: stagingDb.DATABASE_HOST, + STAGING_DATABASE_PORT: stagingDb.DATABASE_PORT, + STAGING_DATABASE_USER: stagingDb.DATABASE_USER, + STAGING_DATABASE_PASSWORD: stagingDb.DATABASE_PASSWORD, + STAGING_DATABASE_NAME: stagingDb.DATABASE_NAME, + }; + + console.log("Cleaning staging database..."); + await $.env(stagingDb)`./mvnw -B -ntp flyway:clean -Dflyway.cleanDisabled=false`; + + console.log("Copying production database to staging..."); + // extensions are provisioned by `platform-infra`, + // and Pulumi doesnt support provisioning extensions via each table's service acct + // (instead, it goes thru root). + // + // this means, we cant try to add them back in this script, or it will fail the entire transaction. + await $.env(pgEnv)`PGPASSWORD="$PROD_DATABASE_PASSWORD" pg_dump \ + --host="$PROD_DATABASE_HOST" \ + --port="$PROD_DATABASE_PORT" \ + --username="$PROD_DATABASE_USER" \ + --dbname="$PROD_DATABASE_NAME" \ + --verbose \ + --clean \ + --if-exists \ + --format=plain \ + | sed -E '/SET transaction_timeout/d; /^(DROP|CREATE|ALTER) EXTENSION/d; /^COMMENT ON EXTENSION/d' \ + | PGPASSWORD="$STAGING_DATABASE_PASSWORD" psql \ + --host="$STAGING_DATABASE_HOST" \ + --port="$STAGING_DATABASE_PORT" \ + --username="$STAGING_DATABASE_USER" \ + --dbname="$STAGING_DATABASE_NAME" \ + --echo-errors \ + --single-transaction`; + + console.log("Cleaning unneccesary data..."); + await $.env(pgEnv)`PGPASSWORD="$STAGING_DATABASE_PASSWORD" psql \ + --host="$STAGING_DATABASE_HOST" \ + --port="$STAGING_DATABASE_PORT" \ + --username="$STAGING_DATABASE_USER" \ + --dbname="$STAGING_DATABASE_NAME" \ + --set ON_ERROR_STOP=on \ + --file ./infra/clean-stg-db.SQL`; +} + +function parseCiEnv(ciEnv: Record) { + const githubAppAppId = ciEnv["_GITHUB_APP_APP_ID"]; + if (!githubAppAppId) { + throw new Error("Missing _GITHUB_APP_APP_ID from env"); + } + + const githubAppInstallationId = ciEnv["_GITHUB_APP_INSTALLATION_ID"]; + if (!githubAppInstallationId) { + throw new Error("Missing _GITHUB_APP_INSTALLATION_ID from env"); + } + + const githubAppPrivateKey = ciEnv["_GITHUB_APP_PEM_CONTENT"]; + if (!githubAppPrivateKey) { + throw new Error("Missing _GITHUB_APP_PEM_CONTENT from env"); + } + + return { githubAppAppId, githubAppInstallationId, githubAppPrivateKey }; +} + +if (import.meta.main) { + await main(); +} diff --git a/.github/scripts/eslint.config.js b/.github/scripts/eslint.config.js deleted file mode 100644 index 05a3bde39..000000000 --- a/.github/scripts/eslint.config.js +++ /dev/null @@ -1,52 +0,0 @@ -import js from "@eslint/js"; -import noRelativeImportPaths from "eslint-plugin-no-relative-import-paths"; -import perfectionist from "eslint-plugin-perfectionist"; -import globals from "globals"; -import tseslint from "typescript-eslint"; - -export default tseslint.config( - { - plugins: { - perfectionist, - }, - rules: { - "perfectionist/sort-imports": "error", - }, - }, - { ignores: ["dist"] }, - { - extends: [js.configs.recommended, ...tseslint.configs.recommended], - files: ["**/*.{ts,tsx}"], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - }, - plugins: { - "no-relative-import-paths": noRelativeImportPaths, - }, - settings: { - "import/resolver": { - alias: { - map: [["@", "./src"]], - extensions: [".ts", ".tsx", ".js", ".jsx"], - }, - }, - }, - rules: { - "no-relative-import-paths/no-relative-import-paths": [ - "error", - { allowSameFolder: false, rootDir: "src", prefix: "@" }, - ], - "@typescript-eslint/no-namespace": ["off"], - "@typescript-eslint/no-non-null-assertion": ["error"], - "@typescript-eslint/no-unused-vars": [ - "error", - { - argsIgnorePattern: "^_", - varsIgnorePattern: "^_", - caughtErrorsIgnorePattern: "^_", - }, - ], - }, - }, -); diff --git a/.github/scripts/help-message/index.ts b/.github/scripts/help-message/index.ts index f3e202aa1..93ad95a45 100644 --- a/.github/scripts/help-message/index.ts +++ b/.github/scripts/help-message/index.ts @@ -12,8 +12,7 @@ const { prId } = await yargs(hideBin(process.argv)) .parse(); export async function main() { - const { githubAppAppId, githubAppInstallationId, githubAppPrivateKey } = - parseCiEnv(process.env); + const { githubAppAppId, githubAppInstallationId, githubAppPrivateKey } = parseCiEnv(process.env); const githubClient = await GitHubClient.createWithGithubAppToken({ appId: githubAppAppId, @@ -66,4 +65,4 @@ function parseCiEnv(ciEnv: Record) { }; } -main(); +await main(); diff --git a/.github/scripts/load-secrets/env/load.ts b/.github/scripts/load-secrets/env/load.ts deleted file mode 100644 index fb611d3bf..000000000 --- a/.github/scripts/load-secrets/env/load.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { $ } from "bun"; - -type Opts = { - baseDir?: string; - mask_PLZ_DO_NOT_TURN_OFF_UNLESS_YOU_KNOW_WHAT_UR_DOING?: boolean; -}; - -let isGitCryptUnlocked = false; - -/** - * @param environments - List of environment files to load. - * @param baseDir - Directory of environment variable. - * @param mask_PLZ_DO_NOT_TURN_OFF_UNLESS_YOU_KNOW_WHAT_UR_DOING - Should variables be masked. Defaults to `true`. __NOTE: This will only work in a GitHub Action runner.__ - * - * @returns a map of the loaded environments as a key and value inside of a map. - * - * _Please note that duplicate environment variables will be overwritten, so - * the order in which you define `environments` does matter._ - */ -export async function getEnvVariables( - environments: string[], - opts?: Opts, -): Promise> { - const { - baseDir = "", - mask_PLZ_DO_NOT_TURN_OFF_UNLESS_YOU_KNOW_WHAT_UR_DOING = true, - } = opts ?? {}; - if (!isGitCryptUnlocked) { - await $`git-crypt unlock`.nothrow(); - isGitCryptUnlocked = true; - } - - const loaded = new Map(); - - for (const env of environments) { - const path = baseDir ? `${baseDir}/.env.${env}` : `.env.${env}`; - const envFile = Bun.file(path); - if (await envFile.exists()) { - console.log(`Loading ${envFile.name}`); - - const content = await envFile.text(); - const lines = content.split("\n").filter((s) => s.length > 0); - - for (const line of lines) { - const trimmed = line.trim(); - if (!trimmed || trimmed.startsWith("#")) continue; - - const match = trimmed.split("=").filter((s) => s.length > 0); - if (match.length === 2) { - const [key, value] = match as [string, string]; - const cleanKey = key.trim(); - let cleanValue = value.trim(); - if ( - (cleanValue.startsWith('"') && cleanValue.endsWith('"')) || - (cleanValue.startsWith("'") && cleanValue.endsWith("'")) - ) { - cleanValue = cleanValue.slice(1, -1); - } - - if (!loaded.has(cleanKey)) { - loaded.set(cleanKey, cleanValue); - } - } - } - } else { - console.warn(`Warning: ${envFile.name} not found`); - } - } - - if (mask_PLZ_DO_NOT_TURN_OFF_UNLESS_YOU_KNOW_WHAT_UR_DOING) { - for (const [varName, value] of loaded.entries()) { - if (value === "true" || value === "false" || value === "") { - console.log(`Not masking ${varName}: true/false/empty value`); - continue; - } - - console.log(`Masking ${varName}`); - console.log(`::add-mask::${value}`); - } - } - - return Object.fromEntries(loaded); -} - -/** - * @param prefix - Prefix to filter `envObject` keys by. - * @param envObject - Object to read variables from. Defaults to `process.env`. - * - * @returns a map of the matching variables, keyed without the `prefix`. - * - * _Please note that keys are stripped of `prefix` before being returned, so - * `PREFIX_FOO` becomes `FOO`._ - */ -export function getEnvVariablesByPrefix( - prefix: string, - envObject: Record = process.env, -): Record { - const result: Record = {}; - - for (const [key, value] of Object.entries(envObject)) { - if (key.startsWith(prefix) && value !== undefined) { - result[key.slice(prefix.length)] = value; - } - } - - return result; -} diff --git a/.github/scripts/load-secrets/index.ts b/.github/scripts/load-secrets/index.ts deleted file mode 100644 index 74e44b951..000000000 --- a/.github/scripts/load-secrets/index.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { getEnvVariables } from "load-secrets/env/load"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; - -const excludedVars = [ - "PATH", - "HOME", - "PWD", - "SHELL", - "USER", - "DEBUG", - "LOG_LEVEL", - "CI", - "JAVA_HOME", -]; - -const { envs, githubEnv } = await yargs(hideBin(process.argv)) - .option("envs", { - type: "string", - describe: "Env names (ex: prod,staging,dev)", - demandOption: true, - }) - .option("githubEnv", { - type: "string", - describe: "Path to GITHUB_ENV", - default: process.env.GITHUB_ENV, - }) - .strict() - .parse(); - -/** - * @deprecated this is no longer a supported flow. - */ -async function main() { - const formattedEnvs = envs - .split(",") - .map((e) => e.trim()) - .filter(Boolean); - - const loaded = await getEnvVariables(formattedEnvs, { - mask_PLZ_DO_NOT_TURN_OFF_UNLESS_YOU_KNOW_WHAT_UR_DOING: false, - }); - - if (!githubEnv) { - console.log("Warning: GITHUB_ENV not set, skipping variable export"); - return; - } - - const githubEnvFileWriter = Bun.file(githubEnv).writer(); - - for (const [varName, value] of Object.entries(loaded)) { - githubEnvFileWriter.write(`${varName}=${value}\n`); - if (excludedVars.includes(varName)) { - console.log(`Not masking ${varName}: Excluded`); - continue; - } - - if (value === "true" || value === "false" || value === "") { - console.log(`Not masking ${varName}: true/false/empty value`); - continue; - } - - console.log(`Masking ${varName}`); - console.log(`::add-mask::${value}`); - } - - githubEnvFileWriter.flush(); -} - -main() - .then(() => { - process.exit(0); - }) - .catch((e) => { - console.error(e); - process.exit(1); - }); diff --git a/.github/scripts/load-slash-commands/index.ts b/.github/scripts/load-slash-commands/index.ts index 5ba5cc842..b9dbf5561 100644 --- a/.github/scripts/load-slash-commands/index.ts +++ b/.github/scripts/load-slash-commands/index.ts @@ -1,3 +1,3 @@ -import { COMMANDS } from "load-slash-commands/commands"; +import { COMMANDS } from "@/load-slash-commands/commands"; console.log(COMMANDS.join("\n")); diff --git a/.github/scripts/notion/commits/index.ts b/.github/scripts/notion/commits/index.ts deleted file mode 100644 index 12bc8ec50..000000000 --- a/.github/scripts/notion/commits/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { $ } from "bun"; -import { sendMessage } from "utils/send-message"; - -export async function _checkCommits(taskId: number, prId: number) { - const taskIdString = taskId.toString(); - - const res = await $`gh pr view ${prId} --json commits`.text(); - const { commits } = JSON.parse(res) as { - commits?: { messageHeadline: string }[]; - }; - - if (!commits || commits.length === 0) { - console.log("No commits found in PR"); - return; - } - - const failedCommits = commits - .map((commit) => commit.messageHeadline) - .map((s) => s.trim()) - .filter((message) => !message.startsWith(taskIdString)); - - if (failedCommits.length == 0) { - console.log("All commits are valid"); - return; - } - - for (const message of failedCommits) { - console.warn(`Invalid commit: ${message}`); - } - - const failedList = failedCommits.join("\n"); - - await sendMessage( - prId, - ` -### Commit Validation Failed -The following commits do not start with the required Notion ID \`${taskIdString}\`: - -\`\`\` -${failedList} -\`\`\` - -Please rebase and update your commit messages. -All messages should be of the following format: \`${taskIdString}: Example commit\``.trim(), - ); - - console.error("One or more commits do not match the Notion ID."); - process.exit(1); -} diff --git a/.github/scripts/notion/index.ts b/.github/scripts/notion/index.ts deleted file mode 100644 index ce37f70eb..000000000 --- a/.github/scripts/notion/index.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { _checkCommits } from "notion/commits"; -import { checkNotionPrAndGetTask } from "notion/pr"; -import { _validateNotionTask } from "notion/pr/validate-ticket"; -import { getNotionClient } from "notion/sdk"; -import { _updateNotionTaskWithPrLink } from "notion/task"; -import { updatePrDescriptionWithTicket } from "utils/update-pr-description"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; - -export * from "./pr"; - -const { - prId, - getGhaOutput, - githubOutput: githubOutputFile, - validateTicket, -} = await yargs(hideBin(process.argv)) - .option("prId", { - type: "number", - describe: "Pull request number", - demandOption: true, - }) - .option("getGhaOutput", { - type: "boolean", - describe: "Enable GitHub Actions output", - default: false, - }) - .option("githubOutput", { - type: "string", - describe: "Path to GITHUB_OUTPUT", - default: process.env.GITHUB_OUTPUT, - }) - .option("validateTicket", { - type: "boolean", - describe: "Validate ticket fields", - default: true, - }) - .strict() - .parse(); - -async function main() { - console.log(`GET_GHA_OUTPUT=${getGhaOutput}`); - - const { notionDbId, notionSecret } = parseCiEnv(process.env); - const client = getNotionClient(notionSecret); - - const { taskId, taskContent, task, taskPublicUrl } = - await checkNotionPrAndGetTask(client, prId, notionDbId); - - console.log(taskContent); - - if (validateTicket) { - await _validateNotionTask(task, taskContent, prId); - } - - await _checkCommits(taskId, prId); - - await _updateNotionTaskWithPrLink(client, task, taskId, prId); - if (taskPublicUrl) { - await updatePrDescriptionWithTicket(taskPublicUrl, taskId, prId); - } - - if (getGhaOutput && githubOutputFile) { - console.log("Outputting Notion context..."); - const w = Bun.file(githubOutputFile).writer(); - await w.write(`context<) { - const notionDbId = (() => { - const v = ciEnv["NOTION_TASK_DB_ID"]; - if (!v) { - throw new Error("Missing NOTION_TASK_DB_ID from .env.ci"); - } - return v; - })(); - - const notionSecret = (() => { - const v = ciEnv["NOTION_SECRET"]; - if (!v) { - throw new Error("Missing NOTION_SECRET from .env.ci"); - } - return v; - })(); - - return { - notionDbId, - notionSecret, - }; -} - -main() - .then(() => { - process.exit(0); - }) - .catch((e) => { - console.error(e); - process.exit(1); - }); diff --git a/.github/scripts/notion/pr/index.ts b/.github/scripts/notion/pr/index.ts deleted file mode 100644 index 976e3e0db..000000000 --- a/.github/scripts/notion/pr/index.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { NotionTaskObject } from "notion/pr/types"; - -import { Client, isFullPage } from "@notionhq/client"; -import { $ } from "bun"; -import { _fetchBlocks } from "notion/pr/utils"; -import { sendMessage } from "utils/send-message"; - -import { _getNotionTaskById } from "../task"; - -export async function checkNotionPrAndGetTask( - client: Client, - prId: number, - notionDbId: string, -): Promise { - const title = await (async () => { - const res = await $`gh pr view ${prId} --json title`.text(); - const json = JSON.parse(res) as { title?: string } | undefined; - - if (!json || !json.title) { - await sendMessage(prId, "Failed to parse Notion ID"); - process.exit(1); - } - - return json.title; - })(); - - const ticketNum = parseInt(title, 10); - - if (!Number.isNaN(ticketNum) && (ticketNum <= 0 || ticketNum > 999)) { - await sendMessage(prId, `No numeric prefix found in PR title: ${title}`); - process.exit(1); - } - - const task = await _getNotionTaskById(client, notionDbId, ticketNum); - - if (!isFullPage(task)) { - sendMessage(prId, "Notion task is not expected page type"); - process.exit(1); - } - - const blocks = await _fetchBlocks(client, task.id); - const taskContent = blocks.join("\n"); - - return { - task, - taskContent, - taskId: ticketNum, - taskPublicUrl: task.public_url, - }; -} diff --git a/.github/scripts/notion/pr/types.ts b/.github/scripts/notion/pr/types.ts deleted file mode 100644 index 9b5b8a3c3..000000000 --- a/.github/scripts/notion/pr/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { type PageObjectResponse } from "@notionhq/client"; - -export type NotionTaskObject = { - task: PageObjectResponse; - taskContent: string; - taskId: number; - taskPublicUrl: string | null; -}; diff --git a/.github/scripts/notion/pr/utils.ts b/.github/scripts/notion/pr/utils.ts deleted file mode 100644 index 9c51134b7..000000000 --- a/.github/scripts/notion/pr/utils.ts +++ /dev/null @@ -1,90 +0,0 @@ -import type { - BlockObjectResponse, - RichTextItemResponse, -} from "@notionhq/client/build/src/api-endpoints"; - -import { isFullBlock, type Client } from "@notionhq/client"; - -export async function _fetchBlocks( - client: Client, - blockId: string, - indent = "", -): Promise { - const response = await client.blocks.children.list({ - block_id: blockId, - }); - - console.log(response); - - const lines: string[] = []; - - for (const block of response.results) { - if (!isFullBlock(block)) continue; - - const markdown = blockToMarkdown(block, indent); - - if (markdown) { - lines.push(markdown); - } - - if (block.has_children) { - const childLines = await _fetchBlocks(client, block.id, indent + " "); - lines.push(...childLines); - } - } - - return lines; -} - -function extractPlainText(richText: RichTextItemResponse[]): string { - return richText.map((item) => item.plain_text).join(""); -} - -function blockToMarkdown(block: BlockObjectResponse, indent: string): string { - switch (block.type) { - case "paragraph": - return indent + extractPlainText(block.paragraph.rich_text); - - case "bulleted_list_item": - return ( - indent + "- " + extractPlainText(block.bulleted_list_item.rich_text) - ); - - case "numbered_list_item": - return ( - indent + "1. " + extractPlainText(block.numbered_list_item.rich_text) - ); - - case "heading_1": - return indent + "# " + extractPlainText(block.heading_1.rich_text); - - case "heading_2": - return indent + "## " + extractPlainText(block.heading_2.rich_text); - - case "heading_3": - return indent + "### " + extractPlainText(block.heading_3.rich_text); - - case "quote": - return indent + "> " + extractPlainText(block.quote.rich_text); - - case "to_do": { - const checked = block.to_do.checked ? "[x]" : "[ ]"; - return indent + checked + " " + extractPlainText(block.to_do.rich_text); - } - - case "toggle": - return indent + extractPlainText(block.toggle.rich_text); - - case "callout": - return indent + extractPlainText(block.callout.rich_text); - - case "code": { - const language = block.code.language || ""; - const code = extractPlainText(block.code.rich_text); - return `${indent}\`\`\`${language}\n${code}\n${indent}\`\`\``; - } - - default: - return ""; - } -} diff --git a/.github/scripts/notion/pr/validate-ticket.ts b/.github/scripts/notion/pr/validate-ticket.ts deleted file mode 100644 index 83c7a80c3..000000000 --- a/.github/scripts/notion/pr/validate-ticket.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { PageObjectResponse } from "@notionhq/client"; - -import { sendMessage } from "utils/send-message"; - -export async function _validateNotionTask( - task: PageObjectResponse, - taskContent: string, - prId: number, -): Promise { - const errors: string[] = []; - - if (!/\bAC\b/.test(taskContent)) { - errors.push( - "Acceptance Criteria (AC) is not provided in the ticket description.", - ); - } - - const assigneeProperty = task.properties["Assignee"]; - if ( - !assigneeProperty || - assigneeProperty.type !== "people" || - assigneeProperty.people.length === 0 - ) { - errors.push("Ticket does not have an assignee."); - } - - const featureProperty = task.properties["Feature"]; - if ( - !featureProperty || - featureProperty.type !== "relation" || - featureProperty.relation.length === 0 - ) { - errors.push("Ticket does not have a feature assigned."); - } - - const priorityProperty = task.properties["Priority"]; - if ( - !priorityProperty || - priorityProperty.type !== "select" || - !priorityProperty.select - ) { - errors.push("Ticket does not have a priority defined."); - } - - if (errors.length > 0) { - const message = `## Ticket Validation Failed\n\nThe following issues were found with the attached ticket:\n\n${errors.map((e) => `- ${e}`).join("\n")}`; - await sendMessage(prId, message); - const errorList = errors.map((e) => ` - ${e}`).join("\n"); - console.error( - `Ticket validation failed with ${errors.length} error(s):\n${errorList}`, - ); - process.exit(1); - } -} diff --git a/.github/scripts/notion/sdk.ts b/.github/scripts/notion/sdk.ts deleted file mode 100644 index 7738dcc8a..000000000 --- a/.github/scripts/notion/sdk.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Client } from "@notionhq/client"; - -export function getNotionClient(notionPat: string): Client { - return new Client({ - auth: notionPat, - }); -} diff --git a/.github/scripts/notion/task/index.ts b/.github/scripts/notion/task/index.ts deleted file mode 100644 index 9dcd8aa8a..000000000 --- a/.github/scripts/notion/task/index.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { Client, type PageObjectResponse } from "@notionhq/client"; - -export async function _getNotionTaskById( - client: Client, - dbId: string, - id: number, -) { - try { - const { results } = await client.dataSources.query({ - filter: { - property: "ID", - unique_id: { - equals: id, - }, - }, - data_source_id: dbId, - }); - - const ticket = results[0]; - - if (!ticket) { - throw new Error("Ticket with ID does not exist."); - } - - return ticket; - } catch (e) { - console.error("Ticket cannot be retrieved\n", e); - process.exit(-100); - } -} - -export async function _updateNotionTaskWithPrLink( - client: Client, - page: PageObjectResponse, - taskId: number, - prId: number, -) { - const PR_KEY = "PRs (AUTO)"; - - try { - const prField = page.properties[PR_KEY]; - - if (prField?.type !== "rich_text") { - throw new Error("PR Field is not of rich_text type"); - } - - const prLink = `https://github.com/tahminator/codebloom/pull/${prId}`; - - if (prField.rich_text.find((r) => r.plain_text === prLink)) { - console.log("PR ID is already inside of Notion task, skipping update..."); - return; - } - - // if there already is a url in there, add \n - if (prField.rich_text.length) { - prField.rich_text.push({ - type: "text", - text: { - content: "\n", - link: null, - }, - plain_text: "\n", - href: null, - annotations: { - bold: false, - italic: false, - strikethrough: false, - underline: false, - code: false, - color: "default", - }, - }); - } - - prField.rich_text.push({ - type: "text", - text: { - content: prLink, - link: null, - }, - plain_text: prLink, - href: null, - annotations: { - bold: false, - italic: false, - strikethrough: false, - underline: false, - code: false, - color: "default", - }, - }); - - await client.pages.update({ - page_id: page.id, - properties: { - [PR_KEY]: { - type: "rich_text", - rich_text: [ - ...prField.rich_text.map((r) => ({ - type: "text" as const, - text: { - content: r.plain_text, - }, - })), - ], - }, - }, - }); - } catch (e) { - console.error("failed to update notion task with pr link", e); - process.exit(1); - } -} diff --git a/.github/scripts/oxfmt.config.ts b/.github/scripts/oxfmt.config.ts new file mode 100644 index 000000000..762829bb5 --- /dev/null +++ b/.github/scripts/oxfmt.config.ts @@ -0,0 +1,6 @@ +import shared from "@Patina-Network/cicd-config/oxfmt"; +import { defineConfig } from "oxfmt"; + +export default defineConfig({ + ...shared, +}); diff --git a/.github/scripts/oxlint.config.ts b/.github/scripts/oxlint.config.ts new file mode 100644 index 000000000..9e3db699d --- /dev/null +++ b/.github/scripts/oxlint.config.ts @@ -0,0 +1,6 @@ +import shared from "@Patina-Network/cicd-config/oxlint"; +import { defineConfig } from "oxlint"; + +export default defineConfig({ + ...shared, +}); diff --git a/.github/scripts/package.json b/.github/scripts/package.json index d53a1a778..c1fe80c7a 100644 --- a/.github/scripts/package.json +++ b/.github/scripts/package.json @@ -1,47 +1,37 @@ { "name": "scripts", "version": "1.0.0", - "type": "module", "description": "CodeBloom CI Scripts", - "scripts": { - "coolify-lib-hack": "find node_modules/coolify -type f -name '*.ts' -exec sh -c 'echo \"// @ts-nocheck\" > /tmp/file.tmp && cat \"$1\" >> /tmp/file.tmp && mv /tmp/file.tmp \"$1\"' _ {} \\;", - "typecheck": "bun run coolify-lib-hack && tsc --noEmit", - "test": "bun run typecheck && bun run prettier && bun run lint", - "fix": "bun run eslint:fix && bun run prettier:fix", - "lint": "bun run eslint", - "eslint": "eslint .", - "eslint:fix": "eslint . --fix", - "prettier": "prettier --check .", - "prettier:fix": "prettier --write ." - }, "keywords": [], - "author": "Tahmid Ahmed", "license": "MIT", + "author": "Tahmid Ahmed", + "type": "module", + "scripts": { + "typecheck": "tsc --noEmit", + "test": "bun run typecheck && bun run fmt && bun run lint", + "fix": "bun run lint:fix && bun run fmt:fix", + "lint": "oxlint .", + "lint:fix": "oxlint . --fix", + "fmt": "oxfmt --check .", + "fmt:fix": "oxfmt --write ." + }, "dependencies": { "@actions/artifact": "^5.0.2", - "@digitalocean/dots": "^1.7.0", - "@notionhq/client": "^5.7.0", "@octokit/rest": "^22.0.1", - "@tahminator/pipeline": "1.0.90", + "@tahminator/pipeline": "1.0.97", "@types/yargs": "^17.0.35", "bun": "^1.3.6", - "coolify": "https://github.com/tahminator/Coolify-TypeScript-SDK#8e19e18635ea2b095a9c39c574d22eefd938441f", "discord.js": "^14.25.1", "octokit": "^5.0.5", "yargs": "^18.0.0", "zod": "^4.3.6" }, "devDependencies": { - "typescript": "^5.9.0", - "@eslint/js": "^9.39.2", - "@types/bun": "^1.3.6", - "prettier": "^3.8.0", - "eslint-plugin-no-relative-import-paths": "^1.6.1", - "eslint-plugin-perfectionist": "^5.3.1", - "global": "^4.4.0", - "typescript-eslint": "^8.53.0" - }, - "patchedDependencies": { - "@digitalocean/dots@1.7.0": "patches/@digitalocean%2Fdots@1.7.0.patch" + "@Patina-Network/cicd-config": "github:Patina-Network/cicd-config#a54b3e5d8b373be5254ce1cec44cfabdec1d5189", + "@types/bun": "^1.4.2", + "oxfmt": "^0.72.0", + "oxlint": "^1.87.0", + "oxlint-tsgolint": "^7.0.2003", + "typescript": "7" } } diff --git a/.github/scripts/patches/@digitalocean%2Fdots@1.7.0.patch b/.github/scripts/patches/@digitalocean%2Fdots@1.7.0.patch deleted file mode 100644 index 9fb997bef..000000000 --- a/.github/scripts/patches/@digitalocean%2Fdots@1.7.0.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/dots/DigitalOceanApiKeyAuthenticationProvider.ts b/src/dots/DigitalOceanApiKeyAuthenticationProvider.ts -index ebd662ad7442248526661a2db584bced62d00406..563d2cdbd689b12eb223c97c274f871919c39b6b 100644 ---- a/src/dots/DigitalOceanApiKeyAuthenticationProvider.ts -+++ b/src/dots/DigitalOceanApiKeyAuthenticationProvider.ts -@@ -1,6 +1,5 @@ --import { AuthenticationProvider, RequestInformation } from "@microsoft/kiota-abstractions"; --// @ts-expect-error: Importing JSON for dynamic version in User-Agent header --import pkg from '../../package.json' assert { type: "json" }; -+import { type AuthenticationProvider, RequestInformation } from "@microsoft/kiota-abstractions"; -+import pkg from '../../package.json' with { type: "json" }; - - /** Authenticate a request by using an API Key */ - export class DigitalOceanApiKeyAuthenticationProvider implements AuthenticationProvider { diff --git a/.github/scripts/pr-description-check/index.ts b/.github/scripts/pr-description-check/index.ts index c519ee6c3..e68e195a8 100644 --- a/.github/scripts/pr-description-check/index.ts +++ b/.github/scripts/pr-description-check/index.ts @@ -1,8 +1,9 @@ import { Octokit } from "@octokit/rest"; -import { sendMessage } from "utils/send-message"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; +import { sendMessage } from "@/utils/send-message"; + const { prId } = await yargs(hideBin(process.argv)) .option("prId", { type: "number", @@ -28,9 +29,7 @@ async function main() { const { body } = data; const descriptionContent = (() => { - const match = (body ?? "").match( - /## Description of changes([\s\S]*?)(?=\n##|$)/, - ); + const match = (body ?? "").match(/## Description of changes([\s\S]*?)(?=\n##|$)/); return (match?.[1] ?? "").trim(); })(); diff --git a/.github/scripts/redeploy/db/index.ts b/.github/scripts/redeploy/db/index.ts index 508d342a1..ff273beda 100644 --- a/.github/scripts/redeploy/db/index.ts +++ b/.github/scripts/redeploy/db/index.ts @@ -1,8 +1,9 @@ import { GitHubClient } from "@tahminator/pipeline"; -import { _migrateDb } from "redeploy/db/util"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; +import { _migrateDb } from "@/redeploy/db/util"; + const { runUrl, sha, username } = await yargs(hideBin(process.argv)) .option("runUrl", { type: "string", @@ -23,8 +24,7 @@ const { runUrl, sha, username } = await yargs(hideBin(process.argv)) .parse(); export async function main() { - const { githubAppAppId, githubAppInstallationId, githubAppPrivateKey } = - parseCiEnv(process.env); + const { githubAppAppId, githubAppInstallationId, githubAppPrivateKey } = parseCiEnv(process.env); const ghClient = await GitHubClient.createWithGithubAppToken({ appId: githubAppAppId, @@ -42,8 +42,7 @@ export async function main() { detailsUrl: runUrl, output: { title: "Checking authorization", - summary: - "Verifying the caller's membership in @Patina-Network/codebloom...", + summary: "Verifying the caller's membership in @Patina-Network/codebloom...", }, }); if (!check) { @@ -59,7 +58,7 @@ export async function main() { try { const isTeamMember = await ghClient.isTeamMember({ org: "Patina-Network", - teamSlug: "codebloom", + teamSlug: "dino", username, }); if (!isTeamMember) { @@ -73,8 +72,7 @@ export async function main() { status: "in_progress", output: { title: "Running staging migrations", - summary: - "Checking database changes and applying pending migrations to codebloom-stg.", + summary: "Checking database changes and applying pending migrations to codebloom-stg.", }, }); @@ -84,12 +82,11 @@ export async function main() { status: "completed", conclusion: result, output: { - title: - result === "skipped" ? "Migration skipped" : "Migration successful", + title: result === "skipped" ? "Migration skipped" : "Migration successful", summary: - result === "skipped" ? - "No changes under db/ were found when compared with main." - : "Staging database migrations completed successfully.", + result === "skipped" + ? "No changes under db/ were found when compared with main." + : "Staging database migrations completed successfully.", }, }); } catch (error) { @@ -100,8 +97,7 @@ export async function main() { conclusion: "failure", output: { title: "Staging migration failed", - summary: - "Staging migration failed. See the workflow logs for details.", + summary: "Staging migration failed. See the workflow logs for details.", }, }) .catch((statusError) => { diff --git a/.github/scripts/redeploy/db/util.ts b/.github/scripts/redeploy/db/util.ts index e278b810c..155b5ec9b 100644 --- a/.github/scripts/redeploy/db/util.ts +++ b/.github/scripts/redeploy/db/util.ts @@ -1,7 +1,8 @@ -import type { Environment } from "types"; - import { $ } from "bun"; -import { getEnvVariablesByPrefix } from "load-secrets/env/load"; + +import type { Environment } from "@/types"; + +import { getEnvVariablesByPrefix } from "@/utils/env"; export async function _migrateDb({ environment, @@ -23,8 +24,7 @@ export async function _migrateDb({ } const migratorEnv = getEnvVariablesByPrefix("DB_MIGRATIOR_"); - const DATABASE_NAME = - environment === "production" ? "codebloom-prod" : "codebloom-stg"; + const DATABASE_NAME = environment === "production" ? "codebloom-prod" : "codebloom-stg"; await $.env({ ...migratorEnv, diff --git a/.github/scripts/redeploy/index.ts b/.github/scripts/redeploy/index.ts index 141a3fd02..35e47366c 100644 --- a/.github/scripts/redeploy/index.ts +++ b/.github/scripts/redeploy/index.ts @@ -1,10 +1,11 @@ -import type { Environment, Type } from "types"; - import { GitHubClient } from "@tahminator/pipeline"; -import { _migrateDb } from "redeploy/db/util"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; +import type { Environment, Type } from "@/types"; + +import { _migrateDb } from "@/redeploy/db/util"; + const { environment, sha, type } = await yargs(hideBin(process.argv)) .option("environment", { choices: ["staging", "production"] satisfies Environment[], @@ -28,8 +29,7 @@ const { environment, sha, type } = await yargs(hideBin(process.argv)) async function main() { const resolvedSha = resolveSha(sha, process.env.GITHUB_SHA); - const { githubAppAppId, githubAppInstallationId, githubAppPrivateKey } = - parseCiEnv(process.env); + const { githubAppAppId, githubAppInstallationId, githubAppPrivateKey } = parseCiEnv(process.env); const ghClient = await GitHubClient.createWithGithubAppToken({ appId: githubAppAppId, diff --git a/.github/scripts/test/run-backend-tests.ts b/.github/scripts/test/run-backend-tests.ts index 7991b4299..9ea0372b0 100644 --- a/.github/scripts/test/run-backend-tests.ts +++ b/.github/scripts/test/run-backend-tests.ts @@ -1,12 +1,13 @@ import { $ } from "bun"; -import { getEnvVariablesByPrefix } from "load-secrets/env/load"; -import { backend } from "utils/run-backend-instance"; -import { frontend } from "utils/run-frontend-instance"; -import { db } from "utils/run-local-db"; -import { uploadBackendTests } from "utils/upload"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; +import { getEnvVariablesByPrefix } from "@/utils/env"; +import { backend } from "@/utils/run-backend-instance"; +import { frontend } from "@/utils/run-frontend-instance"; +import { db } from "@/utils/run-local-db"; +import { uploadBackendTests } from "@/utils/upload"; + const { shouldUploadCoverage } = await yargs(hideBin(process.argv)) .option("shouldUploadCoverage", { type: "boolean", diff --git a/.github/scripts/test/run-e2e-tests.ts b/.github/scripts/test/run-e2e-tests.ts index 41523fd4b..0c54ffa48 100644 --- a/.github/scripts/test/run-e2e-tests.ts +++ b/.github/scripts/test/run-e2e-tests.ts @@ -1,11 +1,12 @@ import { $ } from "bun"; -import { getEnvVariablesByPrefix } from "load-secrets/env/load"; -import { sendDiscordMessage } from "utils/discord/send-message"; -import { backend } from "utils/run-backend-instance"; -import { db } from "utils/run-local-db"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; +import { sendDiscordMessage } from "@/utils/discord/send-message"; +import { getEnvVariablesByPrefix } from "@/utils/env"; +import { backend } from "@/utils/run-backend-instance"; +import { db } from "@/utils/run-local-db"; + const { actionUrl, skipDiscordMessage } = await yargs(hideBin(process.argv)) .option("actionUrl", { type: "string", diff --git a/.github/scripts/test/run-frontend-pre-tests.ts b/.github/scripts/test/run-frontend-pre-tests.ts index b17d11731..9308076c9 100644 --- a/.github/scripts/test/run-frontend-pre-tests.ts +++ b/.github/scripts/test/run-frontend-pre-tests.ts @@ -1,7 +1,8 @@ import { $ } from "bun"; -import { getEnvVariablesByPrefix } from "load-secrets/env/load"; -import { backend } from "utils/run-backend-instance"; -import { db } from "utils/run-local-db"; + +import { getEnvVariablesByPrefix } from "@/utils/env"; +import { backend } from "@/utils/run-backend-instance"; +import { db } from "@/utils/run-local-db"; async function main() { const ciAppEnv = getEnvVariablesByPrefix("CI_APP_"); diff --git a/.github/scripts/test/run-frontend-tests.ts b/.github/scripts/test/run-frontend-tests.ts index af8ad3779..b86baf2bd 100644 --- a/.github/scripts/test/run-frontend-tests.ts +++ b/.github/scripts/test/run-frontend-tests.ts @@ -1,11 +1,12 @@ import { $ } from "bun"; -import { getEnvVariablesByPrefix } from "load-secrets/env/load"; -import { backend } from "utils/run-backend-instance"; -import { db } from "utils/run-local-db"; -import { uploadFrontendTests } from "utils/upload"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; +import { getEnvVariablesByPrefix } from "@/utils/env"; +import { backend } from "@/utils/run-backend-instance"; +import { db } from "@/utils/run-local-db"; +import { uploadFrontendTests } from "@/utils/upload"; + const { shouldUploadCoverage } = await yargs(hideBin(process.argv)) .option("shouldUploadCoverage", { type: "boolean", diff --git a/.github/scripts/tsconfig.json b/.github/scripts/tsconfig.json index 82f5612a8..0f200dfaa 100644 --- a/.github/scripts/tsconfig.json +++ b/.github/scripts/tsconfig.json @@ -1,30 +1,10 @@ { + "extends": "@Patina-Network/cicd-config/tsconfig", "compilerOptions": { - // Environment setup & latest features - "lib": ["ESNext"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "jsx": "react-jsx", - "allowJs": true, - - // Bundler mode - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - - // Best practices - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - - // Some stricter flags (disabled by default) - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false, - "baseUrl": "./" - } + "paths": { + "@/*": ["./*"] + } + }, + "include": ["**/*.ts"], + "exclude": ["node_modules"] } diff --git a/.github/scripts/utils/env.ts b/.github/scripts/utils/env.ts new file mode 100644 index 000000000..1ce475769 --- /dev/null +++ b/.github/scripts/utils/env.ts @@ -0,0 +1,15 @@ +/** Return defined environment variables matching a prefix, with the prefix removed. */ +export function getEnvVariablesByPrefix( + prefix: string, + envObject: Record = process.env, +): Record { + const result: Record = {}; + + for (const [key, value] of Object.entries(envObject)) { + if (key.startsWith(prefix) && value !== undefined) { + result[key.slice(prefix.length)] = value; + } + } + + return result; +} diff --git a/.github/scripts/utils/run-backend-instance.ts b/.github/scripts/utils/run-backend-instance.ts index c71fc2bfd..2e1ffa6ca 100644 --- a/.github/scripts/utils/run-backend-instance.ts +++ b/.github/scripts/utils/run-backend-instance.ts @@ -1,6 +1,6 @@ import { $ } from "bun"; -import { cyan } from "@/../utils/colors"; +import { cyan } from "@/utils/colors"; let be: Bun.Subprocess<"ignore", Bun.BunFile, "inherit"> | undefined; @@ -13,19 +13,10 @@ async function start(env: Record) { console.log(`JAVA_HOME=${process.env.JAVA_HOME}`); const logFile = Bun.file("backend.log"); - be = Bun.spawn( - [ - "./mvnw", - "-B", - "-ntp", - "-Dspring-boot.run.profiles=ci", - "spring-boot:run", - ], - { - env: { ...process.env, ...env }, - stdout: logFile, - }, - ); + be = Bun.spawn(["./mvnw", "-B", "-ntp", "-Dspring-boot.run.profiles=ci", "spring-boot:run"], { + env: { ...process.env, ...env }, + stdout: logFile, + }); console.log("Waiting for backend to become ready."); @@ -59,7 +50,7 @@ async function start(env: Record) { console.log("backend ready"); } catch (e) { console.error(e); - end(); + await end(); } } @@ -74,9 +65,7 @@ async function end() { ]); if (!exitedInTime) { - console.warn( - "Backend did not exit after SIGTERM within 5s, sending SIGKILL...", - ); + console.warn("Backend did not exit after SIGTERM within 5s, sending SIGKILL..."); be.kill("SIGKILL"); await be.exited; } diff --git a/.github/scripts/utils/run-frontend-instance.ts b/.github/scripts/utils/run-frontend-instance.ts index be480ec5c..e8815960d 100644 --- a/.github/scripts/utils/run-frontend-instance.ts +++ b/.github/scripts/utils/run-frontend-instance.ts @@ -1,5 +1,6 @@ import { $ } from "bun"; -import { pink } from "utils/colors"; + +import { pink } from "@/utils/colors"; let fe: Bun.Subprocess<"ignore", Bun.BunFile, "inherit"> | undefined; @@ -47,7 +48,7 @@ async function start(env: Record) { console.log("frontend ready"); } catch (e) { console.error(e); - end(); + await end(); } } diff --git a/.github/scripts/utils/run-local-db.ts b/.github/scripts/utils/run-local-db.ts index 5bd056b6f..aa637f901 100644 --- a/.github/scripts/utils/run-local-db.ts +++ b/.github/scripts/utils/run-local-db.ts @@ -1,6 +1,6 @@ import { $ } from "bun"; -import { brightMagenta } from "@/../utils/colors"; +import { brightMagenta } from "@/utils/colors"; async function start() { try { @@ -22,9 +22,7 @@ async function start() { const attempts = 30; for (let i = 1; i <= attempts; i++) { - const check = await $`docker exec codebloom-db pg_isready -U postgres` - .quiet() - .nothrow(); + const check = await $`docker exec codebloom-db pg_isready -U postgres`.quiet().nothrow(); if (check.exitCode === 0) { console.log("postgres is ready!"); @@ -52,16 +50,14 @@ async function start() { console.log("postres started, running migrations..."); - await $.env( - env, - )`./mvnw -B -ntp flyway:migrate -Dflyway.locations=filesystem:./db`; + await $.env(env)`./mvnw -B -ntp flyway:migrate -Dflyway.locations=filesystem:./db`; console.log("postgres ready"); return env; } catch (e) { console.error(e); - end(); + await end(); } } diff --git a/.github/scripts/utils/send-message/gha.ts b/.github/scripts/utils/send-message/gha.ts index 5b41e015f..28f3be5b1 100644 --- a/.github/scripts/utils/send-message/gha.ts +++ b/.github/scripts/utils/send-message/gha.ts @@ -1,4 +1,4 @@ -import { sendMessage } from "utils/send-message"; +import { sendMessage } from "@/utils/send-message"; const prId = (() => { const v = process.env.PR_ID; diff --git a/.github/scripts/utils/send-message/index.ts b/.github/scripts/utils/send-message/index.ts index 8db2db5e3..7298842aa 100644 --- a/.github/scripts/utils/send-message/index.ts +++ b/.github/scripts/utils/send-message/index.ts @@ -13,11 +13,7 @@ const [owner, repo] = (() => { return v.split("/") as [string, string]; })(); -export async function sendMessage( - prId: number, - message: string, - token?: string, -) { +export async function sendMessage(prId: number, message: string, token?: string) { try { if (!token && !githubToken) { throw new Error("Some token should be set"); @@ -36,7 +32,7 @@ export async function sendMessage( }); } catch (e) { const s = JSON.stringify(e); - throw new Error(`GitHub API Error\n\n${s}`); + throw new Error(`GitHub API Error\n\n${s}`, { cause: e }); } } catch (e) { console.error("Failed to post GitHub error message\n", e); diff --git a/.github/scripts/utils/update-commit-status/index.ts b/.github/scripts/utils/update-commit-status/index.ts deleted file mode 100644 index da20724b4..000000000 --- a/.github/scripts/utils/update-commit-status/index.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Octokit } from "@octokit/rest"; - -const githubToken = (() => { - const v = process.env.GH_TOKEN; - return v; -})(); - -const [owner, repo] = (() => { - const v = process.env.GITHUB_REPOSITORY; - if (!v) { - throw new Error("GITHUB_REPOSITORY is required"); - } - return v.split("/") as [string, string]; -})(); - -type CommitState = "error" | "failure" | "pending" | "success"; - -interface Options { - sha: string; - state: CommitState; - description?: string; - targetUrl?: string; - context?: string; -} -export async function updateCommitStatus(options: Options) { - const { sha, state, description, targetUrl, context } = options; - - try { - if (!githubToken) { - throw new Error("Some token should be set"); - } - const client = new Octokit({ - auth: githubToken, - }); - try { - await client.rest.repos.createCommitStatus({ - owner, - repo, - sha, - state, - target_url: targetUrl, - context: context, - description: description, - }); - } catch (e) { - const s = JSON.stringify(e); - throw new Error(`GitHub API Error\n\n${s}`); - } - } catch (e) { - console.error("Failed\n", e); - process.exit(1); - } -} diff --git a/.github/scripts/utils/update-pr-description.ts b/.github/scripts/utils/update-pr-description.ts index 47352e40c..e9219c352 100644 --- a/.github/scripts/utils/update-pr-description.ts +++ b/.github/scripts/utils/update-pr-description.ts @@ -38,7 +38,7 @@ export async function updatePrDescriptionWithTicket( body = pr.data.body; } catch (e) { const s = JSON.stringify(e); - throw new Error(`GitHub API Error\n\n${s}`); + throw new Error(`GitHub API Error\n\n${s}`, { cause: e }); } const newBody = (() => { @@ -66,7 +66,7 @@ export async function updatePrDescriptionWithTicket( }); } catch (e) { const s = JSON.stringify(e); - throw new Error(`GitHub API Error\n\n${s}`); + throw new Error(`GitHub API Error\n\n${s}`, { cause: e }); } } catch (e) { console.error("failed to update pr description with ticket", e); diff --git a/.github/scripts/utils/upload.ts b/.github/scripts/utils/upload.ts index c03b2e3ce..555726986 100644 --- a/.github/scripts/utils/upload.ts +++ b/.github/scripts/utils/upload.ts @@ -1,14 +1,14 @@ -import type { Location } from "types"; - import { DefaultArtifactClient } from "@actions/artifact"; import { $ } from "bun"; import path from "node:path"; +import type { Location } from "@/types"; + import { backendExclusions, frontendExclusions } from "../../../exclusions"; const getDir = (loc: Location) => { - return loc === "frontend" ? - path.join(process.cwd(), "js/coverage/") + return loc === "frontend" + ? path.join(process.cwd(), "js/coverage/") : path.join(process.cwd(), "target/site/jacoco/"); }; @@ -56,17 +56,8 @@ async function _uploadToCodecov(token: string, loc: Location) { } try { - console.log( - `Uploading reports from ${dir} to Codecov with flag: ${loc}...`, - ); - const p2 = Bun.spawnSync([ - "./codecov", - "do-upload", - "--dir", - dir, - "--flag", - loc, - ]); + console.log(`Uploading reports from ${dir} to Codecov with flag: ${loc}...`); + const p2 = Bun.spawnSync(["./codecov", "do-upload", "--dir", dir, "--flag", loc]); if (p2.exitCode != 0) { throw new Error(`Failed to load Codecov process\n\n${p2.stderr}`); } @@ -106,9 +97,7 @@ async function uploadToSonar(token: string, loc: Location) { if (loc === "backend") { args.push("-Dsonar.java.binaries=target/classes"); - args.push( - "-Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml", - ); + args.push("-Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml"); if (backendExclusions.length) { args.push(`-Dsonar.coverage.exclusions=${backendExclusions}`); } @@ -135,11 +124,7 @@ async function uploadArtifact(artifactName: string, loc: Location) { const dir = getDir(loc); const client = new DefaultArtifactClient(); - const { id, size } = await client.uploadArtifact( - artifactName, - [dir], - process.cwd(), - ); + const { id, size } = await client.uploadArtifact(artifactName, [dir], process.cwd()); console.log(`Artifact ID ${id} uploaded (Size: ${size} bytes)`); } diff --git a/.github/scripts/validate-db/index.ts b/.github/scripts/validate-db/index.ts index 1fe98e1c0..eabbaacfc 100644 --- a/.github/scripts/validate-db/index.ts +++ b/.github/scripts/validate-db/index.ts @@ -1,10 +1,11 @@ -import type { Environment } from "types"; - import { $ } from "bun"; -import { getEnvVariablesByPrefix } from "load-secrets/env/load"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; +import type { Environment } from "@/types"; + +import { getEnvVariablesByPrefix } from "@/utils/env"; + const { environment, sha } = await yargs(hideBin(process.argv)) .option("environment", { choices: ["staging", "production"] satisfies Environment[], @@ -44,12 +45,12 @@ export async function main() { } const appEnv = - environment === "staging" ? - getEnvVariablesByPrefix("STAGING_DB_MIGRATIOR_") - : { - ...getEnvVariablesByPrefix("DB_MIGRATIOR_"), - DATABASE_NAME: "codebloom-prod", - }; + environment === "staging" + ? getEnvVariablesByPrefix("STAGING_DB_MIGRATIOR_") + : { + ...getEnvVariablesByPrefix("DB_MIGRATIOR_"), + DATABASE_NAME: "codebloom-prod", + }; await $.env({ ...process.env, diff --git a/.github/workflows/ai-command.yml b/.github/workflows/ai-command.yml deleted file mode 100644 index a96b0cd17..000000000 --- a/.github/workflows/ai-command.yml +++ /dev/null @@ -1,92 +0,0 @@ -name: AI Command Handler -run-name: Triggering AI review commands on PR #${{ inputs.prId }} - -concurrency: - group: ai-command-${{ github.event.inputs.prId }} - cancel-in-progress: true - -on: - workflow_dispatch: - inputs: - prId: - description: "PR to deploy" - required: true - repository: - description: "The repository from which the slash command was dispatched" - required: true - comment-id: - description: "The comment-id of the slash command" - required: true - author: - description: "The author that triggered this actions" - required: true - -permissions: - contents: read - pull-requests: write - -jobs: - getPRHead: - name: Get PR head SHA - runs-on: ubuntu-latest - outputs: - sha: ${{ steps.pr-head.outputs.result }} - steps: - - name: Get PR head SHA - id: pr-head - uses: actions/github-script@v8 - with: - result-encoding: string - script: | - const prId = ${{ inputs.prId }}; - const { data: pr } = await github.rest.pulls.get({ - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: parseInt(prId, 10) - }); - return pr.head.sha; - - triggerAiReview: - name: Trigger AI Review Commands - runs-on: ubuntu-latest - - needs: getPRHead - - steps: - - name: Checkout Repository - uses: actions/checkout@v6 - with: - ref: ${{ needs.getPRHead.outputs.sha }} - - - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 - with: - LINT_CI: true - SECRETS: ${{ toJSON(secrets) }} - - - name: Load secrets - uses: ./.github/composite/load-secrets - with: - SECRETS: ${{ toJSON(secrets) }} - UNLOAD_ENVIRONMENTS: ci - - - name: Post /review command - uses: ./.github/composite/send-message - with: - prId: ${{ inputs.prId }} - message: "/review" - token: ${{ env.GH_PAT }} - - - name: Post /describe command - uses: ./.github/composite/send-message - with: - prId: ${{ inputs.prId }} - message: "/describe" - token: ${{ env.GH_PAT }} - - - name: Post /improve command - uses: ./.github/composite/send-message - with: - prId: ${{ inputs.prId }} - message: "/improve" - token: ${{ env.GH_PAT }} diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml deleted file mode 100644 index 04d27a120..000000000 --- a/.github/workflows/ai-review.yml +++ /dev/null @@ -1,174 +0,0 @@ -name: AI Code Review -run-name: Running AI code review on ${{ github.actor }}'s branch - -on: - workflow_dispatch: - # Disabling this workflow for now, as it requires a paid Gemini Token. - # Graphite's AI review is also turned on, but doesn't take the notion ticket into the context. - -#on: -# pull_request: -# types: [opened, reopened, ready_for_review, synchronize] -# issue_comment: -# types: [created] - -permissions: - contents: write - issues: write - pull-requests: write - -concurrency: - group: pr-ai-${{ github.event.number || github.event.issue.number }}-${{ github.event.comment.body || 'pr' }} - cancel-in-progress: true - -jobs: - getPRHead: - name: Get PR head SHA - runs-on: ubuntu-latest - if: github.event_name == 'pull_request' || (github.event_name == 'issue_comment' && (github.event.comment.body == '/review' || github.event.comment.body == '/describe' || github.event.comment.body == '/improve')) - outputs: - sha: ${{ steps.pr-head.outputs.result }} - prId: ${{ github.event.number || github.event.issue.number }} - steps: - - name: Get PR head SHA - id: pr-head - uses: actions/github-script@v8 - with: - result-encoding: string - script: | - const prId = ${{ github.event.number || github.event.issue.number }}; - const { data: pr } = await github.rest.pulls.get({ - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: parseInt(prId, 10) - }); - return pr.head.sha; - - aiCodeReview: - name: Run AI Code Review on the PR - runs-on: ubuntu-latest - needs: getPRHead - - steps: - - name: Checkout Repository - uses: actions/checkout@v6 - with: - ref: ${{ needs.getPRHead.outputs.sha }} - - - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 - with: - LINT_CI: true - SECRETS: ${{ toJSON(secrets) }} - - - name: Load secrets - uses: ./.github/composite/load-secrets - with: - SECRETS: ${{ toJSON(secrets) }} - UNLOAD_ENVIRONMENTS: ci - - - name: Run composite workflow - uses: ./.github/composite/notion-checks - id: notion_check - with: - PR_ID: ${{ github.event.number || github.event.issue.number }} - SECRETS: ${{ toJSON(secrets) }} - GET_GHA_OUTPUT: "true" - VALIDATE_TICKET: "false" - - - name: Load STYLEGUIDE.md - id: styleguide - run: | - echo "context<> $GITHUB_OUTPUT - cat ./STYLEGUIDE.md >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - - - name: Qodo PR-Agent - uses: qodo-ai/pr-agent@main - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - config.model: "gemini/gemini-2.5-flash" - config.fallback_models: '["gemini/gemini-2.5-flash"]' - GOOGLE_AI_STUDIO.GEMINI_API_KEY: ${{ env.GEMINI_API_KEY }} - config.verbosity_level: "2" - pr_reviewer.extra_instructions: | - Review this PR in the context of the following Notion task: - ${{ steps.notion_check.outputs.context }} - - Additional review guidelines: - - Verify that the implementation matches the acceptance criteria from the Notion task - - Check for proper error handling and edge cases - - Ensure code follows existing patterns and architecture in the codebase - - Look for potential security vulnerabilities or data validation issues - - Verify that database migrations (if any) are reversible and safe - - Check for proper logging and monitoring considerations - - Ensure API endpoints follow RESTful conventions and existing API patterns - - Verify that environment variables and secrets are handled securely - - Check for potential performance bottlenecks or N+1 query issues - - Ensure proper test coverage for critical paths - - The repository follows strict style guidelines, so please use the listed items below to - ensure code quality & correctness. - ${{ steps.styleguide.outputs.context }} - pr_reviewer.persistent_comment: "false" - pr_reviewer.enable_review_labels_security: "false" - pr_reviewer.enable_review_labels_effort: "false" - pr_reviewer.final_update_message: "false" - pr_description.publish_description_as_comment: "true" - pr_description.extra_instructions: | - Below is some additional context for the PR from the connected Notion task: - ${{ steps.notion_check.outputs.context }} - - The repository follows strict style guidelines, so please use the listed items below to - ensure code quality & correctness. - ${{ steps.styleguide.outputs.context }} - pr_description.publish_description_as_comment_persistent: "false" - pr_description.publish_labels: "false" - pr_description.add_original_user_description: "false" - pr_code_suggestions.commitable_code_suggestions: "true" - pr_code_suggestions.dual_publishing_score_threshold: "-1" - pr_code_suggestions.focus_only_on_problems: "true" - pr_code_suggestions.enable_help_text: "false" - pr_code_suggestions.enable_chat_text: "false" - pr_code_suggestions.persistent_comment: "false" - pr_code_suggestions.max_history_len: "10" - pr_code_suggestions.publish_output_no_suggestions: "true" - pr_code_suggestions.extra_instructions: | - Scrutinize this PR in the context of the following Notion task: - ${{ steps.notion_check.outputs.context }} - - Additional review guidelines: - - Verify that the implementation matches the acceptance criteria from the Notion task - - Check for proper error handling and edge cases - - Ensure code follows existing patterns and architecture in the codebase - - Look for potential security vulnerabilities or data validation issues - - Verify that database migrations (if any) are reversible and safe - - Check for proper logging and monitoring considerations - - Ensure API endpoints follow RESTful conventions and existing API patterns - - Verify that environment variables and secrets are handled securely - - Check for potential performance bottlenecks or N+1 query issues - - Ensure proper test coverage for critical paths - - The repository follows strict style guidelines, so please use the listed items below to - ensure code quality & correctness. - ${{ steps.styleguide.outputs.context }} - pr_code_suggestions.apply_suggestions_checkbox: "true" - pr_code_suggestions.suggestions_score_threshold: "0" - pr_code_suggestions.new_score_mechanism: "true" - pr_code_suggestions.new_score_mechanism_th_high: "9" - pr_code_suggestions.new_score_mechanism_th_medium: "7" - pr_code_suggestions.auto_extended_mode: "true" - pr_code_suggestions.num_code_suggestions_per_chunk: "3" - pr_code_suggestions.num_best_practice_suggestions: "1" - pr_code_suggestions.max_number_of_calls: "3" - pr_code_suggestions.parallel_calls: "true" - github_action_config.auto_review: "true" - github_action_config.auto_describe: "true" - github_action_config.auto_improve: "true" - github_action_config.pr_actions: '["opened","reopened","ready_for_review","synchronize"]' - github_action_config.handle_push_trigger: "true" - github_action_config.push_trigger_ignore_bot_commits: "true" - github_action_config.push_trigger_ignore_merge_commits: "true" - github_action_config.push_trigger_wait_for_initial_review: "true" - github_action_config.push_trigger_pending_tasks_backlog: "true" - github_action_config.push_trigger_pending_tasks_ttl: "300" diff --git a/.github/workflows/approval.yml b/.github/workflows/approval.yml deleted file mode 100644 index 282968aa0..000000000 --- a/.github/workflows/approval.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: Approvals - -on: {} -# pull_request_review: -# types: [submitted] -# pull_request: -# types: [opened, reopened, synchronize] - -permissions: - pull-requests: read - contents: read - statuses: write - -jobs: - enforce-approvals: - name: Enforce Approvals - - runs-on: ubuntu-latest - - steps: - - uses: actions/github-script@v8 - with: - script: | - const ME = context.payload.pull_request.user.login; - const OWNER = 'tahminator'; - const GUARDIANS_OF_THE_GALAXY = (() => { - let initialGuardians = ['Arshadul-Monir', 'arklian']; - - return initialGuardians; - })(); - - - const { data: reviews } = await github.rest.pulls.listReviews({ - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: context.payload.pull_request.number, - }); - - reviews.sort((a, b) => new Date(a.submitted_at) - new Date(b.submitted_at)); - - const latest = {}; - for (const r of reviews) { - latest[r.user.login] = r.state.toUpperCase(); - } - - const approved = Object.keys(latest).filter(u => latest[u] === 'APPROVED'); - - const hasOwner = ME === OWNER || approved.includes(OWNER); - - const guardiansWhoCanApprove = GUARDIANS_OF_THE_GALAXY.filter(u => u !== ME); - const hasGuardian = guardiansWhoCanApprove.length === 0 || guardiansWhoCanApprove.some(u => approved.includes(u)); - - let state, description; - - if (hasOwner && hasGuardian) { - console.log('All approvals received.'); - state = 'success'; - description = 'All approvals received.'; - } else { - state = 'failure'; - const missing = []; - if (!hasGuardian) - missing.push(`1 guardian of the galaxy (${GUARDIANS_OF_THE_GALAXY.filter(u => !approved.includes(u)).join(', ')})`); - if (!hasOwner) missing.push(`1 owner (${OWNER})`); - console.log(`Missing ${missing.join(' and ')}`); - description = `Missing ${missing.join(' and ')}`; - } - - await github.rest.repos.createCommitStatus({ - owner: context.repo.owner, - repo: context.repo.repo, - sha: context.payload.pull_request.head.sha, - state, - context: 'Approvals Check', - description, - }); diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 9de89144f..d25106d66 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -37,13 +37,14 @@ jobs: - name: Checkout Repository uses: actions/checkout@v6 - - name: Set up pnpm - uses: pnpm/action-setup@v5 + - name: Setup CI + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: - version: 10.24.0 - cache: true - cache_dependency_path: js/pnpm-lock.yaml - package_json_file: js/package.json + INSTALL_PNPM: "true" + PNPM_VERSION: "10.24.0" + PNPM_CACHE: "true" + PNPM_CACHE_DEPENDENCY_PATH: js/pnpm-lock.yaml + PNPM_PACKAGE_JSON_FILE: js/package.json - name: Run pre test shell: bash @@ -96,43 +97,13 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 - with: - LINT_CI: true - SECRETS: ${{ toJSON(secrets) }} - - - name: Set up pnpm - uses: pnpm/action-setup@v5 - with: - version: 10.24.0 - cache: true - cache_dependency_path: js/pnpm-lock.yaml - package_json_file: js/package.json - - - name: Set up OpenJDK 25 - uses: actions/setup-java@v4 - with: - distribution: "temurin" - java-version: "25" - - - name: Cache Maven packages - uses: actions/cache@v5 - with: - path: | - ~/.m2 - ~/repository - key: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} - - - name: Expose GitHub Runtime - uses: crazy-max/ghaction-github-runtime@v3 - - name: Run workflow uses: ./.github/composite/build-image with: ENVIRONMENT: staging DOCKER_UPLOAD: "true" ARCH: ${{ matrix.arch }} + SECRETS: ${{ toJSON(secrets) }} buildStagingStandupBotImage: name: Build staging image for codebloom-standup-bot (${{ matrix.arch }}) diff --git a/.github/workflows/copy-command.yml b/.github/workflows/copy-command.yml index 00824ef0d..7307f2109 100644 --- a/.github/workflows/copy-command.yml +++ b/.github/workflows/copy-command.yml @@ -1,17 +1,11 @@ name: Copy Production DB to Staging -run-name: Copy Production DB to Staging - -concurrency: - group: copy-db-pr-${{ github.event.client_payload.slash_command.args.named.prId }} - cancel-in-progress: true +run-name: Copy production database to staging from PR #${{ inputs.prId }} on: - repository_dispatch: - types: [copy-command] workflow_dispatch: inputs: prId: - description: "PR to confirm success to" + description: "PR whose head commit receives the status check" required: true repository: description: "The repository from which the slash command was dispatched" @@ -20,65 +14,57 @@ on: description: "The comment-id of the slash command" required: true author: - description: "The author that triggered this actions" + description: "The author that triggered this action" required: true +# all prs share staging database, cannot run alongside migrations or cancel in progress. +concurrency: + group: staging-db-migrations + cancel-in-progress: false + permissions: contents: read - pull-requests: write - statuses: write + pull-requests: read jobs: - getPRHead: - name: Get PR head SHA + copy: + name: Copy Production Database to Staging runs-on: ubuntu-latest - outputs: - sha: ${{ steps.pr-head.outputs.result }} steps: - name: Get PR head SHA id: pr-head uses: actions/github-script@v8 + env: + PR_ID: ${{ inputs.prId }} with: result-encoding: string script: | - const payload = context.payload; - const prId = payload.inputs ? payload.inputs.prId : payload.client_payload.slash_command.args.named.prId; - const { data: pr } = await github.rest.pulls.get({ - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: parseInt(prId, 10) + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: Number(process.env.PR_ID), }); - return pr.head.sha; - copy: - name: Copy Production Database to Staging - runs-on: ubuntu-latest - needs: getPRHead - steps: - - name: Checkout Repository + - name: Checkout PR uses: actions/checkout@v6 with: - ref: ${{ needs.getPRHead.outputs.sha }} + ref: ${{ steps.pr-head.outputs.result }} - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true SECRETS: ${{ toJSON(secrets) }} HEADSCALE_ADDRESS: ${{ secrets.HEADSCALE_ADDRESS }} HEADSCALE_USER: ${{ secrets.HEADSCALE_USER }} HEADSCALE_PREAUTHKEY: ${{ secrets.HEADSCALE_PREAUTHKEY }} + INSTALL_JAVA: "true" + JAVA_VERSION: "25" + JAVA_CACHE_KEY: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} + JAVA_CACHE_PATH: | + ~/.m2 + ~/repository - - name: Set up OpenJDK 25 - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "25" - cache: "maven" - - - name: Copy Production Database to Staging - run: bun run .github/scripts/copy-prod-db/index.ts --run-url=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} --username=${{ github.event.client_payload.github.actor || github.event.inputs.author }} --sha=${{ needs.getPRHead.outputs.sha }} - env: - PR_ID: ${{ github.event.client_payload.slash_command.args.named.prId || github.event.inputs.prId }} + - name: Copy production database to staging + run: bun run .github/scripts/copy-prod-db/index.ts --sha="${{ steps.pr-head.outputs.result }}" --username="${{ inputs.author }}" --runUrl="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index de7209079..5fa02da83 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -24,32 +24,21 @@ jobs: uses: actions/checkout@v6 - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true SECRETS: ${{ toJSON(secrets) }} - - - name: Set up pnpm - uses: pnpm/action-setup@v5 - with: - version: 10.24.0 - cache: true - cache_dependency_path: js/pnpm-lock.yaml - package_json_file: js/package.json - - - name: Set up OpenJDK 25 - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "25" - - - name: Cache Maven packages - uses: actions/cache@v5 - with: - path: | + INSTALL_PNPM: "true" + PNPM_VERSION: "10.24.0" + PNPM_CACHE: "true" + PNPM_CACHE_DEPENDENCY_PATH: js/pnpm-lock.yaml + PNPM_PACKAGE_JSON_FILE: js/package.json + INSTALL_JAVA: "true" + JAVA_VERSION: "25" + JAVA_CACHE_PATH: | ~/.m2 ~/repository - key: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} + JAVA_CACHE_KEY: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} - name: Run script shell: bash diff --git a/.github/workflows/help-command.yml b/.github/workflows/help-command.yml index 9b560d483..c5d686d00 100644 --- a/.github/workflows/help-command.yml +++ b/.github/workflows/help-command.yml @@ -18,7 +18,7 @@ jobs: uses: actions/checkout@v6 - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true SECRETS: ${{ toJSON(secrets) }} diff --git a/.github/workflows/migrate-command.yml b/.github/workflows/migrate-command.yml index f955b0b05..1c6f9fca0 100644 --- a/.github/workflows/migrate-command.yml +++ b/.github/workflows/migrate-command.yml @@ -53,20 +53,19 @@ jobs: fetch-depth: 0 - name: Setup CI - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true SECRETS: ${{ toJSON(secrets) }} HEADSCALE_ADDRESS: ${{ secrets.HEADSCALE_ADDRESS }} HEADSCALE_USER: ${{ secrets.HEADSCALE_USER }} HEADSCALE_PREAUTHKEY: ${{ secrets.HEADSCALE_PREAUTHKEY }} - - - name: Set up OpenJDK 25 - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "25" - cache: "maven" + INSTALL_JAVA: "true" + JAVA_VERSION: "25" + JAVA_CACHE_KEY: ${{ github.job }}-${{ hashFiles('**/pom.xml') }} + JAVA_CACHE_PATH: | + ~/.m2 + ~/repository - name: Apply staging database migrations run: bun run .github/scripts/redeploy/db/index.ts --sha="${{ steps.pr-head.outputs.result }}" --username="${{ inputs.author }}" --runUrl="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" diff --git a/.github/workflows/pr-verifications.yml b/.github/workflows/pr-verifications.yml deleted file mode 100644 index 45f67bfc2..000000000 --- a/.github/workflows/pr-verifications.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Verify PR -run-name: Running PR verification on ${{ github.actor }}'s branch - -on: - pull_request: - -permissions: - contents: write - issues: write - pull-requests: write - -concurrency: - group: pr-${{ github.ref }} - cancel-in-progress: true - -jobs: - verifyPr: - name: Run verification checks on the PR - runs-on: ubuntu-latest - - steps: - - name: Checkout Repository - uses: actions/checkout@v6 - -# Removing these checks for now, as we restructure workflows with the change of people. - -# - name: Verify PR description is filled out -# uses: ./.github/composite/pr-description-check -# with: -# PR_ID: ${{ github.event.number }} - -# - name: Run composite workflow -# uses: ./.github/composite/notion-checks -# id: notion_check -# with: -# PR_ID: ${{ github.event.number }} -# SECRETS: ${{ toJSON(secrets) }} diff --git a/.github/workflows/slash.yml b/.github/workflows/slash.yml index f563a4d80..f40c43eb1 100644 --- a/.github/workflows/slash.yml +++ b/.github/workflows/slash.yml @@ -24,12 +24,12 @@ jobs: persist-credentials: false - name: Setup pipeline - uses: tahminator/pipeline/actions/setup@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/setup@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: LINT_CI: true - name: Slash Command Dispatch - uses: tahminator/pipeline/actions/commands@ff36293f28519b2b90d7e28918a6885d9baf019e # 1.0.90 + uses: tahminator/pipeline/actions/commands@a424f92d486342e1255fcdf377a7569eb230aabe # 1.0.97 with: APP_ID: ${{ secrets._GITHUB_APP_APP_ID }} PRIVATE_KEY: ${{ secrets._GITHUB_APP_PEM_CONTENT }}