Detta repo innehåller en produktionsinriktad grund för en större app som körs via Azure och GitHub.
Här är en praktisk och modern översikt över hur du bygger och distribuerar appar till Azure med GitHub som huvudsaklig källa och verktyg. Det finns idag flera väldigt smidiga sätt att göra detta – valet beror på vilken typ av app du bygger.
Azure DevOps och GitHub integreras väldigt bra idag särskilt om du vill behålla Azure Boards planering, backlog, sprintar) och/eller Azure Pipelines (CI/CD) medan koden bor på GitHub. Microsoft satsar hårt på hybrid-scenariot: GitHub som primär repo-plattform (med Copilot, Actions, etc.) + Azure DevOps som styrning och orkestrering.
infra/main.bicep)src/ — Next.js-webappapps/api/ — Fastify API + Prismainfra/ — Azure-infrastruktur (Bicep).github/workflows/ — CI/CD pipelines.github/policy-matrix.json — central policykälla för governance-reglerazure.yaml — Azure Developer CLI-konfigurationPrisma-konfiguration för API:t ligger i apps/api/prisma.config.ts (seed körs via npm run prisma:seed i apps/api/package.json).
.env.example till .env (placeholder finns redan).Körning:
npm installnpm run prisma:generatenpm run prisma:seednpm run devFrontend: http://localhost:3000
API: http://localhost:4000/v1/health
npm run dev.http://localhost:3000/auth-lab.[email protected] / ChangeMe123!.Login → får accessToken + refreshTokenRefresh Token → nytt token-parGET /auth/sessions → lista aktiva sessioner (IP/UA/expiry)DELETE /auth/sessions/:id → revoke en specifik sessionGET /auth/me → verifiera aktiv sessionGET /projects (scoped) → verifiera role-scoped organization isolationLogout (single/all sessions) → refresh token revokasBas-URL: http://localhost:4000/v1
GET /projects?limit=50&q=<söktext> — lista projekt med valfri fritextsökningPOST /projects — skapa projektGET /projects/:id — hämta ett projektPATCH /projects/:id — uppdatera namn/beskrivningDELETE /projects/:id — ta bort projektGET /organizations — lista organisationer med projekt/medlems-countPOST /organizations — skapa organisationGET /organizations/:id — detaljer + senaste projekt + medlemmarPOST /organizations/:id/members — skapa medlem i organisationGET /tasks — lista tasks med filter (projectId, assigneeId, status, priority, limit)POST /tasks — skapa taskPATCH /tasks/:id — uppdatera taskGET /events — senaste händelser (event stream)GET /analytics/overview — KPI:er och statusfördelningPOST /auth/register — registrera medlem i din egen organisation (owner/admin/manager)POST /auth/login — logga in och få accessToken + refreshTokenPOST /auth/refresh — rotera refresh token och få nytt token-parPOST /auth/logout — revoke refresh token (eller alla sessioner)GET /auth/sessions — lista aktiva refresh-sessioner för inloggad användareDELETE /auth/sessions/:id — revoke en specifik refresh-sessionGET /auth/me — hämta inloggad användare (kräver Bearer-token)POST /auth/change-password — byt lösenord (kräver Bearer-token)GET /admin/health/deep — djup health + totals (owner/admin)GET /admin/members — medlemslista med relationer (owner/admin/manager)Alla datamoduler är nu org-isolerade: en användare ser och uppdaterar endast resurser i sin egen organisation.
Refresh-flödet har även reuse-detection: om ett revokat/utgånget refresh token återanvänds revokas alla aktiva sessioner för den användaren.
Skrivskyddade endpoints använder RBAC:
Exempel payload för create/update:
name (2-120 tecken)description (valfri, max 2000 tecken)npm run lintnpm run buildJWT_SECRET — signeringsnyckel för API-tokenJWT_ACCESS_EXPIRES_IN — livslängd access token (t.ex. 15m)JWT_REFRESH_DAYS — livslängd refresh token i dagarRATE_LIMIT_MAX — antal requests per fönsterRATE_LIMIT_WINDOW — tidsfönster (t.ex. 1 minute)Demo-seed skapar även en ägare:
[email protected] / ChangeMe123!. Byt lösenord direkt i riktiga miljöer.
Förutsättningar:
Standardflöde:
azd auth loginazd env new <env-name>azd upci.yml: lint + build på PR och push till maindeploy-azure.yml: manuell production-deploy till Azure via azddeploy-azure-staging.yml: staging-wrapper för Azure deploy (environment staging)preview-vercel.yml: preview deploy för PR (om Vercel-secrets finns)release.yml: automatisk version + changelog via Release Pleasedependabot-auto-merge.yml: auto-approve + auto-merge för Dependabot patch/minor updatescodeql.yml: säkerhetsanalys (CodeQL) på PR/push + schemalagd körningsecret-scan.yml: secrets scanning med Gitleaksossf-scorecard.yml: säkerhetsmognad via OSSF Scorecardpr-title-policy.yml: blockerar PR-titlar som inte följer Conventional Commit-formatpr-body-policy.yml: validerar att PR-beskrivning följer template-sektionerbranch-name-policy.yml: enforce branch-namn enligt <type>/<description>changelog-policy.yml: kräver changelog-decision labels för user-facing ändringarpolicy-matrix-validate.yml: validerar .github/policy-matrix.json (struktur, regex, labels)policy-settings-alignment.yml: säkerställer att .github/settings.yml och policy-matrisens required checks är synkadepolicy-settings-autosync.yml: skapar automatiskt PR med settings-fix när required checks driftarpolicy-labels-alignment.yml: validerar att managedLabels i policy-matrisen finns i .github/labels.ymlpolicy-labels-autosync.yml: skapar automatiskt PR med labels-fix när label-governance driftarpolicy-governance-report.yml: publicerar/uppdaterar en löpande governance-statusrapport i GitHub Issuespolicy-assistant-comment.yml: kommenterar konkreta policy-fixar direkt på PRrelease-readiness-gate.yml: blockerar merge-ready vid policybrott (changelog/risk)auto-label-pr.yml: path-baserad auto-labeling av PR:er via .github/labeler.ymlauto-assign-reviewers.yml: auto-tilldelar reviewers via .github/auto_assign.ymlpr-size-label.yml: sätter size/*-labels baserat på ändringsstorleksync-labels.yml: synkar label-definitioner från .github/labels.ymlstale-management.yml: markerar/stänger inaktiva issues och PR:er enligt policyroute-to-project.yml: (valfritt) skickar nya issues/PR:er till GitHub Projectworkflow-lint.yml: lintar GitHub workflows för syntax/policy-felpolicy-drift-guard.yml: jämför branch protection mot baseline (optional strict mode)_reusable-ci.yml: återanvändbar CI-pipeline_reusable-azure-deploy.yml: återanvändbar Azure deploy-pipelineNödvändiga GitHub secrets/vars för deployment:
AZURE_CREDENTIALS (secret)AZURE_ENV_NAME (repository/environment variable)AZURE_LOCATION (repository/environment variable)För staging-wrapper:
AZURE_STAGING_ENV_NAME (environment variable i staging)AZURE_STAGING_LOCATION (environment variable i staging)För Vercel preview:
VERCEL_TOKEN (secret)VERCEL_ORG_ID (secret)VERCEL_PROJECT_ID (secret)För valfri project-routing:
GH_PROJECT_URL (repository/environment variable), t.ex. https://github.com/users/<user>/projects/<id>ADD_TO_PROJECT_PAT (secret) med rättigheter för project writeFör valfri strikt policy-drift guard:
STRICT_POLICY_GUARD=true (repository/environment variable) för att faila workflow vid driftCONTRIBUTING.md för bidragsflöde och PR-kravCODE_OF_CONDUCT.md för samarbetsnormerSUPPORT.md för support- och eskaleringsvägar.github/policy-matrix.json) som driver PR title/body, branch naming, changelog och readiness-reglersettings.yml behöver uppdateras från policy-matrisenlabels.yml behöver uppdateras eller metadata driftar mot policy-matrisengovernanceEscalation i policy-matrisen)SECURITY.md) för privat sårbarhetsrapportering.github/settings.yml)docs/runbook.md.editorconfig, .gitattributes och .nvmrcKonkreta steg för miljöskydd (required reviewers) finns i:
.github/github-settings-checklist.mdSettings-as-code notis:
.github/settings.yml används av t.ex. Probot Settings app eller GH CLI-script för att synka branch protection/repoinställningar.