fix(liveslots): avoid slotToVal memory leak for watched promises (#10… #33991
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test all Packages | |
# run on all PRs (even the ones that target other branches) | |
on: | |
pull_request: | |
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 }} | |
cancel-in-progress: true | |
env: | |
AGORIC_AVA_USE_TAP: true | |
TEST_COLLECT: 'tee -a _testoutput.txt' | |
NODE_V8_COVERAGE: coverage | |
# this is required, since explicitly setting bash as shell enables pipefail, which is not | |
# on by default. This is required to fail correctly when teeing output to a file to collect | |
# test instrumentation | |
defaults: | |
run: | |
shell: bash | |
# set ESM_DISABLE_CACHE=true (will be JSON parsed) | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
node-version: ['18.x', '20.x'] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
- uses: ./.github/actions/restore-node | |
with: | |
node-version: ${{ matrix.node-version }} | |
dependency-graph: | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install graphviz | |
run: sudo apt install -y graphviz | |
# This is now redundant with Lerna's --reject-cycles but keep it here so we have | |
# test coverage of this script we use for visualizing the dep graph. | |
- name: Check for cycles | |
run: scripts/check-dependency-cycles.sh | |
# install node_modules | |
- uses: ./.github/actions/restore-node | |
# Releasing SDK builds all packages in this order during `lerna publish`. | |
# Due to ambient types, certain build orders (from the dependency graph) | |
# may break the type resolution. Run this in the PR to find out before | |
# attempting to merge to master. This takes about 1min locally and since | |
# this job is about 30s in CI doing it here doesn't add to wall wait for | |
# CI resolution. | |
# | |
# We prepack only because full pack removes the declarations, relying on | |
# ambient resolution in the repo filesystem which will not be available | |
# when the packages are pulled from npm. | |
# | |
# After that test, we postpack to avoid putting the prepack artifacts in | |
# the cache maintained by restore-node, since they are not .gitignored and | |
# thus will fail restore-node's check for a clean repo when the cache is | |
# restored. | |
- name: Pack packages without ambient type resolution | |
run: | | |
yarn lerna run --reject-cycles --concurrency 1 prepack | |
yarn lerna run postpack | |
################## | |
# Lint tests | |
# We run per package bc of https://github.com/typescript-eslint/typescript-eslint/issues/1192 | |
# 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: 20 | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/restore-node | |
with: | |
node-version: '18.x' | |
- name: lint repo format | |
run: yarn lint:format | |
# eslint and tsc | |
- run: yarn lint:packages | |
# A second job for what's not covered in primary | |
lint-rest: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/restore-node | |
with: | |
node-version: '18.x' | |
# Check some of a3p-integration in this job that runs on PRs instead of | |
# waiting for the slow integration test that by default only runs in the | |
# master merge check | |
- name: Lint a3p-integration | |
run: yarn install && yarn lint && yarn doctor | |
working-directory: a3p-integration | |
- name: build A3P submissions | |
run: yarn run build:submissions | |
working-directory: a3p-integration | |
# Attempt the doc generation to catch build errors before | |
# landing on master | |
- name: build API docs | |
run: yarn docs | |
- name: build API docs in markdown | |
run: yarn docs:markdown-for-agoric-documentation-repo | |
################## | |
# Fast-running tests run as a group: | |
test-quick: | |
# BEGIN-TEST-BOILERPLATE | |
timeout-minutes: 30 | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
engine: ['18.x', '20.x', 'xs'] | |
steps: | |
- name: set vars | |
id: vars | |
run: | | |
echo "node-version=${{ matrix.engine == 'xs' && '18.x' || matrix.engine }}" >> $GITHUB_OUTPUT | |
echo "test=${{ matrix.engine == 'xs' && 'test:xs' || 'test' }}" >> $GITHUB_OUTPUT | |
echo "GH_ENGINE=${{ matrix.engine }}" >> $GITHUB_ENV | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/restore-node | |
with: | |
node-version: ${{ steps.vars.outputs.node-version }} | |
# END-TEST-BOILERPLATE | |
# We run separate steps for each package, to make it easier to drill down | |
# into errors. If we wanted to just run everything, run 'yarn test' from | |
# the top level. | |
# | |
# This list should include all packages, except ones that are in another | |
# category here, or that don't have a package.json. | |
#- 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 (benchmark) | |
if: (success() || failure()) | |
run: cd packages/benchmark && 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 (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 (orchestration) | |
if: (success() || failure()) | |
run: cd packages/orchestration && 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 (cosmic-proto) | |
if: (success() || failure()) | |
run: cd packages/cosmic-proto && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT | |
- name: yarn test (vow) | |
if: (success() || failure()) | |
run: cd packages/vow && yarn ${{ steps.vars.outputs.test }} | $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 | |
- 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 }} | |
codecov-token: ${{ secrets.CODECOV_TOKEN }} | |
gcp-credentials: ${{ secrets.GCP_CREDENTIALS }} | |
test-quick2: | |
# BEGIN-TEST-BOILERPLATE | |
timeout-minutes: 30 | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
engine: ['18.x', '20.x', 'xs'] | |
steps: | |
- name: set vars | |
id: vars | |
run: | | |
echo "node-version=${{ matrix.engine == 'xs' && '18.x' || matrix.engine }}" >> $GITHUB_OUTPUT | |
echo "test=${{ matrix.engine == 'xs' && 'test:xs' || 'test' }}" >> $GITHUB_OUTPUT | |
echo "GH_ENGINE=${{ matrix.engine }}" >> $GITHUB_ENV | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/restore-node | |
with: | |
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 (async-flow) | |
if: (success() || failure()) | |
run: cd packages/async-flow && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT | |
- name: yarn test (base-zone) | |
if: (success() || failure()) | |
run: cd packages/base-zone && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT | |
- name: yarn test (builders) | |
if: (success() || failure()) | |
run: cd packages/builders && 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 (client-utils) | |
if: (success() || failure()) | |
run: cd packages/client-utils && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT | |
- name: yarn test (create-dapp) | |
run: cd packages/create-dapp && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT | |
- name: yarn test (fast-usdc) | |
if: (success() || failure()) | |
run: cd packages/fast-usdc && 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 (kmarshal) | |
if: (success() || failure()) | |
run: cd packages/kmarshal && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT | |
- name: yarn test (network) | |
if: (success() || failure()) | |
run: cd packages/network && 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 (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 (vats) | |
if: (success() || failure()) | |
run: cd packages/vats && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT | |
- name: yarn test (vm-config) | |
if: (success() || failure()) | |
run: cd packages/vm-config && 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 | |
timeout-minutes: 4 | |
with: | |
datadog-token: ${{ secrets.DATADOG_API_KEY }} | |
codecov-token: ${{ secrets.CODECOV_TOKEN }} | |
gcp-credentials: ${{ secrets.GCP_CREDENTIALS }} | |
############## | |
# Long-running tests are executed individually. | |
test-governance: | |
# BEGIN-TEST-BOILERPLATE | |
timeout-minutes: 30 | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
# test:xs is noop in governance/package.json | |
engine: ['18.x', '20.x'] | |
steps: | |
- name: set vars | |
id: vars | |
run: | | |
echo "node-version=${{ matrix.engine == 'xs' && '18.x' || matrix.engine }}" >> $GITHUB_OUTPUT | |
echo "test=${{ matrix.engine == 'xs' && 'test:xs' || 'test' }}" >> $GITHUB_OUTPUT | |
echo "GH_ENGINE=${{ matrix.engine }}" >> $GITHUB_ENV | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/restore-node | |
with: | |
node-version: ${{ steps.vars.outputs.node-version }} | |
# END-TEST-BOILERPLATE | |
- name: yarn test (governance) | |
if: (success() || failure()) | |
run: cd packages/governance && 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 | |
timeout-minutes: 4 | |
with: | |
datadog-token: ${{ secrets.DATADOG_API_KEY }} | |
codecov-token: ${{ secrets.CODECOV_TOKEN }} | |
gcp-credentials: ${{ secrets.GCP_CREDENTIALS }} | |
test-solo: | |
# BEGIN-TEST-BOILERPLATE | |
timeout-minutes: 30 | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
# test:xs is noop in solo/package.json | |
engine: ['18.x', '20.x'] | |
steps: | |
- name: set vars | |
id: vars | |
run: | | |
echo "node-version=${{ matrix.engine == 'xs' && '18.x' || matrix.engine }}" >> $GITHUB_OUTPUT | |
echo "test=${{ matrix.engine == 'xs' && 'test:xs' || 'test' }}" >> $GITHUB_OUTPUT | |
echo "GH_ENGINE=${{ matrix.engine }}" >> $GITHUB_ENV | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/restore-node | |
with: | |
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 | |
timeout-minutes: 4 | |
with: | |
datadog-token: ${{ secrets.DATADOG_API_KEY }} | |
codecov-token: ${{ secrets.CODECOV_TOKEN }} | |
gcp-credentials: ${{ secrets.GCP_CREDENTIALS }} | |
test-cosmic-swingset: | |
# BEGIN-TEST-BOILERPLATE | |
timeout-minutes: 30 | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
# test:xs is noop in cosmic-swingset/package.json | |
engine: ['18.x', '20.x', 'xs'] | |
steps: | |
- name: set vars | |
id: vars | |
run: | | |
echo "node-version=${{ matrix.engine == 'xs' && '18.x' || matrix.engine }}" >> $GITHUB_OUTPUT | |
echo "test=${{ matrix.engine == 'xs' && 'test:xs' || 'test' }}" >> $GITHUB_OUTPUT | |
echo "GH_ENGINE=${{ matrix.engine }}" >> $GITHUB_ENV | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/restore-node | |
with: | |
node-version: ${{ steps.vars.outputs.node-version }} | |
# END-TEST-BOILERPLATE | |
- uses: ./.github/actions/restore-golang | |
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 | |
timeout-minutes: 4 | |
with: | |
datadog-token: ${{ secrets.DATADOG_API_KEY }} | |
codecov-token: ${{ secrets.CODECOV_TOKEN }} | |
gcp-credentials: ${{ secrets.GCP_CREDENTIALS }} | |
test-inter-protocol: | |
# BEGIN-TEST-BOILERPLATE | |
timeout-minutes: 30 | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
# test:xs is noop in inter-protocol/package.json | |
engine: ['18.x', '20.x'] | |
steps: | |
- name: set vars | |
id: vars | |
run: | | |
echo "node-version=${{ matrix.engine == 'xs' && '18.x' || matrix.engine }}" >> $GITHUB_OUTPUT | |
echo "test=${{ matrix.engine == 'xs' && 'test:xs' || 'test' }}" >> $GITHUB_OUTPUT | |
echo "GH_ENGINE=${{ matrix.engine }}" >> $GITHUB_ENV | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/restore-node | |
with: | |
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 | |
timeout-minutes: 4 | |
with: | |
datadog-token: ${{ secrets.DATADOG_API_KEY }} | |
codecov-token: ${{ secrets.CODECOV_TOKEN }} | |
gcp-credentials: ${{ secrets.GCP_CREDENTIALS }} | |
test-boot: | |
# BEGIN-TEST-BOILERPLATE | |
timeout-minutes: 40 | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
engine: ['18.x', '20.x', 'xs'] | |
# Run parallel testing jobs, each executing a subset. | |
node_index: [0, 1, 2, 3] | |
total_nodes: [4] # the total number of nodes | |
steps: | |
- name: set vars | |
id: vars | |
run: | | |
echo "node-version=${{ matrix.engine == 'xs' && '18.x' || matrix.engine }}" >> $GITHUB_OUTPUT | |
echo "test=${{ matrix.engine == 'xs' && 'test:xs' || 'test' }}" >> $GITHUB_OUTPUT | |
echo "GH_ENGINE=${{ matrix.engine }}" >> $GITHUB_ENV | |
echo "CI_NODE_INDEX=${{ matrix.node_index }}" >> $GITHUB_ENV | |
echo "CI_NODE_TOTAL=${{ matrix.total_nodes }}" >> $GITHUB_ENV | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/restore-node | |
with: | |
node-version: ${{ steps.vars.outputs.node-version }} | |
# END-TEST-BOILERPLATE | |
- name: yarn test (boot) | |
if: (success() || failure()) | |
run: cd packages/boot && 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 | |
timeout-minutes: 4 | |
with: | |
datadog-token: ${{ secrets.DATADOG_API_KEY }} | |
codecov-token: ${{ secrets.CODECOV_TOKEN }} | |
gcp-credentials: ${{ secrets.GCP_CREDENTIALS }} | |
test-swingset: | |
# BEGIN-TEST-BOILERPLATE | |
timeout-minutes: 30 | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
engine: ['18.x', '20.x', 'xs'] | |
# Run parallel testing jobs, each executing a subset. | |
node_index: [0, 1, 2, 3, 4] | |
total_nodes: [5] # the total number of nodes | |
steps: | |
- name: set vars | |
id: vars | |
run: | | |
echo "node-version=${{ matrix.engine == 'xs' && '18.x' || matrix.engine }}" >> $GITHUB_OUTPUT | |
echo "test=${{ matrix.engine == 'xs' && 'test:xs' || 'test' }}" >> $GITHUB_OUTPUT | |
echo "GH_ENGINE=${{ matrix.engine }}" >> $GITHUB_ENV | |
echo "CI_NODE_INDEX=${{ matrix.node_index }}" >> $GITHUB_ENV | |
echo "CI_NODE_TOTAL=${{ matrix.total_nodes }}" >> $GITHUB_ENV | |
- uses: actions/checkout@v4 | |
- 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()) | |
run: cd packages/SwingSet && yarn ${{ steps.vars.outputs.test }} | $TEST_COLLECT | |
# explicitly test the XS worker, for visibility | |
- name: yarn test (SwingSet XS Worker) | |
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 | |
timeout-minutes: 4 | |
with: | |
datadog-token: ${{ secrets.DATADOG_API_KEY }} | |
codecov-token: ${{ secrets.CODECOV_TOKEN }} | |
gcp-credentials: ${{ secrets.GCP_CREDENTIALS }} | |
test-zoe-unit: | |
# BEGIN-TEST-BOILERPLATE | |
timeout-minutes: 30 | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
engine: ['18.x', '20.x', 'xs'] | |
steps: | |
- name: set vars | |
id: vars | |
# END-TEST-BOILERPLATE | |
# XXX test:xs-unit is deprecated branch protection still expects it | |
run: | | |
echo "node-version=${{ matrix.engine == 'xs' && '18.x' || matrix.engine }}" >> $GITHUB_OUTPUT | |
echo "test=${{ matrix.engine == 'xs' && 'test:xs-unit' || 'test:unit' }}" >> $GITHUB_OUTPUT | |
echo "GH_ENGINE=${{ matrix.engine }}" >> $GITHUB_ENV | |
# BEGIN-TEST-BOILERPLATE | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/restore-node | |
with: | |
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 | |
timeout-minutes: 4 | |
with: | |
datadog-token: ${{ secrets.DATADOG_API_KEY }} | |
codecov-token: ${{ secrets.CODECOV_TOKEN }} | |
gcp-credentials: ${{ secrets.GCP_CREDENTIALS }} | |
test-zoe-swingset: | |
# BEGIN-TEST-BOILERPLATE | |
timeout-minutes: 30 | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
engine: ['18.x', '20.x', 'xs'] | |
steps: | |
- name: set vars | |
id: vars | |
# END-TEST-BOILERPLATE | |
run: | | |
echo "node-version=${{ matrix.engine == 'xs' && '18.x' || matrix.engine }}" >> $GITHUB_OUTPUT | |
echo "test=${{ matrix.engine == 'xs' && 'test:xs-worker' || 'test:swingset' }}" >> $GITHUB_OUTPUT | |
echo "GH_ENGINE=${{ matrix.engine }}" >> $GITHUB_ENV | |
# BEGIN-TEST-BOILERPLATE | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/restore-node | |
with: | |
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 | |
timeout-minutes: 4 | |
with: | |
datadog-token: ${{ secrets.DATADOG_API_KEY }} | |
codecov-token: ${{ secrets.CODECOV_TOKEN }} | |
gcp-credentials: ${{ secrets.GCP_CREDENTIALS }} |