Skip to content

feat(chat): storage size check and chat history cleanup #29828

feat(chat): storage size check and chat history cleanup

feat(chat): storage size check and chat history cleanup #29828

Workflow file for this run

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