testsAndMisc/linux_configuration/scripts/single_use/utils/download_exercism_bulk.sh
Krzysztof kuhy Rudnicki 42a66a1419 refactor(linux_configuration/scripts): split all scripts into single_use/ and periodic_background/
- 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
2026-05-15 00:32:35 +02:00

107 lines
3.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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