feat(chat): storage size check and chat history cleanup #29828
Workflow file for this run
This file contains hidden or 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: ci | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
types: [opened, reopened, synchronize, ready_for_review] | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
# Sets a variable that is used to determine the matrix to run fast tests (unit & integration) on. | |
# Everything runs on ubuntu and windows, only commits to main run on macos. | |
fast_tests_matrix_prep: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- id: set-matrix | |
run: | | |
if [ "$GITHUB_EVENT_NAME" == "push" ] && [ "$GITHUB_REF" == "refs/heads/main" ]; then | |
echo 'matrix=["ubuntu","windows","macos"]' >> $GITHUB_OUTPUT | |
else | |
echo 'matrix=["ubuntu","windows"]' >> $GITHUB_OUTPUT | |
fi | |
test-unit: | |
needs: fast_tests_matrix_prep | |
strategy: | |
fail-fast: false | |
matrix: | |
runner: ${{ fromJson(needs.fast_tests_matrix_prep.outputs.matrix) }} | |
# Run on the most recently supported version of node for all bots. | |
node: [20] | |
include: | |
# Additionally, run the oldest supported version on Ubuntu. We don't | |
# need to run this on all platforms as we're only verifying we don't | |
# call any APIs not available in this version. | |
- runner: ubuntu | |
node: 18 # VS Code started using Node 18 in Aug 2023 in v1.82: https://code.visualstudio.com/updates/v1_82#_engineering | |
runs-on: ${{ matrix.runner }}-latest | |
timeout-minutes: 10 | |
permissions: | |
id-token: write | |
contents: read | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node }} | |
- uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # SECURITY: pin third-party action hashes | |
- id: auth | |
uses: google-github-actions/auth@v2 | |
# Skip auth if PR is from a fork | |
if: ${{ !github.event.pull_request.head.repo.fork }} | |
with: | |
workload_identity_provider: ${{ secrets.DATA_TEAM_PROVIDER_NAME }} | |
service_account: ${{ secrets.DATA_TEAM_SA_EMAIL }} | |
- uses: google-github-actions/setup-gcloud@v2 | |
- run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT | |
shell: bash | |
id: pnpm-cache | |
- name: Restore cache pnpm store | |
id: restore-pnpm-cache | |
uses: actions/cache/restore@v4 | |
with: | |
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: ${{ runner.os }}-pnpm-store- | |
- run: pnpm install | |
- name: Save cache pnpm store | |
if: steps.restore-pnpm-cache.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
- run: pnpm build | |
- run: pnpm run test:unit --run | |
env: | |
CODY_NODE_VERSION: ${{ matrix.node }} | |
test-integration: | |
needs: fast_tests_matrix_prep | |
strategy: | |
fail-fast: false | |
matrix: | |
runner: ${{ fromJson(needs.fast_tests_matrix_prep.outputs.matrix) }} | |
runs-on: ${{ matrix.runner }}-latest | |
timeout-minutes: 15 | |
permissions: | |
id-token: write | |
contents: read | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version-file: .tool-versions | |
- uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # SECURITY: pin third-party action hashes | |
- id: auth | |
uses: google-github-actions/auth@v2 | |
# Skip auth if PR is from a fork | |
if: ${{ !github.event.pull_request.head.repo.fork }} | |
with: | |
workload_identity_provider: ${{ secrets.DATA_TEAM_PROVIDER_NAME }} | |
service_account: ${{ secrets.DATA_TEAM_SA_EMAIL }} | |
- uses: google-github-actions/setup-gcloud@v2 | |
- run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT | |
shell: bash | |
id: pnpm-cache | |
- name: Restore cache pnpm store | |
id: restore-pnpm-cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: ${{ runner.os }}-pnpm-store- | |
- run: pnpm install | |
- name: Save cache pnpm store | |
if: steps.restore-pnpm-cache.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
# commands before `xvfb-run -a pnpm run test` avoid these ERROR messages: | |
# - Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix") | |
# - Exiting GPU process due to errors during initialization | |
- name: Run tests (ubuntu) | |
run: | | |
export XDG_RUNTIME_DIR=/run/user/$(id -u) | |
export DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus | |
dbus-daemon --session --address=$DBUS_SESSION_BUS_ADDRESS --nofork --nopidfile --syslog-only & | |
mkdir ~/.vscode && echo '{ "disable-hardware-acceleration": true }' > ~/.vscode/argv.json | |
xvfb-run -a pnpm -C vscode run test:integration | |
if: matrix.runner == 'ubuntu' | |
- name: Run tests (windows) | |
if: matrix.runner == 'windows' | |
shell: powershell | |
run: | | |
$vscodeDir = "$env:USERPROFILE\.vscode" | |
New-Item -ItemType Directory -Path $vscodeDir -Force | Out-Null | |
# Create JSON object and convert to string | |
$settings = @{ "disable-hardware-acceleration" = $true } | |
$json = ConvertTo-Json $settings -Compress | |
# Write to file using Out-File with encoding parameter | |
$json | Out-File -FilePath "$vscodeDir\argv.json" -Encoding ascii -NoNewline | |
pnpm -C vscode run test:integration | |
- name: Run tests (mac) | |
run: | | |
mkdir ~/.vscode && echo '{ "disable-hardware-acceleration": true }' > ~/.vscode/argv.json | |
pnpm -C vscode run test:integration | |
if: matrix.runner == 'macos' | |
# Sets a variable that is used to determine the matrix to run slow tests (e2e) on. | |
# Everything runs on ubuntu, only commits to main run on macos and windows. | |
slow_tests_matrix_prep: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- id: set-matrix | |
run: | | |
echo 'matrix=[{"runner":"ubuntu","shard":"1/5"},{"runner":"ubuntu","shard":"2/5"},{"runner":"ubuntu","shard":"3/5"},{"runner":"ubuntu","shard":"4/5"},{"runner":"ubuntu","shard":"5/5"}]' >> $GITHUB_OUTPUT | |
test-e2e: | |
needs: slow_tests_matrix_prep | |
strategy: | |
fail-fast: false | |
matrix: | |
include: ${{ fromJson(needs.slow_tests_matrix_prep.outputs.matrix) }} | |
runs-on: ${{ matrix.runner }}-latest | |
timeout-minutes: 20 | |
permissions: | |
id-token: write | |
contents: read | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version-file: .tool-versions | |
- uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # SECURITY: pin third-party action hashes | |
- id: auth | |
uses: google-github-actions/auth@v2 | |
# Skip auth if PR is from a fork | |
if: ${{ !github.event.pull_request.head.repo.fork }} | |
with: | |
workload_identity_provider: ${{ secrets.DATA_TEAM_PROVIDER_NAME }} | |
service_account: ${{ secrets.DATA_TEAM_SA_EMAIL }} | |
- uses: google-github-actions/setup-gcloud@v2 | |
- run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT | |
shell: bash | |
id: pnpm-cache | |
- name: Restore cache pnpm store | |
id: restore-pnpm-cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: ${{ runner.os }}-pnpm-store- | |
- run: pnpm install | |
- name: Save cache pnpm store | |
if: steps.restore-pnpm-cache.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
- run: GITHUB_REF=$BRANCH_NAME xvfb-run -a pnpm -C vscode run test:e2e --shard=${{ matrix.shard }} | |
if: matrix.runner == 'ubuntu' | |
env: | |
BUILDKITE_ANALYTICS_TOKEN: ${{ secrets.BUILDKITE_ANALYTICS_TOKEN }} | |
# This is required because the test collector from Buildkite is imprecise when it | |
# comes to infer the branch name on GitHub action. | |
BRANCH_NAME: ${{ github.head_ref || github.ref_name }} | |
- run: GITHUB_REF=$BRANCH_NAME pnpm -C vscode run test:e2e | |
if: matrix.runner == 'macos' | |
env: | |
BUILDKITE_ANALYTICS_TOKEN: ${{ secrets.BUILDKITE_ANALYTICS_TOKEN }} | |
# This is required because the test collector from Buildkite is imprecise when it | |
# comes to infer the branch name on GitHub action. | |
BRANCH_NAME: ${{ github.head_ref || github.ref_name }} | |
- run: $env:GITHUB_REF=$env:BRANCH_NAME; pnpm -C vscode run test:e2e | |
if: matrix.runner == 'windows' | |
env: | |
BUILDKITE_ANALYTICS_TOKEN: ${{ secrets.BUILDKITE_ANALYTICS_TOKEN }} | |
# This is required because the test collector from Buildkite is imprecise when it | |
# comes to infer the branch name on GitHub action. | |
BRANCH_NAME: ${{ github.head_ref || github.ref_name }} | |
- uses: actions/upload-artifact@v4 | |
if: ${{ failure() }} | |
with: | |
name: playwright-recordings ${{ matrix.runner }} | |
path: | | |
playwright/ | |
vscode/test-results/ | |
build: | |
runs-on: ubuntu-latest | |
timeout-minutes: 5 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version-file: .tool-versions | |
- uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # SECURITY: pin third-party action hashes | |
- run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT | |
shell: bash | |
id: pnpm-cache | |
- name: Restore cache pnpm store | |
id: restore-pnpm-cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: ${{ runner.os }}-pnpm-store- | |
- run: pnpm install | |
- name: Save cache pnpm store | |
if: steps.restore-pnpm-cache.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
# Run Biome and capture the output. If biome crashes, it still reports a | |
# successful CI run (exit code 0) but that will ripple down to errors in | |
# the Biome VS Code extension. This ensures that we don't accidentally | |
# break Biome. | |
- name: Biome | |
run: | | |
set +e | |
output=$(pnpm exec biome ci --error-on-warnings . 2>&1) | |
status=$? | |
echo "$output" | |
if [ $status -ne 0 ]; then | |
exit $status | |
fi | |
if echo "$output" | grep -q "Biome encountered an unexpected error"; then | |
echo "Error string 'Biome encountered an unexpected error' detected in output." | |
exit 1 | |
fi | |
shell: bash | |
- run: pnpm run build | |
- run: pnpm -C vscode run build | |
- run: CODY_RELEASE_TYPE=stable pnpm -C vscode run release:dry-run |