Geen omschrijving
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

test-rust.sh 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/usr/bin/env bash
  2. # This file needs to be run from the git root directory!
  3. # Exit script on the first error
  4. set -o errexit -o nounset
  5. export RUSTFLAGS="--deny warnings"
  6. # Jedes `hwN/taskN` Verzeichnis enthält entweder ein Cargo-Projekt (also eine
  7. # Cargo.toml) oder eine einzige `.rs`-Datei für Nicht-Cargo-Projekte die direkt
  8. # mit rustc kompiliert werden.
  9. #
  10. # Um den Travis-Cache effizient zu nutzen (es wird `/target` gecached) und
  11. # generell die CI-Zeiten zu verringern, wechseln wir nie das Verzeichnis und
  12. # kompilieren immer nur die Aufgaben des aktuellsten Aufgabenblatts.
  13. current_hw=$(find . -type d -name 'hw*' | sort | tail -n1)
  14. if [ -z "$current_hw" ]; then
  15. echo ""
  16. echo "=== Keine Aufgaben gefunden. Beende."
  17. exit 0
  18. fi
  19. echo ""
  20. echo "=== Aktuelles Aufgabenblatt ist in Ordner $current_hw"
  21. while IFS= read -r -d '' taskdir; do
  22. echo ""
  23. echo "=== Teste Lösung von Aufgabe in $taskdir"
  24. manifest="$taskdir/Cargo.toml"
  25. if [ -e "$manifest" ]; then
  26. echo "=== Cargo-Manifest gefunden in '$manifest' -> Cargo-Modus"
  27. cargo test --manifest-path "$manifest"
  28. elif [ "$(find "$taskdir" -maxdepth 1 -type f -name '*.rs' | wc -l)" -ne 0 ]; then
  29. echo "=== Sourcedatei(en) gefunden -> rustc-Modus"
  30. for srcfile in $taskdir/*.rs; do
  31. echo "=== Kompiliere und teste '$srcfile'..."
  32. rustc "$srcfile"
  33. rustc --test -o rustctest "$srcfile"
  34. ./rustctest
  35. done
  36. else
  37. echo ""
  38. echo "!!! Falsch konfigurierter Aufgabenordner oder ungelöste Aufgabe"
  39. echo "!!! Bitte .rs-Dateien in '$taskdir' ablegen"
  40. echo "!!! Oder ein Cargo-Projekt mit 'cargo init' darin erzeugen"
  41. echo "!!! Alternativ den Ordner löschen"
  42. exit 1
  43. fi
  44. done < <(find "$current_hw" -mindepth 1 -maxdepth 1 -type d -name 'task*' -print0)