-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
Β·140 lines (123 loc) Β· 5.94 KB
/
install.sh
File metadata and controls
executable file
Β·140 lines (123 loc) Β· 5.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")"
echo "π AWSMissions Installation"
echo "==========================="
echo ""
# βββ Helpers ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
install_pkg() {
local pkg="$1"
echo "π¦ Installing $pkg..."
if [[ "$OSTYPE" == "darwin"* ]]; then
brew install "$pkg"
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
sudo apt-get update -qq && sudo apt-get install -y "$pkg"
else
echo "β Cannot auto-install $pkg on this OS. Please install it manually."
exit 1
fi
}
# βββ Python 3.9+ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
if ! command -v python3 >/dev/null 2>&1; then
install_pkg python3
fi
PYTHON_VERSION=$(python3 -c "
import sys; v = sys.version_info
print(f'{v.major}.{v.minor}')
exit(0 if (v.major, v.minor) >= (3, 9) else 1)
") || {
echo "β Python 3.9+ required (found $PYTHON_VERSION)"
echo " Linux: sudo apt install python3.11"
echo " macOS: brew install python@3.11"
exit 1
}
echo "β
Python $PYTHON_VERSION"
# βββ Docker βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
if ! command -v docker >/dev/null 2>&1; then
echo "β Docker is not installed."
echo " Install: https://docs.docker.com/get-docker/"
echo " Linux quick-install: sudo apt install docker.io && sudo usermod -aG docker \$USER"
exit 1
fi
if ! docker info >/dev/null 2>&1; then
echo "β Docker is installed but not running. Please start Docker and re-run install.sh"
exit 1
fi
echo "β
Docker running"
# βββ AWS CLI v2 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
if ! command -v aws >/dev/null 2>&1; then
echo "π¦ Installing AWS CLI v2..."
if [[ "$OSTYPE" == "darwin"* ]]; then
brew install awscli
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
# apt package was removed in Ubuntu 22.04+; use the official AWS installer
if ! command -v curl >/dev/null 2>&1; then
sudo apt-get update -qq && sudo apt-get install -y curl unzip
fi
TMP_DIR=$(mktemp -d)
curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "$TMP_DIR/awscliv2.zip"
unzip -q "$TMP_DIR/awscliv2.zip" -d "$TMP_DIR"
sudo "$TMP_DIR/aws/install"
rm -rf "$TMP_DIR"
else
echo "β Cannot auto-install AWS CLI on this OS."
echo " Install manually: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html"
exit 1
fi
fi
echo "β
AWS CLI $(aws --version 2>&1 | awk '{print $1}')"
# βββ jq βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
if ! command -v jq >/dev/null 2>&1; then
install_pkg jq
fi
echo "β
jq $(jq --version)"
# βββ zip ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
if ! command -v zip >/dev/null 2>&1; then
install_pkg zip
fi
echo "β
zip"
# βββ Python venv ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
echo ""
echo "π Setting up Python virtual environment..."
if [ ! -d ".venv" ]; then
python3 -m venv .venv
fi
if [ -f ".venv/bin/activate" ]; then
source .venv/bin/activate
elif [ -f ".venv/Scripts/activate" ]; then
source .venv/Scripts/activate
else
echo "β venv activation script not found"; exit 1
fi
echo "π¦ Installing Python dependencies..."
pip install -q -r requirements.txt
echo "β
Python packages installed"
# βββ awscli-local (awslocal wrapper) ββββββββββββββββββββββββββββββββββββββββββ
if ! command -v awslocal >/dev/null 2>&1; then
echo "π¦ Installing awscli-local..."
pip install -q awscli-local
fi
echo "β
awslocal (awscli-local)"
# βββ LocalStack Docker image ββββββββββββββββββββββββββββββββββββββββββββββββββ
echo ""
echo "π³ Pulling LocalStack Docker image..."
docker pull localstack/localstack:3.8
echo "β
LocalStack image ready"
# βββ Build level registry βββββββββββββββββββββββββββββββββββββββββββββββββββββ
echo ""
echo "π Building level registry..."
python3 scripts/build_levels.py
echo "β
levels.json generated"
# βββ Progress file ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
if [[ ! -f progress.json ]]; then
echo '{"player_name":null,"total_xp":0,"completed_levels":[],"current_level_id":1,"module_certificates":[],"hint_state":{},"time_per_level":{}}' > progress.json
fi
echo ""
echo "ββββββββββββββββββββββββββββββββββββ"
echo "β
AWSMissions is ready!"
echo " Run: ./play.sh"
echo ""
echo " No AWS account needed."
echo " Everything runs locally via LocalStack."
echo "ββββββββββββββββββββββββββββββββββββ"
echo ""