Skip to content

Commit a49c30a

Browse files
committed
Attempt to optimize startup script
1 parent f06c173 commit a49c30a

File tree

3 files changed

+70
-44
lines changed

3 files changed

+70
-44
lines changed

.github/workflows/pipeline.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,5 +122,7 @@ jobs:
122122
run: systemd-analyze verify example_systemd_service.service
123123
- name: Generate start.sh Script Example
124124
run: mix run scripts/start_sh.exs
125-
- name: Shellcheck Lint of Example start.sh
126-
run: shellcheck example_start.sh
125+
- name: Shellcheck Lint of Example Compressed start.sh
126+
run: shellcheck example_start_compressed.sh
127+
- name: Shellcheck Lint of Example Uncompressed start.sh
128+
run: shellcheck example_start_uncompressed.sh

lib/flame_ec2/templates/start.sh.eex

Lines changed: 53 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -19,42 +19,70 @@ detect_package_manager() {
1919
fi
2020
}
2121

22+
check_required_packages() {
23+
missing_packages=0
24+
for pkg in tar gzip unzip; do
25+
if ! command -v $pkg >/dev/null 2>&1; then
26+
log "Package $pkg is missing"
27+
missing_packages=1
28+
fi
29+
done
30+
return $missing_packages
31+
}
32+
2233
install_packages() {
34+
if check_required_packages; then
35+
log "All required packages already installed, skipping package installation"
36+
return 0
37+
fi
38+
2339
pm=$(detect_package_manager)
40+
log "Installing missing packages using $pm..."
2441

2542
case $pm in
2643
"apt")
2744
export DEBIAN_FRONTEND=noninteractive
28-
apt-get update || {
45+
apt-get update -qq || {
2946
log "Failed to update apt repositories"
3047
exit 1
3148
}
32-
apt-get install -y tar gzip unzip || {
49+
apt-get install -y -qq tar gzip unzip || {
3350
log "Failed to install required packages"
3451
exit 1
3552
}
3653
;;
3754
"yum"|"dnf")
38-
$pm update -y || {
55+
$pm update -y -q || {
3956
log "Failed to update $pm repositories"
4057
exit 1
4158
}
42-
$pm install -y tar gzip unzip || {
59+
$pm install -y -q tar gzip unzip || {
4360
log "Failed to install required packages"
4461
exit 1
4562
}
4663
;;
4764
esac
65+
}
4866

49-
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
50-
unzip awscliv2.zip
51-
./aws/install
67+
install_aws_cli() {
68+
if command -v aws >/dev/null 2>&1; then
69+
log "AWS CLI already installed, skipping installation"
70+
return 0
71+
fi
72+
73+
log "Installing AWS CLI..."
74+
curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
75+
unzip -q awscliv2.zip
76+
./aws/install --update >/dev/null 2>&1
77+
rm -rf aws awscliv2.zip
5278
}
5379

5480
log "Initializing EC2 Flame Node for <%= @app %>"
5581

5682
log "Installing required packages..."
83+
5784
install_packages
85+
install_aws_cli
5886

5987
if ! command -v aws >/dev/null 2>&1; then
6088
log "AWS CLI installation failed"
@@ -68,13 +96,8 @@ APP_DIR="/srv/<%= @app %>"
6896
SERVICE_NAME=<%= @app %>
6997
RELEASE_DIR="${APP_DIR}/release"
7098

71-
mkdir -p "${APP_DIR}" || {
72-
log "Failed to create ${APP_DIR}"
73-
exit 1
74-
}
75-
76-
mkdir -p "${RELEASE_DIR}" || {
77-
log "Failed to create ${RELEASE_DIR}"
99+
mkdir -p "${APP_DIR}" "${RELEASE_DIR}" || {
100+
log "Failed to create required directories"
78101
exit 1
79102
}
80103

@@ -86,36 +109,25 @@ cd "${APP_DIR}" || {
86109
log "Downloading from S3: ${S3_URL}"
87110

88111
<%= if @s3_bundle_compressed? do %>
89-
S3_TYPE="compressed"
112+
aws s3 cp ${S3_URL} ./release.tar.gz --quiet || {
113+
log "Failed to download from S3"
114+
exit 1
115+
}
116+
tar xzf release.tar.gz -C ${RELEASE_DIR} || {
117+
log "Failed to extract release.tar.gz"
118+
rm -f release.tar.gz
119+
exit 1
120+
}
121+
rm release.tar.gz
90122
<% else %>
91-
S3_TYPE="directory"
92-
<% end %>
93-
94-
if [ "${S3_TYPE}" = "directory" ]; then
95-
aws s3 sync ${S3_URL} . || {
96-
log "Failed to download from S3"
97-
exit 1
98-
}
99-
else
100-
aws s3 cp ${S3_URL} ./release.tar.gz || {
101-
log "Failed to download from S3"
102-
exit 1
103-
}
104-
tar xzf release.tar.gz -C ${RELEASE_DIR} || {
105-
log "Failed to extract release.tar.gz"
106-
rm -f release.tar.gz
107-
exit 1
108-
}
109-
rm release.tar.gz
110-
fi
111-
112-
if [ ! -d "${RELEASE_DIR}" ]; then
113-
log "Release directory ${RELEASE_DIR} not found after extraction"
123+
aws s3 sync ${S3_URL} . --quiet || {
124+
log "Failed to download from S3"
114125
exit 1
115-
fi
126+
}
127+
<% end %>
116128

117-
if [ ! -x "${RELEASE_DIR}/bin/<%= @app %>" ]; then
118-
log "Executable ${RELEASE_DIR}/bin/<%= @app %> not found or not executable"
129+
if [ ! -d "${RELEASE_DIR}" ] || [ ! -x "${RELEASE_DIR}/bin/<%= @app %>" ]; then
130+
log "Release directory or executable not found after extraction"
119131
exit 1
120132
fi
121133

scripts/start_sh.exs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,16 @@ rendered =
1111
s3_bundle_compressed?: true
1212
)
1313

14-
File.write!("./example_start.sh", rendered)
14+
File.write!("./example_start_compressed.sh", rendered)
15+
16+
rendered =
17+
FlameEC2.Templates.start_script(
18+
app: "flame_ec2",
19+
systemd_service: systemd_service,
20+
env: env,
21+
aws_region: "us-east-1",
22+
s3_bundle_url: "s3://code/",
23+
s3_bundle_compressed?: false
24+
)
25+
26+
File.write!("./example_start_uncompressed.sh", rendered)

0 commit comments

Comments
 (0)