8 Commits

Author SHA1 Message Date
daniel-c-harvey a54b0a8f8e Merge branch 'artifact-v3' into dev
Deploy DeepDrftAPI / Build, Publish & Bundle (push) Successful in 1m57s
Deploy DeepDrftManager / Build & Publish (push) Successful in 58s
Deploy DeepDrftPublic / Build & Publish (push) Successful in 3m10s
Deploy DeepDrftAPI / Deploy (push) Failing after 1m26s
Deploy DeepDrftManager / Deploy (push) Successful in 1m28s
Deploy DeepDrftPublic / Deploy (push) Successful in 1m29s
2026-06-04 13:34:07 -04:00
daniel-c-harvey 65426a6c67 ci: downgrade upload-artifact and download-artifact from v4 to v3 in all three deploy workflows 2026-06-04 13:34:04 -04:00
daniel-c-harvey 6143d9afef Workflow Triggers
Deploy DeepDrftAPI / Build, Publish & Bundle (push) Failing after 1m36s
Deploy DeepDrftManager / Build & Publish (push) Failing after 55s
Deploy DeepDrftPublic / Deploy (push) Has been cancelled
Deploy DeepDrftPublic / Build & Publish (push) Has been cancelled
Package install tarball / package (push) Successful in 4s
Deploy DeepDrftAPI / Deploy (push) Has been skipped
Deploy DeepDrftManager / Deploy (push) Has been skipped
2026-06-04 13:29:32 -04:00
daniel-c-harvey 690631ef9b Merge branch 'installer-ports' into dev 2026-06-04 13:27:03 -04:00
daniel-c-harvey dfd6d33142 feat(deploy): prompt for service ports at install time; replace hardcoded 5000/5001/5002 with __PORT_*__ placeholders 2026-06-04 13:27:00 -04:00
daniel-c-harvey c14c032081 Workflow Trigger
Package install tarball / package (push) Successful in 4s
2026-06-04 12:26:11 -04:00
daniel-c-harvey 487dcea5c1 Merge branch 'gitattributes' into dev 2026-06-04 12:18:36 -04:00
daniel-c-harvey 0d9c92971c chore: add .gitattributes to enforce LF line endings for shell scripts, YAML, systemd units, and nginx configs 2026-06-04 12:18:33 -04:00
15 changed files with 45 additions and 14 deletions
+9
View File
@@ -0,0 +1,9 @@
# Default: normalize all text files to LF on commit
* text=auto
# Force LF for files that must be LF on Linux hosts
*.sh text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.service text eol=lf
*.conf text eol=lf
+2 -2
View File
@@ -71,7 +71,7 @@ jobs:
run: tar -czf deepdrft-api.tar.gz -C DeepDrftAPI/publish .
- name: Upload artifacts (archive + bundle)
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: deepdrft-api
path: |
@@ -90,7 +90,7 @@ jobs:
- uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@v3
with:
name: deepdrft-api
path: staging/
+2 -2
View File
@@ -34,7 +34,7 @@ jobs:
run: tar -czf deepdrft-manager.tar.gz -C DeepDrftManager/publish .
- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: deepdrft-manager
path: deepdrft-manager.tar.gz
@@ -49,7 +49,7 @@ jobs:
DEPLOY_HOST: ${{ github.ref == 'refs/heads/master' && 'prod.cerebellumsoftworks.com' || 'dch7.cerebellumsoftworks.com' }}
steps:
- name: Download artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v3
with:
name: deepdrft-manager
+2 -2
View File
@@ -38,7 +38,7 @@ jobs:
run: tar -czf deepdrft-public.tar.gz -C DeepDrftPublic/publish .
- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: deepdrft-public
path: deepdrft-public.tar.gz
@@ -53,7 +53,7 @@ jobs:
DEPLOY_HOST: ${{ github.ref == 'refs/heads/master' && 'prod.cerebellumsoftworks.com' || 'dch7.cerebellumsoftworks.com' }}
steps:
- name: Download artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v3
with:
name: deepdrft-public
+1
View File
@@ -26,3 +26,4 @@
</Project>
+1
View File
@@ -17,3 +17,4 @@
</ItemGroup>
</Project>
+1 -1
View File
@@ -37,4 +37,4 @@
</None>
</ItemGroup>
</Project>
</Project>
+1
View File
@@ -120,3 +120,4 @@ fi
chmod +x "${EXTRACT_DIR}/install.sh"
exec bash "${EXTRACT_DIR}/install.sh"
+19
View File
@@ -82,6 +82,15 @@ DOMAIN_PUBLIC="${DOMAIN_PUBLIC:-deepdrft.com}"
read -rp " App subdomain [app.${DOMAIN_PUBLIC}]: " DOMAIN_APP
DOMAIN_APP="${DOMAIN_APP:-app.${DOMAIN_PUBLIC}}"
read -rp " DeepDrftPublic port [5000]: " PORT_PUBLIC
PORT_PUBLIC="${PORT_PUBLIC:-5000}"
read -rp " DeepDrftManager port [5001]: " PORT_MANAGER
PORT_MANAGER="${PORT_MANAGER:-5001}"
read -rp " DeepDrftAPI port [5002]: " PORT_API
PORT_API="${PORT_API:-5002}"
CERTBOT_EMAIL=""
while [[ -z "${CERTBOT_EMAIL}" ]]; do
read -rp " Email for certbot TLS cert (required): " CERTBOT_EMAIL
@@ -103,6 +112,9 @@ printf " │ %-22s %-37s│\n" "DB_AUTH" "${DB_AUTH}"
printf " │ %-22s %-37s│\n" "DOMAIN_PUBLIC" "${DOMAIN_PUBLIC}"
printf " │ %-22s %-37s│\n" "DOMAIN_APP" "${DOMAIN_APP}"
printf " │ %-22s %-37s│\n" "CERTBOT_EMAIL" "${CERTBOT_EMAIL}"
printf " │ %-22s %-37s│\n" "PORT_PUBLIC" "${PORT_PUBLIC}"
printf " │ %-22s %-37s│\n" "PORT_MANAGER" "${PORT_MANAGER}"
printf " │ %-22s %-37s│\n" "PORT_API" "${PORT_API}"
printf " │ %-22s %-37s│\n" "OPT_DIR" "${OPT_DIR}"
echo " └──────────────────────────────────────────────────────────────┘"
echo
@@ -204,6 +216,10 @@ cp "${SCRIPT_DIR}/systemd/deepdrftpublic.service" "${APP_HOME}/.config/systemd/
cp "${SCRIPT_DIR}/systemd/deepdrftmanager.service" "${APP_HOME}/.config/systemd/user/"
cp "${SCRIPT_DIR}/systemd/deepdrftapi.service" "${APP_HOME}/.config/systemd/user/"
sed -i "s|__PORT_PUBLIC__|${PORT_PUBLIC}|g" "${APP_HOME}/.config/systemd/user/deepdrftpublic.service"
sed -i "s|__PORT_MANAGER__|${PORT_MANAGER}|g" "${APP_HOME}/.config/systemd/user/deepdrftmanager.service"
sed -i "s|__PORT_API__|${PORT_API}|g" "${APP_HOME}/.config/systemd/user/deepdrftapi.service"
chown -R "${APP_USER}:${APP_USER}" "${APP_HOME}/.config/systemd"
# daemon-reload and enable. XDG_RUNTIME_DIR must be set explicitly — PAM may not
@@ -237,6 +253,7 @@ else
DB_AUTH="${DB_AUTH}" \
DOMAIN_PUBLIC="${DOMAIN_PUBLIC}" \
DOMAIN_APP="${DOMAIN_APP}" \
PORT_API="${PORT_API}" \
bash "${SCRIPT_DIR}/setup-step10-creds.sh"
fi
@@ -371,10 +388,12 @@ step 9 "nginx"
# Templates use __DOMAIN_PUBLIC__ and __DOMAIN_APP__ so the files in the tarball
# don't contain real hostnames — substitution happens at install time.
sed -e "s|__DOMAIN_PUBLIC__|${DOMAIN_PUBLIC}|g" \
-e "s|__PORT_PUBLIC__|${PORT_PUBLIC}|g" \
"${SCRIPT_DIR}/nginx/deepdrft-public.conf" \
> "/etc/nginx/sites-available/${DOMAIN_PUBLIC}.conf"
sed -e "s|__DOMAIN_APP__|${DOMAIN_APP}|g" \
-e "s|__PORT_MANAGER__|${PORT_MANAGER}|g" \
"${SCRIPT_DIR}/nginx/deepdrft-manager.conf" \
> "/etc/nginx/sites-available/${DOMAIN_APP}.conf"
+1 -1
View File
@@ -4,7 +4,7 @@ server {
server_name __DOMAIN_APP__;
location / {
proxy_pass http://localhost:5001;
proxy_pass http://localhost:__PORT_MANAGER__;
proxy_http_version 1.1;
proxy_set_header Host $host;
+1 -1
View File
@@ -4,7 +4,7 @@ server {
server_name __DOMAIN_PUBLIC__;
location / {
proxy_pass http://localhost:5000;
proxy_pass http://localhost:__PORT_PUBLIC__;
proxy_http_version 1.1;
proxy_set_header Host $host;
+2 -2
View File
@@ -213,7 +213,7 @@ fi
# ── 5. api-public.json — no prompts, static localhost URL ────────────────────
if need_cred "api-public"; then
write_cred "api-public" \
'{"Api":{"ContentApiUrl":"http://localhost:5002"}}'
"{\"Api\":{\"ContentApiUrl\":\"http://localhost:${PORT_API:-5002}\"}}"
else
echo "[setup-step10-creds] api-public.json already exists, skipping"
fi
@@ -226,7 +226,7 @@ if need_cred "api-manager"; then
read -rp " Enter the API key: " API_KEY
fi
write_cred "api-manager" \
"{\"Api\":{\"ContentApiUrl\":\"http://localhost:5002\",\"ContentApiKey\":\"$(json_escape "${API_KEY}")\"}}"
"{\"Api\":{\"ContentApiUrl\":\"http://localhost:${PORT_API:-5002}\",\"ContentApiKey\":\"$(json_escape "${API_KEY}")\"}}"
unset API_KEY
else
echo "[setup-step10-creds] api-manager.json already exists, skipping"
+1 -1
View File
@@ -13,7 +13,7 @@ ExecStart=%h/api/deepdrft/bin/DeepDrftAPI
# Non-secret config — hardcoded; no plaintext file needed.
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://localhost:5002
Environment=ASPNETCORE_URLS=http://localhost:__PORT_API__
# Secrets — loaded at startup into $CREDENTIALS_DIRECTORY/.
# Files live at %h/.config/credentials/ (deepdrft:deepdrft 600).
+1 -1
View File
@@ -13,7 +13,7 @@ ExecStart=%h/manager/bin/DeepDrftManager
# Non-secret config — hardcoded; no plaintext file needed.
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://localhost:5001
Environment=ASPNETCORE_URLS=http://localhost:__PORT_MANAGER__
# Secrets — loaded at startup into $CREDENTIALS_DIRECTORY/.
# File lives at %h/.config/credentials/ (deepdrft:deepdrft 600).
+1 -1
View File
@@ -13,7 +13,7 @@ ExecStart=%h/public/bin/DeepDrftPublic
# Non-secret config — hardcoded; no plaintext file needed.
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://localhost:5000
Environment=ASPNETCORE_URLS=http://localhost:__PORT_PUBLIC__
# Secrets — loaded at startup into $CREDENTIALS_DIRECTORY/.
# File lives at %h/.config/credentials/ (deepdrft:deepdrft 600).