Deploy to a single target
There is only one server. The site is served from /var/www/mcg on the VPS at mcg.luxick.de today, and the main domain will be pointed at the same instance at cutover; local `hugo server` covers development. Drops the development/production split from the workflow, its DEPLOY_PATH_DEV / DEPLOY_PATH_PROD secrets and the workflow_dispatch environment input, leaving a single DEPLOY_PATH. baseURL now comes from hugo.toml rather than being injected per environment, so it is the one place to change at cutover. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -5,16 +5,7 @@ on:
|
|||||||
branches: [main]
|
branches: [main]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
workflow_dispatch:
|
workflow_dispatch: # manual re-deploy of the current main
|
||||||
inputs:
|
|
||||||
environment:
|
|
||||||
description: 'Deployment target'
|
|
||||||
required: true
|
|
||||||
default: 'development'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- development
|
|
||||||
- production
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
HUGO_VERSION: '0.164.0'
|
HUGO_VERSION: '0.164.0'
|
||||||
@@ -36,35 +27,22 @@ jobs:
|
|||||||
sudo dpkg -i /tmp/hugo.deb
|
sudo dpkg -i /tmp/hugo.deb
|
||||||
hugo version
|
hugo version
|
||||||
|
|
||||||
- name: Resolve target
|
# baseURL comes from hugo.toml - that is the single place to change when
|
||||||
id: target
|
# the site moves to its final domain.
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
if [ "${{ github.event_name }}" = "workflow_dispatch" ] \
|
|
||||||
&& [ "${{ inputs.environment }}" = "production" ]; then
|
|
||||||
echo "base_url=https://motorradclub-giebelwald.de/" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "deploy_path=${{ secrets.DEPLOY_PATH_PROD }}" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "name=production" >> "$GITHUB_OUTPUT"
|
|
||||||
else
|
|
||||||
echo "base_url=https://mcg.luxick.de/" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "deploy_path=${{ secrets.DEPLOY_PATH_DEV }}" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "name=development" >> "$GITHUB_OUTPUT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
hugo --gc --minify --baseURL "${{ steps.target.outputs.base_url }}"
|
hugo --gc --minify
|
||||||
|
|
||||||
# Pull requests are built to catch breakage, but never published.
|
# Pull requests are built to catch breakage, but never published.
|
||||||
- name: Deploy to ${{ steps.target.outputs.name }}
|
- name: Deploy
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
env:
|
env:
|
||||||
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
SSH_KNOWN_HOSTS: ${{ secrets.SSH_KNOWN_HOSTS }}
|
SSH_KNOWN_HOSTS: ${{ secrets.SSH_KNOWN_HOSTS }}
|
||||||
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
||||||
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
|
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
|
||||||
DEPLOY_PATH: ${{ steps.target.outputs.deploy_path }}
|
DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,9 @@
|
|||||||
|
|
||||||
Static website of the Motorradclub Giebelwald e.V., built with [Hugo](https://gohugo.io).
|
Static website of the Motorradclub Giebelwald e.V., built with [Hugo](https://gohugo.io).
|
||||||
|
|
||||||
- Development: <https://mcg.luxick.de>
|
Currently served at <https://mcg.luxick.de>. Once the site is signed off, the
|
||||||
- Production: <https://motorradclub-giebelwald.de>
|
main domain <https://motorradclub-giebelwald.de> will be pointed at the same
|
||||||
|
server and the old host retired — see [Changing the domain](#changing-the-domain).
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
@@ -91,12 +92,15 @@ layouts/ baseof, home, list, page, termine
|
|||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
`.gitea/workflows/deploy.yml` builds with Hugo and rsyncs `public/` over SSH.
|
`.gitea/workflows/deploy.yml` builds with Hugo and rsyncs `public/` over SSH to
|
||||||
|
the VPS webroot.
|
||||||
|
|
||||||
- Push to `main` → deploys to **mcg.luxick.de**
|
- Push to `main` → builds and deploys
|
||||||
- Manual *Run workflow* with `environment: production` → deploys to
|
- *Run workflow* → manual re-deploy of the current `main`
|
||||||
**motorradclub-giebelwald.de**
|
- Pull requests are built to catch breakage, but never published
|
||||||
- Pull requests are built but never published
|
|
||||||
|
There is one deploy target. For development, run the site locally with
|
||||||
|
`hugo server`.
|
||||||
|
|
||||||
### Required secrets
|
### Required secrets
|
||||||
|
|
||||||
@@ -105,12 +109,21 @@ Set these in the Gitea repository settings:
|
|||||||
| Secret | Example |
|
| Secret | Example |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `SSH_PRIVATE_KEY` | Deploy key with write access to the webroot |
|
| `SSH_PRIVATE_KEY` | Deploy key with write access to the webroot |
|
||||||
| `SSH_KNOWN_HOSTS` | Output of `ssh-keyscan <host>` |
|
| `SSH_KNOWN_HOSTS` | Verified output of `ssh-keyscan <host>` |
|
||||||
| `DEPLOY_HOST` | `server.example.de` |
|
| `DEPLOY_HOST` | `server.example.de` |
|
||||||
| `DEPLOY_USER` | `www-deploy` |
|
| `DEPLOY_USER` | `www-deploy` |
|
||||||
| `DEPLOY_PATH_DEV` | `/var/www/mcg-dev` |
|
| `DEPLOY_PATH` | `/var/www/mcg` |
|
||||||
| `DEPLOY_PATH_PROD` | `/var/www/mcg` |
|
|
||||||
|
|
||||||
rsync runs with `--delete`, so each `DEPLOY_PATH_*` must point at a directory
|
rsync runs with `--delete`, so `DEPLOY_PATH` must point at a directory owned
|
||||||
owned solely by this site. The workflow refuses to deploy if the path is unset,
|
solely by this site. The workflow refuses to deploy if the path is unset, too
|
||||||
too shallow, or if the build produced no `index.html`.
|
shallow, or if the build produced no `index.html`.
|
||||||
|
|
||||||
|
### Changing the domain
|
||||||
|
|
||||||
|
`baseURL` in `hugo.toml` is the only place the live domain is configured; it
|
||||||
|
feeds canonical URLs, `og:url`, the RSS feed and the sitemap. To cut over:
|
||||||
|
|
||||||
|
1. Point the DNS record at the VPS.
|
||||||
|
2. Add the domain to the nginx `server_name` and reissue the certificate.
|
||||||
|
3. Change `baseURL` in `hugo.toml` and push — the deploy rebuilds every
|
||||||
|
absolute URL.
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# The live domain. Change this one line when the site moves to
|
||||||
|
# https://motorradclub-giebelwald.de/ - it feeds canonical URLs, RSS and sitemap.
|
||||||
baseURL = 'https://mcg.luxick.de/'
|
baseURL = 'https://mcg.luxick.de/'
|
||||||
title = 'Motorradclub Giebelwald e.V.'
|
title = 'Motorradclub Giebelwald e.V.'
|
||||||
locale = 'de-DE'
|
locale = 'de-DE'
|
||||||
|
|||||||
Reference in New Issue
Block a user