Infra
This commit is contained in:
1 parent
ea1afaf833
commit
e0db317146
12 files changed
+444
-56
No files matched your search
@@ -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")"
|
||||
Reference in new issue
Block a user