Compare commits

..

2 Commits

Author SHA1 Message Date
timothykim 0656d245d5 remove test workflow
Deploy nginx / deploy (push) Successful in 6s
2026-04-07 20:33:12 -04:00
timothykim d2b9d0bce9 fix idempotency in app.sh, service.sh and nginx reload in cert handler 2026-04-07 15:56:59 -04:00
4 changed files with 57 additions and 36 deletions
-10
View File
@@ -21,13 +21,3 @@ jobs:
chmod 600 ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key
ssh -o StrictHostKeyChecking=yes -i ~/.ssh/deploy_key deploy@${{ vars.DEPLOY_HOST }} deploy-nginx ssh -o StrictHostKeyChecking=yes -i ~/.ssh/deploy_key deploy@${{ vars.DEPLOY_HOST }} deploy-nginx
test:
needs: deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.x'
- run: pip install pytest
- run: pytest tests/ -v
+2 -1
View File
@@ -23,13 +23,14 @@ server {
} }
NGINXCONF NGINXCONF
trap 'git -C /opt/hantim restore "docker/nginx/conf.d/$APP.conf" 2>/dev/null || rm -f "/opt/hantim/docker/nginx/conf.d/$APP.conf"' EXIT trap 'git -C /opt/hantim restore "docker/nginx/conf.d/$APP.conf" 2>/dev/null || rm -f "/opt/hantim/docker/nginx/conf.d/$APP.conf"; docker exec nginx nginx -t && docker exec nginx nginx -s reload' EXIT
docker exec nginx nginx -t && docker exec nginx nginx -s reload docker exec nginx nginx -t && docker exec nginx nginx -s reload
certbot certonly --webroot -w /opt/hantim/docker/nginx/certbot/www \ certbot certonly --webroot -w /opt/hantim/docker/nginx/certbot/www \
--non-interactive --agree-tos -m timothykim@fastmail.fm \ --non-interactive --agree-tos -m timothykim@fastmail.fm \
--cert-name "$APP" -d "$APP" -d "www.$APP" --cert-name "$APP" -d "$APP" -d "www.$APP"
git -C /opt/hantim restore "docker/nginx/conf.d/$APP.conf" 2>/dev/null || rm -f "/opt/hantim/docker/nginx/conf.d/$APP.conf" git -C /opt/hantim restore "docker/nginx/conf.d/$APP.conf" 2>/dev/null || rm -f "/opt/hantim/docker/nginx/conf.d/$APP.conf"
trap - EXIT trap - EXIT
docker exec nginx nginx -t && docker exec nginx nginx -s reload
echo "Certificate issued for $APP" echo "Certificate issued for $APP"
exit 0 exit 0
fi fi
+29 -14
View File
@@ -253,16 +253,22 @@ cmd_repo() {
} }
cmd_files() { cmd_files() {
local all_exist=true
for f in "docker/$APP/compose.yml" ".gitea/workflows/deploy-$APP.yml" "docker/nginx/conf.d/$APP.conf"; do for f in "docker/$APP/compose.yml" ".gitea/workflows/deploy-$APP.yml" "docker/nginx/conf.d/$APP.conf"; do
if [ -e "$REPO_ROOT/$f" ]; then if [ ! -e "$REPO_ROOT/$f" ]; then
echo "Error: $f already exists." all_exist=false
exit 1 break
fi fi
done done
if [ "$all_exist" = true ]; then
echo " All files already exist, skipping."
return
fi
echo "==> Creating docker/$APP/compose.yml..." if [ ! -e "$REPO_ROOT/docker/$APP/compose.yml" ]; then
mkdir -p "$REPO_ROOT/docker/$APP" echo "==> Creating docker/$APP/compose.yml..."
cat > "$REPO_ROOT/docker/$APP/compose.yml" <<EOF mkdir -p "$REPO_ROOT/docker/$APP"
cat > "$REPO_ROOT/docker/$APP/compose.yml" <<EOF
services: services:
app: app:
image: git.timothykim.net/hantim/$APP:latest image: git.timothykim.net/hantim/$APP:latest
@@ -275,10 +281,14 @@ networks:
shared: shared:
external: true external: true
EOF EOF
else
echo " docker/$APP/compose.yml already exists, skipping."
fi
echo "==> Creating .gitea/workflows/deploy-$APP.yml..." if [ ! -e "$REPO_ROOT/.gitea/workflows/deploy-$APP.yml" ]; then
mkdir -p "$REPO_ROOT/.gitea/workflows" echo "==> Creating .gitea/workflows/deploy-$APP.yml..."
cat > "$REPO_ROOT/.gitea/workflows/deploy-$APP.yml" <<'OUTER' mkdir -p "$REPO_ROOT/.gitea/workflows"
cat > "$REPO_ROOT/.gitea/workflows/deploy-$APP.yml" <<'OUTER'
name: Deploy APP_PLACEHOLDER name: Deploy APP_PLACEHOLDER
on: on:
@@ -299,10 +309,14 @@ jobs:
chmod 600 ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key
ssh -o StrictHostKeyChecking=yes -i ~/.ssh/deploy_key deploy@${{ vars.DEPLOY_HOST }} deploy-APP_PLACEHOLDER ssh -o StrictHostKeyChecking=yes -i ~/.ssh/deploy_key deploy@${{ vars.DEPLOY_HOST }} deploy-APP_PLACEHOLDER
OUTER OUTER
sed -i "s/APP_PLACEHOLDER/$APP/g" "$REPO_ROOT/.gitea/workflows/deploy-$APP.yml" sed -i "s/APP_PLACEHOLDER/$APP/g" "$REPO_ROOT/.gitea/workflows/deploy-$APP.yml"
else
echo " .gitea/workflows/deploy-$APP.yml already exists, skipping."
fi
echo "==> Creating docker/nginx/conf.d/$APP.conf..." if [ ! -e "$REPO_ROOT/docker/nginx/conf.d/$APP.conf" ]; then
cat > "$REPO_ROOT/docker/nginx/conf.d/$APP.conf" <<NGINX echo "==> Creating docker/nginx/conf.d/$APP.conf..."
cat > "$REPO_ROOT/docker/nginx/conf.d/$APP.conf" <<NGINX
# Redirect HTTP to HTTPS, bare domain to www # Redirect HTTP to HTTPS, bare domain to www
server { server {
listen 80; listen 80;
@@ -357,8 +371,9 @@ server {
} }
} }
NGINX NGINX
else
echo " Files created. Run 'git add' and commit when ready." echo " docker/nginx/conf.d/$APP.conf already exists, skipping."
fi
} }
cmd_cert() { cmd_cert() {
+26 -11
View File
@@ -156,15 +156,23 @@ cmd_dns() {
cmd_files() { cmd_files() {
local name="$1" local name="$1"
if [ -d "$REPO_ROOT/docker/$name" ]; then local all_exist=true
echo "Error: docker/$name already exists." for f in "docker/$name/compose.yml" ".gitea/workflows/deploy-$name.yml"; do
exit 1 if [ ! -e "$REPO_ROOT/$f" ]; then
all_exist=false
break
fi
done
if [ "$all_exist" = true ]; then
echo " All files already exist, skipping."
return
fi fi
echo "==> Creating docker/$name/compose.yml..." if [ ! -e "$REPO_ROOT/docker/$name/compose.yml" ]; then
mkdir -p "$REPO_ROOT/docker/$name" echo "==> Creating docker/$name/compose.yml..."
touch "$REPO_ROOT/docker/$name/.gitignore" mkdir -p "$REPO_ROOT/docker/$name"
cat > "$REPO_ROOT/docker/$name/compose.yml" <<EOF touch "$REPO_ROOT/docker/$name/.gitignore"
cat > "$REPO_ROOT/docker/$name/compose.yml" <<EOF
services: services:
$name: $name:
image: TODO image: TODO
@@ -177,10 +185,14 @@ networks:
shared: shared:
external: true external: true
EOF EOF
else
echo " docker/$name/compose.yml already exists, skipping."
fi
echo "==> Creating .gitea/workflows/deploy-$name.yml..." if [ ! -e "$REPO_ROOT/.gitea/workflows/deploy-$name.yml" ]; then
mkdir -p "$REPO_ROOT/.gitea/workflows" echo "==> Creating .gitea/workflows/deploy-$name.yml..."
cat > "$REPO_ROOT/.gitea/workflows/deploy-$name.yml" <<'OUTER' mkdir -p "$REPO_ROOT/.gitea/workflows"
cat > "$REPO_ROOT/.gitea/workflows/deploy-$name.yml" <<'OUTER'
name: Deploy APP_PLACEHOLDER name: Deploy APP_PLACEHOLDER
on: on:
@@ -201,7 +213,10 @@ jobs:
chmod 600 ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key
ssh -o StrictHostKeyChecking=yes -i ~/.ssh/deploy_key deploy@${{ vars.DEPLOY_HOST }} deploy-APP_PLACEHOLDER ssh -o StrictHostKeyChecking=yes -i ~/.ssh/deploy_key deploy@${{ vars.DEPLOY_HOST }} deploy-APP_PLACEHOLDER
OUTER OUTER
sed -i "s/APP_PLACEHOLDER/$name/g" "$REPO_ROOT/.gitea/workflows/deploy-$name.yml" sed -i "s/APP_PLACEHOLDER/$name/g" "$REPO_ROOT/.gitea/workflows/deploy-$name.yml"
else
echo " .gitea/workflows/deploy-$name.yml already exists, skipping."
fi
echo "" echo ""
echo "Done. Edit docker/$name/compose.yml, then commit and push." echo "Done. Edit docker/$name/compose.yml, then commit and push."