Skip to content

Website — Deployment

Overview

The marketing website has a single production environment. There is no staging or test environment — changes go straight to semalink.africa.

PropertyValue
Live URLsemalink.africa
CF Pages Projectsemalink-website
Fallback Domainsemalink-website.pages.dev
Deploy triggerPush to prod branch or manual dispatch
Build outputdist/ (static HTML, CSS, JS)

Branch Strategy

BranchPurpose
mainDevelopment — all PRs and changes merge here first
prodProduction — merge main into prod to trigger a deploy
sh
# Deploy to production
git checkout prod
git merge main
git push origin prod

CI/CD Workflow

Defined in .github/workflows/deploy.yml. Steps:

  1. Checkout code
  2. Setup Node.js 22
  3. Install dependencies (npm ci)
  4. Build (npm run build) — vite-ssg pre-renders all routes to static HTML in dist/
  5. Deploy dist/ to Cloudflare Pages (semalink-website project)
  6. Notify Slack — success (green) or failure (red) with a View Site → button

A full deploy takes approximately 30–45 seconds.

GitHub Secrets

The workflow uses these secrets (set at the repo level, not environment-scoped):

SecretDescription
CLOUDFLARE_API_TOKENCF API token with Pages write permission
CLOUDFLARE_ACCOUNT_IDCloudflare account ID
SLACK_WEBHOOK_URLSlack Incoming Webhook URL

Manual Deploy

To trigger a deploy without pushing:

  1. Go to GitHub → Actions → Deploy to Cloudflare Pages
  2. Click Run workflow
  3. Select branch → Run workflow

Rollback

  1. Go to Cloudflare Dashboard → Pages → semalink-website
  2. Click Deployments tab
  3. Find the last good deployment → Rollback to this deployment

Rollback is instant — no rebuild required.

No Staging Environment

The website deploys directly to production. Test changes locally with npm run build && npm run preview before merging to prod.

Internal use only — Sema Link Engineering