From b15c2d751a5e049f6bbff4679a8f686d7ece312d Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Mon, 5 Jun 2023 21:29:02 -0600 Subject: [PATCH 01/44] ci: schedule nightly test against Endo master --- .github/actions/restore-node/action.yml | 2 ++ .github/workflows/deployment-test.yml | 2 ++ .github/workflows/test-all-packages.yml | 3 +++ .github/workflows/test-dapp-card-store.yml | 2 ++ .github/workflows/test-dapp-fungible-faucet.yml.DISABLED | 3 +++ .github/workflows/test-dapp-otc.yml | 2 ++ .github/workflows/test-dapp-pegasus.yml | 2 ++ .github/workflows/test-dapp-simple-exchange.yml | 2 ++ .github/workflows/test-dapp-treasury.yml.DISABLED | 2 ++ .github/workflows/test-documentation.yml | 2 ++ 10 files changed, 22 insertions(+) diff --git a/.github/actions/restore-node/action.yml b/.github/actions/restore-node/action.yml index 7763cee3042..1f4eef4f9e9 100644 --- a/.github/actions/restore-node/action.yml +++ b/.github/actions/restore-node/action.yml @@ -48,6 +48,8 @@ runs: if (result) { branch = result[1]; } + } else if (github.event_name === 'schedule') { + branch = 'master'; } console.log(branch); return branch; diff --git a/.github/workflows/deployment-test.yml b/.github/workflows/deployment-test.yml index 5f97ecfa019..b4f4fc6312e 100644 --- a/.github/workflows/deployment-test.yml +++ b/.github/workflows/deployment-test.yml @@ -13,6 +13,8 @@ on: - '@agoric/sdk@*' pull_request: merge_group: + schedule: + - cron: '17 6 * * *' concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/.github/workflows/test-all-packages.yml b/.github/workflows/test-all-packages.yml index de43fda2f16..2257eeec4a8 100644 --- a/.github/workflows/test-all-packages.yml +++ b/.github/workflows/test-all-packages.yml @@ -7,6 +7,9 @@ on: merge_group: push: branches: [master] + schedule: + # We start a little earlier to give our build cache time to populate. + - cron: '47 5 * * *' concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/.github/workflows/test-dapp-card-store.yml b/.github/workflows/test-dapp-card-store.yml index 5f7be223b7b..20e2b2982ab 100644 --- a/.github/workflows/test-dapp-card-store.yml +++ b/.github/workflows/test-dapp-card-store.yml @@ -3,6 +3,8 @@ name: Test Dapp Card Store on: pull_request: merge_group: + schedule: + - cron: '17 6 * * *' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true diff --git a/.github/workflows/test-dapp-fungible-faucet.yml.DISABLED b/.github/workflows/test-dapp-fungible-faucet.yml.DISABLED index cccb22fdb74..b4d4be0e7f1 100644 --- a/.github/workflows/test-dapp-fungible-faucet.yml.DISABLED +++ b/.github/workflows/test-dapp-fungible-faucet.yml.DISABLED @@ -3,6 +3,9 @@ name: Test Dapp Fungible Faucet on: pull_request: merge_group: + schedule: + - cron: '17 6 * * *' + concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true diff --git a/.github/workflows/test-dapp-otc.yml b/.github/workflows/test-dapp-otc.yml index 620391d76df..13f5f5aa40c 100644 --- a/.github/workflows/test-dapp-otc.yml +++ b/.github/workflows/test-dapp-otc.yml @@ -3,6 +3,8 @@ name: Test Dapp OTC Desk on: pull_request: merge_group: + schedule: + - cron: '17 6 * * *' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true diff --git a/.github/workflows/test-dapp-pegasus.yml b/.github/workflows/test-dapp-pegasus.yml index 5b043c710c2..e9e5b072dc7 100644 --- a/.github/workflows/test-dapp-pegasus.yml +++ b/.github/workflows/test-dapp-pegasus.yml @@ -3,6 +3,8 @@ name: Test Dapp Pegasus on: pull_request: merge_group: + schedule: + - cron: '17 6 * * *' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true diff --git a/.github/workflows/test-dapp-simple-exchange.yml b/.github/workflows/test-dapp-simple-exchange.yml index 6beb7f55281..505d597778e 100644 --- a/.github/workflows/test-dapp-simple-exchange.yml +++ b/.github/workflows/test-dapp-simple-exchange.yml @@ -3,6 +3,8 @@ name: Test Dapp Simple Exchange on: pull_request: merge_group: + schedule: + - cron: '17 6 * * *' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true diff --git a/.github/workflows/test-dapp-treasury.yml.DISABLED b/.github/workflows/test-dapp-treasury.yml.DISABLED index c24c63d76ad..04ad460706e 100644 --- a/.github/workflows/test-dapp-treasury.yml.DISABLED +++ b/.github/workflows/test-dapp-treasury.yml.DISABLED @@ -3,6 +3,8 @@ name: Test Dapp Treasury on: pull_request: merge_group: + schedule: + - cron: '17 6 * * *' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true diff --git a/.github/workflows/test-documentation.yml b/.github/workflows/test-documentation.yml index 518e4afecec..cb754a4d7ca 100644 --- a/.github/workflows/test-documentation.yml +++ b/.github/workflows/test-documentation.yml @@ -3,6 +3,8 @@ name: Test Documentation on: pull_request: merge_group: + schedule: + - cron: '17 6 * * *' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true From eb993af5c042032775f9a0533deade420119f07e Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Mon, 5 Jun 2023 20:13:08 -0600 Subject: [PATCH 02/44] ci(restore-golang): avoid double-caching --- .github/actions/restore-golang/action.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.github/actions/restore-golang/action.yml b/.github/actions/restore-golang/action.yml index 6fd719e84f0..abd26858fc3 100644 --- a/.github/actions/restore-golang/action.yml +++ b/.github/actions/restore-golang/action.yml @@ -25,18 +25,7 @@ runs: with: cache-dependency-path: ${{ inputs.path }}/golang/cosmos/go.sum go-version: ${{ inputs.go-version }} - - uses: kenchan0130/actions-system-info@master - id: system-info - - name: cache Go modules - id: cache - uses: actions/cache@v3 - with: - path: ${{ env.GOPATH }}/pkg/mod - key: ${{ runner.os }}-${{ runner.arch }}-${{ steps.system-info.outputs.release }}-go-${{ inputs.go-version }}-built-${{ hashFiles('golang/**/go.sum') }} - restore-keys: | - ${{ runner.os }}-${{ runner.arch }}-${{ steps.system-info.outputs.release }}-go-${{ inputs.go-version }}-built- - name: go mod download working-directory: ${{ inputs.path }}/golang/cosmos run: go mod download shell: bash - if: steps.cache.outputs.cache-hit != 'true' From 835d237f13f9c4a29a4cd19d3003433884da73d2 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Thu, 15 Jun 2023 11:51:34 -0600 Subject: [PATCH 03/44] ci(notify-status): upgrade deprecated actions --- .github/actions/notify-status/action.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/actions/notify-status/action.yml b/.github/actions/notify-status/action.yml index b51ca3cd335..1aef63629f7 100644 --- a/.github/actions/notify-status/action.yml +++ b/.github/actions/notify-status/action.yml @@ -4,13 +4,13 @@ description: 'Notify on actions status' inputs: from: description: 'The email address to send the notification from' - required: true + required: false to: description: 'Recipients' - required: true + required: false password: description: 'Sendgrid Password' - required: true + required: false webhook: description: 'Slack webhook URL' required: true @@ -19,7 +19,8 @@ runs: using: composite steps: - name: send ${{ job.status }} email - uses: dawidd6/action-send-mail@v2 + if: ${{ inputs.to != '' }} + uses: dawidd6/action-send-mail@v3 with: # mail server settings server_address: smtp.sendgrid.net @@ -42,7 +43,7 @@ runs: from: ${{ inputs.from }} - name: Send GitHub trigger payload id: slack - uses: slackapi/slack-github-action@v1.18.0 + uses: slackapi/slack-github-action@v1.24.0 with: payload: | { From 62fd0ebcdabd43ddf2f75681a7112eccb9a1855f Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Sun, 11 Jun 2023 18:46:08 -0600 Subject: [PATCH 04/44] ci(restore-node): properly use `context.eventName` in script --- .github/actions/restore-node/action.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/actions/restore-node/action.yml b/.github/actions/restore-node/action.yml index 1f4eef4f9e9..7ee2bb09376 100644 --- a/.github/actions/restore-node/action.yml +++ b/.github/actions/restore-node/action.yml @@ -41,15 +41,15 @@ runs: result-encoding: string script: |- let branch = 'NOPE'; - if (context.payload.pull_request) { + if (context.eventName === 'schedule') { + branch = 'master'; + } else if (context.payload.pull_request) { const { body } = context.payload.pull_request; const regex = /^\#endo-branch:\s+(\S+)/m; const result = regex.exec(body); if (result) { branch = result[1]; } - } else if (github.event_name === 'schedule') { - branch = 'master'; } console.log(branch); return branch; From de709103487ce68523b41dfb6b98424751275763 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Thu, 15 Jun 2023 11:53:14 -0600 Subject: [PATCH 05/44] ci: send test failure notifications when not a PR --- .github/workflows/test-all-packages.yml | 152 +++++++++++++++++- .github/workflows/test-dapp-card-store.yml | 9 ++ .../test-dapp-fungible-faucet.yml.DISABLED | 9 ++ .github/workflows/test-dapp-otc.yml | 9 ++ .github/workflows/test-dapp-pegasus.yml | 9 ++ .../workflows/test-dapp-simple-exchange.yml | 9 ++ .../workflows/test-dapp-treasury.yml.DISABLED | 9 ++ .github/workflows/test-documentation.yml | 9 ++ 8 files changed, 214 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-all-packages.yml b/.github/workflows/test-all-packages.yml index 2257eeec4a8..4856cdc48e8 100644 --- a/.github/workflows/test-all-packages.yml +++ b/.github/workflows/test-all-packages.yml @@ -108,39 +108,62 @@ jobs: #- name: yarn test (everything) # run: yarn ${{ steps.vars.outputs.test }} - name: yarn test (access-token) + if: (success() || failure()) run: cd packages/access-token && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (assert) + if: (success() || failure()) run: cd packages/assert && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (deployment) + if: (success() || failure()) run: cd packages/deployment && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (ERTP) + if: (success() || failure()) run: cd packages/ERTP && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (governance) + if: (success() || failure()) run: cd packages/governance && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (import-manager) + if: (success() || failure()) run: cd packages/import-manager && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (notifier) + if: (success() || failure()) run: cd packages/notifier && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (same-structure) + if: (success() || failure()) run: cd packages/same-structure && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (sharing-service) + if: (success() || failure()) run: cd packages/sharing-service && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (sparse-ints) + if: (success() || failure()) run: cd packages/sparse-ints && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (spawner) + if: (success() || failure()) run: cd packages/spawner && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (stat-logger) + if: (success() || failure()) run: cd packages/stat-logger && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (store) + if: (success() || failure()) run: cd packages/store && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (swing-store) + if: (success() || failure()) run: cd packages/swing-store && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (web-components) run: cd packages/web-components && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (wallet-connection) run: cd packages/wallet-connection && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (cosmic-proto) + if: (success() || failure()) run: cd packages/cosmic-proto && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true @@ -170,48 +193,75 @@ jobs: node-version: ${{ steps.vars.outputs.node-version }} # END-TEST-BOILERPLATE - name: yarn test (agoric-cli) + if: (success() || failure()) run: cd packages/agoric-cli && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (cosmos) + if: (success() || failure()) run: cd golang/cosmos && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (cache) + if: (success() || failure()) run: cd packages/cache && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (casting) + if: (success() || failure()) run: cd packages/casting && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (internal) + if: (success() || failure()) run: cd packages/internal && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (pegasus) + if: (success() || failure()) run: cd packages/pegasus && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (smart-wallet) + if: (success() || failure()) run: cd packages/smart-wallet && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (swingset-runner) + if: (success() || failure()) run: cd packages/swingset-runner && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (telemetry) + if: (success() || failure()) run: cd packages/telemetry && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (deploy-script-support) + if: (success() || failure()) run: cd packages/deploy-script-support && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (ui-components) run: cd packages/ui-components && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (wallet) + if: (success() || failure()) run: cd packages/wallet && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (wallet/api) + if: (success() || failure()) run: cd packages/wallet/api && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (eslint-config) + if: (success() || failure()) run: cd packages/eslint-config && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (vat-data) + if: (success() || failure()) run: cd packages/vat-data && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (time) + if: (success() || failure()) run: cd packages/time && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (swingset-liveslots) + if: (success() || failure()) run: cd packages/swingset-liveslots && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (swingset-xsnap-supervisor) + if: (success() || failure()) run: cd packages/swingset-xsnap-supervisor && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (zone) + if: (success() || failure()) run: cd packages/zone && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT # The meta-test! - name: Check for untested packages + if: (success() || failure()) run: node ./scripts/check-untested-packages.mjs + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true @@ -245,7 +295,16 @@ jobs: node-version: ${{ steps.vars.outputs.node-version }} # END-TEST-BOILERPLATE - name: yarn test (solo) + if: (success() || failure()) run: cd packages/solo && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true @@ -280,7 +339,16 @@ jobs: with: go-version: '1.20' - name: yarn test (cosmic-swingset) + if: (success() || failure()) run: cd packages/cosmic-swingset && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true @@ -312,7 +380,16 @@ jobs: node-version: ${{ steps.vars.outputs.node-version }} # END-TEST-BOILERPLATE - name: yarn test (inter-protocol) + if: (success() || failure()) run: cd packages/inter-protocol && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true @@ -343,7 +420,16 @@ jobs: node-version: ${{ steps.vars.outputs.node-version }} # END-TEST-BOILERPLATE - name: yarn test (vats) + if: (success() || failure()) run: cd packages/vats && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true @@ -375,7 +461,16 @@ jobs: node-version: ${{ steps.vars.outputs.node-version }} # END-TEST-BOILERPLATE - name: yarn test (SwingSet) + if: (success() || failure()) run: cd packages/SwingSet && yarn ${{ steps.vars.outputs.test }} 'test/**/test-[A-Da-d]*.js' | $TEST_COLLECT + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true @@ -406,15 +501,26 @@ jobs: node-version: ${{ steps.vars.outputs.node-version }} # END-TEST-BOILERPLATE - name: yarn test (SwingSet) + if: (success() || failure()) run: cd packages/SwingSet && yarn ${{ steps.vars.outputs.test }} 'test/**/test-[E-Ie-i]*.js' | $TEST_COLLECT - name: yarn test (xsnap-lockdown) + if: (success() || failure()) run: cd packages/xsnap-lockdown && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT - name: yarn test (xsnap) + if: (success() || failure()) run: cd packages/xsnap && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT # explicitly test the XS worker, for visibility - name: yarn test (SwingSet XS Worker) - if: matrix.engine != 'xs' + if: (success() || failure()) && matrix.engine != 'xs' run: cd packages/SwingSet && yarn test:xs-worker | $TEST_COLLECT + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true @@ -444,7 +550,16 @@ jobs: node-version: ${{ steps.vars.outputs.node-version }} # END-TEST-BOILERPLATE - name: yarn test (SwingSet) + if: (success() || failure()) run: cd packages/SwingSet && yarn ${{ steps.vars.outputs.test }} 'test/**/test-[J-Rj-r]*.js' | $TEST_COLLECT + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true @@ -475,7 +590,16 @@ jobs: # END-TEST-BOILERPLATE - name: yarn test (SwingSet) + if: (success() || failure()) run: cd packages/SwingSet && yarn ${{ steps.vars.outputs.test }} 'test/**/test-[S-Zs-z0-9]*.js' | $TEST_COLLECT + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true @@ -507,8 +631,17 @@ jobs: node-version: ${{ steps.vars.outputs.node-version }} # END-TEST-BOILERPLATE - name: yarn test (zoe) + if: (success() || failure()) timeout-minutes: 30 run: cd packages/zoe && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true @@ -540,8 +673,17 @@ jobs: node-version: ${{ steps.vars.outputs.node-version }} # END-TEST-BOILERPLATE - name: yarn test (zoe) + if: (success() || failure()) timeout-minutes: 30 run: cd packages/zoe && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true @@ -574,6 +716,14 @@ jobs: run: cd packages/deployment/upgrade-test && docker build --build-arg DEST_IMAGE=ghcr.io/agoric/agoric-sdk:latest -t docker-upgrade-test:latest -f Dockerfile upgrade-test-scripts - name: docker run upgrade final stage run: docker run --env "DEST=0" docker-upgrade-test:latest + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - uses: ./.github/actions/post-test if: (success() || failure()) continue-on-error: true diff --git a/.github/workflows/test-dapp-card-store.yml b/.github/workflows/test-dapp-card-store.yml index 20e2b2982ab..ab029a3b78c 100644 --- a/.github/workflows/test-dapp-card-store.yml +++ b/.github/workflows/test-dapp-card-store.yml @@ -71,3 +71,12 @@ jobs: - name: yarn test in dapp run: yarn test working-directory: ./dapp + + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} diff --git a/.github/workflows/test-dapp-fungible-faucet.yml.DISABLED b/.github/workflows/test-dapp-fungible-faucet.yml.DISABLED index b4d4be0e7f1..7b7cf53d9da 100644 --- a/.github/workflows/test-dapp-fungible-faucet.yml.DISABLED +++ b/.github/workflows/test-dapp-fungible-faucet.yml.DISABLED @@ -72,3 +72,12 @@ jobs: - name: yarn test in dapp run: yarn test working-directory: ./dapp + + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} diff --git a/.github/workflows/test-dapp-otc.yml b/.github/workflows/test-dapp-otc.yml index 13f5f5aa40c..d1ed0574680 100644 --- a/.github/workflows/test-dapp-otc.yml +++ b/.github/workflows/test-dapp-otc.yml @@ -71,3 +71,12 @@ jobs: - name: yarn test in dapp run: yarn test working-directory: ./dapp + + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} diff --git a/.github/workflows/test-dapp-pegasus.yml b/.github/workflows/test-dapp-pegasus.yml index e9e5b072dc7..c42cb98c684 100644 --- a/.github/workflows/test-dapp-pegasus.yml +++ b/.github/workflows/test-dapp-pegasus.yml @@ -71,3 +71,12 @@ jobs: - name: yarn test in dapp run: yarn test working-directory: ./dapp + + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} diff --git a/.github/workflows/test-dapp-simple-exchange.yml b/.github/workflows/test-dapp-simple-exchange.yml index 505d597778e..37eaa1ec3aa 100644 --- a/.github/workflows/test-dapp-simple-exchange.yml +++ b/.github/workflows/test-dapp-simple-exchange.yml @@ -71,3 +71,12 @@ jobs: - name: yarn test in dapp run: yarn test working-directory: ./dapp + + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} diff --git a/.github/workflows/test-dapp-treasury.yml.DISABLED b/.github/workflows/test-dapp-treasury.yml.DISABLED index 04ad460706e..21abd2fdd23 100644 --- a/.github/workflows/test-dapp-treasury.yml.DISABLED +++ b/.github/workflows/test-dapp-treasury.yml.DISABLED @@ -71,3 +71,12 @@ jobs: - name: yarn test in dapp run: yarn test working-directory: ./dapp + + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} diff --git a/.github/workflows/test-documentation.yml b/.github/workflows/test-documentation.yml index cb754a4d7ca..c7a3059b82b 100644 --- a/.github/workflows/test-documentation.yml +++ b/.github/workflows/test-documentation.yml @@ -71,3 +71,12 @@ jobs: - name: yarn test in dapp run: yarn test working-directory: ./dapp + + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} From 89f160842336282f154be1ae6ff3a591f610debc Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Tue, 20 Jun 2023 11:26:29 -0600 Subject: [PATCH 06/44] ci: properly handle subdependencies for Endo branch override --- .github/actions/restore-node/action.yml | 15 ++++++++-- scripts/get-packed-versions.sh | 39 +++++++++++++++++++++++++ scripts/resolve-versions.sh | 19 ++++++++++++ 3 files changed, 70 insertions(+), 3 deletions(-) create mode 100755 scripts/get-packed-versions.sh create mode 100755 scripts/resolve-versions.sh diff --git a/.github/actions/restore-node/action.yml b/.github/actions/restore-node/action.yml index 7ee2bb09376..5cbd7cfd923 100644 --- a/.github/actions/restore-node/action.yml +++ b/.github/actions/restore-node/action.yml @@ -18,6 +18,11 @@ inputs: required: false default: '0' +outputs: + endo-branch: + description: 'The branch of Endo used (NOPE if no override)' + value: ${{ steps.endo-branch.outputs.result }} + runs: using: composite steps: @@ -102,14 +107,18 @@ runs: sudo apt-get update sudo apt-get install libbsd-dev fi - yarn install # Replace the Endo packages with the ones built from the checked-out branch. if test -e ~/endo; then - scripts/replace-packages.sh ~/endo - ${{ inputs.keep-endo }} || rm -rf ~/endo + scripts/get-packed-versions.sh ~/endo | scripts/resolve-versions.sh fi + yarn install mkdir -p node_modules/.cache/agoric date > node_modules/.cache/agoric/yarn-installed + if test -e ~/endo; then + # Remove traces of the redirected `yarn install`. + git restore package.json yarn.lock + rm -rf ~/endo + fi shell: bash if: steps.built.outputs.cache-hit != 'true' - name: yarn build diff --git a/scripts/get-packed-versions.sh b/scripts/get-packed-versions.sh new file mode 100755 index 00000000000..b1a173c5f5f --- /dev/null +++ b/scripts/get-packed-versions.sh @@ -0,0 +1,39 @@ +#! /bin/bash +# Usage: get-packed-versions.sh +# +# This script creates package tarballs in the specified workspace directory and +# writes out information for resolve-versions.sh to update a destination +# workspace to use them. This is useful for testing changes to dependencies of +# the destination repository. +set -xueo pipefail + +WORKDIR=${1:-.} +cd -- "$WORKDIR" 1>&2 + +# Install and build the source directory. +yarn install 1>&2 +yarn build 1>&2 +yarn --silent workspaces info | jq -r '.[].location' | while read -r dir; do + # Skip private packages. + echo "dir=$dir" 1>&2 + test "$(jq .private < "$dir/package.json")" != true || continue + + ################## + pushd "$dir" 1>&2 + + # Gather the metadata. + name=$(jq -r .name < package.json) + version=$(jq -r .version < package.json) + stem=$(echo "$name" | sed -e 's!^@!!; s!/!-!g;') + file="$(pwd)/${stem}-v${version}.tgz" + + # Create the tarball. + yarn pack 1>&2 + + # Write out the version entry. + jq -s --arg name "$name" --arg file "$file" \ + '{ key: $name, value: ("file:" + $file) }' < /dev/null + + popd 1>&2 + ################## +done | jq -s from_entries diff --git a/scripts/resolve-versions.sh b/scripts/resolve-versions.sh new file mode 100755 index 00000000000..c654f3891c8 --- /dev/null +++ b/scripts/resolve-versions.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -ueo pipefail + +# Accepts a dependency version map on stdin and updates the current +# package.json's resolutions section to use the packages and versions from +# the map. +# This is useful for temporary bulk updates over all packages. + +DIR=$(dirname -- "${BASH_SOURCE[0]}") + +cd -- "$DIR/.." + +override=$(jq 'to_entries | map({ key: ("**/" + .key), value: .value }) | from_entries') + +PACKAGEJSONHASH=$( + jq --arg override "$override" '.resolutions *= ($override | fromjson)' package.json | + git hash-object -w --stdin +) +git cat-file blob "$PACKAGEJSONHASH" > package.json From 92a4dd2dc762a157f0a1ab4b01008ad72099fad0 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Tue, 20 Jun 2023 11:28:33 -0600 Subject: [PATCH 07/44] ci(SwingSet): only test golden snapshot hashes with pinned Endo --- .github/workflows/test-all-packages.yml | 8 ++++++++ packages/SwingSet/test/test-xsnap-store.js | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/.github/workflows/test-all-packages.yml b/.github/workflows/test-all-packages.yml index 4856cdc48e8..d43db8cec0d 100644 --- a/.github/workflows/test-all-packages.yml +++ b/.github/workflows/test-all-packages.yml @@ -459,6 +459,8 @@ jobs: - uses: ./.github/actions/restore-node with: node-version: ${{ steps.vars.outputs.node-version }} + id: restore-node + - run: echo "ENDO_BRANCH=${{ steps.restore-node.outputs.endo-branch }}" >> $GITHUB_ENV # END-TEST-BOILERPLATE - name: yarn test (SwingSet) if: (success() || failure()) @@ -499,6 +501,8 @@ jobs: - uses: ./.github/actions/restore-node with: node-version: ${{ steps.vars.outputs.node-version }} + id: restore-node + - run: echo "ENDO_BRANCH=${{ steps.restore-node.outputs.endo-branch }}" >> $GITHUB_ENV # END-TEST-BOILERPLATE - name: yarn test (SwingSet) if: (success() || failure()) @@ -548,6 +552,8 @@ jobs: - uses: ./.github/actions/restore-node with: node-version: ${{ steps.vars.outputs.node-version }} + id: restore-node + - run: echo "ENDO_BRANCH=${{ steps.restore-node.outputs.endo-branch }}" >> $GITHUB_ENV # END-TEST-BOILERPLATE - name: yarn test (SwingSet) if: (success() || failure()) @@ -587,6 +593,8 @@ jobs: - uses: ./.github/actions/restore-node with: node-version: ${{ steps.vars.outputs.node-version }} + id: restore-node + - run: echo "ENDO_BRANCH=${{ steps.restore-node.outputs.endo-branch }}" >> $GITHUB_ENV # END-TEST-BOILERPLATE - name: yarn test (SwingSet) diff --git a/packages/SwingSet/test/test-xsnap-store.js b/packages/SwingSet/test/test-xsnap-store.js index 83b5f51f2ee..3c015ab89d4 100644 --- a/packages/SwingSet/test/test-xsnap-store.js +++ b/packages/SwingSet/test/test-xsnap-store.js @@ -1,3 +1,4 @@ +/* global globalThis */ import '@endo/init/debug.js'; import { spawn } from 'child_process'; @@ -130,6 +131,13 @@ test('create SES worker, save, restore, resume', async t => { * They are also sensitive to the XS code itself. */ test('XS + SES snapshots are long-term deterministic', async t => { + const ENDO_BRANCH = globalThis.process?.env?.ENDO_BRANCH; + if (ENDO_BRANCH && ENDO_BRANCH !== 'NOPE') { + t.log(`Skipping test on ENDO_BRANCH=${ENDO_BRANCH}`); + t.pass(); + return; + } + const db = sqlite3(':memory:'); const store = makeSnapStore(db, () => {}, makeMockSnapStoreIO()); From b6a3b61a43a2fe2f295b054a2aa172380ed0b1b9 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Wed, 2 Aug 2023 20:01:42 -0600 Subject: [PATCH 08/44] chore(test-docker-build): break up overlong line --- .github/workflows/test-all-packages.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-all-packages.yml b/.github/workflows/test-all-packages.yml index d43db8cec0d..a63bc8f15f1 100644 --- a/.github/workflows/test-all-packages.yml +++ b/.github/workflows/test-all-packages.yml @@ -721,7 +721,11 @@ jobs: # XXX skip TAP test output and collection for now; it hides the output from the logs run: cd packages/deployment && make docker-build-sdk - name: docker build upgrade test - run: cd packages/deployment/upgrade-test && docker build --build-arg DEST_IMAGE=ghcr.io/agoric/agoric-sdk:latest -t docker-upgrade-test:latest -f Dockerfile upgrade-test-scripts + run: | + cd packages/deployment/upgrade-test && \ + docker build \ + --build-arg DEST_IMAGE=ghcr.io/agoric/agoric-sdk:latest \ + -t docker-upgrade-test:latest -f Dockerfile upgrade-test-scripts - name: docker run upgrade final stage run: docker run --env "DEST=0" docker-upgrade-test:latest - name: notify on failure From 9c4c8fd67966a931e7de3280b32993e5dfa871d5 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Wed, 9 Aug 2023 10:10:47 -0600 Subject: [PATCH 09/44] ci(restore-node): detect staged `yarn.lock`, `package.json` --- .github/actions/restore-node/action.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/actions/restore-node/action.yml b/.github/actions/restore-node/action.yml index 9b2247ba2b6..9d6aadd5bc0 100644 --- a/.github/actions/restore-node/action.yml +++ b/.github/actions/restore-node/action.yml @@ -136,8 +136,9 @@ runs: working-directory: ${{ inputs.path }} run: |- set -x - # In case of Endo override, ignore staged changes. - if [ -n "$(git status --porcelain | grep -Eve '^A '; true)" ]; then + # In case of Endo override, ignore matching index and worktree. + # (First column is non-space, second column is space, followed by separator.) + if [ -n "$(git status --porcelain | grep -Eve '^[^ ] '; true)" ]; then git status echo "Unexpected dirty git status" 1>&2 exit 1 From 42756b08d55936f58fe9a99e70b26027c9eeeb0c Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Sun, 6 Aug 2023 23:00:56 -0600 Subject: [PATCH 10/44] ci(restore-node): avoid clobbering `#endo-branch:` setup --- .github/actions/restore-node/action.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/actions/restore-node/action.yml b/.github/actions/restore-node/action.yml index 5cbd7cfd923..9b2247ba2b6 100644 --- a/.github/actions/restore-node/action.yml +++ b/.github/actions/restore-node/action.yml @@ -31,13 +31,13 @@ runs: shell: bash - uses: actions/checkout@v3 with: - clean: 'false' + clean: false submodules: 'true' persist-credentials: false path: ${{ inputs.path }} # Select a branch on Endo to test against by adding text to the body of the # pull request. For example: #endo-branch: some-pr-branch - # The default is '*NONE*' to indicate not to check out Endo, just use + # The default is '*NOPE*' to indicate not to check out Endo, just use # the published NPM packages. - name: Get the appropriate Endo branch id: endo-branch @@ -115,8 +115,8 @@ runs: mkdir -p node_modules/.cache/agoric date > node_modules/.cache/agoric/yarn-installed if test -e ~/endo; then - # Remove traces of the redirected `yarn install`. - git restore package.json yarn.lock + # Stage the redirected `yarn install` consequences. + git add package.json yarn.lock rm -rf ~/endo fi shell: bash @@ -135,9 +135,11 @@ runs: - name: git dirty check working-directory: ${{ inputs.path }} run: |- - if [ -n "$(git status --porcelain)" ]; - then + set -x + # In case of Endo override, ignore staged changes. + if [ -n "$(git status --porcelain | grep -Eve '^A '; true)" ]; then git status + echo "Unexpected dirty git status" 1>&2 exit 1 fi shell: bash From df7b11bf852e300c09ad412459ee39628268570d Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Wed, 9 Aug 2023 10:11:32 -0600 Subject: [PATCH 11/44] ci(test-dapp): find `notify-status` action in `./agoric-sdk` --- .github/workflows/test-dapp-card-store.yml | 2 +- .github/workflows/test-dapp-fungible-faucet.yml.DISABLED | 2 +- .github/workflows/test-dapp-otc.yml | 2 +- .github/workflows/test-dapp-pegasus.yml | 2 +- .github/workflows/test-dapp-simple-exchange.yml | 2 +- .github/workflows/test-dapp-treasury.yml.DISABLED | 2 +- .github/workflows/test-documentation.yml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test-dapp-card-store.yml b/.github/workflows/test-dapp-card-store.yml index ab029a3b78c..fbbf91b1314 100644 --- a/.github/workflows/test-dapp-card-store.yml +++ b/.github/workflows/test-dapp-card-store.yml @@ -74,7 +74,7 @@ jobs: - name: notify on failure if: failure() && github.event_name != 'pull_request' - uses: ./.github/actions/notify-status + uses: ./agoric-sdk/.github/actions/notify-status with: webhook: ${{ secrets.SLACK_WEBHOOK_URL }} from: ${{ secrets.NOTIFY_EMAIL_FROM }} diff --git a/.github/workflows/test-dapp-fungible-faucet.yml.DISABLED b/.github/workflows/test-dapp-fungible-faucet.yml.DISABLED index 7b7cf53d9da..446a5d2d490 100644 --- a/.github/workflows/test-dapp-fungible-faucet.yml.DISABLED +++ b/.github/workflows/test-dapp-fungible-faucet.yml.DISABLED @@ -75,7 +75,7 @@ jobs: - name: notify on failure if: failure() && github.event_name != 'pull_request' - uses: ./.github/actions/notify-status + uses: ./agoric-sdk/.github/actions/notify-status with: webhook: ${{ secrets.SLACK_WEBHOOK_URL }} from: ${{ secrets.NOTIFY_EMAIL_FROM }} diff --git a/.github/workflows/test-dapp-otc.yml b/.github/workflows/test-dapp-otc.yml index d1ed0574680..2024b1ed672 100644 --- a/.github/workflows/test-dapp-otc.yml +++ b/.github/workflows/test-dapp-otc.yml @@ -74,7 +74,7 @@ jobs: - name: notify on failure if: failure() && github.event_name != 'pull_request' - uses: ./.github/actions/notify-status + uses: ./agoric-sdk/.github/actions/notify-status with: webhook: ${{ secrets.SLACK_WEBHOOK_URL }} from: ${{ secrets.NOTIFY_EMAIL_FROM }} diff --git a/.github/workflows/test-dapp-pegasus.yml b/.github/workflows/test-dapp-pegasus.yml index c42cb98c684..3dc4ea249a5 100644 --- a/.github/workflows/test-dapp-pegasus.yml +++ b/.github/workflows/test-dapp-pegasus.yml @@ -74,7 +74,7 @@ jobs: - name: notify on failure if: failure() && github.event_name != 'pull_request' - uses: ./.github/actions/notify-status + uses: ./agoric-sdk/.github/actions/notify-status with: webhook: ${{ secrets.SLACK_WEBHOOK_URL }} from: ${{ secrets.NOTIFY_EMAIL_FROM }} diff --git a/.github/workflows/test-dapp-simple-exchange.yml b/.github/workflows/test-dapp-simple-exchange.yml index 37eaa1ec3aa..4a4f9e195ad 100644 --- a/.github/workflows/test-dapp-simple-exchange.yml +++ b/.github/workflows/test-dapp-simple-exchange.yml @@ -74,7 +74,7 @@ jobs: - name: notify on failure if: failure() && github.event_name != 'pull_request' - uses: ./.github/actions/notify-status + uses: ./agoric-sdk/.github/actions/notify-status with: webhook: ${{ secrets.SLACK_WEBHOOK_URL }} from: ${{ secrets.NOTIFY_EMAIL_FROM }} diff --git a/.github/workflows/test-dapp-treasury.yml.DISABLED b/.github/workflows/test-dapp-treasury.yml.DISABLED index 21abd2fdd23..cecac6c3c33 100644 --- a/.github/workflows/test-dapp-treasury.yml.DISABLED +++ b/.github/workflows/test-dapp-treasury.yml.DISABLED @@ -74,7 +74,7 @@ jobs: - name: notify on failure if: failure() && github.event_name != 'pull_request' - uses: ./.github/actions/notify-status + uses: ./agoric-sdk/.github/actions/notify-status with: webhook: ${{ secrets.SLACK_WEBHOOK_URL }} from: ${{ secrets.NOTIFY_EMAIL_FROM }} diff --git a/.github/workflows/test-documentation.yml b/.github/workflows/test-documentation.yml index c7a3059b82b..451c3df42db 100644 --- a/.github/workflows/test-documentation.yml +++ b/.github/workflows/test-documentation.yml @@ -74,7 +74,7 @@ jobs: - name: notify on failure if: failure() && github.event_name != 'pull_request' - uses: ./.github/actions/notify-status + uses: ./agoric-sdk/.github/actions/notify-status with: webhook: ${{ secrets.SLACK_WEBHOOK_URL }} from: ${{ secrets.NOTIFY_EMAIL_FROM }} From eb5399c2c95836502ca63df3ef15bea835055bc4 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Sun, 30 Jul 2023 17:51:45 -0600 Subject: [PATCH 12/44] docs(test-docker-build): add some useful comments --- .github/workflows/test-all-packages.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test-all-packages.yml b/.github/workflows/test-all-packages.yml index a63bc8f15f1..e4b5aa5c23c 100644 --- a/.github/workflows/test-all-packages.yml +++ b/.github/workflows/test-all-packages.yml @@ -704,19 +704,23 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 60 steps: - - name: free up additional worker space + - name: free up disk space run: | # Workaround to provide additional free space for testing. - # https://github.com/actions/virtual-environments/issues/2840 + # https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 + # If this turns out not to be enough, maybe look instead at + # https://github.com/actions/runner-images/issues/2840#issuecomment-1540506686 df -h sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf "/usr/local/share/boost" sudo rm -rf "$AGENT_TOOLSDIRECTORY" + echo "=== After cleanup:" df -h - - uses: actions/checkout@v3 - name: docker build (sdk) + # Produces ghcr.io/agoric/agoric-sdk:latest used in the following upgrade test. + # TODO: Build this only once, not for every bootstrap-version. # run: cd packages/deployment && ./scripts/test-docker-build.sh | $TEST_COLLECT # XXX skip TAP test output and collection for now; it hides the output from the logs run: cd packages/deployment && make docker-build-sdk From 5bb262f235d3db7e2957e0fc0268cfd8daf91ec4 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Wed, 9 Aug 2023 16:39:56 +0000 Subject: [PATCH 13/44] ci(deployment): only install ansible and terraform if not available --- packages/deployment/scripts/install-deps.sh | 22 ++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/deployment/scripts/install-deps.sh b/packages/deployment/scripts/install-deps.sh index 83dfe5e378c..3cdca3cbbad 100755 --- a/packages/deployment/scripts/install-deps.sh +++ b/packages/deployment/scripts/install-deps.sh @@ -21,7 +21,7 @@ TERRAFORM_RELEASE=terraform_${TERRAFORM_VERSION}_${TERRAFORM_OS}_${TERRAFORM_ARC TERRAFORM_URL=https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/${TERRAFORM_RELEASE}.zip # Extract, then delete temporary file. -( +[ -f /usr/local/bin/terraform ] && (/usr/local/bin/terraform -version; true) | head -1 | grep -q "v$TERRAFORM_VERSION" || ( trap 'echo "Removing $terraform_zip"; rm -f "$terraform_zip"' EXIT terraform_zip=$(mktemp -t terraformXXXXXX) curl "$TERRAFORM_URL" > "$terraform_zip" @@ -53,10 +53,11 @@ esac # Install Ansible. if test -d /etc/apt; then - echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu $VERSION_CODENAME main" >> /etc/apt/sources.list - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 - apt-get update --allow-releaseinfo-change -y - apt-get install -y rsync curl sudo gnupg2 jq libbsd-dev + dpkg-query -W ansible rsync curl sudo gnupg2 jq libbsd-dev >/dev/null || { + echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu $VERSION_CODENAME main" > /etc/apt/sources.list.d/ansible.list + apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 + apt-get update --allow-releaseinfo-change -y + apt-get install -y rsync curl sudo gnupg2 jq libbsd-dev if apt-get install -y ansible; then : # success else # Failed to install Ansible, try workaround based on @@ -64,11 +65,14 @@ if test -d /etc/apt; then sed -i -e '1s/^[^#]*//' /usr/lib/python3/dist-packages/ansible_collections/netapp/ontap/plugins/modules/na_ontap_s3_users.py apt-get install -y --fix-broken fi - apt-get clean -y + apt-get clean -y + } elif test "$uname_s" == darwin; then - brew update - brew install ansible rsync curl gnupg2 jq - brew cleanup + brew list ansible rsync curl gnupg2 jq >/dev/null || { + brew update + brew install ansible rsync curl gnupg2 jq + brew cleanup + } else echo "Don't know how to install Ansible, so I'm skipping..." exit 1 From cabb45a80a4de5762ef2b4a88e39722aa8d7033f Mon Sep 17 00:00:00 2001 From: Turadg Aleahmad Date: Tue, 22 Aug 2023 11:43:52 -0700 Subject: [PATCH 14/44] ci(lint): raise timeout 10m to 15m --- .github/workflows/test-all-packages.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-all-packages.yml b/.github/workflows/test-all-packages.yml index e4b5aa5c23c..55af4b75b70 100644 --- a/.github/workflows/test-all-packages.yml +++ b/.github/workflows/test-all-packages.yml @@ -46,7 +46,7 @@ jobs: # We split the package tests into two jobs because type linting # is inefficient and slow https://github.com/typescript-eslint/typescript-eslint/issues/2094 lint-primary: - timeout-minutes: 10 + timeout-minutes: 15 needs: build runs-on: ubuntu-latest steps: @@ -63,7 +63,7 @@ jobs: run: ./scripts/lint-with-types.sh primary lint-rest: - timeout-minutes: 10 + timeout-minutes: 15 needs: build runs-on: ubuntu-latest steps: From d5b8a9e0c9f93e3d8a2303a1ea3101dd478f7f35 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Fri, 25 Aug 2023 18:55:50 +0000 Subject: [PATCH 15/44] ci: combine integration tests Restore duplicate checks --- .github/workflows/deployment-test.yml | 123 ------------- .github/workflows/integration.yml | 163 ++++++++++++++++++ .github/workflows/mergify-ready.yml | 2 + .github/workflows/test-all-packages.yml | 47 ----- ...st.sh => start-github-integration-test.sh} | 6 +- 5 files changed, 168 insertions(+), 173 deletions(-) delete mode 100644 .github/workflows/deployment-test.yml rename packages/deployment/scripts/{start-deployment-test.sh => start-github-integration-test.sh} (65%) diff --git a/.github/workflows/deployment-test.yml b/.github/workflows/deployment-test.yml deleted file mode 100644 index b4f4fc6312e..00000000000 --- a/.github/workflows/deployment-test.yml +++ /dev/null @@ -1,123 +0,0 @@ -name: Chain deployment test - -on: - # Use the following to explicitly start this workflow. - # packages/deployment/scripts/start-deployment-test.sh - workflow_dispatch: - push: - branches: - - master - - 'release-*' - - beta - tags: - - '@agoric/sdk@*' - pull_request: - merge_group: - schedule: - - cron: '17 6 * * *' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - deployment-test: - runs-on: ubuntu-22.04 # jammy (LTS) - steps: - - uses: actions/checkout@v3 - with: - submodules: 'true' - path: ./agoric-sdk - - run: sudo packages/deployment/scripts/install-deps.sh - working-directory: ./agoric-sdk - - uses: ./agoric-sdk/.github/actions/restore-golang - with: - go-version: '1.20' - path: ./agoric-sdk - - uses: ./agoric-sdk/.github/actions/restore-node - with: - node-version: 18.x - path: ./agoric-sdk - # Forces xsnap to initialize all memory to random data, which increases - # the chances the content of snapshots may deviate between validators - xsnap-random-init: '1' - - # Select a branch on loadgen to test against by adding text to the body of the - # pull request. For example: #loadgen-branch: user-123-update-foo - # The default is 'main' - - name: Get the appropriate loadgen branch - id: get-loadgen-branch - uses: actions/github-script@v6 - with: - result-encoding: string - script: | - let branch = 'main'; - if (context.payload.pull_request) { - const { body } = context.payload.pull_request; - const regex = /^\#loadgen-branch:\s+(\S+)/m; - const result = regex.exec(body); - if (result) { - branch = result[1]; - } - } - console.log(branch); - return branch; - - - name: Check out loadgen - uses: actions/checkout@v3 - with: - repository: Agoric/testnet-load-generator - path: ./testnet-load-generator - ref: ${{steps.get-loadgen-branch.outputs.result}} - - - name: Build cosmic-swingset dependencies - working-directory: ./agoric-sdk - run: | - set -e - cd packages/cosmic-swingset - make install - - name: Make networks directory - run: | - set -e - mkdir networks - - name: Run integration test - working-directory: ./networks - run: | - set -xe - DOCKER_VOLUMES="$PWD/../agoric-sdk:/usr/src/agoric-sdk" \ - LOADGEN=1 \ - ../agoric-sdk/packages/deployment/scripts/integration-test.sh - timeout-minutes: 90 - env: - NETWORK_NAME: chaintest - - name: capture results - if: always() - working-directory: ./networks - run: | - NOW=$(date -u +%Y%m%dT%H%M%S) - echo "NOW=$NOW" >> "$GITHUB_ENV" - - # Stop the chain from running. - ../agoric-sdk/packages/deployment/scripts/setup.sh play stop || true - - # Get the results. - ../agoric-sdk/packages/deployment/scripts/capture-integration-results.sh "${{ job.status == 'failure' }}" - - # Tear down the nodes. - echo yes | ../agoric-sdk/packages/deployment/scripts/setup.sh destroy || true - env: - NETWORK_NAME: chaintest - - uses: actions/upload-artifact@v3 - if: always() - with: - name: deployment-test-results-${{ env.NOW }} - path: ./networks/chaintest/results - - - name: notify on failure - if: failure() && github.event_name != 'pull_request' - uses: ./agoric-sdk/.github/actions/notify-status - with: - webhook: ${{ secrets.SLACK_WEBHOOK_URL }} - from: ${{ secrets.NOTIFY_EMAIL_FROM }} - to: ${{ secrets.NOTIFY_EMAIL_TO }} - password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 4a445a2206c..e4df91fe6c2 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -1,6 +1,8 @@ name: Integration tests on: + # Use the following to explicitly start this workflow. + # packages/deployment/scripts/start-github-integration-test.sh workflow_dispatch: push: branches: @@ -14,10 +16,18 @@ on: - opened - reopened - synchronize + - converted_to_draft - ready_for_review - labeled - auto_merge_enabled + - auto_merge_disabled merge_group: + schedule: + - cron: '17 6 * * *' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: pre_check: @@ -90,3 +100,156 @@ jobs: from: ${{ secrets.NOTIFY_EMAIL_FROM }} to: ${{ secrets.NOTIFY_EMAIL_TO }} password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} + + deployment-test: + needs: pre_check + if: needs.pre_check.outputs.should_run == 'true' + + runs-on: ubuntu-22.04 # jammy (LTS) + steps: + - uses: actions/checkout@v3 + with: + submodules: 'true' + path: ./agoric-sdk + - run: sudo packages/deployment/scripts/install-deps.sh + working-directory: ./agoric-sdk + - uses: ./agoric-sdk/.github/actions/restore-golang + with: + go-version: '1.20' + path: ./agoric-sdk + - uses: ./agoric-sdk/.github/actions/restore-node + with: + node-version: 18.x + path: ./agoric-sdk + # Forces xsnap to initialize all memory to random data, which increases + # the chances the content of snapshots may deviate between validators + xsnap-random-init: '1' + + # Select a branch on loadgen to test against by adding text to the body of the + # pull request. For example: #loadgen-branch: user-123-update-foo + # The default is 'main' + - name: Get the appropriate loadgen branch + id: get-loadgen-branch + uses: actions/github-script@v6 + with: + result-encoding: string + script: | + let branch = 'main'; + if (context.payload.pull_request) { + const { body } = context.payload.pull_request; + const regex = /^\#loadgen-branch:\s+(\S+)/m; + const result = regex.exec(body); + if (result) { + branch = result[1]; + } + } + console.log(branch); + return branch; + + - name: Check out loadgen + uses: actions/checkout@v3 + with: + repository: Agoric/testnet-load-generator + path: ./testnet-load-generator + ref: ${{steps.get-loadgen-branch.outputs.result}} + + - name: Build cosmic-swingset dependencies + working-directory: ./agoric-sdk + run: | + set -e + cd packages/cosmic-swingset + make install + - name: Make networks directory + run: | + set -e + mkdir networks + - name: Run integration test + working-directory: ./networks + run: | + set -xe + DOCKER_VOLUMES="$PWD/../agoric-sdk:/usr/src/agoric-sdk" \ + LOADGEN=1 \ + ../agoric-sdk/packages/deployment/scripts/integration-test.sh + timeout-minutes: 90 + env: + NETWORK_NAME: chaintest + - name: capture results + if: always() + working-directory: ./networks + run: | + NOW=$(date -u +%Y%m%dT%H%M%S) + echo "NOW=$NOW" >> "$GITHUB_ENV" + + # Stop the chain from running. + ../agoric-sdk/packages/deployment/scripts/setup.sh play stop || true + + # Get the results. + ../agoric-sdk/packages/deployment/scripts/capture-integration-results.sh "${{ job.status == 'failure' }}" + + # Tear down the nodes. + echo yes | ../agoric-sdk/packages/deployment/scripts/setup.sh destroy || true + env: + NETWORK_NAME: chaintest + - uses: actions/upload-artifact@v3 + if: always() + with: + name: deployment-test-results-${{ env.NOW }} + path: ./networks/chaintest/results + + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./agoric-sdk/.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} + + test-docker-build: + needs: pre_check + if: needs.pre_check.outputs.should_run == 'true' + runs-on: ubuntu-latest + timeout-minutes: 60 + steps: + - name: free up disk space + run: | + # Workaround to provide additional free space for testing. + # https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 + # If this turns out not to be enough, maybe look instead at + # https://github.com/actions/runner-images/issues/2840#issuecomment-1540506686 + df -h + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + echo "=== After cleanup:" + df -h + - uses: actions/checkout@v3 + - name: docker build (sdk) + # Produces ghcr.io/agoric/agoric-sdk:latest used in the following upgrade test. + # TODO: Build this only once, not for every bootstrap-version. + # run: cd packages/deployment && ./scripts/test-docker-build.sh | $TEST_COLLECT + # XXX skip TAP test output and collection for now; it hides the output from the logs + run: cd packages/deployment && make docker-build-sdk + - name: docker build upgrade test + run: | + cd packages/deployment/upgrade-test && \ + docker build \ + --build-arg DEST_IMAGE=ghcr.io/agoric/agoric-sdk:latest \ + -t docker-upgrade-test:latest -f Dockerfile upgrade-test-scripts + - name: docker run upgrade final stage + run: docker run --env "DEST=0" docker-upgrade-test:latest + - name: notify on failure + if: failure() && github.event_name != 'pull_request' + uses: ./.github/actions/notify-status + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + from: ${{ secrets.NOTIFY_EMAIL_FROM }} + to: ${{ secrets.NOTIFY_EMAIL_TO }} + password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} + - uses: ./.github/actions/post-test + if: (success() || failure()) + continue-on-error: true + timeout-minutes: 4 + with: + datadog-token: ${{ secrets.DATADOG_API_KEY }} diff --git a/.github/workflows/mergify-ready.yml b/.github/workflows/mergify-ready.yml index 1fdbd553fc9..6fa337bc795 100644 --- a/.github/workflows/mergify-ready.yml +++ b/.github/workflows/mergify-ready.yml @@ -6,9 +6,11 @@ on: - opened - reopened - synchronize + - converted_to_draft - ready_for_review - labeled - auto_merge_enabled + - auto_merge_disabled merge_group: jobs: diff --git a/.github/workflows/test-all-packages.yml b/.github/workflows/test-all-packages.yml index 55af4b75b70..253744c2af4 100644 --- a/.github/workflows/test-all-packages.yml +++ b/.github/workflows/test-all-packages.yml @@ -699,50 +699,3 @@ jobs: with: datadog-token: ${{ secrets.DATADOG_API_KEY }} codecov-token: ${{ secrets.CODECOV_TOKEN }} - - test-docker-build: - runs-on: ubuntu-latest - timeout-minutes: 60 - steps: - - name: free up disk space - run: | - # Workaround to provide additional free space for testing. - # https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 - # If this turns out not to be enough, maybe look instead at - # https://github.com/actions/runner-images/issues/2840#issuecomment-1540506686 - df -h - sudo rm -rf /usr/share/dotnet - sudo rm -rf /opt/ghc - sudo rm -rf "/usr/local/share/boost" - sudo rm -rf "$AGENT_TOOLSDIRECTORY" - echo "=== After cleanup:" - df -h - - uses: actions/checkout@v3 - - name: docker build (sdk) - # Produces ghcr.io/agoric/agoric-sdk:latest used in the following upgrade test. - # TODO: Build this only once, not for every bootstrap-version. - # run: cd packages/deployment && ./scripts/test-docker-build.sh | $TEST_COLLECT - # XXX skip TAP test output and collection for now; it hides the output from the logs - run: cd packages/deployment && make docker-build-sdk - - name: docker build upgrade test - run: | - cd packages/deployment/upgrade-test && \ - docker build \ - --build-arg DEST_IMAGE=ghcr.io/agoric/agoric-sdk:latest \ - -t docker-upgrade-test:latest -f Dockerfile upgrade-test-scripts - - name: docker run upgrade final stage - run: docker run --env "DEST=0" docker-upgrade-test:latest - - name: notify on failure - if: failure() && github.event_name != 'pull_request' - uses: ./.github/actions/notify-status - with: - webhook: ${{ secrets.SLACK_WEBHOOK_URL }} - from: ${{ secrets.NOTIFY_EMAIL_FROM }} - to: ${{ secrets.NOTIFY_EMAIL_TO }} - password: ${{ secrets.NOTIFY_EMAIL_PASSWORD }} - - uses: ./.github/actions/post-test - if: (success() || failure()) - continue-on-error: true - timeout-minutes: 4 - with: - datadog-token: ${{ secrets.DATADOG_API_KEY }} diff --git a/packages/deployment/scripts/start-deployment-test.sh b/packages/deployment/scripts/start-github-integration-test.sh similarity index 65% rename from packages/deployment/scripts/start-deployment-test.sh rename to packages/deployment/scripts/start-github-integration-test.sh index 9374a1b1c05..16adaed7c1c 100755 --- a/packages/deployment/scripts/start-deployment-test.sh +++ b/packages/deployment/scripts/start-github-integration-test.sh @@ -1,6 +1,6 @@ #! /bin/bash -# Run the deployment test on Github Actions: -# https://github.com/Agoric/agoric-sdk/actions/workflows/deployment-test.yml +# Run the integration tests on Github Actions: +# https://github.com/Agoric/agoric-sdk/actions/workflows/integration.yml set -ueo pipefail @@ -12,5 +12,5 @@ test -n "$GITHUB_TOKEN" || { } curl -XPOST "-HAuthorization: Bearer $GITHUB_TOKEN" \ - https://api.github.com/repos/Agoric/agoric-sdk/actions/workflows/deployment-test.yml/dispatches \ + https://api.github.com/repos/Agoric/agoric-sdk/actions/workflows/integration.yml/dispatches \ -d "$(jq -n --arg ref "$GITREF" '{$ref}')" From 9739333339bd9303ed70b77cfc691cb2c1eadc55 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Fri, 25 Aug 2023 21:57:01 +0000 Subject: [PATCH 16/44] ci: remove mergify pismo queue --- .mergify.yml | 83 ---------------------------------------------------- 1 file changed, 83 deletions(-) diff --git a/.mergify.yml b/.mergify.yml index e9c1eb5cdb6..35c70630e60 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -28,34 +28,6 @@ queue_rules: # - check-success=getting-started (local-npm) # - check-neutral=getting-started (local-npm) # - check-skipped=getting-started (local-npm) - - name: pismo - conditions: - - base=release-pismo - # Require integration tests before merging only - - or: - - label=bypass:integration - - check-failure!=Chain deployment test - - or: - - label=bypass:integration - - check-success=deployment-test - - check-neutral=deployment-test - - check-skipped=deployment-test - - or: - - label=bypass:integration - - check-failure!=getting-started (link-cli) - - or: - - label=bypass:integration - - check-skipped=getting-started - - check-success=getting-started (link-cli) - - check-neutral=getting-started (link-cli) - - check-skipped=getting-started (link-cli) - # FIXME: Enable this section to validate NPM deploys... - #- or: - # - label=bypass:integration - # - check-skipped=getting-started - # - check-success=getting-started (local-npm) - # - check-neutral=getting-started (local-npm) - # - check-skipped=getting-started (local-npm) pull_request_rules: - name: merge to master @@ -113,58 +85,3 @@ pull_request_rules: queue: name: main method: squash - - name: merge to release-pismo - conditions: - - base=release-pismo - - label=automerge:merge - - or: - - check-success=wait-integration-pre-checks - - label=bypass:integration - - or: - - and: # breakage succeeds like we thought - - check-success=breakage - - -label=proto:expect-breakage - - and: # breakage fails like we thought - - check-failure=breakage - - label=proto:expect-breakage - actions: - queue: - name: pismo - method: merge - - name: rebase updates then merge to release-pismo - conditions: - - base=release-pismo - - label=automerge:rebase - - or: - - check-success=wait-integration-pre-checks - - label=bypass:integration - - or: - - and: # breakage succeeds like we thought - - check-success=breakage - - -label=proto:expect-breakage - - and: # breakage fails like we thought - - check-failure=breakage - - label=proto:expect-breakage - actions: - queue: - name: pismo - method: merge - update_method: rebase - - name: squash to release-pismo - conditions: - - base=release-pismo - - label=automerge:squash - - or: - - check-success=wait-integration-pre-checks - - label=bypass:integration - - or: - - and: # breakage succeeds like we thought - - check-success=breakage - - -label=proto:expect-breakage - - and: # breakage fails like we thought - - check-failure=breakage - - label=proto:expect-breakage - actions: - queue: - name: pismo - method: squash From f51cc29aa7788dc9b7baf999172d55126bdf9293 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Fri, 25 Aug 2023 22:02:41 +0000 Subject: [PATCH 17/44] ci: add docker upgrade test to mergify --- .mergify.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.mergify.yml b/.mergify.yml index 35c70630e60..3c547b0b10f 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -6,12 +6,21 @@ queue_rules: # Require integration tests before merging only - or: - label=bypass:integration - - check-failure!=Chain deployment test + - check-failure!=Integration tests - or: - label=bypass:integration - check-success=deployment-test - check-neutral=deployment-test - check-skipped=deployment-test + - or: + - label=bypass:integration + - check-failure!=test-docker-build (main) + - or: + - label=bypass:integration + - check-skipped=test-docker-build + - check-success=test-docker-build (main) + - check-neutral=test-docker-build (main) + - check-skipped=test-docker-build (main) - or: - label=bypass:integration - check-failure!=getting-started (link-cli) From 1b0d147198aa82717d9390b8f021c23aafa9af59 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Fri, 25 Aug 2023 23:54:11 +0000 Subject: [PATCH 18/44] ci: add checks for merge strategy and linear history --- .github/workflows/mergify-ready.yml | 65 ++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/.github/workflows/mergify-ready.yml b/.github/workflows/mergify-ready.yml index 6fa337bc795..02b43a74e21 100644 --- a/.github/workflows/mergify-ready.yml +++ b/.github/workflows/mergify-ready.yml @@ -1,4 +1,4 @@ -name: Integration tests triggered +name: Pre-merge checks on: pull_request: @@ -28,3 +28,66 @@ jobs: needs ${{ toJSON(needs.pre_check.outputs) }} EOF sleep 5 + + merge-strategy: + runs-on: ubuntu-latest + if: >- + github.event_name != 'pull_request' || + github.event.pull_request.draft == true || + github.event.pull_request.base.ref != 'master' || ( + contains(github.event.pull_request.labels.*.name, 'automerge:squash') || + contains(github.event.pull_request.labels.*.name, 'automerge:merge') || + contains(github.event.pull_request.labels.*.name, 'automerge:rebase') || + contains(github.event.pull_request.labels.*.name, 'bypass:automerge') || + github.event.pull_request.auto_merge != null + ) + strategy: + # abuse the matrix feature to create a check which stays pending until + # a merge strategy is chosen + matrix: + merge: [chosen] + steps: + - shell: bash + run: echo "Merge strategy chosen" + + linear-history: + runs-on: ubuntu-latest + if: >- + github.event_name == 'pull_request' && + github.event.pull_request.draft == false && + github.event.pull_request.base.ref == 'master' && ( + contains(github.event.pull_request.labels.*.name, 'automerge:merge') || + contains(github.event.pull_request.labels.*.name, 'bypass:automerge') + ) && + !contains(github.event.pull_request.labels.*.name, 'bypass:linear-history') + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - shell: bash + run: | + merge_commits=$(git rev-list --merges "origin/$GITHUB_BASE_REF".."origin/$GITHUB_HEAD_REF") + + if [ -n "$merge_commits" ]; then + echo "Error: merge commits found in $GITHUB_BASE_REF..$GITHUB_HEAD_REF" + + for merge_commit in $merge_commits; do + echo "$merge_commit" + done + + exit 1 + fi + + fixup_commits= + for commit in $(git rev-list $GITHUB_BASE_REF..$GITHUB_HEAD_REF); do + case $(git show --pretty=format:%s -s $commit) in fixup\!*|squash\!*) + fixup_commits="$fixup_commits\n$commit" + ;; + esac + done + + if [ -n "$fixup_commits" ]; then + echo "Error: fixup/squash commits found in $GITHUB_BASE_REF..$GITHUB_HEAD_REF" + echo -e "$fixup_commits" + exit 1 + fi From 8bc3893174d70a054c780b7f56805b2b1dc37cd4 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Tue, 29 Aug 2023 00:13:27 +0000 Subject: [PATCH 19/44] ci: capture combined integration test results --- .github/workflows/integration.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index e4df91fe6c2..a5d9ef8e1a6 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -253,3 +253,22 @@ jobs: timeout-minutes: 4 with: datadog-token: ${{ secrets.DATADOG_API_KEY }} + + integration-test-result: + needs: + - pre_check + - getting-started + - deployment-test + - test-docker-build + if: needs.pre_check.outputs.should_run == 'true' && (success() || failure() || cancelled()) + runs-on: ubuntu-latest + steps: + - name: Check job results + shell: bash + run: | + cat < Date: Sun, 27 Aug 2023 13:12:17 -0700 Subject: [PATCH 20/44] ci: rename automerge:merge label to automerge:no-update --- .github/workflows/mergify-ready.yml | 4 ++-- .github/workflows/pre-check-integration.yml | 2 +- .mergify.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/mergify-ready.yml b/.github/workflows/mergify-ready.yml index 02b43a74e21..cbfe20ca0d3 100644 --- a/.github/workflows/mergify-ready.yml +++ b/.github/workflows/mergify-ready.yml @@ -36,7 +36,7 @@ jobs: github.event.pull_request.draft == true || github.event.pull_request.base.ref != 'master' || ( contains(github.event.pull_request.labels.*.name, 'automerge:squash') || - contains(github.event.pull_request.labels.*.name, 'automerge:merge') || + contains(github.event.pull_request.labels.*.name, 'automerge:no-update') || contains(github.event.pull_request.labels.*.name, 'automerge:rebase') || contains(github.event.pull_request.labels.*.name, 'bypass:automerge') || github.event.pull_request.auto_merge != null @@ -56,7 +56,7 @@ jobs: github.event_name == 'pull_request' && github.event.pull_request.draft == false && github.event.pull_request.base.ref == 'master' && ( - contains(github.event.pull_request.labels.*.name, 'automerge:merge') || + contains(github.event.pull_request.labels.*.name, 'automerge:no-update') || contains(github.event.pull_request.labels.*.name, 'bypass:automerge') ) && !contains(github.event.pull_request.labels.*.name, 'bypass:linear-history') diff --git a/.github/workflows/pre-check-integration.yml b/.github/workflows/pre-check-integration.yml index b110d5c033e..14b7e24ae09 100644 --- a/.github/workflows/pre-check-integration.yml +++ b/.github/workflows/pre-check-integration.yml @@ -21,7 +21,7 @@ jobs: github.event.pull_request.draft == false && ( contains(github.event.pull_request.labels.*.name, 'automerge:squash') || - contains(github.event.pull_request.labels.*.name, 'automerge:merge') || + contains(github.event.pull_request.labels.*.name, 'automerge:no-update') || contains(github.event.pull_request.labels.*.name, 'automerge:rebase') || github.event.pull_request.auto_merge != null ) && diff --git a/.mergify.yml b/.mergify.yml index 3c547b0b10f..24230f0c3f7 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -42,7 +42,7 @@ pull_request_rules: - name: merge to master conditions: - base=master - - label=automerge:merge + - label=automerge:no-update - or: - check-success=wait-integration-pre-checks - label=bypass:integration From 93a49d19872e7bd52c9763f82e9d00913a0e8464 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Tue, 29 Aug 2023 02:16:06 +0000 Subject: [PATCH 21/44] ci: add unlabeled pull_request trigger --- .github/workflows/integration.yml | 1 + .github/workflows/mergify-ready.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index a5d9ef8e1a6..810787b36ad 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -19,6 +19,7 @@ on: - converted_to_draft - ready_for_review - labeled + - unlabeled - auto_merge_enabled - auto_merge_disabled merge_group: diff --git a/.github/workflows/mergify-ready.yml b/.github/workflows/mergify-ready.yml index cbfe20ca0d3..945e9f1da97 100644 --- a/.github/workflows/mergify-ready.yml +++ b/.github/workflows/mergify-ready.yml @@ -9,6 +9,7 @@ on: - converted_to_draft - ready_for_review - labeled + - unlabeled - auto_merge_enabled - auto_merge_disabled merge_group: From d1022c4d2ab5de8f32da4765b12ee5703eb1e25d Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Tue, 29 Aug 2023 03:06:18 +0000 Subject: [PATCH 22/44] ci(mergify): use integration test combined result --- .mergify.yml | 37 ++++--------------------------------- 1 file changed, 4 insertions(+), 33 deletions(-) diff --git a/.mergify.yml b/.mergify.yml index cc29eaca1b3..0f1a07469e5 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -5,38 +5,9 @@ queue_rules: - base=master # Require integration tests before merging only - or: - - label=bypass:integration - - check-failure!=Integration tests - - or: - - label=bypass:integration - - check-success=deployment-test - - check-neutral=deployment-test - - check-skipped=deployment-test - - or: - - label=bypass:integration - - check-failure!=test-docker-build (main) - - or: - - label=bypass:integration - - check-skipped=test-docker-build - - check-success=test-docker-build (main) - - check-neutral=test-docker-build (main) - - check-skipped=test-docker-build (main) - - or: - - label=bypass:integration - - check-failure!=getting-started (link-cli) - - or: - - label=bypass:integration - - check-skipped=getting-started - - check-success=getting-started (link-cli) - - check-neutral=getting-started (link-cli) - - check-skipped=getting-started (link-cli) - # FIXME: Enable this section to validate NPM deploys... - #- or: - # - label=bypass:integration - # - check-skipped=getting-started - # - check-success=getting-started (local-npm) - # - check-neutral=getting-started (local-npm) - # - check-skipped=getting-started (local-npm) + - check-success=integration-test-result + - check-neutral=integration-test-result + - check-skipped=integration-test-result pull_request_rules: - name: merge to master @@ -44,7 +15,7 @@ pull_request_rules: - base=master - label=automerge:no-update - or: - - "#commits-behind=0" + - '#commits-behind=0' - label=bypass:linear-history - or: - check-success=wait-integration-pre-checks From 1a281f5a74ac09c59f099b2c089f2a9eec968f45 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman <86499+mhofman@users.noreply.github.com> Date: Mon, 28 Aug 2023 19:49:09 -0300 Subject: [PATCH 23/44] ci(Mergify): configuration update (#8266) --- .mergify.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.mergify.yml b/.mergify.yml index 24230f0c3f7..cc29eaca1b3 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -43,6 +43,9 @@ pull_request_rules: conditions: - base=master - label=automerge:no-update + - or: + - "#commits-behind=0" + - label=bypass:linear-history - or: - check-success=wait-integration-pre-checks - label=bypass:integration From 16ef814f31dce142f980592572e7b5a857a6541e Mon Sep 17 00:00:00 2001 From: Mathieu Hofman <86499+mhofman@users.noreply.github.com> Date: Tue, 29 Aug 2023 18:42:55 -0300 Subject: [PATCH 24/44] ci: only satisfy pre-checks once merge requested (#8275) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- .github/workflows/mergify-ready.yml | 3 ++- .github/workflows/pre-check-integration.yml | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.github/workflows/mergify-ready.yml b/.github/workflows/mergify-ready.yml index 945e9f1da97..c1a73759bae 100644 --- a/.github/workflows/mergify-ready.yml +++ b/.github/workflows/mergify-ready.yml @@ -20,6 +20,7 @@ jobs: wait-integration-pre-checks: needs: pre_check + if: needs.pre_check.outputs.merge_requested == 'true' runs-on: ubuntu-latest steps: - name: wait @@ -28,7 +29,7 @@ jobs: cat <- + ${{ + github.event_name != 'pull_request' || ( + ( + github.event.pull_request.base.ref == 'master' || + github.event.pull_request.base.ref == 'release-pismo' || + github.event.pull_request.base.ref == 'beta' + ) && + github.event.pull_request.draft == false && + ( + contains(github.event.pull_request.labels.*.name, 'automerge:squash') || + contains(github.event.pull_request.labels.*.name, 'automerge:no-update') || + contains(github.event.pull_request.labels.*.name, 'automerge:rebase') || + github.event.pull_request.auto_merge != null + ) + ) + }} jobs: check_and_cancel: From 3d052ec2d9d6cff073f403ef1b4b017b0eed5f57 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Wed, 30 Aug 2023 22:05:10 +0000 Subject: [PATCH 25/44] ci: carry forward the previous success of an integration test --- .github/workflows/integration.yml | 3 ++- .github/workflows/pre-check-integration.yml | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 810787b36ad..0ee942ea804 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -261,7 +261,7 @@ jobs: - getting-started - deployment-test - test-docker-build - if: needs.pre_check.outputs.should_run == 'true' && (success() || failure() || cancelled()) + if: (needs.pre_check.outputs.should_run == 'true' && (success() || failure() || cancelled())) || needs.pre_check.outputs.previous_success == 'true' runs-on: ubuntu-latest steps: - name: Check job results @@ -270,6 +270,7 @@ jobs: cat <- @@ -49,6 +52,12 @@ jobs: runs-on: ubuntu-latest outputs: should_skip: ${{ (steps.step2.outcome == 'skipped' || steps.step2.outputs.concurrent_conclusion == 'success') && steps.step1.outputs.should_skip || 'false' }} + previous_success: >- + ${{ + (steps.step2.outcome == 'skipped' && steps.step1.outputs.reason == 'skip_after_successful_duplicate' && 'true') || + (steps.step2.outputs.concurrent_conclusion == 'success' && 'true') || + 'false' + }} steps: - id: step1 uses: fkirc/skip-duplicate-actions@v5 From cd5ca93be6734ed0b6a382ba9127d740370880ba Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Wed, 30 Aug 2023 22:05:48 +0000 Subject: [PATCH 26/44] ci(mergify): require success of integration test --- .mergify.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.mergify.yml b/.mergify.yml index 0f1a07469e5..40364b40b9a 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -5,9 +5,8 @@ queue_rules: - base=master # Require integration tests before merging only - or: + - label=bypass:integration - check-success=integration-test-result - - check-neutral=integration-test-result - - check-skipped=integration-test-result pull_request_rules: - name: merge to master From b14331a865e81ae6b45d6c3c695495aa0fb21dc9 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman <86499+mhofman@users.noreply.github.com> Date: Fri, 8 Sep 2023 15:26:06 -0300 Subject: [PATCH 27/44] ci: use a manual check for integration-test-result (#8315) * ci: use a manual check for integration-test-result * chore: recreate integration-test-result check on re-run --- .github/actions/get-latest-check/action.yml | 82 ++++++++++++++++++++ .github/workflows/integration.yml | 85 ++++++++++++++++++--- .github/workflows/mergify-ready.yml | 30 +++++--- 3 files changed, 173 insertions(+), 24 deletions(-) create mode 100644 .github/actions/get-latest-check/action.yml diff --git a/.github/actions/get-latest-check/action.yml b/.github/actions/get-latest-check/action.yml new file mode 100644 index 00000000000..3050ac4aff5 --- /dev/null +++ b/.github/actions/get-latest-check/action.yml @@ -0,0 +1,82 @@ +name: Get latest check +description: "Get the latest integration-test-result check associated with the workflow's commit" + +inputs: + create-if-needed: + description: 'Create a new check if a previous check is not suitable' + default: false + +outputs: + run_id: + description: 'The id of the integration-test-result check' + value: ${{ steps.attach-check.outputs.result }} + +runs: + using: composite + steps: + - name: Attach integration-test-result check + id: attach-check + uses: actions/github-script@v6 + env: + CREATE_IF_NEEDED: '${{ inputs.create-if-needed }}' + with: + result-encoding: string + script: | + let createIfNeeded = process.env.CREATE_IF_NEEDED === 'true' + let runId; + const currentWorkflowRunUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}` + const head_sha = context.eventName === 'pull_request' ? + context.payload.pull_request.head.sha : context.sha + + async function attachRun(run) { + if (!run) { + core.setFailed(`No integration-test-result check found for commit ${head_sha}`) + return + } + console.log('Latest integration-test-result check run:', run.html_url) + if (run.status === 'completed') { + core.setFailed(`Latest integration-test-result check status is already completed`) + return + } + if (run.output.summary) { + if (run.output.summary.includes(currentWorkflowRunUrl)) { + console.log('Latest integration-test-result check is already attached to this workflow run, using.') + return run.id + } else { + core.setFailed(`Latest integration-test-result check found attached to workflow run: ${run.output.summary}`) + return + } + } + + const res = await github.rest.checks.update({ + ...context.repo, + check_run_id: run.id, + output: { + title: 'Integration Test Aggregate Result', + summary: `Synthetic check capturing the result of the integration-test workflow run`, + }, + }) + console.log(`Attached integration-test-result check to this workflow run`) + return run.id + } + + const runs = await github.paginate(github.rest.checks.listForRef, { + ...context.repo, + ref: head_sha, + check_name: "integration-test-result", + }) + core.debug(`integration-test-result check runs: ${JSON.stringify(runs, null, 2)}`) + runId = await attachRun(runs.sort((a, b) => Date.parse(b.started_at) - Date.parse(a.started_at))[0]) + + if (!runId && createIfNeeded) { + process.exitCode = 0 + const res = await github.rest.checks.create({ + ...context.repo, + head_sha, + name: "integration-test-result", + }) + core.debug('check create response: ${JSON.stringify(res, null, 2)}') + console.log('created integration-test-result check:', res.data.html_url) + runId = await attachRun(res.data) + } + return runId diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 0ee942ea804..7e82ee5ab2f 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -49,6 +49,11 @@ jobs: - uses: actions/checkout@v3 with: persist-credentials: false + - name: Recreate integration-test-result if needed + id: get-pending-integration-result + uses: ./.github/actions/get-latest-check + with: + create-if-needed: true - name: Reconfigure git to use HTTP authentication run: git config --global url."https://github.com/".insteadOf ssh://git@github.com/ shell: bash @@ -112,6 +117,11 @@ jobs: with: submodules: 'true' path: ./agoric-sdk + - name: Recreate integration-test-result if needed + id: get-pending-integration-result + uses: ./agoric-sdk/.github/actions/get-latest-check + with: + create-if-needed: true - run: sudo packages/deployment/scripts/install-deps.sh working-directory: ./agoric-sdk - uses: ./agoric-sdk/.github/actions/restore-golang @@ -226,6 +236,11 @@ jobs: echo "=== After cleanup:" df -h - uses: actions/checkout@v3 + - name: Recreate integration-test-result if needed + id: get-pending-integration-result + uses: ./.github/actions/get-latest-check + with: + create-if-needed: true - name: docker build (sdk) # Produces ghcr.io/agoric/agoric-sdk:latest used in the following upgrade test. # TODO: Build this only once, not for every bootstrap-version. @@ -255,22 +270,68 @@ jobs: with: datadog-token: ${{ secrets.DATADOG_API_KEY }} - integration-test-result: + set-integration-result-in-progress: + needs: pre_check + if: needs.pre_check.outputs.should_run == 'true' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - id: get-pending-integration-result + uses: ./.github/actions/get-latest-check + with: + create-if-needed: true + - name: Update integration-test-result check to in-progress + uses: actions/github-script@v6 + with: + script: | + const runId = "${{ steps.get-pending-integration-result.outputs.run_id }}"; + const res = await github.rest.checks.update({ + ...context.repo, + check_run_id: runId, + status: "in_progress", + }) + core.debug(`Check update response: ${JSON.stringify(res, null, 2)}`) + console.log(`Updated check ${runId} to in-progress`) + + finalize-integration-result: needs: - pre_check - getting-started - deployment-test - test-docker-build - if: (needs.pre_check.outputs.should_run == 'true' && (success() || failure() || cancelled())) || needs.pre_check.outputs.previous_success == 'true' + if: >- + always() && + needs.pre_check.result == 'success' && + needs.getting-started.result != 'cancelled' && + needs.deployment-test.result != 'cancelled' && + needs.test-docker-build.result != 'cancelled' && + ( + needs.pre_check.outputs.should_run == 'true' || + needs.pre_check.outputs.previous_success == 'true' + ) runs-on: ubuntu-latest steps: - - name: Check job results - shell: bash - run: | - cat < Date: Sat, 9 Sep 2023 00:19:34 -0300 Subject: [PATCH 28/44] ci: ensure integration tests run to completion (#8261) --- .github/actions/restore-node/action.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/actions/restore-node/action.yml b/.github/actions/restore-node/action.yml index 9d6aadd5bc0..08c9001817b 100644 --- a/.github/actions/restore-node/action.yml +++ b/.github/actions/restore-node/action.yml @@ -80,6 +80,18 @@ runs: echo "sha=NOPE" >> $GITHUB_OUTPUT fi shell: bash + - name: merge endo integration branch + id: endo-integration-merge + run: |- + set -e + git ls-remote --exit-code --heads origin "refs/heads/integration-endo-${{ steps.endo-branch.outputs.result }}" || exit 0 + git fetch --unshallow origin integration-endo-${{ steps.endo-branch.outputs.result }} + git config user.name github-actions + git config user.email github-actions@github.com + git merge --commit --no-edit origin/integration-endo-${{ steps.endo-branch.outputs.result }} + shell: bash + working-directory: ${{ inputs.path }} + if: steps.endo-branch.outputs.result != 'NOPE' - name: Reconfigure git to use HTTP authentication run: git config --global url."https://github.com/".insteadOf ssh://git@github.com/ shell: bash From aed178633ffce0fa35f287ab5b6e5cae1a127c10 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Thu, 7 Sep 2023 19:11:13 -0600 Subject: [PATCH 29/44] ci(integration): add `ag-chain-cosmos` output as an artifact --- packages/deployment/scripts/capture-integration-results.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/deployment/scripts/capture-integration-results.sh b/packages/deployment/scripts/capture-integration-results.sh index 36a7b52f903..5bc3ad4bb39 100755 --- a/packages/deployment/scripts/capture-integration-results.sh +++ b/packages/deployment/scripts/capture-integration-results.sh @@ -14,6 +14,7 @@ home=/home/ag-chain-cosmos/.ag-chain-cosmos for node in validator{0,1}; do "$thisdir/setup.sh" ssh "$node" cat "$home/config/genesis.json" > "$RESULTSDIR/$node-genesis.json" || true + "$thisdir/setup.sh" ssh "$node" cat /var/log/journal/ag-chain-cosmos.service.log > "$RESULTSDIR/$node-journal.log" || true "$thisdir/setup.sh" ssh "$node" cat "$home/data/chain.slog" > "$RESULTSDIR/$node.slog" || \ "$thisdir/setup.sh" ssh "$node" cat "$home/data/agoric/flight-recorder.bin" > "$RESULTSDIR/$node-flight-recorder.bin" || true done From 1b45782006f9eb6e17ee9aacb78583dfb4ad96fc Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Mon, 4 Sep 2023 19:29:28 -0600 Subject: [PATCH 30/44] ci(registry): publish Endo in CI registry, update versions --- .github/actions/restore-node/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/restore-node/action.yml b/.github/actions/restore-node/action.yml index 08c9001817b..bbc6d93b0b4 100644 --- a/.github/actions/restore-node/action.yml +++ b/.github/actions/restore-node/action.yml @@ -129,7 +129,7 @@ runs: if test -e ~/endo; then # Stage the redirected `yarn install` consequences. git add package.json yarn.lock - rm -rf ~/endo + ${{ inputs.keep-endo }} || rm -rf ~/endo fi shell: bash if: steps.built.outputs.cache-hit != 'true' From 6c570024617b577b76606e04fda729bc7aa30918 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman <86499+mhofman@users.noreply.github.com> Date: Thu, 21 Sep 2023 14:45:52 -0700 Subject: [PATCH 31/44] ci: jobs compatibility with release branch (#8369) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- .github/workflows/pre-check-integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-check-integration.yml b/.github/workflows/pre-check-integration.yml index 00c47a41f5a..c8594081ff3 100644 --- a/.github/workflows/pre-check-integration.yml +++ b/.github/workflows/pre-check-integration.yml @@ -16,7 +16,7 @@ on: github.event_name != 'pull_request' || ( ( github.event.pull_request.base.ref == 'master' || - github.event.pull_request.base.ref == 'release-pismo' || + startsWith(github.event.pull_request.base.ref, 'release-') || github.event.pull_request.base.ref == 'beta' ) && github.event.pull_request.draft == false && From 935c55d92c6c361dafb080421b3bfab4408478c1 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Sun, 3 Dec 2023 23:59:23 +0000 Subject: [PATCH 32/44] chore(upgrade-test): remove BOOTSTRAP_MODE --- .github/workflows/integration.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 7e82ee5ab2f..9710fa138eb 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -243,7 +243,6 @@ jobs: create-if-needed: true - name: docker build (sdk) # Produces ghcr.io/agoric/agoric-sdk:latest used in the following upgrade test. - # TODO: Build this only once, not for every bootstrap-version. # run: cd packages/deployment && ./scripts/test-docker-build.sh | $TEST_COLLECT # XXX skip TAP test output and collection for now; it hides the output from the logs run: cd packages/deployment && make docker-build-sdk From 7249d408dbd0452d3de5df3cc36eea3a5c127d46 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Mon, 8 Jan 2024 21:34:35 -0600 Subject: [PATCH 33/44] ci(linear-history): fix external PR sha references --- .github/workflows/mergify-ready.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/mergify-ready.yml b/.github/workflows/mergify-ready.yml index 244d34a9597..6be6037cbdf 100644 --- a/.github/workflows/mergify-ready.yml +++ b/.github/workflows/mergify-ready.yml @@ -74,10 +74,14 @@ jobs: fetch-depth: 0 - shell: bash run: | - merge_commits=$(git rev-list --merges "origin/$GITHUB_BASE_REF".."origin/$GITHUB_HEAD_REF") + HEAD_SHA=${{ github.event.pull_request.head.sha }} + HEAD_LABEL="${{ github.event.pull_request.head.label }}" + BASE_SHA=${{ github.event.pull_request.base.sha }} + BASE_LABEL="${{ github.event.pull_request.base.label }}" + merge_commits=$(git rev-list --merges "$BASE_SHA".."$HEAD_SHA") if [ -n "$merge_commits" ]; then - echo "Error: merge commits found in $GITHUB_BASE_REF..$GITHUB_HEAD_REF" + echo "Error: merge commits found in $BASE_LABEL..$HEAD_LABEL" for merge_commit in $merge_commits; do echo "$merge_commit" @@ -87,7 +91,7 @@ jobs: fi fixup_commits= - for commit in $(git rev-list $GITHUB_BASE_REF..$GITHUB_HEAD_REF); do + for commit in $(git rev-list $BASE_SHA..$HEAD_SHA); do case $(git show --pretty=format:%s -s $commit) in fixup\!*|squash\!*) fixup_commits="$fixup_commits\n$commit" ;; @@ -95,7 +99,7 @@ jobs: done if [ -n "$fixup_commits" ]; then - echo "Error: fixup/squash commits found in $GITHUB_BASE_REF..$GITHUB_HEAD_REF" + echo "Error: fixup/squash commits found in $BASE_LABEL..$HEAD_LABEL" echo -e "$fixup_commits" exit 1 fi From ffde07b41812ed3e850f709fe7a8a60d56ae2d11 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Mon, 8 Jan 2024 21:32:53 -0600 Subject: [PATCH 34/44] ci: manipulate checks within `workflow_run` --- .github/workflows/integration.yml | 56 ++----------- .../workflows/manage-integration-check.yml | 84 +++++++++++++++++++ .github/workflows/mergify-ready.yml | 22 ----- .mergify.yml | 9 +- 4 files changed, 95 insertions(+), 76 deletions(-) create mode 100644 .github/workflows/manage-integration-check.yml diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 557c483770e..6f745f3aaed 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -49,11 +49,6 @@ jobs: - uses: actions/checkout@v3 with: persist-credentials: false - - name: Recreate integration-test-result if needed - id: get-pending-integration-result - uses: ./.github/actions/get-latest-check - with: - create-if-needed: true - name: Reconfigure git to use HTTP authentication run: git config --global url."https://github.com/".insteadOf ssh://git@github.com/ shell: bash @@ -117,11 +112,6 @@ jobs: with: submodules: 'true' path: ./agoric-sdk - - name: Recreate integration-test-result if needed - id: get-pending-integration-result - uses: ./agoric-sdk/.github/actions/get-latest-check - with: - create-if-needed: true - run: sudo packages/deployment/scripts/install-deps.sh working-directory: ./agoric-sdk - uses: ./agoric-sdk/.github/actions/restore-golang @@ -237,11 +227,6 @@ jobs: echo "=== After cleanup:" df -h - uses: actions/checkout@v3 - - name: Recreate integration-test-result if needed - id: get-pending-integration-result - uses: ./.github/actions/get-latest-check - with: - create-if-needed: true - name: docker build (sdk) # Produces ghcr.io/agoric/agoric-sdk:latest used in the following upgrade test. # run: cd packages/deployment && ./scripts/test-docker-build.sh | $TEST_COLLECT @@ -270,29 +255,6 @@ jobs: with: datadog-token: ${{ secrets.DATADOG_API_KEY }} - set-integration-result-in-progress: - needs: pre_check - if: needs.pre_check.outputs.should_run == 'true' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - id: get-pending-integration-result - uses: ./.github/actions/get-latest-check - with: - create-if-needed: true - - name: Update integration-test-result check to in-progress - uses: actions/github-script@v6 - with: - script: | - const runId = "${{ steps.get-pending-integration-result.outputs.run_id }}"; - const res = await github.rest.checks.update({ - ...context.repo, - check_run_id: runId, - status: "in_progress", - }) - core.debug(`Check update response: ${JSON.stringify(res, null, 2)}`) - console.log(`Updated check ${runId} to in-progress`) - finalize-integration-result: needs: - pre_check @@ -312,26 +274,18 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - id: get-pending-integration-result - uses: ./.github/actions/get-latest-check - with: - create-if-needed: true - - name: Publish integration-test-result + - name: Final integration-test-result if: always() uses: actions/github-script@v6 with: script: | - const runId = "${{ steps.get-pending-integration-result.outputs.run_id }}"; const previousSuccess = ${{ needs.pre_check.outputs.previous_success }}; const gettingStartedTestSuccess = "${{ needs.getting-started.result }}" === "success"; const deploymentTestSuccess = "${{ needs.deployment-test.result }}" === "success"; const testDockerBuildSuccess = "${{ needs.test-docker-build.result }}" === "success"; const conclusion = previousSuccess || (gettingStartedTestSuccess && deploymentTestSuccess && testDockerBuildSuccess) ? 'success' : 'failure'; - const res = await github.rest.checks.update({ - ...context.repo, - check_run_id: runId, - conclusion, - }) - core.debug(`Check update response: ${JSON.stringify(res, null, 2)}`) - console.log(`Updated check ${runId} to ${conclusion}`) + console.log(`Finishing with ${conclusion}`) + if (conclusion === 'failure') { + core.setFailed('Integration tests failed') + } diff --git a/.github/workflows/manage-integration-check.yml b/.github/workflows/manage-integration-check.yml new file mode 100644 index 00000000000..e4c5ac96351 --- /dev/null +++ b/.github/workflows/manage-integration-check.yml @@ -0,0 +1,84 @@ +name: Manage integration check + +on: + workflow_run: + workflows: ['Integration tests'] + +jobs: + create-check: + runs-on: ubuntu-latest + outputs: + check_id: ${{ steps.create-check.outputs.result }} + steps: + - name: Create check + uses: actions/github-script@v6 + id: create-check + if: ${{ github.event.action == 'requested' || github.event.action == 'in_progress' }} + with: + script: | + const external_id = context.payload.workflow_run.html_url; + const head_sha = context.payload.workflow_run.head_sha; + const runs = await github.paginate(github.rest.checks.listForRef, { + ...context.repo, + ref: head_sha, + check_name: "integration-test-result", + external_id, + }) + core.debug(`integration-test-result check runs: ${JSON.stringify(runs, null, 2)}`); + const filtRuns = runs.filter(run => run.status !== 'completed'); + const descRuns = filtRuns.sort((a, b) => Date.parse(b.started_at) - Date.parse(a.started_at)); + const run = descRuns[0]; + + if (run) { + // Check already exists. + return run.id; + } + + const check = await github.rest.checks.create({ + ...context.repo, + head_sha, + name: "integration-test-result", + status: "in_progress", + external_id, + output: { + title: "Integration Test Aggregate Result", + summary: `Synthetic check capturing the result of the integration-test workflow run`, + } + }); + return check.data.id; + update-check: + runs-on: ubuntu-latest + steps: + - name: Update check result + uses: actions/github-script@v6 + if: ${{ github.event.action == 'completed' }} + with: + result-encoding: string + script: | + // Update the check run + const external_id = context.payload.workflow_run.html_url; + const head_sha = context.payload.workflow_run.head_sha; + const runs = await github.paginate(github.rest.checks.listForRef, { + ...context.repo, + ref: head_sha, + check_name: "integration-test-result", + external_id, + }) + core.debug(`integration-test-result check runs: ${JSON.stringify(runs, null, 2)}`); + const filtRuns = runs.filter(run => run.status !== 'completed'); + const descRuns = filtRuns.sort((a, b) => Date.parse(b.started_at) - Date.parse(a.started_at)); + const run = descRuns[0]; + + if (!run) { + core.setFailed(`No integration-test-result check found for commit ${head_sha} ${external_id}`); + return; + } + + console.log('Latest integration-test-result check run:', run.html_url) + await github.rest.checks.update({ + ...context.repo, + check_run_id: run.id, + status: "completed", + conclusion: context.payload.workflow_run.conclusion, + }); + return run.id diff --git a/.github/workflows/mergify-ready.yml b/.github/workflows/mergify-ready.yml index 6be6037cbdf..a3853923771 100644 --- a/.github/workflows/mergify-ready.yml +++ b/.github/workflows/mergify-ready.yml @@ -15,28 +15,6 @@ on: merge_group: jobs: - wait-integration-pre-checks: - runs-on: ubuntu-latest - steps: - - name: Create integration-test-result check - id: create-check - if: always() - uses: actions/github-script@v6 - with: - script: | - const head_sha = context.eventName === 'pull_request' ? - context.payload.pull_request.head.sha : context.sha - const res = await github.rest.checks.create({ - ...context.repo, - head_sha, - name: "integration-test-result", - }) - core.debug('check create response: ${JSON.stringify(res, null, 2)}') - console.log('created integration-test-result', res.data.html_url) - return res.data.id - outputs: - run_id: ${{ steps.create-check.outputs.result }} - merge-strategy: runs-on: ubuntu-latest if: >- diff --git a/.mergify.yml b/.mergify.yml index 40364b40b9a..aac35a1796c 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -17,7 +17,8 @@ pull_request_rules: - '#commits-behind=0' - label=bypass:linear-history - or: - - check-success=wait-integration-pre-checks + - check-pending=integration-test-result + - check-success=integration-test-result - label=bypass:integration - or: - and: # breakage succeeds like we thought @@ -35,7 +36,8 @@ pull_request_rules: - base=master - label=automerge:rebase - or: - - check-success=wait-integration-pre-checks + - check-pending=integration-test-result + - check-success=integration-test-result - label=bypass:integration - or: - and: # breakage succeeds like we thought @@ -54,7 +56,8 @@ pull_request_rules: - base=master - label=automerge:squash - or: - - check-success=wait-integration-pre-checks + - check-pending=integration-test-result + - check-success=integration-test-result - label=bypass:integration - or: - and: # breakage succeeds like we thought From 28e5380e0c16f19e9c63949ba7e6a3a7aeee0f75 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Mon, 8 Jan 2024 23:28:02 -0600 Subject: [PATCH 35/44] ci(mergify-ready): stub `wait-integration-pre-checks` to appease required jobs --- .github/workflows/mergify-ready.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/mergify-ready.yml b/.github/workflows/mergify-ready.yml index a3853923771..ac33530592c 100644 --- a/.github/workflows/mergify-ready.yml +++ b/.github/workflows/mergify-ready.yml @@ -15,6 +15,12 @@ on: merge_group: jobs: + wait-integration-pre-checks: + runs-on: ubuntu-latest + steps: + - shell: bash + run: echo "TODO remove this vestigial job" + merge-strategy: runs-on: ubuntu-latest if: >- From 14120e27b07dd5ed36b045a0c136a06a94d56a04 Mon Sep 17 00:00:00 2001 From: Turadg Aleahmad Date: Mon, 11 Dec 2023 09:28:52 -0800 Subject: [PATCH 36/44] ci: defer Loadgen compatibility --- .github/workflows/integration.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 9710fa138eb..557c483770e 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -130,7 +130,8 @@ jobs: path: ./agoric-sdk - uses: ./agoric-sdk/.github/actions/restore-node with: - node-version: 18.x + # XXX loadgen not compatible with 18.19 https://github.com/Agoric/agoric-sdk/pull/8365#issuecomment-1848003597 + node-version: 18.18 path: ./agoric-sdk # Forces xsnap to initialize all memory to random data, which increases # the chances the content of snapshots may deviate between validators From 3835ac64705752e43f445ea4f42af5e4e723a3d8 Mon Sep 17 00:00:00 2001 From: Raphael Salas Date: Tue, 9 Jan 2024 16:06:24 -0500 Subject: [PATCH 37/44] fix H1 link in SECURITY.md --- SECURITY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index 0cc65d400b7..698489b392a 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -8,7 +8,7 @@ The current `master` and only the latest `agoric-upgrade-*` tagged release and p At Agoric, we believe that strong security requires strong collaboration with security researchers. If you believe that you have found a security bug in our code, we encourage you to report it. To report a bug, you can: -* Submit a report to the [Agoric HackerOne vulnerability rewards program](hackerone.com/agoric), where it may be eligible for a reward. +* Submit a report to the [Agoric HackerOne vulnerability rewards program](https://hackerone.com/agoric), where it may be eligible for a reward. * Send an email to [security@agoric.com](mailto:security@agoric.com). From add76cb80eca78894ab765729775034cdbbf75b6 Mon Sep 17 00:00:00 2001 From: Turadg Aleahmad Date: Tue, 12 Dec 2023 10:46:07 -0800 Subject: [PATCH 38/44] lint: disable jsdoc/require-param-type for .ts --- .eslintrc.cjs | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 73043157427..94fe2b48c34 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -108,6 +108,7 @@ module.exports = { { files: ['*.ts'], rules: { + 'jsdoc/require-param-type': 'off', // TS has this covered and eslint gets it wrong 'no-undef': 'off', }, From 392cf80af4510ab9914639199f7ed03e1744d1c4 Mon Sep 17 00:00:00 2001 From: Turadg Aleahmad Date: Fri, 8 Dec 2023 10:29:48 -0800 Subject: [PATCH 39/44] chore(deps): bump commander to 11.1 --- packages/agoric-cli/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/agoric-cli/package.json b/packages/agoric-cli/package.json index 66d6a217b30..85465f429c1 100644 --- a/packages/agoric-cli/package.json +++ b/packages/agoric-cli/package.json @@ -65,7 +65,7 @@ "@iarna/toml": "^2.2.3", "anylogger": "^0.21.0", "chalk": "^5.2.0", - "commander": "^10.0.0", + "commander": "^11.1.0", "deterministic-json": "^1.0.5", "esm": "agoric-labs/esm#Agoric-built", "inquirer": "^8.2.2", diff --git a/yarn.lock b/yarn.lock index f79cbb868d8..e619e98a27e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5206,10 +5206,10 @@ commander@7.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff" integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg== -commander@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.0.tgz#71797971162cd3cf65f0b9d24eb28f8d303acdf1" - integrity sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA== +commander@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== commander@^2.19.0, commander@~2.20.3: version "2.20.3" From 8e92fc4b686eb9a647b906e6cf33c2fc7312540c Mon Sep 17 00:00:00 2001 From: Turadg Aleahmad Date: Tue, 12 Dec 2023 15:51:01 -0800 Subject: [PATCH 40/44] feat: a3p-integration package --- a3p-integration/.gitignore | 12 + a3p-integration/README.md | 50 + a3p-integration/package.json | 15 + .../proposals/a:upgrade-13/.yarnrc.yml | 1 + .../proposals/a:upgrade-13/package.json | 21 + .../proposals/a:upgrade-13/post.test.js | 55 + .../proposals/a:upgrade-13/test.sh | 4 + a3p-integration/proposals/a:upgrade-13/use.sh | 5 + .../proposals/a:upgrade-13/yarn.lock | 2578 +++++++++++++++++ a3p-integration/yarn.lock | 623 ++++ 10 files changed, 3364 insertions(+) create mode 100644 a3p-integration/.gitignore create mode 100644 a3p-integration/README.md create mode 100644 a3p-integration/package.json create mode 100644 a3p-integration/proposals/a:upgrade-13/.yarnrc.yml create mode 100644 a3p-integration/proposals/a:upgrade-13/package.json create mode 100644 a3p-integration/proposals/a:upgrade-13/post.test.js create mode 100644 a3p-integration/proposals/a:upgrade-13/test.sh create mode 100644 a3p-integration/proposals/a:upgrade-13/use.sh create mode 100644 a3p-integration/proposals/a:upgrade-13/yarn.lock create mode 100644 a3p-integration/yarn.lock diff --git a/a3p-integration/.gitignore b/a3p-integration/.gitignore new file mode 100644 index 00000000000..d6feb8e010d --- /dev/null +++ b/a3p-integration/.gitignore @@ -0,0 +1,12 @@ +# build in CI +Dockerfile +upgrade-test-scripts + +# Yarn (https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored) +proposals/*/.pnp.* +proposals/*/.yarn/* +proposals/*/!.yarn/patches +proposals/*/!.yarn/plugins +proposals/*/!.yarn/releases +proposals/*/!.yarn/sdks +proposals/*/!.yarn/versions diff --git a/a3p-integration/README.md b/a3p-integration/README.md new file mode 100644 index 00000000000..d783322488e --- /dev/null +++ b/a3p-integration/README.md @@ -0,0 +1,50 @@ +# Integration with agoric-3 synthetic test chain + +The test runner is `@agoric/synthetic-chain`. This package depends on that so that you can run, +``` +yarn synthetic-chain append +yarn synthetic-chain test +yarn synthetic-chain test --debug +``` + +# Package management + +This directory hierarchy, while it contains packages, is not part of the agoric-sdk workspace. This is to isolate it from tooling that expects a public package published to NPM. + +For each proposal, their package.json is also separate but it can't access the SDK code. Instead you must either source a published version of `@agoric/synthetic-chain` (e.g. a `dev` version published on each master commit) or pack a tarball and source that. + +``` +cd packages/synthetic-chain +yarn pack +TARBALL=`ls *.tgz` +cd - + +mv packages/synthetic-chain/$TARBALL a3p-integration/proposals/c:myproposal/ +# .tgz are gitignored at the root but a closer .gitignore makes an exception for this package's tarball +git add a3p-integration/proposals/c:myproposal/$TARBALL + +yarn add @agoric/synthetic-chain@file:$TARBALL + +``` + +# Troubleshooting + +## no match for platform + +If you get an error like this, +``` +ERROR: failed to solve: ghcr.io/agoric/agoric-3-proposals:main: no match for platform in manifest sha256:83321abda66fa94915f1ae20d651b66870f2d1aac17b71449c04ecd46b6b1b96: not found +``` +it's because our CI only builds x64 yet and you're on some other machine, probably a Mac. + +There is some effort to make CI build multiplatform: https://github.com/Agoric/agoric-3-proposals/pull/32 + +Meanwhile you can build the `main` image locally: + +```sh +cd agoric-3-proposals +./node_modules/.bin/synthetic-chain build + +# build the default entrypoint and tag it so the `append` command finds it +docker buildx build --tag ghcr.io/agoric/agoric-3-proposals:main . +``` diff --git a/a3p-integration/package.json b/a3p-integration/package.json new file mode 100644 index 00000000000..be5ad1785d3 --- /dev/null +++ b/a3p-integration/package.json @@ -0,0 +1,15 @@ +{ + "private": true, + "agoricSyntheticChain": { + "fromTag": "upgrade-12" + }, + "scripts": { + "build": "echo Use synthetic-chain to build proposal images", + "test": "echo Use synthetic-chain to test proposal images" + }, + "dependencies": { + "@agoric/synthetic-chain": "^0.0.3", + "tsx": "^4.7.0" + }, + "license": "Apache-2.0" +} diff --git a/a3p-integration/proposals/a:upgrade-13/.yarnrc.yml b/a3p-integration/proposals/a:upgrade-13/.yarnrc.yml new file mode 100644 index 00000000000..3186f3f0795 --- /dev/null +++ b/a3p-integration/proposals/a:upgrade-13/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/a3p-integration/proposals/a:upgrade-13/package.json b/a3p-integration/proposals/a:upgrade-13/package.json new file mode 100644 index 00000000000..323dab50723 --- /dev/null +++ b/a3p-integration/proposals/a:upgrade-13/package.json @@ -0,0 +1,21 @@ +{ + "agoricProposal": { + "releaseNotes": "https://github.com/Agoric/agoric-sdk/releases/tag/agoric-upgrade-13", + "sdkImageTag": "latest", + "planName": "agoric-upgrade-13", + "upgradeInfo": {}, + "type": "Software Upgrade Proposal" + }, + "type": "module", + "license": "Apache-2.0", + "dependencies": { + "@agoric/synthetic-chain": "^0.0.3", + "ava": "^5.3.1", + "better-sqlite3": "^9.2.2", + "execa": "^7.2.0" + }, + "scripts": { + "agops": "yarn --cwd /usr/src/agoric-sdk/ --silent agops" + }, + "packageManager": "yarn@4.0.2" +} diff --git a/a3p-integration/proposals/a:upgrade-13/post.test.js b/a3p-integration/proposals/a:upgrade-13/post.test.js new file mode 100644 index 00000000000..673ff3320fd --- /dev/null +++ b/a3p-integration/proposals/a:upgrade-13/post.test.js @@ -0,0 +1,55 @@ +import test from 'ava'; + +import { agd } from '@agoric/synthetic-chain/src/lib/cliHelper.js'; +import { + ATOM_DENOM, + CHAINID, + GOV1ADDR, +} from '@agoric/synthetic-chain/src/lib/constants.js'; +import { + mintIST, + getISTBalance, + openVault, +} from '@agoric/synthetic-chain/src/lib/econHelpers.js'; +import { + waitForBlock, + addUser, +} from '@agoric/synthetic-chain/src/lib/commonUpgradeHelpers.js'; + +test.before(async t => { + await mintIST(GOV1ADDR, 12340000000, 10000, 2000); + + await waitForBlock(2); + const userAddress = await addUser('user-auto'); + await agd.tx( + 'bank', + 'send', + 'gov1', + userAddress, + `1000000uist,2100000000${ATOM_DENOM}`, + '--from', + GOV1ADDR, + '--chain-id', + CHAINID, + '--keyring-backend', + 'test', + '--yes', + ); + t.context = { userAddress }; + await waitForBlock(2); +}); + +test('Open Vaults with auto-provisioned wallet', async t => { + const { userAddress } = /** @type {{userAddress: string}} */ (t.context); + t.is(await getISTBalance(userAddress), 1); + + const ATOMGiven = 2000; + const ISTWanted = 400; + await openVault(userAddress, ISTWanted, ATOMGiven); + + await waitForBlock(2); + + const newISTBalance = await getISTBalance(userAddress); + t.log('New IST Balance in user-auto account:', newISTBalance); + t.true(newISTBalance >= ISTWanted, 'Got the wanted IST'); +}); diff --git a/a3p-integration/proposals/a:upgrade-13/test.sh b/a3p-integration/proposals/a:upgrade-13/test.sh new file mode 100644 index 00000000000..49622201d54 --- /dev/null +++ b/a3p-integration/proposals/a:upgrade-13/test.sh @@ -0,0 +1,4 @@ +#!/bin/bash +source /usr/src/upgrade-test-scripts/env_setup.sh + +yarn ava post.test.js diff --git a/a3p-integration/proposals/a:upgrade-13/use.sh b/a3p-integration/proposals/a:upgrade-13/use.sh new file mode 100644 index 00000000000..df8bcbba93e --- /dev/null +++ b/a3p-integration/proposals/a:upgrade-13/use.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# UNTIl this is upstream https://github.com/Agoric/agoric-3-proposals/issues/40 +# Set to zero so tests don't have to pay gas (we're not testing that) +sed --in-place=.bak s/'minimum-gas-prices = ""'/'minimum-gas-prices = "0ubld,0uist"'/ ~/.agoric/config/app.toml diff --git a/a3p-integration/proposals/a:upgrade-13/yarn.lock b/a3p-integration/proposals/a:upgrade-13/yarn.lock new file mode 100644 index 00000000000..a7272f70e48 --- /dev/null +++ b/a3p-integration/proposals/a:upgrade-13/yarn.lock @@ -0,0 +1,2578 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@agoric/synthetic-chain@npm:^0.0.3": + version: 0.0.3 + resolution: "@agoric/synthetic-chain@npm:0.0.3" + dependencies: + better-sqlite3: "npm:^9.2.2" + tsx: "npm:^3.12.8" + typescript: "npm:^5.3.3" + bin: + synthetic-chain: cli.ts + checksum: 72e5196f1697649eb63eae0041b6e59395fd22c69b1be9a2339a861c397d0b7aba868c4d44052c515c1afa63fb192ec3778997567728836a0456e62747462374 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm64@npm:0.18.20" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm@npm:0.18.20" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-x64@npm:0.18.20" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-arm64@npm:0.18.20" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-x64@npm:0.18.20" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-arm64@npm:0.18.20" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-x64@npm:0.18.20" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm64@npm:0.18.20" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm@npm:0.18.20" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ia32@npm:0.18.20" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-loong64@npm:0.18.20" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-mips64el@npm:0.18.20" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ppc64@npm:0.18.20" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-riscv64@npm:0.18.20" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-s390x@npm:0.18.20" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-x64@npm:0.18.20" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/netbsd-x64@npm:0.18.20" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/openbsd-x64@npm:0.18.20" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/sunos-x64@npm:0.18.20" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-arm64@npm:0.18.20" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-ia32@npm:0.18.20" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-x64@npm:0.18.20" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.0 + resolution: "@npmcli/agent@npm:2.2.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.1" + checksum: 7b89590598476dda88e79c473766b67c682aae6e0ab0213491daa6083dcc0c171f86b3868f5506f22c09aa5ea69ad7dfb78f4bf39a8dca375d89a42f408645b3 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 162b4a0b8705cd6f5c2470b851d1dc6cd228c86d2170e1769d738c1fbb69a87160901411c3c035331e9e99db72f1f1099a8b734bf1637cc32b9a5be1660e4e1e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.2.0": + version: 8.3.1 + resolution: "acorn-walk@npm:8.3.1" + checksum: a23d2f7c6b6cad617f4c77f14dfeb062a239208d61753e9ba808d916c550add92b39535467d2e6028280761ac4f5a904cc9df21530b84d3f834e3edef74ddde5 + languageName: node + linkType: hard + +"acorn@npm:^8.8.2": + version: 8.11.2 + resolution: "acorn@npm:8.11.2" + bin: + acorn: bin/acorn + checksum: a3ed76c761b75ec54b1ec3068fb7f113a182e95aea7f322f65098c2958d232e3d211cb6dac35ff9c647024b63714bc528a26d54a925d1fef2c25585b4c8e4017 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": + version: 7.1.0 + resolution: "agent-base@npm:7.1.0" + dependencies: + debug: "npm:^4.3.4" + checksum: fc974ab57ffdd8421a2bc339644d312a9cca320c20c3393c9d8b1fd91731b9bbabdb985df5fc860f5b79d81c3e350daa3fcb31c5c07c0bb385aafc817df004ce + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"aggregate-error@npm:^4.0.0": + version: 4.0.1 + resolution: "aggregate-error@npm:4.0.1" + dependencies: + clean-stack: "npm:^4.0.0" + indent-string: "npm:^5.0.0" + checksum: 75fd739f5c4c60a667cce35ccaf0edf135e147ef0be9a029cab75de14ac9421779b15339d562e58d25b233ea0ef2bbd4c916f149fdbcb73c2b9a62209e611343 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + +"array-find-index@npm:^1.0.1": + version: 1.0.2 + resolution: "array-find-index@npm:1.0.2" + checksum: 86b9485c74ddd324feab807e10a6de3f9c1683856267236fac4bb4d4667ada6463e106db3f6c540ae6b720e0442b590ec701d13676df4c6af30ebf4da09b4f57 + languageName: node + linkType: hard + +"arrgv@npm:^1.0.2": + version: 1.0.2 + resolution: "arrgv@npm:1.0.2" + checksum: 7e6e782e6b749923ac7cbc4048ef6fe0844c4a59bfc8932fcd4c44566ba25eed46501f94dd7cf3c7297da88f3f599ca056bfb77d0c2484aebc92f04239f69124 + languageName: node + linkType: hard + +"arrify@npm:^3.0.0": + version: 3.0.0 + resolution: "arrify@npm:3.0.0" + checksum: 2e26601b8486f29780f1f70f7ac05a226755814c2a3ab42e196748f650af1dc310cd575a11dd4b9841c70fd7460b2dd2b8fe6fb7a3375878e2660706efafa58e + languageName: node + linkType: hard + +"ava@npm:^5.3.1": + version: 5.3.1 + resolution: "ava@npm:5.3.1" + dependencies: + acorn: "npm:^8.8.2" + acorn-walk: "npm:^8.2.0" + ansi-styles: "npm:^6.2.1" + arrgv: "npm:^1.0.2" + arrify: "npm:^3.0.0" + callsites: "npm:^4.0.0" + cbor: "npm:^8.1.0" + chalk: "npm:^5.2.0" + chokidar: "npm:^3.5.3" + chunkd: "npm:^2.0.1" + ci-info: "npm:^3.8.0" + ci-parallel-vars: "npm:^1.0.1" + clean-yaml-object: "npm:^0.1.0" + cli-truncate: "npm:^3.1.0" + code-excerpt: "npm:^4.0.0" + common-path-prefix: "npm:^3.0.0" + concordance: "npm:^5.0.4" + currently-unhandled: "npm:^0.4.1" + debug: "npm:^4.3.4" + emittery: "npm:^1.0.1" + figures: "npm:^5.0.0" + globby: "npm:^13.1.4" + ignore-by-default: "npm:^2.1.0" + indent-string: "npm:^5.0.0" + is-error: "npm:^2.2.2" + is-plain-object: "npm:^5.0.0" + is-promise: "npm:^4.0.0" + matcher: "npm:^5.0.0" + mem: "npm:^9.0.2" + ms: "npm:^2.1.3" + p-event: "npm:^5.0.1" + p-map: "npm:^5.5.0" + picomatch: "npm:^2.3.1" + pkg-conf: "npm:^4.0.0" + plur: "npm:^5.1.0" + pretty-ms: "npm:^8.0.0" + resolve-cwd: "npm:^3.0.0" + stack-utils: "npm:^2.0.6" + strip-ansi: "npm:^7.0.1" + supertap: "npm:^3.0.1" + temp-dir: "npm:^3.0.0" + write-file-atomic: "npm:^5.0.1" + yargs: "npm:^17.7.2" + peerDependencies: + "@ava/typescript": "*" + peerDependenciesMeta: + "@ava/typescript": + optional: true + bin: + ava: entrypoints/cli.mjs + checksum: 262cbdb9e8c3ce7177be91b92ba521e9d5aef577dcc8095cc591f86baaa291b91c88925928f5d26832c4d1b381a6ae99f2e8804077c592d0d32322c1212605cc + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"better-sqlite3@npm:^9.2.2": + version: 9.2.2 + resolution: "better-sqlite3@npm:9.2.2" + dependencies: + bindings: "npm:^1.5.0" + node-gyp: "npm:latest" + prebuild-install: "npm:^7.1.1" + checksum: b4bfe142ba4544a0cc76b2ca03d89bce1acf3fe8a86a1ba317a4049b26bf8fed70fb413f6317d2e5abeb97e31b177accb6d09619fdc0531e891cee112e2aade1 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: d73d8b897238a2d3ffa5f59c0241870043aa7471335e89ea5e1ff48edb7c2d0bb471517a3e4c5c3f4c043615caa2717b5f80a5e61e07503d51dc85cb848e665d + languageName: node + linkType: hard + +"bindings@npm:^1.5.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: "npm:1.0.0" + checksum: 3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba + languageName: node + linkType: hard + +"bl@npm:^4.0.3": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: "npm:^5.5.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f + languageName: node + linkType: hard + +"blueimp-md5@npm:^2.10.0": + version: 2.19.0 + resolution: "blueimp-md5@npm:2.19.0" + checksum: 85d04343537dd99a288c62450341dcce7380d3454c81f8e5a971ddd80307d6f9ef51b5b92ad7d48aaaa92fd6d3a1f6b2f4fada068faae646887f7bfabc17a346 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: "npm:^7.0.1" + checksum: 321b4d675791479293264019156ca322163f02dc06e3c4cab33bb15cd43d80b51efef69b0930cfde3acd63d126ebca24cd0544fa6f261e093a0fb41ab9dda381 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.1 + resolution: "cacache@npm:18.0.1" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: a31666805a80a8b16ad3f85faf66750275a9175a3480896f4f6d31b5d53ef190484fabd71bdb6d2ea5603c717fbef09f4af03d6a65b525c8ef0afaa44c361866 + languageName: node + linkType: hard + +"callsites@npm:^4.0.0": + version: 4.1.0 + resolution: "callsites@npm:4.1.0" + checksum: 91700844127a6dcd4792d231a12dd8e9ec10525eb9962180a8558417d7e3f443e52a4f14746ad2838eaf14f79431ee1539d13bd188da280f720a06a91bd1157a + languageName: node + linkType: hard + +"cbor@npm:^8.1.0": + version: 8.1.0 + resolution: "cbor@npm:8.1.0" + dependencies: + nofilter: "npm:^3.1.0" + checksum: a836e2e7ea0efb1b9c4e5a4be906c57113d730cc42293a34072e0164ed110bb8ac035dc7dca2e3ebb641bd4b37e00fdbbf09c951aa864b3d4888a6ed8c6243f7 + languageName: node + linkType: hard + +"chalk@npm:^5.2.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09 + languageName: node + linkType: hard + +"chokidar@npm:^3.5.3": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 1076953093e0707c882a92c66c0f56ba6187831aa51bb4de878c1fec59ae611a3bf02898f190efec8e77a086b8df61c2b2a3ea324642a0558bdf8ee6c5dc9ca1 + languageName: node + linkType: hard + +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"chunkd@npm:^2.0.1": + version: 2.0.1 + resolution: "chunkd@npm:2.0.1" + checksum: 4e0c5aac6048ecedfa4cd0a5f6c4f010c70a7b7645aeca7bfeb47cb0733c3463054f0ced3f2667b2e0e67edd75d68a8e05481b01115ba3f8a952a93026254504 + languageName: node + linkType: hard + +"ci-info@npm:^3.8.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a + languageName: node + linkType: hard + +"ci-parallel-vars@npm:^1.0.1": + version: 1.0.1 + resolution: "ci-parallel-vars@npm:1.0.1" + checksum: 80952f699cbbc146092b077b4f3e28d085620eb4e6be37f069b4dbb3db0ee70e8eec3beef4ebe70ff60631e9fc743b9d0869678489f167442cac08b260e5ac08 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"clean-stack@npm:^4.0.0": + version: 4.2.0 + resolution: "clean-stack@npm:4.2.0" + dependencies: + escape-string-regexp: "npm:5.0.0" + checksum: 2bdf981a0fef0a23c14255df693b30eb9ae27eedf212470d8c400a0c0b6fb82fbf1ff8c5216ccd5721e3670b700389c886b1dce5070776dc9fbcc040957758c0 + languageName: node + linkType: hard + +"clean-yaml-object@npm:^0.1.0": + version: 0.1.0 + resolution: "clean-yaml-object@npm:0.1.0" + checksum: a6505310590038afb9f0adc7f17a4c66787719c94d23f8491267ea4d9c405cdd378bd576ae1926169b6d997d4c59a8b86516bf4d16ba228280cf615598c58e05 + languageName: node + linkType: hard + +"cli-truncate@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-truncate@npm:3.1.0" + dependencies: + slice-ansi: "npm:^5.0.0" + string-width: "npm:^5.0.0" + checksum: a19088878409ec0e5dc2659a5166929629d93cfba6d68afc9cde2282fd4c751af5b555bf197047e31c87c574396348d011b7aa806fec29c4139ea4f7f00b324c + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + +"code-excerpt@npm:^4.0.0": + version: 4.0.0 + resolution: "code-excerpt@npm:4.0.0" + dependencies: + convert-to-spaces: "npm:^2.0.1" + checksum: b6c5a06e039cecd2ab6a0e10ee0831de8362107d1f298ca3558b5f9004cb8e0260b02dd6c07f57b9a0e346c76864d2873311ee1989809fdeb05bd5fbbadde773 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"common-path-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "common-path-prefix@npm:3.0.0" + checksum: c4a74294e1b1570f4a8ab435285d185a03976c323caa16359053e749db4fde44e3e6586c29cd051100335e11895767cbbd27ea389108e327d62f38daf4548fdb + languageName: node + linkType: hard + +"concordance@npm:^5.0.4": + version: 5.0.4 + resolution: "concordance@npm:5.0.4" + dependencies: + date-time: "npm:^3.1.0" + esutils: "npm:^2.0.3" + fast-diff: "npm:^1.2.0" + js-string-escape: "npm:^1.0.1" + lodash: "npm:^4.17.15" + md5-hex: "npm:^3.0.1" + semver: "npm:^7.3.2" + well-known-symbols: "npm:^2.0.0" + checksum: 59b440f330df3a7c9aa148ba588b3e99aed86acab225b4f01ffcea34ace4cf11f817e31153254e8f38ed48508998dad40b9106951a743c334d751f7ab21afb8a + languageName: node + linkType: hard + +"convert-to-spaces@npm:^2.0.1": + version: 2.0.1 + resolution: "convert-to-spaces@npm:2.0.1" + checksum: d90aa0e3b6a27f9d5265a8d32def3c5c855b3e823a9db1f26d772f8146d6b91020a2fdfd905ce8048a73fad3aaf836fef8188c67602c374405e2ae8396c4ac46 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + languageName: node + linkType: hard + +"currently-unhandled@npm:^0.4.1": + version: 0.4.1 + resolution: "currently-unhandled@npm:0.4.1" + dependencies: + array-find-index: "npm:^1.0.1" + checksum: 32d197689ec32f035910202c1abb0dc6424dce01d7b51779c685119b380d98535c110ffff67a262fc7e367612a7dfd30d3d3055f9a6634b5a9dd1302de7ef11c + languageName: node + linkType: hard + +"date-time@npm:^3.1.0": + version: 3.1.0 + resolution: "date-time@npm:3.1.0" + dependencies: + time-zone: "npm:^1.0.0" + checksum: aa3e2e930d74b0b9e90f69de7a16d3376e30f21f1f4ce9a2311d8fec32d760e776efea752dafad0ce188187265235229013036202be053fc2d7979813bfb6ded + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736 + languageName: node + linkType: hard + +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.0": + version: 2.0.2 + resolution: "detect-libc@npm:2.0.2" + checksum: a9f4ffcd2701525c589617d98afe5a5d0676c8ea82bcc4ed6f3747241b79f781d36437c59a5e855254c864d36a3e9f8276568b6b531c28d6e53b093a15703f11 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"emittery@npm:^1.0.1": + version: 1.0.1 + resolution: "emittery@npm:1.0.1" + checksum: 2587f2f42bb5e004ba1cde61352d2151f4dd4f29eb79ad36f82e200da2faec9742d7bfca1492a024d60396e001e4b07d9b2b9c43be33547ff751ba8ff87c42ce + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"esbuild@npm:~0.18.20": + version: 0.18.20 + resolution: "esbuild@npm:0.18.20" + dependencies: + "@esbuild/android-arm": "npm:0.18.20" + "@esbuild/android-arm64": "npm:0.18.20" + "@esbuild/android-x64": "npm:0.18.20" + "@esbuild/darwin-arm64": "npm:0.18.20" + "@esbuild/darwin-x64": "npm:0.18.20" + "@esbuild/freebsd-arm64": "npm:0.18.20" + "@esbuild/freebsd-x64": "npm:0.18.20" + "@esbuild/linux-arm": "npm:0.18.20" + "@esbuild/linux-arm64": "npm:0.18.20" + "@esbuild/linux-ia32": "npm:0.18.20" + "@esbuild/linux-loong64": "npm:0.18.20" + "@esbuild/linux-mips64el": "npm:0.18.20" + "@esbuild/linux-ppc64": "npm:0.18.20" + "@esbuild/linux-riscv64": "npm:0.18.20" + "@esbuild/linux-s390x": "npm:0.18.20" + "@esbuild/linux-x64": "npm:0.18.20" + "@esbuild/netbsd-x64": "npm:0.18.20" + "@esbuild/openbsd-x64": "npm:0.18.20" + "@esbuild/sunos-x64": "npm:0.18.20" + "@esbuild/win32-arm64": "npm:0.18.20" + "@esbuild/win32-ia32": "npm:0.18.20" + "@esbuild/win32-x64": "npm:0.18.20" + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 473b1d92842f50a303cf948a11ebd5f69581cd254d599dd9d62f9989858e0533f64e83b723b5e1398a5b488c0f5fd088795b4235f65ecaf4f007d4b79f04bc88 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: afd02e6ca91ffa813e1108b5e7756566173d6bc0d1eb951cb44d6b21702ec17c1cf116cfe75d4a2b02e05acb0b808a7a9387d0d1ca5cf9c04ad03a8445c3e46d + languageName: node + linkType: hard + +"escape-string-regexp@npm:5.0.0, escape-string-regexp@npm:^5.0.0": + version: 5.0.0 + resolution: "escape-string-regexp@npm:5.0.0" + checksum: 6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + languageName: node + linkType: hard + +"esutils@npm:^2.0.3": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"execa@npm:^7.2.0": + version: 7.2.0 + resolution: "execa@npm:7.2.0" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.1" + human-signals: "npm:^4.3.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^3.0.7" + strip-final-newline: "npm:^3.0.0" + checksum: 098cd6a1bc26d509e5402c43f4971736450b84d058391820c6f237aeec6436963e006fd8423c9722f148c53da86aa50045929c7278b5522197dff802d10f9885 + languageName: node + linkType: hard + +"expand-template@npm:^2.0.3": + version: 2.0.3 + resolution: "expand-template@npm:2.0.3" + checksum: 1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"fast-diff@npm:^1.2.0": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: 5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 + languageName: node + linkType: hard + +"fast-glob@npm:^3.3.0": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.15.0 + resolution: "fastq@npm:1.15.0" + dependencies: + reusify: "npm:^1.0.4" + checksum: 5ce4f83afa5f88c9379e67906b4d31bc7694a30826d6cc8d0f0473c966929017fda65c2174b0ec89f064ede6ace6c67f8a4fe04cef42119b6a55b0d465554c24 + languageName: node + linkType: hard + +"figures@npm:^5.0.0": + version: 5.0.0 + resolution: "figures@npm:5.0.0" + dependencies: + escape-string-regexp: "npm:^5.0.0" + is-unicode-supported: "npm:^1.2.0" + checksum: ce0f17d4ea8b0fc429c5207c343534a2f5284ecfb22aa08607da7dc84ed9e1cf754f5b97760e8dcb98d3c9d1a1e4d3d578fe3b5b99c426f05d0f06c7ba618e16 + languageName: node + linkType: hard + +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: 3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 7cdad7d426ffbaadf45aeb5d15ec675bbd77f7597ad5399e3d2766987ed20bda24d5fac64b3ee79d93276f5865608bb22344a26b9b1ae6c4d00bd94bf611623f + languageName: node + linkType: hard + +"find-up@npm:^6.0.0": + version: 6.3.0 + resolution: "find-up@npm:6.3.0" + dependencies: + locate-path: "npm:^7.1.0" + path-exists: "npm:^5.0.0" + checksum: 07e0314362d316b2b13f7f11ea4692d5191e718ca3f7264110127520f3347996349bf9e16805abae3e196805814bc66ef4bff2b8904dc4a6476085fc9b0eba07 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 9700a0285628abaeb37007c9a4d92bd49f67210f09067638774338e146c8e9c825c5c877f072b2f75f41dc6a2d0be8664f79ffc03f6576649f54a84fb9b47de0 + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: 49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.7.2": + version: 4.7.2 + resolution: "get-tsconfig@npm:4.7.2" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 169b2beababfbb16e8a0ae813ee59d3e14d4960231c816615161ab5be68ec07a394dce59695742ac84295e2efab8d9e89bcf3abaf5e253dfbec3496e01bb9a65 + languageName: node + linkType: hard + +"github-from-package@npm:0.0.0": + version: 0.0.0 + resolution: "github-from-package@npm:0.0.0" + checksum: 737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^2.3.5" + minimatch: "npm:^9.0.1" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry: "npm:^1.10.1" + bin: + glob: dist/esm/bin.mjs + checksum: 13d8a1feb7eac7945f8c8480e11cd4a44b24d26503d99a8d8ac8d5aefbf3e9802a2b6087318a829fad04cb4e829f25c5f4f1110c68966c498720dd261c7e344d + languageName: node + linkType: hard + +"globby@npm:^13.1.4": + version: 13.2.2 + resolution: "globby@npm:13.2.2" + dependencies: + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.3.0" + ignore: "npm:^5.2.4" + merge2: "npm:^1.4.1" + slash: "npm:^4.0.0" + checksum: a8d7cc7cbe5e1b2d0f81d467bbc5bc2eac35f74eaded3a6c85fc26d7acc8e6de22d396159db8a2fc340b8a342e74cac58de8f4aee74146d3d146921a76062664 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "http-proxy-agent@npm:7.0.0" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: a11574ff39436cee3c7bc67f259444097b09474605846ddd8edf0bf4ad8644be8533db1aa463426e376865047d05dc22755e638632819317c0c2f1b2196657c8 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.2 + resolution: "https-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 7735eb90073db087e7e79312e3d97c8c04baf7ea7ca7b013382b6a45abbaa61b281041a98f4e13c8c80d88f843785bcc84ba189165b4b4087b1e3496ba656d77 + languageName: node + linkType: hard + +"human-signals@npm:^4.3.0": + version: 4.3.1 + resolution: "human-signals@npm:4.3.1" + checksum: 40498b33fe139f5cc4ef5d2f95eb1803d6318ac1b1c63eaf14eeed5484d26332c828de4a5a05676b6c83d7b9e57727c59addb4b1dea19cb8d71e83689e5b336c + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + +"ignore-by-default@npm:^2.1.0": + version: 2.1.0 + resolution: "ignore-by-default@npm:2.1.0" + checksum: 3a6040dac25ed9da39dee73bf1634fdd1e15b0eb7cf52a6bdec81c310565782d8811c104ce40acb3d690d61c5fc38a91c78e6baee830a8a2232424dbc6b66981 + languageName: node + linkType: hard + +"ignore@npm:^5.2.4": + version: 5.3.0 + resolution: "ignore@npm:5.3.0" + checksum: dc06bea5c23aae65d0725a957a0638b57e235ae4568dda51ca142053ed2c352de7e3bc93a69b2b32ac31966a1952e9a93c5ef2e2ab7c6b06aef9808f6b55b571 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: 8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 + languageName: node + linkType: hard + +"inherits@npm:^2.0.3, inherits@npm:^2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: 8d186cc5585f57372847ae29b6eba258c68862055e18a75cc4933327232cb5c107f89800ce29715d542eef2c254fbb68b382e780a7414f9ee7caf60b7a473958 + languageName: node + linkType: hard + +"irregular-plurals@npm:^3.3.0": + version: 3.5.0 + resolution: "irregular-plurals@npm:3.5.0" + checksum: 7c033bbe7325e5a6e0a26949cc6863b6ce273403d4cd5b93bd99b33fecb6605b0884097c4259c23ed0c52c2133bf7d1cdcdd7a0630e8c325161fe269b3447918 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + languageName: node + linkType: hard + +"is-error@npm:^2.2.2": + version: 2.2.2 + resolution: "is-error@npm:2.2.2" + checksum: 475d3463968bf16e94485555d7cb7a879ed68685e08d365a3370972e626054f1846ebbb3934403091e06682445568601fe919e41646096e5007952d0c1f4fd9b + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: df2a717e813567db0f659c306d61f2f804d480752526886954a2a3e2246c7745fd07a52b5fecf2b68caf0a6c79dcdace6166fdf29cc76ed9975cc334f0a018b8 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: 893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c + languageName: node + linkType: hard + +"is-promise@npm:^4.0.0": + version: 4.0.0 + resolution: "is-promise@npm:4.0.0" + checksum: ebd5c672d73db781ab33ccb155fb9969d6028e37414d609b115cc534654c91ccd061821d5b987eefaa97cf4c62f0b909bb2f04db88306de26e91bfe8ddc01503 + languageName: node + linkType: hard + +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: eb2f7127af02ee9aa2a0237b730e47ac2de0d4e76a4a905a50a11557f2339df5765eaea4ceb8029f1efa978586abe776908720bfcb1900c20c6ec5145f6f29d8 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^1.2.0": + version: 1.3.0 + resolution: "is-unicode-supported@npm:1.3.0" + checksum: b8674ea95d869f6faabddc6a484767207058b91aea0250803cbf1221345cb0c56f466d4ecea375dc77f6633d248d33c47bd296fb8f4cdba0b4edba8917e83d8a + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: f01d8f972d894cd7638bc338e9ef5ddb86f7b208ce177a36d718eac96ec86638a6efa17d0221b10073e64b45edc2ce15340db9380b1f5d5c5d000cbc517dc111 + languageName: node + linkType: hard + +"js-string-escape@npm:^1.0.1": + version: 1.0.1 + resolution: "js-string-escape@npm:1.0.1" + checksum: 2c33b9ff1ba6b84681c51ca0997e7d5a1639813c95d5b61cb7ad47e55cc28fa4a0b1935c3d218710d8e6bcee5d0cd8c44755231e3a4e45fc604534d9595a3628 + languageName: node + linkType: hard + +"js-yaml@npm:^3.14.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b + languageName: node + linkType: hard + +"load-json-file@npm:^7.0.0": + version: 7.0.1 + resolution: "load-json-file@npm:7.0.1" + checksum: 7117459608a0b6329c7f78e6e1f541b3162dd901c29dd5af721fec8b270177d2e3d7999c971f344fff04daac368d052732e2c7146014bc84d15e0b636975e19a + languageName: node + linkType: hard + +"locate-path@npm:^7.1.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 139e8a7fe11cfbd7f20db03923cacfa5db9e14fa14887ea121345597472b4a63c1a42a8a5187defeeff6acf98fd568da7382aa39682d38f0af27433953a97751 + languageName: node + linkType: hard + +"lodash@npm:^4.17.15": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.1.0 + resolution: "lru-cache@npm:10.1.0" + checksum: 778bc8b2626daccd75f24c4b4d10632496e21ba064b126f526c626fbdbc5b28c472013fccd45d7646b9e1ef052444824854aed617b59cd570d01a8b7d651fc1e + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: "npm:^4.0.0" + checksum: cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.0 + resolution: "make-fetch-happen@npm:13.0.0" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 43b9f6dcbc6fe8b8604cb6396957c3698857a15ba4dbc38284f7f0e61f248300585ef1eb8cc62df54e9c724af977e45b5cdfd88320ef7f53e45070ed3488da55 + languageName: node + linkType: hard + +"map-age-cleaner@npm:^0.1.3": + version: 0.1.3 + resolution: "map-age-cleaner@npm:0.1.3" + dependencies: + p-defer: "npm:^1.0.0" + checksum: 7495236c7b0950956c144fd8b4bc6399d4e78072a8840a4232fe1c4faccbb5eb5d842e5c0a56a60afc36d723f315c1c672325ca03c1b328650f7fcc478f385fd + languageName: node + linkType: hard + +"matcher@npm:^5.0.0": + version: 5.0.0 + resolution: "matcher@npm:5.0.0" + dependencies: + escape-string-regexp: "npm:^5.0.0" + checksum: eda5471fc9d5b7264d63c81727824adc3585ddb5cfdc5fce5a9b7c86f946ff181610735d330b1c37a84811df872d1290bf4e9401d2be2a414204343701144b18 + languageName: node + linkType: hard + +"md5-hex@npm:^3.0.1": + version: 3.0.1 + resolution: "md5-hex@npm:3.0.1" + dependencies: + blueimp-md5: "npm:^2.10.0" + checksum: ee2b4d8da16b527b3a3fe4d7a96720f43afd07b46a82d49421208b5a126235fb75cfb30b80d4029514772c8844273f940bddfbf4155c787f968f3be4060d01e4 + languageName: node + linkType: hard + +"mem@npm:^9.0.2": + version: 9.0.2 + resolution: "mem@npm:9.0.2" + dependencies: + map-age-cleaner: "npm:^0.1.3" + mimic-fn: "npm:^4.0.0" + checksum: c2c56141399e520d8f0e50186bb7e4b49300b33984dc919682f3f13e53dec0e6608fbd327d5ae99494f45061a3a05a8ee04ccba6dcf795c3c215b5aa906eb41f + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: "npm:^3.0.2" + picomatch: "npm:^2.3.1" + checksum: 3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff + languageName: node + linkType: hard + +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: de9cc32be9996fd941e512248338e43407f63f6d497abe8441fa33447d922e927de54d4cc3c1a3c6d652857acd770389d5a3823f311a744132760ce2be15ccbf + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.3": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 1b63c1f3313e88eeac4689f1b71c9f086598db9a189400e3ee960c32ed89e06737fa23976c9305c2d57464fb3fcdc12749d3378805c9d6176f5569b0d0ee8a75 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 6c7370a6dfd257bf18222da581ba89a5eaedca10e158781232a8b5542a90547540b4b9b7e7f490e4cda43acfbd12e086f0453728ecf8c19e0ef6921bc5958ac5 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc + languageName: node + linkType: hard + +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"napi-build-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "napi-build-utils@npm:1.0.2" + checksum: 37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"node-abi@npm:^3.3.0": + version: 3.54.0 + resolution: "node-abi@npm:3.54.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 9ebbb21e6951aa51e831549ed62b68dc56bcc10f6b21ffd04195a16a6abf5ddfc48b6ae5e3334720fe4459cafde5ec8103025902efff5599d0539f8656fc694e + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.0.1 + resolution: "node-gyp@npm:10.0.1" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^3.0.0" + semver: "npm:^7.3.5" + tar: "npm:^6.1.2" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: abddfff7d873312e4ed4a5fb75ce893a5c4fb69e7fcb1dfa71c28a6b92a7f1ef6b62790dffb39181b5a82728ba8f2f32d229cf8cbe66769fe02cea7db4a555aa + languageName: node + linkType: hard + +"nofilter@npm:^3.1.0": + version: 3.1.0 + resolution: "nofilter@npm:3.1.0" + checksum: 92459f3864a067b347032263f0b536223cbfc98153913b5dce350cb39c8470bc1813366e41993f22c33cc6400c0f392aa324a4b51e24c22040635c1cdb046499 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.0 + resolution: "nopt@npm:7.2.0" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 9bd7198df6f16eb29ff16892c77bcf7f0cc41f9fb5c26280ac0def2cf8cf319f3b821b3af83eba0e74c85807cc430a16efe0db58fe6ae1f41e69519f585b6aff + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.1.0": + version: 5.1.0 + resolution: "npm-run-path@npm:5.1.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: ff6d77514489f47fa1c3b1311d09cd4b6d09a874cc1866260f9dea12cbaabda0436ed7f8c2ee44d147bf99a3af29307c6f63b0f83d242b0b6b0ab25dff2629e3 + languageName: node + linkType: hard + +"once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: "npm:^4.0.0" + checksum: 4eef7c6abfef697dd4479345a4100c382d73c149d2d56170a54a07418c50816937ad09500e1ed1e79d235989d073a9bade8557122aee24f0576ecde0f392bb6c + languageName: node + linkType: hard + +"p-defer@npm:^1.0.0": + version: 1.0.0 + resolution: "p-defer@npm:1.0.0" + checksum: ed603c3790e74b061ac2cb07eb6e65802cf58dce0fbee646c113a7b71edb711101329ad38f99e462bd2e343a74f6e9366b496a35f1d766c187084d3109900487 + languageName: node + linkType: hard + +"p-event@npm:^5.0.1": + version: 5.0.1 + resolution: "p-event@npm:5.0.1" + dependencies: + p-timeout: "npm:^5.0.2" + checksum: 2317171489537f316661fa863f3bb711b2ceb89182937238422cec10223cbb958c432d6c26a238446a622d788187bdd295b1d8ecedbe2e467e045930d60202b0 + languageName: node + linkType: hard + +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: a56af34a77f8df2ff61ddfb29431044557fcbcb7642d5a3233143ebba805fc7306ac1d448de724352861cb99de934bc9ab74f0d16fe6a5460bdbdf938de875ad + languageName: node + linkType: hard + +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: d72fa2f41adce59c198270aa4d3c832536c87a1806e0f69dffb7c1a7ca998fb053915ca833d90f166a8c082d3859eabfed95f01698a3214c20df6bb8de046312 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"p-map@npm:^5.5.0": + version: 5.5.0 + resolution: "p-map@npm:5.5.0" + dependencies: + aggregate-error: "npm:^4.0.0" + checksum: 410bce846b1e3db6bb2ccab6248372ecf4e635fc2b31331c8f56478e73fec9e146e8b4547585e635703160a3d252a6a65b8f855834aebc2c3408eb5789630cc4 + languageName: node + linkType: hard + +"p-timeout@npm:^5.0.2": + version: 5.1.0 + resolution: "p-timeout@npm:5.1.0" + checksum: 1b026cf9d5878c64bec4341ca9cda8ec6b8b3aea8a57885ca0fe2b35753a20d767fb6f9d3aa41e1252f42bc95432c05ea33b6b18f271fb10bfb0789591850a41 + languageName: node + linkType: hard + +"parse-ms@npm:^3.0.0": + version: 3.0.0 + resolution: "parse-ms@npm:3.0.0" + checksum: 056b4a32a9d3749f3f4cfffefb45c45540491deaa8e1d8ad43c2ddde7ba04edd076bd1b298f521238bb5fb084a9b2c4a2ebb78aefa651afbc4c2b0af4232fc54 + languageName: node + linkType: hard + +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: b170f3060b31604cde93eefdb7392b89d832dfbc1bed717c9718cbe0f230c1669b7e75f87e19901da2250b84d092989a0f9e44d2ef41deb09aa3ad28e691a40a + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: "npm:^9.1.1 || ^10.0.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: e5dc78a7348d25eec61ab166317e9e9c7b46818aa2c2b9006c507a6ff48c672d011292d9662527213e558f5652ce0afcc788663a061d8b59ab495681840c0c1e + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"pkg-conf@npm:^4.0.0": + version: 4.0.0 + resolution: "pkg-conf@npm:4.0.0" + dependencies: + find-up: "npm:^6.0.0" + load-json-file: "npm:^7.0.0" + checksum: 27d027609f27228edcde121f6f707b4ba1f5488e95e98f2e58652ae4e99792081bd1de67d591f4a0f05b02c0b66d745591d49f82041cbc8d41e2238ef5d73eb4 + languageName: node + linkType: hard + +"plur@npm:^5.1.0": + version: 5.1.0 + resolution: "plur@npm:5.1.0" + dependencies: + irregular-plurals: "npm:^3.3.0" + checksum: 26bb622b8545fcfd47bbf56fbcca66c08693708a232e403fa3589e00003c56c14231ac57c7588ca5db83ef4be1f61383402c4ea954000768f779f8aef6eb6da8 + languageName: node + linkType: hard + +"prebuild-install@npm:^7.1.1": + version: 7.1.1 + resolution: "prebuild-install@npm:7.1.1" + dependencies: + detect-libc: "npm:^2.0.0" + expand-template: "npm:^2.0.3" + github-from-package: "npm:0.0.0" + minimist: "npm:^1.2.3" + mkdirp-classic: "npm:^0.5.3" + napi-build-utils: "npm:^1.0.1" + node-abi: "npm:^3.3.0" + pump: "npm:^3.0.0" + rc: "npm:^1.2.7" + simple-get: "npm:^4.0.0" + tar-fs: "npm:^2.0.0" + tunnel-agent: "npm:^0.6.0" + bin: + prebuild-install: bin.js + checksum: 6dc70f36b0f4adcb2fe0ed38d874ab28b571fb1a9725d769e8ba3f64a15831e58462de09f3e6e64569bcc4a3e03b9328b56faa0d45fe10ae1574478814536c76 + languageName: node + linkType: hard + +"pretty-ms@npm:^8.0.0": + version: 8.0.0 + resolution: "pretty-ms@npm:8.0.0" + dependencies: + parse-ms: "npm:^3.0.0" + checksum: e960d633ecca45445cf5c6dffc0f5e4bef6744c92449ab0e8c6c704800675ab71e181c5e02ece5265e02137a33e313d3f3e355fbf8ea30b4b5b23de423329f8d + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: f66430e4ff947dbb996058f6fd22de2c66612ae1a89b097744e17fb18a4e8e7a86db99eda52ccf15e53f00b63f4ec0b0911581ff2aac0355b625c8eac509b0dc + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.0 + resolution: "pump@npm:3.0.0" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: bbdeda4f747cdf47db97428f3a135728669e56a0ae5f354a9ac5b74556556f5446a46f720a8f14ca2ece5be9b4d5d23c346db02b555f46739934cc6c093a5478 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"rc@npm:^1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"root-workspace-0b6124@workspace:.": + version: 0.0.0-use.local + resolution: "root-workspace-0b6124@workspace:." + dependencies: + "@agoric/synthetic-chain": "npm:^0.0.3" + ava: "npm:^5.3.1" + better-sqlite3: "npm:^9.2.2" + execa: "npm:^7.2.0" + languageName: unknown + linkType: soft + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"semver@npm:^7.3.2, semver@npm:^7.3.5": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 5160b06975a38b11c1ab55950cb5b8a23db78df88275d3d8a42ccf1f29e55112ac995b3a26a522c36e3b5f76b0445f1eef70d696b8c7862a2b4303d7b0e7609e + languageName: node + linkType: hard + +"serialize-error@npm:^7.0.1": + version: 7.0.1 + resolution: "serialize-error@npm:7.0.1" + dependencies: + type-fest: "npm:^0.13.1" + checksum: 7982937d578cd901276c8ab3e2c6ed8a4c174137730f1fb0402d005af209a0e84d04acc874e317c936724c7b5b26c7a96ff7e4b8d11a469f4924a4b0ea814c05 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"simple-concat@npm:^1.0.0": + version: 1.0.1 + resolution: "simple-concat@npm:1.0.1" + checksum: 62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 + languageName: node + linkType: hard + +"simple-get@npm:^4.0.0": + version: 4.0.1 + resolution: "simple-get@npm:4.0.1" + dependencies: + decompress-response: "npm:^6.0.0" + once: "npm:^1.3.1" + simple-concat: "npm:^1.0.0" + checksum: b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 + languageName: node + linkType: hard + +"slash@npm:^4.0.0": + version: 4.0.0 + resolution: "slash@npm:4.0.0" + checksum: b522ca75d80d107fd30d29df0549a7b2537c83c4c4ecd12cd7d4ea6c8aaca2ab17ada002e7a1d78a9d736a0261509f26ea5b489082ee443a3a810586ef8eff18 + languageName: node + linkType: hard + +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: "npm:^6.0.0" + is-fullwidth-code-point: "npm:^4.0.0" + checksum: 2d4d40b2a9d5cf4e8caae3f698fe24ae31a4d778701724f578e984dcb485ec8c49f0c04dab59c401821e80fcdfe89cace9c66693b0244e40ec485d72e543914f + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.1": + version: 8.0.2 + resolution: "socks-proxy-agent@npm:8.0.2" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:^4.3.4" + socks: "npm:^2.7.1" + checksum: a842402fc9b8848a31367f2811ca3cd14c4106588b39a0901cd7a69029998adfc6456b0203617c18ed090542ad0c24ee4e9d4c75a0c4b75071e214227c177eb7 + languageName: node + linkType: hard + +"socks@npm:^2.7.1": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: "npm:^2.0.0" + smart-buffer: "npm:^4.2.0" + checksum: 43f69dbc9f34fc8220bc51c6eea1c39715ab3cfdb115d6e3285f6c7d1a603c5c75655668a5bbc11e3c7e2c99d60321fb8d7ab6f38cda6a215fadd0d6d0b52130 + languageName: node + linkType: hard + +"source-map-support@npm:^0.5.21": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: "npm:^7.0.3" + checksum: b091f2ae92474183c7ac5ed3f9811457e1df23df7a7e70c9476eaa9a0c4a0c8fc190fb45acefbf023ca9ee864dd6754237a697dc52a0fb182afe65d8e77443d8 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.6": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: 651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: a771a17901427bac6293fd416db7577e2bc1c34a19d38351e9d5478c3c415f523f391003b42ed475f27e33a78233035df183525395f731d3bfb8cdcbd4da08ce + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 + languageName: node + linkType: hard + +"supertap@npm:^3.0.1": + version: 3.0.1 + resolution: "supertap@npm:3.0.1" + dependencies: + indent-string: "npm:^5.0.0" + js-yaml: "npm:^3.14.1" + serialize-error: "npm:^7.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 8164674f2e280cab875f0fef5bb36c15553c13e29697ff92f4e0d6bc62149f0303a89eee47535413ed145ea72e14a24d065bab233059d48a499ec5ebb4566b0f + languageName: node + linkType: hard + +"tar-fs@npm:^2.0.0": + version: 2.1.1 + resolution: "tar-fs@npm:2.1.1" + dependencies: + chownr: "npm:^1.1.1" + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^2.1.4" + checksum: 871d26a934bfb7beeae4c4d8a09689f530b565f79bd0cf489823ff0efa3705da01278160da10bb006d1a793fa0425cf316cec029b32a9159eacbeaff4965fb6d + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: "npm:^4.0.3" + end-of-stream: "npm:^1.4.1" + fs-constants: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 02ca064a1a6b4521fef88c07d389ac0936730091f8c02d30ea60d472e0378768e870769ab9e986d87807bfee5654359cf29ff4372746cc65e30cbddc352660d8 + languageName: node + linkType: hard + +"temp-dir@npm:^3.0.0": + version: 3.0.0 + resolution: "temp-dir@npm:3.0.0" + checksum: a86978a400984cd5f315b77ebf3fe53bb58c61f192278cafcb1f3fb32d584a21dc8e08b93171d7874b7cc972234d3455c467306cc1bfc4524b622e5ad3bfd671 + languageName: node + linkType: hard + +"time-zone@npm:^1.0.0": + version: 1.0.0 + resolution: "time-zone@npm:1.0.0" + checksum: d00ebd885039109011b6e2423ebbf225160927333c2ade6d833e9cc4676db20759f1f3855fafde00d1bd668c243a6aa68938ce71fe58aab0d514e820d59c1d81 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"tsx@npm:^3.12.8": + version: 3.14.0 + resolution: "tsx@npm:3.14.0" + dependencies: + esbuild: "npm:~0.18.20" + fsevents: "npm:~2.3.3" + get-tsconfig: "npm:^4.7.2" + source-map-support: "npm:^0.5.21" + dependenciesMeta: + fsevents: + optional: true + bin: + tsx: dist/cli.mjs + checksum: b6c938bdae9c656aef2aa0130ee6aa8f3487b5d411d5f7934b705c28ff44ab268db3dde123cf5237b4e5e2ab4441a0bad4b1a39e3ff2170d138538e44082f05d + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a + languageName: node + linkType: hard + +"type-fest@npm:^0.13.1": + version: 0.13.1 + resolution: "type-fest@npm:0.13.1" + checksum: 0c0fa07ae53d4e776cf4dac30d25ad799443e9eef9226f9fddbb69242db86b08584084a99885cfa5a9dfe4c063ebdc9aa7b69da348e735baede8d43f1aeae93b + languageName: node + linkType: hard + +"typescript@npm:^5.3.3": + version: 5.3.3 + resolution: "typescript@npm:5.3.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: e33cef99d82573624fc0f854a2980322714986bc35b9cb4d1ce736ed182aeab78e2cb32b385efa493b2a976ef52c53e20d6c6918312353a91850e2b76f1ea44f + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.3.3#optional!builtin": + version: 5.3.3 + resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 1d0a5f4ce496c42caa9a30e659c467c5686eae15d54b027ee7866744952547f1be1262f2d40de911618c242b510029d51d43ff605dba8fb740ec85ca2d3f9500 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"well-known-symbols@npm:^2.0.0": + version: 2.0.0 + resolution: "well-known-symbols@npm:2.0.0" + checksum: cb6c12e98877e8952ec28d13ae6f4fdb54ae1cb49b16a728720276dadd76c930e6cb0e174af3a4620054dd2752546f842540122920c6e31410208abd4958ee6b + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"write-file-atomic@npm:^5.0.1": + version: 5.0.1 + resolution: "write-file-atomic@npm:5.0.1" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^4.0.1" + checksum: e8c850a8e3e74eeadadb8ad23c9d9d63e4e792bd10f4836ed74189ef6e996763959f1249c5650e232f3c77c11169d239cbfc8342fc70f3fe401407d23810505d + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 856117aa15cf5103d2a2fb173f0ab4acb12b4b4d0ed3ab249fdbbf612e55d1cadfd27a6110940e24746fb0a78cf640b522cc8bca76f30a3b00b66e90cf82abe0 + languageName: node + linkType: hard diff --git a/a3p-integration/yarn.lock b/a3p-integration/yarn.lock new file mode 100644 index 00000000000..2bf3e4c58e7 --- /dev/null +++ b/a3p-integration/yarn.lock @@ -0,0 +1,623 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@agoric/synthetic-chain@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@agoric/synthetic-chain/-/synthetic-chain-0.0.3.tgz#eaa9ea9429a950686e5cc31200f1e30cf7acedfd" + integrity sha512-C+2cb3IPoiCKSRNyVAE8mt+BLeZB2AKzAnW0TJK5SgVSBlX+wgcrNMZHpSlrWScFzlsEQJWzqRdzpV2YdVtESg== + dependencies: + better-sqlite3 "^9.2.2" + tsx "^3.12.8" + typescript "^5.3.3" + +"@esbuild/aix-ppc64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" + integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== + +"@esbuild/android-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== + +"@esbuild/android-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" + integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== + +"@esbuild/android-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== + +"@esbuild/android-arm@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" + integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== + +"@esbuild/android-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== + +"@esbuild/android-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" + integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== + +"@esbuild/darwin-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== + +"@esbuild/darwin-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" + integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== + +"@esbuild/darwin-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== + +"@esbuild/darwin-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" + integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== + +"@esbuild/freebsd-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== + +"@esbuild/freebsd-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" + integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== + +"@esbuild/freebsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== + +"@esbuild/freebsd-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" + integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== + +"@esbuild/linux-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== + +"@esbuild/linux-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" + integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== + +"@esbuild/linux-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== + +"@esbuild/linux-arm@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" + integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== + +"@esbuild/linux-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== + +"@esbuild/linux-ia32@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" + integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== + +"@esbuild/linux-loong64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== + +"@esbuild/linux-loong64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" + integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== + +"@esbuild/linux-mips64el@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== + +"@esbuild/linux-mips64el@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" + integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== + +"@esbuild/linux-ppc64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== + +"@esbuild/linux-ppc64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" + integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== + +"@esbuild/linux-riscv64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== + +"@esbuild/linux-riscv64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" + integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== + +"@esbuild/linux-s390x@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== + +"@esbuild/linux-s390x@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" + integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== + +"@esbuild/linux-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== + +"@esbuild/linux-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" + integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== + +"@esbuild/netbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== + +"@esbuild/netbsd-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" + integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== + +"@esbuild/openbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== + +"@esbuild/openbsd-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" + integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== + +"@esbuild/sunos-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== + +"@esbuild/sunos-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" + integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== + +"@esbuild/win32-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== + +"@esbuild/win32-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" + integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== + +"@esbuild/win32-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== + +"@esbuild/win32-ia32@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" + integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== + +"@esbuild/win32-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" + integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== + +"@esbuild/win32-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" + integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +better-sqlite3@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-9.2.2.tgz#3ce1ed24f327ed8c9b0c39b825cdc2341aeb249f" + integrity sha512-qwjWB46il0lsDkeB4rSRI96HyDQr8sxeu1MkBVLMrwusq1KRu4Bpt1TMI+8zIJkDUtZ3umjAkaEjIlokZKWCQw== + dependencies: + bindings "^1.5.0" + prebuild-install "^7.1.1" + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +detect-libc@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +esbuild@~0.18.20: + version "0.18.20" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== + optionalDependencies: + "@esbuild/android-arm" "0.18.20" + "@esbuild/android-arm64" "0.18.20" + "@esbuild/android-x64" "0.18.20" + "@esbuild/darwin-arm64" "0.18.20" + "@esbuild/darwin-x64" "0.18.20" + "@esbuild/freebsd-arm64" "0.18.20" + "@esbuild/freebsd-x64" "0.18.20" + "@esbuild/linux-arm" "0.18.20" + "@esbuild/linux-arm64" "0.18.20" + "@esbuild/linux-ia32" "0.18.20" + "@esbuild/linux-loong64" "0.18.20" + "@esbuild/linux-mips64el" "0.18.20" + "@esbuild/linux-ppc64" "0.18.20" + "@esbuild/linux-riscv64" "0.18.20" + "@esbuild/linux-s390x" "0.18.20" + "@esbuild/linux-x64" "0.18.20" + "@esbuild/netbsd-x64" "0.18.20" + "@esbuild/openbsd-x64" "0.18.20" + "@esbuild/sunos-x64" "0.18.20" + "@esbuild/win32-arm64" "0.18.20" + "@esbuild/win32-ia32" "0.18.20" + "@esbuild/win32-x64" "0.18.20" + +esbuild@~0.19.10: + version "0.19.11" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" + integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.11" + "@esbuild/android-arm" "0.19.11" + "@esbuild/android-arm64" "0.19.11" + "@esbuild/android-x64" "0.19.11" + "@esbuild/darwin-arm64" "0.19.11" + "@esbuild/darwin-x64" "0.19.11" + "@esbuild/freebsd-arm64" "0.19.11" + "@esbuild/freebsd-x64" "0.19.11" + "@esbuild/linux-arm" "0.19.11" + "@esbuild/linux-arm64" "0.19.11" + "@esbuild/linux-ia32" "0.19.11" + "@esbuild/linux-loong64" "0.19.11" + "@esbuild/linux-mips64el" "0.19.11" + "@esbuild/linux-ppc64" "0.19.11" + "@esbuild/linux-riscv64" "0.19.11" + "@esbuild/linux-s390x" "0.19.11" + "@esbuild/linux-x64" "0.19.11" + "@esbuild/netbsd-x64" "0.19.11" + "@esbuild/openbsd-x64" "0.19.11" + "@esbuild/sunos-x64" "0.19.11" + "@esbuild/win32-arm64" "0.19.11" + "@esbuild/win32-ia32" "0.19.11" + "@esbuild/win32-x64" "0.19.11" + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +get-tsconfig@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" + integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== + dependencies: + resolve-pkg-maps "^1.0.0" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimist@^1.2.0, minimist@^1.2.3: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +node-abi@^3.3.0: + version "3.54.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.54.0.tgz#f6386f7548817acac6434c6cba02999c9aebcc69" + integrity sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA== + dependencies: + semver "^7.3.5" + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +prebuild-install@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +semver@^7.3.5: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +source-map-support@^0.5.21: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tsx@^3.12.8: + version "3.14.0" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-3.14.0.tgz#be6e2176b6f210fe8f48124fb6e22e0f075e927b" + integrity sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg== + dependencies: + esbuild "~0.18.20" + get-tsconfig "^4.7.2" + source-map-support "^0.5.21" + optionalDependencies: + fsevents "~2.3.3" + +tsx@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.7.0.tgz#1689cfe7dda495ca1f9a66d4cad79cb57b9f6f4a" + integrity sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg== + dependencies: + esbuild "~0.19.10" + get-tsconfig "^4.7.2" + optionalDependencies: + fsevents "~2.3.3" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +typescript@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== From 457a6e156809875bba2704b92d70875549664974 Mon Sep 17 00:00:00 2001 From: Turadg Aleahmad Date: Fri, 8 Dec 2023 14:54:30 -0800 Subject: [PATCH 41/44] ci: run a3p-integration instead of upgrade-tests --- .github/workflows/integration.yml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 6f745f3aaed..73876a86f7b 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -231,15 +231,17 @@ jobs: # Produces ghcr.io/agoric/agoric-sdk:latest used in the following upgrade test. # run: cd packages/deployment && ./scripts/test-docker-build.sh | $TEST_COLLECT # XXX skip TAP test output and collection for now; it hides the output from the logs - run: cd packages/deployment && make docker-build-sdk - - name: docker build upgrade test - run: | - cd packages/deployment/upgrade-test && \ - docker build \ - --build-arg DEST_IMAGE=ghcr.io/agoric/agoric-sdk:latest \ - -t docker-upgrade-test:latest -f Dockerfile upgrade-test-scripts - - name: docker run upgrade final stage - run: docker run --env "DEST=0" docker-upgrade-test:latest + run: make docker-build-sdk + working-directory: packages/deployment + - name: setup a3p-integration + run: yarn install + working-directory: a3p-integration + - name: build proposals tests + run: yarn synthetic-chain build + working-directory: a3p-integration + - name: run proposals tests + run: yarn synthetic-chain test + working-directory: a3p-integration - name: notify on failure if: failure() && github.event_name != 'pull_request' uses: ./.github/actions/notify-status From c9958da187d34aef8da32e41d013dd5add063af9 Mon Sep 17 00:00:00 2001 From: Turadg Aleahmad Date: Fri, 8 Dec 2023 14:54:37 -0800 Subject: [PATCH 42/44] chore: remove old upgrade-tests --- .eslintrc.cjs | 8 - packages/deployment/upgrade-test/Dockerfile | 33 -- packages/deployment/upgrade-test/Makefile | 41 --- packages/deployment/upgrade-test/Readme.md | 110 ------- .../agoric-upgrade-13/actions.js | 147 --------- .../agoric-upgrade-13/tools/vat-status.js | 92 ------ .../upgrade-test-scripts/cliHelper.js | 132 -------- .../commonUpgradeHelpers.js | 281 ------------------ .../upgrade-test-scripts/constants.js | 13 - .../upgrade-test-scripts/econHelpers.js | 73 ----- .../upgrade-test-scripts/env_setup.sh | 215 -------------- .../upgrade-test-scripts/package.json | 21 -- .../upgrade-test-scripts/start_to_to.sh | 67 ----- 13 files changed, 1233 deletions(-) delete mode 100644 packages/deployment/upgrade-test/Dockerfile delete mode 100644 packages/deployment/upgrade-test/Makefile delete mode 100644 packages/deployment/upgrade-test/Readme.md delete mode 100644 packages/deployment/upgrade-test/upgrade-test-scripts/agoric-upgrade-13/actions.js delete mode 100644 packages/deployment/upgrade-test/upgrade-test-scripts/agoric-upgrade-13/tools/vat-status.js delete mode 100644 packages/deployment/upgrade-test/upgrade-test-scripts/cliHelper.js delete mode 100644 packages/deployment/upgrade-test/upgrade-test-scripts/commonUpgradeHelpers.js delete mode 100644 packages/deployment/upgrade-test/upgrade-test-scripts/constants.js delete mode 100644 packages/deployment/upgrade-test/upgrade-test-scripts/econHelpers.js delete mode 100755 packages/deployment/upgrade-test/upgrade-test-scripts/env_setup.sh delete mode 100644 packages/deployment/upgrade-test/upgrade-test-scripts/package.json delete mode 100644 packages/deployment/upgrade-test/upgrade-test-scripts/start_to_to.sh diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 94fe2b48c34..e481b12e342 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -120,13 +120,5 @@ module.exports = { project: false, }, }, - { - files: ['packages/**/upgrade-test-scripts/**/*.*js'], - rules: { - // NOTE: This rule is enabled for the repository in general. We turn it - // off for test code for now. - '@jessie.js/safe-await-separator': 'off', - }, - }, ], }; diff --git a/packages/deployment/upgrade-test/Dockerfile b/packages/deployment/upgrade-test/Dockerfile deleted file mode 100644 index 12120ca898b..00000000000 --- a/packages/deployment/upgrade-test/Dockerfile +++ /dev/null @@ -1,33 +0,0 @@ -# Defaults -ARG BASE_IMAGE=ghcr.io/agoric/agoric-3-proposals:pr-33 -ARG DEST_IMAGE=ghcr.io/agoric/agoric-sdk:dev - -# TODO different naming scheme for upgrade handler (in app.go) and the image name - -# UPGRADE -FROM ${BASE_IMAGE} as propose-agoric-upgrade-13 -ARG UPGRADE_INFO -ENV THIS_NAME= UPGRADE_TO="agoric-upgrade-13" UPGRADE_INFO=${UPGRADE_INFO} - -WORKDIR /usr/src/agoric-sdk/ -COPY --chmod=755 ./env_setup.sh ./start_to_to.sh ./upgrade-test-scripts/ -SHELL ["/bin/bash", "-c"] -RUN . ./upgrade-test-scripts/start_to_to.sh - -# DEST (TEST) -#this is agoric-upgrade-13 -ARG DEST_IMAGE -FROM ${DEST_IMAGE} as agoric-upgrade-13 -ENV THIS_NAME=agoric-upgrade-13 USE_JS=1 -COPY --from=propose-agoric-upgrade-13 /root/.agoric /root/.agoric -# start-chain boilerplate -WORKDIR /usr/src/agoric-sdk/ -COPY ./env_setup.sh ./start_to_to.sh ./package.json ./*.js ./upgrade-test-scripts/ -RUN cd upgrade-test-scripts && yarn -RUN echo '. /usr/src/agoric-sdk/upgrade-test-scripts/env_setup.sh' >> ~/.bashrc - -COPY ./${THIS_NAME} ./upgrade-test-scripts/${THIS_NAME}/ -SHELL ["/bin/bash", "-c"] -RUN chmod +x ./upgrade-test-scripts/*.sh -# enter image in interactive shell -ENTRYPOINT /usr/src/agoric-sdk/upgrade-test-scripts/start_to_to.sh diff --git a/packages/deployment/upgrade-test/Makefile b/packages/deployment/upgrade-test/Makefile deleted file mode 100644 index 9f85b6881a1..00000000000 --- a/packages/deployment/upgrade-test/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -REPOSITORY = agoric/upgrade-test -# use :dev (latest prerelease image) unless we build local sdk -DEST_IMAGE ?= $(if $(findstring local_sdk,$(MAKECMDGOALS)),ghcr.io/agoric/agoric-sdk:latest,ghcr.io/agoric/agoric-sdk:dev) -TARGET?=agoric-upgrade-13 -dockerLabel?=$(TARGET) -@echo target: $(TARGET) - -local_sdk: - (cd ../ && make docker-build-sdk) - -BUILD = docker build --progress=plain $(BUILD_OPTS) \ - --build-arg DEST_IMAGE=$(DEST_IMAGE) \ - -f Dockerfile upgrade-test-scripts - -propose-agoric-upgrade-13: - $(BUILD) --target propose-agoric-upgrade-13 -t $(REPOSITORY):propose-agoric-upgrade-13 - -agoric-upgrade-13: propose-agoric-upgrade-13 - $(BUILD) --target agoric-upgrade-13 -t $(REPOSITORY):agoric-upgrade-13 - -# build main bootstrap -build: $(TARGET) - -DEBUG ?= SwingSet:ls,SwingSet:vat -RUN = docker run --rm -it \ - -p 26656:26656 -p 26657:26657 -p 1317:1317 \ - -v "$${PWD}:/workspace" \ - -e "DEBUG=$(DEBUG)" - -run: - $(RUN) -e "DEST=1" \ - --entrypoint /usr/src/agoric-sdk/upgrade-test-scripts/start_to_to.sh \ - $(REPOSITORY):$(dockerLabel) - -run_test: - $(RUN) -e "DEST=0" $(REPOSITORY):$(dockerLabel) - -shell: - docker exec -it `docker ps --latest --format '{{json .}}' | jq -r .Names` bash - -.PHONY: local_sdk agoric-upgrade-13 build build_test run diff --git a/packages/deployment/upgrade-test/Readme.md b/packages/deployment/upgrade-test/Readme.md deleted file mode 100644 index 731e0f710c1..00000000000 --- a/packages/deployment/upgrade-test/Readme.md +++ /dev/null @@ -1,110 +0,0 @@ -# Dockerized Chain Upgrade Tester - -This will build an image upgrade of [agoric-3-proposals](https://github.com/Agoric/agoric-3-proposals), a Docker based environment simulating the agoric-3 mainnet chain, using the latest agoric-sdk. - -## Testing - -**To build the upgrade image** - -```shell -make build -``` - -By default pre-releases use the lastest image tagged `dev` in our [container repository](https://github.com/agoric/agoric-sdk/pkgs/container/agoric-sdk). To use -a specific build: - -```shell -DEST_IMAGE=ghcr.io/agoric/agoric-sdk:20230515033839-e56ae7 -``` -To use a build based on local changes: -```shell -# build ghcr.io/agoric/agoric-sdk:latest -make local_sdk build -# or DEST_IMAGE=ghcr.io/agoric/agoric-sdk:latest make build -``` - -**To run the upgrade interactively** - -```shell -make run -``` - -This will start a container with the output of chain start. - -To get a shell: `make shell` - - For more info: https://phase2.github.io/devtools/common-tasks/ssh-into-a-container/ - -The container and chain will halt once you detach from the session. - -### Troubleshooting -If you get an error about port 26656 already in use, you have a local chain running on your OS. - -If you run into other problems, you might have a local `agoric-sdk:latest` that -is stale. Either `make local_sdk` or delete your local image so Docker pulls -from the repository instead. - -If you lose the connection and want to get back, -```sh -# find the container id -docker ps -# reattach using the auto-generated goofy name -docker attach sweet_edison -``` - -**To pass specific `software-upgrade --upgrade-info`** - -```shell -json='{"some":"json","here":123}' -make build BUILD_OPTS="--build-arg UPGRADE_INFO='$json'" -``` - -Search this directory for `UPGRADE_INFO` if you want to see how it is plumbed -through. - -**To test CLI** - -You can point your local CLI tools to the chain running in Docker. Our Docker config binds on the same port (26656) as running a local chain. So you can use the agoric-cli commands on the Docker chain the same way. But note that the Cosmos account keys will be different from in your dev keyring. - -If when reattaching you get a log tail, you need to start a new TTY (with the container name). -```sh -docker exec -it sweet_edison bash -``` - -or just use this helper, -``` -make shell -``` - - -**To test GUI** - -To make the wallet ui talk to your local chain, set the network config to -`https://local.agoric.net/network-config` - -## Development - -When you exit and run again, the container will be a fresh state. - -By default targets that use "agoric-sdk:latest" will source from CI builds. To use your local checkout of agoric-sdk inside Docker run, - -```shell -make local_sdk -``` -Builds an image: ghcr.io/agoric/agoric-sdk:latest that will be used by all your builds. - -That will produce an image tagged agoric-sdk:latest in your local resolution. (Then run `make build run` again.) - -For more details about the docker upgrade test framework, refer to the [agoric-3-proposals](https://github.com/Agoric/agoric-3-proposals) repository. - -### IDE - -Some IDEs support connecting to a running container. For VS Code you can use [Dev Containers](https://code.visualstudio.com/docs/devcontainers/containers) to connect to a run above. Then you can edit the filesystem using the IDE. Once the workspace opens, you have to add a folder. E.g. `/usr/src/agoric-sdk/packages/agoric-cli/` for tweaking agoric-cli (without a rebuild of SDK). -Note that whatever changes you make within the running container will be lost when you terminate it. Use this just for iterating and be sure to copy any changes you want back to your real workspace. - -# TODO -- [X] make the Docker test environment log verbosely (agd start is just printing "block N" begin, commit) -- [ ] a target like `local_sdk` that just copies the local filesystem, without a full rebuild -- [ ] alternately, mount the local agoric-sdk in the container -- [ ] provide a utility to import the Docker's GOV123 keys into a local keyring - diff --git a/packages/deployment/upgrade-test/upgrade-test-scripts/agoric-upgrade-13/actions.js b/packages/deployment/upgrade-test/upgrade-test-scripts/agoric-upgrade-13/actions.js deleted file mode 100644 index 94af68fdb12..00000000000 --- a/packages/deployment/upgrade-test/upgrade-test-scripts/agoric-upgrade-13/actions.js +++ /dev/null @@ -1,147 +0,0 @@ -import { promises as fs } from 'fs'; -import * as path from 'path'; -import { dirname } from 'path'; -import { fileURLToPath } from 'url'; -import { getUser, voteLatestProposalAndWait } from '../commonUpgradeHelpers.js'; -import { CHAINID, GOV1ADDR, HOME, VALIDATORADDR } from '../constants.js'; -import { agd, bundleSource } from '../cliHelper.js'; - -const directoryName = dirname(fileURLToPath(import.meta.url)); - -export const addUser = async user => { - const userKeyData = await agd.keys('add', user, '--keyring-backend=test'); - await fs.writeFile(`${HOME}/.agoric/${user}.key`, userKeyData.mnemonic); - - const userAddress = await getUser(user); - return userAddress; -}; - -export const getISTBalance = async (addr, denom = 'uist', unit = 1_000_000) => { - const coins = await agd.query('bank', 'balances', addr); - const coin = coins.balances.find(a => a.denom === denom); - return Number(coin.amount) / unit; -}; - -export const installBundles = async bundlesData => { - const bundleIds = {}; - - for (const bundleData of bundlesData) { - const bundleFilePath = await bundleSource( - bundleData.filePath, - bundleData.name, - ); - - const bundleJSONData = await fs.readFile(bundleFilePath, 'binary'); - - const bundle = JSON.parse(bundleJSONData); - bundleIds[bundleData.name] = bundle.endoZipBase64Sha512; - - await agd.tx( - 'swingset', - 'install-bundle', - `@${bundleFilePath}`, - '--from', - GOV1ADDR, - '--keyring-backend=test', - '--gas=auto', - '--chain-id', - CHAINID, - '-bblock', - '--yes', - ); - } - - return bundleIds; -}; - -export const prepForCoreEval = async (filePath, constants) => { - let sourceFileData = await fs.readFile(filePath, 'binary'); - - for (const constant in constants) { - if (Object.prototype.hasOwnProperty.call(constants, constant)) { - sourceFileData = sourceFileData.replace( - `##${constant}##`, - constants[constant], - ); - } - } - - const newFilePath = `/tmp/${path.basename(filePath)}`; - await fs.writeFile(newFilePath, sourceFileData); - return newFilePath; -}; - -export const runProber = async bundleId => { - const proberScriptPath = path.join( - directoryName, - 'zoe-full-upgrade', - 'run-prober-script.js', - ); - const proberUpgradePermitPath = path.join( - directoryName, - 'zoe-full-upgrade', - 'zcf-upgrade-permit.json', - ); - const filePath = await prepForCoreEval(proberScriptPath, { - PROBER_BUNDLE_ID: `b1-${bundleId}`, - }); - await agd.tx( - 'gov', - 'submit-proposal', - 'swingset-core-eval', - proberUpgradePermitPath, - filePath, - `--title="Run Prober"`, - `--description="run prober"`, - '--deposit=10000000ubld', - '--from', - VALIDATORADDR, - '--keyring-backend=test', - '--gas=auto', - '--gas-adjustment=1.2', - '--chain-id', - CHAINID, - '-bblock', - '--yes', - ); - - await voteLatestProposalAndWait(); -}; - -export const runZcfUpgrade = async (zcfBundleId, zoeBundleId) => { - const zcfScriptPath = path.join( - directoryName, - 'zoe-full-upgrade', - 'zcf-upgrade-script.js', - ); - const zcfUpgradePermitPath = path.join( - directoryName, - 'zoe-full-upgrade', - 'zcf-upgrade-permit.json', - ); - const filePath = await prepForCoreEval(zcfScriptPath, { - ZCF_BUNDLE_ID: `b1-${zcfBundleId}`, - ZOE_BUNDLE_ID: `b1-${zoeBundleId}`, - }); - await agd.tx( - 'gov', - 'submit-proposal', - 'swingset-core-eval', - zcfUpgradePermitPath, - filePath, - `--title="Run Prober"`, - `--description="run prober"`, - '--deposit=10000000ubld', - '--from', - VALIDATORADDR, - '--keyring-backend=test', - '--gas=auto', - '--gas-adjustment=1.2', - '--chain-id', - CHAINID, - '-bblock', - '--yes', - ); - - return voteLatestProposalAndWait(); -}; diff --git a/packages/deployment/upgrade-test/upgrade-test-scripts/agoric-upgrade-13/tools/vat-status.js b/packages/deployment/upgrade-test/upgrade-test-scripts/agoric-upgrade-13/tools/vat-status.js deleted file mode 100644 index 81518a53609..00000000000 --- a/packages/deployment/upgrade-test/upgrade-test-scripts/agoric-upgrade-13/tools/vat-status.js +++ /dev/null @@ -1,92 +0,0 @@ -// @ts-check -import dbOpenAmbient from 'better-sqlite3'; -import { HOME } from '../../constants.js'; - -/** - * @file look up vat incarnation from kernel DB - * @see {getIncarnation} - */ - -const swingstorePath = '~/.agoric/data/agoric/swingstore.sqlite'; - -/** - * SQL short-hand - * - * @param {import('better-sqlite3').Database} db - */ -const dbTool = db => { - const prepare = (strings, ...params) => { - const dml = strings.join('?'); - return { stmt: db.prepare(dml), params }; - }; - const sql = (strings, ...args) => { - const { stmt, params } = prepare(strings, ...args); - return stmt.all(...params); - }; - sql.get = (strings, ...args) => { - const { stmt, params } = prepare(strings, ...args); - return stmt.get(...params); - }; - return sql; -}; - -/** - * @param {import('better-sqlite3').Database} db - */ -const makeSwingstore = db => { - const sql = dbTool(db); - - /** @param {string} key */ - const kvGet = key => sql.get`select * from kvStore where key = ${key}`.value; - /** @param {string} key */ - const kvGetJSON = key => JSON.parse(kvGet(key)); - - /** @param {string} vatID */ - const lookupVat = vatID => { - return Object.freeze({ - source: () => kvGetJSON(`${vatID}.source`), - options: () => kvGetJSON(`${vatID}.options`), - currentSpan: () => - sql.get`select * from transcriptSpans where isCurrent = 1 and vatID = ${vatID}`, - }); - }; - - return Object.freeze({ - /** @param {string} vatName */ - findVat: vatName => { - /** @type {string[]} */ - const dynamicIDs = kvGetJSON('vat.dynamicIDs'); - const targetVat = dynamicIDs.find( - vatID => lookupVat(vatID).options().name === vatName, - ); - if (!targetVat) throw Error(vatName); - return targetVat; - }, - lookupVat, - }); -}; - -/** @type {(val: T | undefined) => T} */ -const NonNullish = val => { - if (!val) throw Error('required'); - return val; -}; - -/** - * @param {string} vatName - */ -export const getIncarnation = async vatName => { - const fullPath = swingstorePath.replace(/^~/, NonNullish(HOME)); - const kStore = makeSwingstore(dbOpenAmbient(fullPath, { readonly: true })); - - const vatID = kStore.findVat(vatName); - const vatInfo = kStore.lookupVat(vatID); - - const source = vatInfo.source(); - const { incarnation } = vatInfo.currentSpan(); - - // misc info to stderr - console.error(JSON.stringify({ vatName, vatID, incarnation, ...source })); - - return incarnation; -}; diff --git a/packages/deployment/upgrade-test/upgrade-test-scripts/cliHelper.js b/packages/deployment/upgrade-test/upgrade-test-scripts/cliHelper.js deleted file mode 100644 index 8a89a19241a..00000000000 --- a/packages/deployment/upgrade-test/upgrade-test-scripts/cliHelper.js +++ /dev/null @@ -1,132 +0,0 @@ -/* eslint-disable @jessie.js/safe-await-separator */ -import { $, execaCommand } from 'execa'; - -const BINARY = 'agd'; - -export const executeCommand = async (command, params, options = {}) => { - const { stdout } = await execaCommand( - `${command} ${params.join(' ')}`, - options, - ); - return stdout; -}; - -export const agd = { - query: async (...params) => { - const newParams = ['query', ...params, '-o json']; - const data = await executeCommand(BINARY, newParams); - return JSON.parse(data); - }, - tx: async (...params) => { - const newParams = ['tx', ...params, '-o json']; - const data = await executeCommand(BINARY, newParams, { shell: true }); - return JSON.parse(data); - }, - keys: async (...params) => { - let newParams = ['keys', ...params]; - let shouldParse = true; - - if (params.includes('show')) { - if (params.includes('-a') || params.includes('-address')) { - shouldParse = false; - } - } - - if (shouldParse) { - newParams = [...newParams, '--output json']; - } - - const data = await executeCommand(BINARY, newParams, { input: 'Y' }); - if (!shouldParse) { - return data; - } - - return JSON.parse(data); - }, - export: async (...params) => { - const newParams = ['export', ...params]; - const data = await executeCommand(BINARY, newParams); - return JSON.parse(data); - }, -}; - -export const agoric = { - follow: async (...params) => { - let newParams = ['follow', ...params]; - let parseJson = false; - - if (!params.includes('-o')) { - newParams = [...newParams, '-o json']; - parseJson = true; - } - const data = await executeCommand('agoric', newParams); - - if (parseJson) { - return JSON.parse(data); - } - - return data; - }, - wallet: async (...params) => { - const newParams = ['wallet', ...params]; - return executeCommand('agoric', newParams); - }, - run: async (...params) => { - const newParams = ['run', ...params]; - return executeCommand('agoric', newParams); - }, -}; - -export const { stdout: agopsLocation } = await $({ - shell: true, - cwd: '/usr/src/agoric-sdk', -})`yarn bin agops`; - -export const agops = { - vaults: async (...params) => { - const newParams = ['vaults', ...params]; - - const result = await executeCommand(agopsLocation, newParams); - - if (params[0] === 'list') { - if (result === '') return []; - - return result.split('\n'); - } - - return result; - }, - ec: async (...params) => { - const newParams = ['ec', ...params]; - return executeCommand(agopsLocation, newParams); - }, - oracle: async (...params) => { - const newParams = ['oracle', ...params]; - return executeCommand(agopsLocation, newParams); - }, - perf: async (...params) => { - const newParams = ['perf', ...params]; - return executeCommand(agopsLocation, newParams); - }, - auctioneer: async (...params) => { - const newParams = ['auctioneer', ...params]; - return executeCommand(agopsLocation, newParams); - }, -}; - -export const { stdout: bundleSourceLocation } = await $({ - shell: true, - cwd: '/usr/src/agoric-sdk', -})`yarn bin bundle-source`; - -/** - * @param {string} filePath - * @param {string} bundleName - * @returns {Promise} Returns the filepath of the bundle - */ -export const bundleSource = async (filePath, bundleName) => { - const output = - await $`${bundleSourceLocation} --cache-json /tmp ${filePath} ${bundleName}`; - console.log(output.stderr); - return `/tmp/bundle-${bundleName}.json`; -}; diff --git a/packages/deployment/upgrade-test/upgrade-test-scripts/commonUpgradeHelpers.js b/packages/deployment/upgrade-test/upgrade-test-scripts/commonUpgradeHelpers.js deleted file mode 100644 index 2c7945d520a..00000000000 --- a/packages/deployment/upgrade-test/upgrade-test-scripts/commonUpgradeHelpers.js +++ /dev/null @@ -1,281 +0,0 @@ -/* eslint-disable @jessie.js/safe-await-separator */ -import { $ } from 'execa'; -import { promises as fs } from 'fs'; -import * as path from 'path'; -import { agd, agoric, agops } from './cliHelper.js'; -import { CHAINID, VALIDATORADDR } from './constants.js'; - -const waitForBootstrap = async () => { - const endpoint = 'localhost'; - // eslint-disable-next-line no-constant-condition - while (true) { - const { stdout: json } = await $({ - reject: false, - })`curl -s --fail -m 15 ${`${endpoint}:26657/status`}`; - - if (json.length === 0) { - continue; - } - - const data = JSON.parse(json); - - if (data.jsonrpc !== '2.0') { - continue; - } - - const lastHeight = data.result.sync_info.latest_block_height; - - if (lastHeight !== '1') { - return lastHeight; - } - - // eslint-disable-next-line no-undef - await new Promise(r => setTimeout(r, 2000)); - } -}; - -export const waitForBlock = async (times = 1) => { - console.log(times); - let time = 0; - while (time < times) { - const block1 = await waitForBootstrap(); - // eslint-disable-next-line no-constant-condition - while (true) { - const block2 = await waitForBootstrap(); - - if (block1 !== block2) { - console.log('block produced'); - break; - } - - // eslint-disable-next-line no-undef - await new Promise(r => setTimeout(r, 1000)); - } - time += 1; - } -}; - -export const provisionSmartWallet = async (address, amount) => { - console.log(`funding ${address}`); - await agd.tx( - 'bank', - 'send', - 'validator', - address, - amount, - '-y', - '--keyring-backend=test', - `--chain-id="${CHAINID}"`, - ); - await waitForBlock(); - - console.log(`provisioning ${address}`); - await agd.tx( - 'swingset', - 'provision-one', - 'my-wallet', - address, - 'SMART_WALLET', - '--keyring-backend=test', - '-y', - `--chain-id="${CHAINID}"`, - `--from="${address}"`, - ); - - await waitForBlock(2); - console.log(await agoric.wallet('show', `--from ${address}`)); -}; - -export const newOfferId = async () => { - const { stdout: date } = await $`date +${'%s%3M'}`; - // eslint-disable-next-line no-undef - await new Promise(r => setTimeout(r, 1000)); - - return date; -}; - -export const mkTemp = async template => { - const { stdout: data } = await $({ - shell: true, - })`mktemp -t ${template}`; - return data; -}; - -export const calculateWalletState = async addr => { - const result = await agoric.follow( - '-lF', - `:published.wallet.${addr}`, - '-o', - 'text', - ); - - const body = JSON.parse(result).body; - let state = body; - - if (body.includes('@qclass')) { - state = 'old'; - } else if (body.includes('#{}')) { - state = 'upgraded'; - } else if (body.includes('#')) { - state = 'revived'; - } - - return state; -}; - -export const executeOffer = async (address, offerPromise) => { - const offerPath = await mkTemp('agops.XXX'); - const offer = await offerPromise; - await fs.writeFile(offerPath, offer); - - await agops.perf( - 'satisfaction', - '--from', - address, - '--executeOffer', - offerPath, - '--keyring-backend=test', - ); -}; - -export const getUser = async user => { - return agd.keys('show', user, '-a', '--keyring-backend=test'); -}; - -export const voteLatestProposalAndWait = async () => { - await waitForBlock(); - const proposalsData = await agd.query('gov', 'proposals'); - const lastProposalId = proposalsData.proposals.at(-1).proposal_id; - - await waitForBlock(); - - await agd.tx( - 'gov', - 'deposit', - lastProposalId, - '50000000ubld', - '--from', - VALIDATORADDR, - `--chain-id=${CHAINID}`, - '--yes', - '--keyring-backend', - 'test', - ); - - await waitForBlock(); - - await agd.tx( - 'gov', - 'vote', - lastProposalId, - 'yes', - '--from', - VALIDATORADDR, - `--chain-id=${CHAINID}`, - '--yes', - '--keyring-backend', - 'test', - ); - - let info = {}; - for ( - ; - info.status !== 'PROPOSAL_STATUS_REJECTED' && - info.status !== 'PROPOSAL_STATUS_PASSED'; - await waitForBlock() - ) { - info = await agd.query('gov', 'proposal', lastProposalId); - console.log( - `Waiting for proposal ${lastProposalId} to pass (status=${info.status})`, - ); - } - return info; -}; - -const Fail = (template, ...args) => { - throw Error(String.raw(template, ...args.map(val => String(val)))); -}; - -/** - * Parse output of `agoric run proposal-builder.js` - * - * @param {string} txt - * - * adapted from packages/boot/test/bootstrapTests/supports.js - */ -const parseProposalParts = txt => { - const evals = [ - ...txt.matchAll(/swingset-core-eval (?\S+) (?