Archive all 6 deployed changes following OpenSpec workflow: - add-minimal-hugo-site → hugo-site spec - add-multilingual-support → internationalization spec - migrate-site-content → content-migration + image-assets specs - add-custom-bootstrap-styling → styling spec - add-cv-page → content-management spec - simple-deployment → deployment spec All changes moved to archive/ with 2025-10-30 date prefix. Created 7 capability specs reflecting deployed functionality. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
101 lines
4.9 KiB
Markdown
101 lines
4.9 KiB
Markdown
# deployment Specification
|
|
|
|
## Purpose
|
|
TBD - created by archiving change simple-deployment. Update Purpose after archive.
|
|
## Requirements
|
|
### Requirement: Rsync Deployment Script SHALL be provided
|
|
The system SHALL provide an automated deployment script that syncs the built Hugo site to the production server via rsync over SSH, properly mirroring content.
|
|
|
|
#### Scenario: User deploys site after building
|
|
**Given** the Hugo site has been built successfully (public/ directory exists)
|
|
**And** the user has set the SSH_USER and SSH_HOST environment variables
|
|
**When** the user runs the deployment script
|
|
**Then** the script connects to the specified SSH_HOST via rsync over SSH
|
|
**And** syncs all files from the public/ directory to the REMOTE_ROOT directory on the server
|
|
**And** deletes remote files that don't exist locally (mirror behavior)
|
|
**And** displays sync progress and completion status
|
|
**And** exits with status code 0 on success
|
|
|
|
#### Scenario: Script fails when credentials are missing
|
|
**Given** the Hugo site has been built
|
|
**And** the SSH_USER or SSH_HOST environment variable is not set
|
|
**When** the user runs the deployment script
|
|
**Then** the script displays an error message explaining the missing configuration
|
|
**And** exits with a non-zero status code
|
|
**And** does not attempt to connect to the server
|
|
|
|
#### Scenario: Script handles connection failures gracefully
|
|
**Given** the SSH_USER and SSH_HOST are set correctly
|
|
**And** the network connection to the server is unavailable or SSH authentication fails
|
|
**When** the user runs the deployment script
|
|
**Then** the script displays a clear error message about the connection failure
|
|
**And** exits with a non-zero status code
|
|
**And** does not leave the deployment in a partially completed state
|
|
|
|
### Requirement: Secure Credential Management SHALL be enforced
|
|
The deployment process SHALL handle credentials securely without exposing them in version control or script output.
|
|
|
|
#### Scenario: Configuration stored as environment variables
|
|
**Given** the user needs to deploy the site
|
|
**When** the user reviews the deployment documentation
|
|
**Then** the documentation instructs them to set SSH_USER, SSH_HOST, SSH_PORT, and REMOTE_ROOT as environment variables
|
|
**And** the deployment script reads configuration only from environment variables
|
|
**And** credentials are never hardcoded in scripts or configuration files
|
|
**And** SSH key-based authentication is used for secure, password-less access
|
|
|
|
#### Scenario: Script does not expose credentials in output
|
|
**Given** the deployment script is running
|
|
**When** the script displays status messages or logs
|
|
**Then** SSH keys or passwords are never displayed in plain text
|
|
**And** connection strings show only the host and user information
|
|
**And** error messages do not reveal credential values
|
|
|
|
### Requirement: Deployment Status Feedback SHALL be provided
|
|
The deployment script SHALL provide clear feedback about the deployment process and outcome.
|
|
|
|
#### Scenario: User receives progress updates during deployment
|
|
**Given** the deployment script is uploading files
|
|
**When** the upload is in progress
|
|
**Then** the script displays which files or directories are being uploaded
|
|
**And** shows overall progress indicators
|
|
**And** provides estimated time or completion percentage when possible
|
|
|
|
#### Scenario: Successful deployment confirmation
|
|
**Given** all files have been uploaded successfully
|
|
**When** the deployment completes
|
|
**Then** the script displays a success message
|
|
**And** confirms the total number of files uploaded
|
|
**And** exits with status code 0
|
|
|
|
#### Scenario: Failed deployment with actionable error
|
|
**Given** an error occurs during deployment
|
|
**When** the deployment fails
|
|
**Then** the script displays the specific error encountered
|
|
**And** suggests possible remediation steps
|
|
**And** exits with a non-zero status code
|
|
|
|
### Requirement: Deployment Prerequisites SHALL be verified
|
|
The deployment script SHALL verify that prerequisites are met before attempting deployment.
|
|
|
|
#### Scenario: Script checks for built site
|
|
**Given** the user runs the deployment script
|
|
**When** the script starts
|
|
**Then** it verifies that the public/ directory exists
|
|
**And** contains files to deploy
|
|
**And** exits with an error if the directory is missing or empty
|
|
|
|
#### Scenario: Script checks for required tools
|
|
**Given** the deployment script starts
|
|
**When** it performs prerequisite checks
|
|
**Then** it verifies that rsync is installed and available
|
|
**And** displays an installation message if rsync is missing
|
|
**And** exits with an error if required tools are unavailable
|
|
|
|
#### Scenario: Script supports configurable ports and remote directories
|
|
**Given** the user needs to deploy to a non-standard SSH port or directory
|
|
**When** the user sets SSH_PORT and REMOTE_ROOT environment variables
|
|
**Then** the script uses the specified port instead of the default (22)
|
|
**And** the script uploads to the specified remote directory instead of the default (/httpsdocs)
|
|
**And** if these variables are not set, the script uses sensible defaults
|
|
|