Files
guru-connect/.gitea/workflows/deploy.yml
Mike Swanson 60519be28a feat: operational tooling — signing, versioning, changelog, roadmap (SPEC-001)
Establish GuruConnect's release engineering and project tracking (SPEC-001):
- docs/ scaffold: FEATURE_ROADMAP, ARCHITECTURE_DECISIONS (ADR-001 standalone+contract,
  ADR-002 Gitea Actions + Azure Trusted Signing), docs/specs/SPEC-001, CHANGELOG.
- .gitea/workflows/release.yml: conventional-commit auto-versioning, git-cliff changelog,
  Windows agent build, Azure Trusted Signing via jsign (reusing the shared ACG cert profile),
  Gitea release via REST API. build-and-test.yml is the PR/push gate; deploy.yml de-duplicated.
- server: GET /api/changelog/:component/:version (latest + by-version), path-traversal hardened.
- cliff.toml; server/.env.example documents CHANGELOG_DIR.

Reviewed (Code Review Agent): axum route-conflict blocker fixed; CHANGELOG ordering, toolchain
target, breaking-change parsing, empty-changelog fallback addressed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 07:19:29 -07:00

79 lines
2.8 KiB
YAML

name: Deploy to Production
# Server deployment only. Release creation and agent signing live in release.yml (SPEC-001) —
# this workflow no longer creates releases, so there is exactly one release producer in the repo.
#
# Triggers on a pushed vX.Y.Z tag (which release.yml creates) or manual dispatch. The previous
# GitHub-only `actions/create-release@v1` + GITHUB_TOKEN job has been removed; it does not work on
# Gitea. Gitea releases are produced by release.yml via the Gitea REST API.
on:
push:
tags:
- 'v*.*.*'
workflow_dispatch:
inputs:
environment:
description: 'Deployment environment'
required: true
default: 'production'
type: choice
options:
- production
- staging
jobs:
deploy-server:
name: Deploy Server
runs-on: ubuntu-latest
environment: ${{ github.event.inputs.environment || 'production' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: x86_64-unknown-linux-gnu
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y pkg-config libssl-dev protobuf-compiler
- name: Build server
run: |
cd server
cargo build --release --target x86_64-unknown-linux-gnu
- name: Create deployment package
run: |
set -euo pipefail
mkdir -p deploy
cp server/target/x86_64-unknown-linux-gnu/release/guruconnect-server deploy/
cp -r server/static deploy/
cp -r server/migrations deploy/
# Ship generated changelogs so the server's /api/changelog endpoint can serve them
# (CHANGELOG_DIR points at this directory in production).
if [ -d changelogs ]; then cp -r changelogs deploy/; fi
cp server/.env.example deploy/.env.example
tar -czf guruconnect-server-${{ github.ref_name }}.tar.gz -C deploy .
echo "[OK] Packaged guruconnect-server-${{ github.ref_name }}.tar.gz"
- name: Upload deployment package
uses: actions/upload-artifact@v3
with:
name: deployment-package
path: guruconnect-server-${{ github.ref_name }}.tar.gz
retention-days: 90
- name: Deploy to server (production)
if: github.event.inputs.environment == 'production' || startsWith(github.ref, 'refs/tags/')
run: |
echo "[INFO] Deployment command would run here"
echo "[INFO] SSH to 172.16.3.30 and deploy"
# Actual deployment would use SSH keys and run:
# scp guruconnect-server-*.tar.gz guru@172.16.3.30:/tmp/
# ssh guru@172.16.3.30 'bash /home/guru/guru-connect/scripts/deploy.sh'