This commit is contained in:
mark committed 2026-09-19 13:10:34 -04:00
1 parent ea1afaf833
commit e0db317146
12 files changed
+444 -56

No files matched your search

Executable
+35
View File
@@ -0,0 +1,35 @@
#!/usr/bin/env bash
# Publish the site to one environment: ./deploy.sh dev|prod
#
# Uploads the build context with Railway's CLI; Railway builds the Dockerfile
# (found on its own) and swaps the new deployment in once it is running.
set -euo pipefail
cd "$(dirname "$0")"
env=${1:?usage: $0 dev|prod}
case $env in
prod) environment=production ;;
dev) environment=dev ;;
*) echo "usage: $0 dev|prod" >&2; exit 2 ;;
esac
outputs=$(docker compose run --rm -T terraform -chdir=infra/railway output -json)
out() { python3 -c 'import json,sys; print(json.load(sys.stdin)[sys.argv[1]]["value"])' "$1" <<<"$outputs"; }
project=$(out project_id)
service=$(out service)
# Only what the Dockerfile copies. Uploading the repo would mean either
# leaving out bible/ (gitignored, and the CLI honors .gitignore) or sending
# .env and source/ along with it.
stage=.build
rm -rf "$stage"
mkdir "$stage"
cp -r Dockerfile .dockerignore server.py worker.py assets bible "$stage/"
docker compose run --rm -T railway up "$stage" --path-as-root --no-gitignore --ci \
--project "$project" --environment "$environment" --service "$service" \
--message "deploy.sh $(git rev-parse --short HEAD)$(git diff --quiet HEAD || echo +dirty)"
rm -rf "$stage"
echo "deployed $env: https://$(python3 -c 'import json,sys; print(json.load(sys.stdin)["domains"]["value"][sys.argv[1]]["domain"])' "$environment" <<<"$outputs")"