name: CI Pipeline on: push: branches: [ main, master ] pull_request: branches: [ main, master ] workflow_dispatch: jobs: shasums: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run shasums script run: | cp -rv ./hyperterm/ "$HOME/.hyperterm/" cp -v .bash* "$HOME" cp -v ./hyperterm/_custom.sh "$HOME" rm -rfv hyperterm/ (cd "$HOME/.hyperterm/" && sha512sum -c hyperterm.sha512) (cd "$HOME" && bash -x .bashrc) build: runs-on: ubuntu-latest needs: shasums steps: - uses: actions/checkout@v4 - name: Set up locales run: | sudo apt-get update -y sudo apt-get install -y locales less sudo sed -i 's/# \(es_ES.UTF-8 UTF-8\)/\1/' /etc/locale.gen sudo sed -i 's/# \(en_US.UTF-8 UTF-8\)/\1/' /etc/locale.gen sudo locale-gen es_ES.UTF-8 export LANG=es_ES.UTF-8 LANGUAGE=es_ES - name: Install dependencies for shellcheck run: sudo apt-get install -y xz-utils shellcheck - name: Run shellcheck on bash profile run: | shellcheck .bash_profile shellcheck ./hyperterm/hyperterm.sh shellcheck ./hyperterm/_custom.sh - name: Run shellcheck on build script run: shellcheck build.sh - name: Run build script run: bash -x build.sh - name: Run shellcheck on core scripts run: | shellcheck hyperterm/core/autocomplete.sh shellcheck hyperterm/core/colors.sh shellcheck hyperterm/core/git.sh shellcheck hyperterm/core/languages.sh shellcheck hyperterm/core/status.sh shellcheck hyperterm/core/update.sh - name: Run shellcheck on theme scripts run: | shellcheck hyperterm/themes/default.sh shellcheck hyperterm/themes/joy.sh shellcheck hyperterm/themes/light_theme.sh shellcheck hyperterm/themes/minterm.sh shellcheck hyperterm/themes/pure.sh shellcheck hyperterm/themes/simple.sh shellcheck hyperterm/themes/special.sh - name: Run shellcheck on tools scripts run: | shellcheck hyperterm/tools/aliases.sh shellcheck hyperterm/tools/compress.sh shellcheck hyperterm/tools/export.sh shellcheck hyperterm/tools/listuser.sh shellcheck hyperterm/tools/network.sh shellcheck hyperterm/tools/proxy.sh shellcheck hyperterm/tools/rar2zip.sh shellcheck hyperterm/tools/ruby.sh shellcheck hyperterm/tools/ssh-agent.sh shellcheck hyperterm/tools/sysinfo.sh shellcheck hyperterm/tools/virtualenv.sh - name: Run shellcheck on test scripts run: | shellcheck tests/test_prompt.sh shellcheck tests/quick_test.sh - name: Run shellcheck on install script run: shellcheck install.sh - name: Run install script run: bash -x install.sh -s - name: Run shellcheck on uninstall script run: shellcheck uninstall.sh - name: Run uninstall script run: bash -x uninstall.sh -s tests: runs-on: ubuntu-latest needs: build steps: - uses: actions/checkout@v4 - name: Set up git configuration for tests run: | git config --global user.name "CI Test User" git config --global user.email "ci-test@example.com" - name: Install dependencies run: | sudo apt-get update -y sudo apt-get install -y git bash - name: Run quick prompt test run: | echo "INFO: Running quick prompt test" bash tests/quick_test.sh - name: Run comprehensive prompt test run: | echo "INFO: Running comprehensive prompt test" # Run non-interactive mode bash tests/test_prompt.sh - name: Test prompt performance run: | echo "INFO: Testing prompt performance in git repository" # Create test changes to verify git status detection echo "test change" >> README.md echo "untracked file" > test_file.txt # Source the hyperterm functions source hyperterm/core/colors.sh source hyperterm/core/git.sh # Test prompt generation echo "Testing prompt generation..." __prompt_git echo "" echo "SUCCESS: Prompt generation completed" - name: Validate optimizations run: | echo "INFO: Validating optimizations" # Check that git_optimized.sh doesn't exist (should be integrated into git.sh) if [[ -f "hyperterm/core/git_optimized.sh" ]]; then echo "ERROR: git_optimized.sh should not exist (should be integrated)" exit 1 fi # Check that git.sh exists and is optimized if [[ ! -f "hyperterm/core/git.sh" ]]; then echo "ERROR: git.sh not found" exit 1 fi # Verify the optimized functions exist source hyperterm/core/git.sh if ! command -v _get_git_status_fast >/dev/null 2>&1; then echo "ERROR: Optimized function _get_git_status_fast not found" exit 1 fi echo "SUCCESS: Optimizations validated" performance: runs-on: ubuntu-latest needs: tests steps: - uses: actions/checkout@v4 - name: Set up git configuration run: | git config --global user.name "Performance Test" git config --global user.email "perf-test@example.com" - name: Performance benchmark run: | echo "INFO: Running performance benchmark" # Create a test repository with various states mkdir -p /tmp/perf_test cd /tmp/perf_test git init git config user.name "Test User" git config user.email "test@example.com" # Create initial commit echo "# Performance Test" > README.md git add README.md git commit -m "Initial commit" # Create various git states echo "modified content" >> README.md echo "untracked file" > untracked.txt echo "staged file" > staged.txt git add staged.txt # Source hyperterm functions cd "$GITEA_WORKSPACE" source hyperterm/core/colors.sh source hyperterm/core/git.sh # Run performance test cd /tmp/perf_test echo "Running 50 iterations of prompt generation..." start_time=$(date +%s%N) for i in {1..50}; do __prompt_git >/dev/null 2>&1 done end_time=$(date +%s%N) duration=$(( (end_time - start_time) / 1000000 )) avg_duration=$(( duration / 50 )) echo "Performance Results:" echo " Total time: ${duration}ms" echo " Average per call: ${avg_duration}ms" echo " Iterations: 50" # Performance validation if [[ $avg_duration -lt 100 ]]; then echo "SUCCESS: Performance is good (${avg_duration}ms < 100ms)" else echo "WARNING: Performance may need optimization (${avg_duration}ms >= 100ms)" # Don't fail the build, just warn fi