mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-07-04 16:43:05 +02:00
- Move all linux_configuration scripts into two semantic categories: - single_use/: scripts run once manually (fresh install, fixes, setup) - periodic_background/: scripts run by systemd timers or daemons - Preserve existing subdirectory structure within each category - Fix lib/common.sh source paths for new directory depths - Fix CONFIG_DIR depth in setup_periodic_system.sh and check_and_enable_services.sh - Update all references in tests, fresh-install/main.sh, nix modules, and docs - Fix check_polling_antipatterns.sh false positives (||, regex |, case patterns, jq strings) - Fix pre-existing mypy exclusion path and type annotations for moved tools/ directory - Rewrite check_polling_antipatterns.sh using awk (no bash regex loops); add require_serial: true
107 lines
3.2 KiB
Bash
Executable File
107 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# Download ALL Exercism exercises for offline practice
|
||
#
|
||
# This clones the official Exercism track repositories which contain
|
||
# ALL exercises with their test suites - no need to unlock one by one!
|
||
#
|
||
# Exercises are in: exercises/practice/<exercise-name>/
|
||
# Each exercise has tests you can run locally.
|
||
|
||
set -euo pipefail
|
||
|
||
TRACKS_DIR="${HOME}/exercism-tracks"
|
||
|
||
# Colors
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m'
|
||
|
||
success() { echo -e "${GREEN}✓ $1${NC}"; }
|
||
info() { echo -e "${BLUE}ℹ $1${NC}"; }
|
||
warn() { echo -e "${YELLOW}⚠ $1${NC}"; }
|
||
|
||
echo "=============================================="
|
||
echo " Exercism Bulk Exercise Downloader"
|
||
echo " Download ALL exercises for offline practice"
|
||
echo "=============================================="
|
||
echo ""
|
||
|
||
mkdir -p "$TRACKS_DIR"
|
||
cd "$TRACKS_DIR"
|
||
|
||
# Tracks to download (add/remove as needed)
|
||
declare -A TRACKS=(
|
||
["python"]="https://github.com/exercism/python.git"
|
||
["c"]="https://github.com/exercism/c.git"
|
||
["cpp"]="https://github.com/exercism/cpp.git"
|
||
["javascript"]="https://github.com/exercism/javascript.git"
|
||
["typescript"]="https://github.com/exercism/typescript.git"
|
||
["rust"]="https://github.com/exercism/rust.git"
|
||
["go"]="https://github.com/exercism/go.git"
|
||
["bash"]="https://github.com/exercism/bash.git"
|
||
)
|
||
|
||
# Optional tracks (uncomment to include)
|
||
# TRACKS["java"]="https://github.com/exercism/java.git"
|
||
# TRACKS["ruby"]="https://github.com/exercism/ruby.git"
|
||
# TRACKS["haskell"]="https://github.com/exercism/haskell.git"
|
||
# TRACKS["elixir"]="https://github.com/exercism/elixir.git"
|
||
|
||
echo "Downloading ${#TRACKS[@]} tracks to: $TRACKS_DIR"
|
||
echo ""
|
||
|
||
for track in "${!TRACKS[@]}"; do
|
||
url="${TRACKS[$track]}"
|
||
|
||
if [[ -d $track ]]; then
|
||
info "Updating $track..."
|
||
(cd "$track" && git pull --quiet) && success "$track updated"
|
||
else
|
||
info "Cloning $track..."
|
||
git clone --depth 1 "$url" && success "$track cloned"
|
||
fi
|
||
|
||
# Show exercise count
|
||
if [[ -d "$track/exercises/practice" ]]; then
|
||
count=$(ls "$track/exercises/practice" | wc -l)
|
||
echo " → $count practice exercises available"
|
||
fi
|
||
echo ""
|
||
done
|
||
|
||
echo "=============================================="
|
||
echo " Download Complete!"
|
||
echo "=============================================="
|
||
echo ""
|
||
echo "Exercises location: $TRACKS_DIR/<track>/exercises/practice/"
|
||
echo ""
|
||
echo "Example - Running Python exercises:"
|
||
echo " cd $TRACKS_DIR/python/exercises/practice/hello-world"
|
||
echo " python -m pytest -v"
|
||
echo ""
|
||
echo "Example - Running C exercises:"
|
||
echo " cd $TRACKS_DIR/c/exercises/practice/hello-world"
|
||
echo " make test"
|
||
echo ""
|
||
echo "Example - Running JavaScript exercises:"
|
||
echo " cd $TRACKS_DIR/javascript/exercises/practice/hello-world"
|
||
echo " npm install && npm test"
|
||
echo ""
|
||
echo "Each exercise folder contains:"
|
||
echo " - README.md (instructions)"
|
||
echo " - *_test.* (test file - run these!)"
|
||
echo " - .meta/exemplar.* (reference solution - don't peek!)"
|
||
echo ""
|
||
echo "=============================================="
|
||
|
||
# Summary
|
||
echo ""
|
||
echo "Track summary:"
|
||
for track in "${!TRACKS[@]}"; do
|
||
if [[ -d "$track/exercises/practice" ]]; then
|
||
count=$(ls "$track/exercises/practice" 2> /dev/null | wc -l)
|
||
printf " %-15s %3d exercises\n" "$track" "$count"
|
||
fi
|
||
done | sort
|