fix: improve terminal toggle logic #76
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: Tests | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
permissions: | |
contents: read | |
# Cancel in-progress runs for pull requests when developers push | |
# additional changes | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} | |
jobs: | |
unit-tests: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
neovim-version: ["stable", "nightly"] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- name: Setup Nix | |
uses: nixbuild/nix-quick-install-action@5bb6a3b3abe66fd09bbf250dce8ada94f856a703 # v30 | |
- uses: nix-community/cache-nix-action@135667ec418502fa5a3598af6fb9eb733888ce6a # v6.1.3 | |
with: | |
primary-key: nix-claudecode-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/flake.lock') }} | |
restore-prefixes-first-match: nix-claudecode-${{ runner.os }}- | |
gc-max-store-size-linux: 2G | |
purge: true | |
purge-prefixes: nix-claudecode-${{ runner.os }}- | |
purge-created: 0 | |
purge-primary-key: never | |
- name: Setup Neovim | |
uses: rhysd/action-setup-vim@8e931b9954b19d4203d5caa5ff5521f3bc21dcc7 # v1.4.2 | |
with: | |
neovim: true | |
version: ${{ matrix.neovim-version }} | |
- name: Run Luacheck | |
run: nix develop .#ci -c luacheck lua/ tests/ --no-unused-args --no-max-line-length | |
- name: Run tests | |
run: nix develop .#ci -c ./run_tests.sh | |
- name: Check formatting | |
run: nix flake check | |
- name: Generate coverage report | |
run: | | |
# Check if stats file exists (created by busted --coverage) | |
if [ -f "luacov.stats.out" ]; then | |
# Generate the regular luacov report | |
nix develop .#ci -c luacov | |
# Create simple lcov.info from luacov.report.out | |
echo "Creating lcov.info from luacov.report.out" | |
{ | |
echo "TN:" | |
grep -E "^Summary$" -A1000 luacov.report.out | grep -E "^[^ ].*:" | while read -r line; do | |
file=$(echo "$line" | cut -d':' -f1) | |
echo "SF:$file" | |
percent=$(echo "$line" | grep -oE "[0-9\.]+%" | tr -d '%') | |
if [ -n "$percent" ]; then | |
echo "DA:1,1" | |
echo "LF:1" | |
echo "LH:$percent" | |
fi | |
echo "end_of_record" | |
done | |
} > lcov.info | |
# Create markdown coverage summary for GitHub Actions | |
{ | |
echo "## π Test Coverage Report" | |
echo "" | |
# Extract overall coverage percentage | |
if [ -f "luacov.report.out" ]; then | |
overall_coverage=$(grep -E "Total.*%" luacov.report.out | grep -oE "[0-9]+\.[0-9]+%" | head -1) | |
if [ -n "$overall_coverage" ]; then | |
echo "**Overall Coverage: $overall_coverage**" | |
echo "" | |
fi | |
# Create table header | |
echo "| File | Coverage |" | |
echo "|------|----------|" | |
# Extract file-by-file coverage | |
grep -E "^[^ ].*:" luacov.report.out | while read -r line; do | |
file=$(echo "$line" | cut -d':' -f1) | |
percent=$(echo "$line" | grep -oE "[0-9]+\.[0-9]+%" | head -1) | |
if [ -n "$percent" ]; then | |
# Add emoji based on coverage level | |
percent_num="${percent%.*}" | |
if [ "$percent_num" -ge 90 ]; then | |
emoji="π’" | |
elif [ "$percent_num" -ge 70 ]; then | |
emoji="π‘" | |
else | |
emoji="π΄" | |
fi | |
echo "| \`$file\` | $emoji $percent |" | |
fi | |
done | |
else | |
echo "β No coverage report generated" | |
fi | |
} >> "$GITHUB_STEP_SUMMARY" | |
else | |
{ | |
echo "## π Test Coverage Report" | |
echo "" | |
echo "β No coverage data found - tests may not have run with coverage enabled" | |
} >> "$GITHUB_STEP_SUMMARY" | |
fi | |
integration-tests: | |
runs-on: ubuntu-latest | |
needs: unit-tests | |
strategy: | |
matrix: | |
neovim-version: ["stable"] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- name: Setup Nix | |
uses: nixbuild/nix-quick-install-action@5bb6a3b3abe66fd09bbf250dce8ada94f856a703 # v30 | |
- uses: nix-community/cache-nix-action@135667ec418502fa5a3598af6fb9eb733888ce6a # v6.1.3 | |
with: | |
primary-key: nix-claudecode-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/flake.lock') }} | |
restore-prefixes-first-match: nix-claudecode-${{ runner.os }}- | |
gc-max-store-size-linux: 2G | |
purge: true | |
purge-prefixes: nix-claudecode-${{ runner.os }}- | |
purge-created: 0 | |
purge-primary-key: never | |
- name: Setup Neovim | |
uses: rhysd/action-setup-vim@8e931b9954b19d4203d5caa5ff5521f3bc21dcc7 # v1.4.2 | |
with: | |
neovim: true | |
version: ${{ matrix.neovim-version }} | |
- name: Install test dependencies | |
run: | | |
git clone --depth 1 https://github.com/nvim-lua/plenary.nvim ~/.local/share/nvim/site/pack/vendor/start/plenary.nvim | |
ln -s "$(pwd)" ~/.local/share/nvim/site/pack/vendor/start/claudecode.nvim | |
- name: Run integration tests | |
run: nix develop .#ci -c nvim --headless -u tests/minimal_init.lua -c "lua require('plenary.test_harness').test_directory('tests/integration', {minimal_init = 'tests/minimal_init.lua'})" |