Skip to content

Add cursor shape changes for insert/replace/normal modes in vimrc #76

Add cursor shape changes for insert/replace/normal modes in vimrc

Add cursor shape changes for insert/replace/normal modes in vimrc #76

name: Shell Startup Performance
on:
pull_request:
paths:
- 'shared/.config/shell/**'
- 'shared/.config/fish/**'
- 'shared/.profile'
- 'shared/.zshrc'
- 'shared/.zshenv'
- 'shared/.zprofile'
- 'shared/.bashrc'
- 'shared/.bash_profile'
- 'personal/.config/shell/**'
- 'personal/.config/fish/**'
- 'work/.config/shell/**'
- 'work/.config/fish/**'
- 'rca/.config/shell/**'
- 'rca/.config/fish/**'
- 'ubuntu-server/.config/shell/**'
- 'ubuntu-server/.config/fish/**'
push:
branches:
- main
paths:
- 'shared/.config/shell/**'
- 'shared/.config/fish/**'
- 'shared/.profile'
- 'shared/.zshrc'
- 'shared/.zshenv'
- 'shared/.zprofile'
- 'shared/.bashrc'
- 'shared/.bash_profile'
- 'personal/.config/shell/**'
- 'personal/.config/fish/**'
- 'work/.config/shell/**'
- 'work/.config/fish/**'
- 'rca/.config/shell/**'
- 'rca/.config/fish/**'
- 'ubuntu-server/.config/shell/**'
- 'ubuntu-server/.config/fish/**'
workflow_dispatch:
permissions:
contents: read
pull-requests: write
jobs:
ubuntu-performance:
runs-on: ubuntu-latest
env:
OS_NAME: Ubuntu
PROFILES: shared ubuntu-server
steps:
- name: Checkout current branch
uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y bash zsh fish stow bc time curl unzip jq
- name: Install shell startup tools
run: .github/workflows/scripts/install-startup-tools.sh
- name: Install current dotfiles
run: |
rm -f "$HOME/.bash_profile" "$HOME/.bashrc" "$HOME/.profile" "$HOME/.gitconfig"
stow -v --target="$HOME" ${{ env.PROFILES }}
- name: Create test .env file
run: .github/workflows/scripts/create-test-env.sh
- name: Measure current startup times (no tmux)
run: |
.github/workflows/scripts/measure-shell-startup.sh 20 current-times.json false
cat current-times.json
- name: Measure current startup times (with tmux)
run: |
.github/workflows/scripts/measure-shell-startup.sh 20 current-tmux-times.json true
cat current-tmux-times.json
- name: Add current times to workflow summary
run: |
echo "## Shell Startup Performance (${{ env.OS_NAME }})" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Without tmux" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Shell | Median (ms) |" >> $GITHUB_STEP_SUMMARY
echo "|-------|-------------|" >> $GITHUB_STEP_SUMMARY
echo "| Bash | $(jq -r '.bash.median' current-times.json) |" >> $GITHUB_STEP_SUMMARY
echo "| Zsh | $(jq -r '.zsh.median' current-times.json) |" >> $GITHUB_STEP_SUMMARY
echo "| Fish | $(jq -r '.fish.median' current-times.json) |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### With tmux auto-start" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Shell | Median (ms) |" >> $GITHUB_STEP_SUMMARY
echo "|-------|-------------|" >> $GITHUB_STEP_SUMMARY
echo "| Bash | $(jq -r '.bash.median' current-tmux-times.json) |" >> $GITHUB_STEP_SUMMARY
echo "| Zsh | $(jq -r '.zsh.median' current-tmux-times.json) |" >> $GITHUB_STEP_SUMMARY
echo "| Fish | $(jq -r '.fish.median' current-tmux-times.json) |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Profiles tested:** \`${{ env.PROFILES }}\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "*Median of 20 iterations after 3 warmup runs. Lower is better.*" >> $GITHUB_STEP_SUMMARY
- name: Save current results
run: |
cp current-times.json /tmp/current-times.json
cp current-tmux-times.json /tmp/current-tmux-times.json
- name: Uninstall current dotfiles
run: stow -v --target="$HOME" -D ${{ env.PROFILES }}
- name: Checkout base branch
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
ref: ${{ github.base_ref }}
- name: Install base dotfiles
if: github.event_name == 'pull_request'
run: |
rm -f "$HOME/.bash_profile" "$HOME/.bashrc" "$HOME/.profile" "$HOME/.gitconfig"
stow -v --target="$HOME" ${{ env.PROFILES }}
- name: Create test .env file
if: github.event_name == 'pull_request'
run: .github/workflows/scripts/create-test-env.sh
- name: Measure base startup times (no tmux)
if: github.event_name == 'pull_request'
run: |
.github/workflows/scripts/measure-shell-startup.sh 20 base-times.json false
cat base-times.json
- name: Measure base startup times (with tmux)
if: github.event_name == 'pull_request'
run: |
.github/workflows/scripts/measure-shell-startup.sh 20 base-tmux-times.json true
cat base-tmux-times.json
- name: Generate performance report
if: github.event_name == 'pull_request'
run: |
.github/workflows/scripts/generate-performance-report.sh \
"${{ env.OS_NAME }}" \
"${{ env.PROFILES }}" \
/tmp/current-times.json \
base-times.json \
/tmp/current-tmux-times.json \
base-tmux-times.json \
comment.md
cat comment.md
- name: Add performance report to workflow summary
if: github.event_name == 'pull_request'
run: cat comment.md >> $GITHUB_STEP_SUMMARY
- name: Post comment to PR
if: github.event_name == 'pull_request'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: .github/workflows/scripts/post-performance-comment.sh "${{ env.OS_NAME }}" comment.md
- name: Upload performance results
if: always()
uses: actions/upload-artifact@v4
with:
name: ubuntu-performance-results
path: |
current-times.json
current-tmux-times.json
base-times.json
base-tmux-times.json
comment.md
retention-days: 30
macos-performance:
runs-on: macos-14
env:
OS_NAME: macOS
PROFILES: shared personal
steps:
- name: Checkout current branch
uses: actions/checkout@v4
- name: Install dependencies
run: brew install stow bc jq
- name: Install shell startup tools
run: .github/workflows/scripts/install-startup-tools.sh
- name: Install current dotfiles
run: |
rm -f "$HOME/.bash_profile" "$HOME/.bashrc" "$HOME/.profile" "$HOME/.gitconfig"
stow -v --target="$HOME" ${{ env.PROFILES }}
- name: Create test .env file
run: .github/workflows/scripts/create-test-env.sh
- name: Measure current startup times (no tmux)
run: |
.github/workflows/scripts/measure-shell-startup.sh 20 current-times.json false
cat current-times.json
- name: Measure current startup times (with tmux)
run: |
.github/workflows/scripts/measure-shell-startup.sh 20 current-tmux-times.json true
cat current-tmux-times.json
- name: Add current times to workflow summary
run: |
echo "## Shell Startup Performance (${{ env.OS_NAME }})" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Without tmux" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Shell | Median (ms) |" >> $GITHUB_STEP_SUMMARY
echo "|-------|-------------|" >> $GITHUB_STEP_SUMMARY
echo "| Bash | $(jq -r '.bash.median' current-times.json) |" >> $GITHUB_STEP_SUMMARY
echo "| Zsh | $(jq -r '.zsh.median' current-times.json) |" >> $GITHUB_STEP_SUMMARY
echo "| Fish | $(jq -r '.fish.median' current-times.json) |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### With tmux auto-start" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Shell | Median (ms) |" >> $GITHUB_STEP_SUMMARY
echo "|-------|-------------|" >> $GITHUB_STEP_SUMMARY
echo "| Bash | $(jq -r '.bash.median' current-tmux-times.json) |" >> $GITHUB_STEP_SUMMARY
echo "| Zsh | $(jq -r '.zsh.median' current-tmux-times.json) |" >> $GITHUB_STEP_SUMMARY
echo "| Fish | $(jq -r '.fish.median' current-tmux-times.json) |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Profiles tested:** \`${{ env.PROFILES }}\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "*Median of 20 iterations after 3 warmup runs. Lower is better.*" >> $GITHUB_STEP_SUMMARY
- name: Save current results
run: |
cp current-times.json /tmp/current-times.json
cp current-tmux-times.json /tmp/current-tmux-times.json
- name: Uninstall current dotfiles
run: stow -v --target="$HOME" -D ${{ env.PROFILES }}
- name: Checkout base branch
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
ref: ${{ github.base_ref }}
- name: Install base dotfiles
if: github.event_name == 'pull_request'
run: |
rm -f "$HOME/.bash_profile" "$HOME/.bashrc" "$HOME/.profile" "$HOME/.gitconfig"
stow -v --target="$HOME" ${{ env.PROFILES }}
- name: Create test .env file
if: github.event_name == 'pull_request'
run: .github/workflows/scripts/create-test-env.sh
- name: Measure base startup times (no tmux)
if: github.event_name == 'pull_request'
run: |
.github/workflows/scripts/measure-shell-startup.sh 20 base-times.json false
cat base-times.json
- name: Measure base startup times (with tmux)
if: github.event_name == 'pull_request'
run: |
.github/workflows/scripts/measure-shell-startup.sh 20 base-tmux-times.json true
cat base-tmux-times.json
- name: Generate performance report
if: github.event_name == 'pull_request'
run: |
.github/workflows/scripts/generate-performance-report.sh \
"${{ env.OS_NAME }}" \
"${{ env.PROFILES }}" \
/tmp/current-times.json \
base-times.json \
/tmp/current-tmux-times.json \
base-tmux-times.json \
comment.md
cat comment.md
- name: Add performance report to workflow summary
if: github.event_name == 'pull_request'
run: cat comment.md >> $GITHUB_STEP_SUMMARY
- name: Post comment to PR
if: github.event_name == 'pull_request'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: .github/workflows/scripts/post-performance-comment.sh "${{ env.OS_NAME }}" comment.md
- name: Upload performance results
if: always()
uses: actions/upload-artifact@v4
with:
name: macos-performance-results
path: |
current-times.json
current-tmux-times.json
base-times.json
base-tmux-times.json
comment.md
retention-days: 30