Skip to content

chore: README — arkitektur, teststrategi, funktionsöversikt (#14) #6

chore: README — arkitektur, teststrategi, funktionsöversikt (#14)

chore: README — arkitektur, teststrategi, funktionsöversikt (#14) #6

Workflow file for this run

name: Deploy
# CD-skelett. Deployar vid push till main (produktion). Varje steg är gated på att
# motsvarande secret finns, så workflowen är en no-op tills du konfigurerat secrets.
#
# Alternativ: Cloudflare Pages och Render kan också auto-deploya via sina egna
# Git-integrationer (som VMPage gör — se SPEC-BRIEF/DEPLOYMENT). Välj EN väg per tjänst
# så du inte deployar dubbelt. Den här filen är Actions-vägen.
#
# Secrets som behövs (Settings → Secrets and variables → Actions):
# CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_PAGES_PROJECT (frontend)
# RENDER_DEPLOY_HOOK_URL (backend)
# VITE_API_BASE_URL (kan vara en repo-variable i stället)
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
concurrency:
group: deploy-${{ github.ref }}
cancel-in-progress: false
jobs:
frontend:
name: Frontend → Cloudflare Pages
runs-on: ubuntu-latest
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CF_PAGES_PROJECT: ${{ secrets.CLOUDFLARE_PAGES_PROJECT }}
steps:
- uses: actions/checkout@v4
- name: Saknas konfig?
if: ${{ env.CLOUDFLARE_API_TOKEN == '' || hashFiles('frontend/package.json') == '' }}
run: echo "::notice::Hoppar över frontend-deploy (saknar Cloudflare-secrets eller frontend/)."
- name: Setup Node
if: ${{ env.CLOUDFLARE_API_TOKEN != '' && hashFiles('frontend/package.json') != '' }}
uses: actions/setup-node@v4
with:
node-version: '20'
cache: npm
cache-dependency-path: frontend/package-lock.json
- name: Build
if: ${{ env.CLOUDFLARE_API_TOKEN != '' && hashFiles('frontend/package.json') != '' }}
working-directory: frontend
env:
VITE_API_BASE_URL: ${{ secrets.VITE_API_BASE_URL }}
run: |
npm ci
npm run build
- name: Deploy till Cloudflare Pages
if: ${{ env.CLOUDFLARE_API_TOKEN != '' && hashFiles('frontend/package.json') != '' }}
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ env.CLOUDFLARE_API_TOKEN }}
accountId: ${{ env.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy frontend/dist --project-name=${{ env.CF_PAGES_PROJECT }}
backend:
name: Backend → Render
runs-on: ubuntu-latest
env:
RENDER_DEPLOY_HOOK_URL: ${{ secrets.RENDER_DEPLOY_HOOK_URL }}
steps:
- name: Trigga Render-deploy
if: ${{ env.RENDER_DEPLOY_HOOK_URL != '' }}
run: curl -fsSL -X POST "$RENDER_DEPLOY_HOOK_URL"
- name: Saknas hook?
if: ${{ env.RENDER_DEPLOY_HOOK_URL == '' }}
run: echo "::notice::Hoppar över backend-deploy (saknar RENDER_DEPLOY_HOOK_URL)."