Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
a3d8e5c
Reshuffle deployment docs structure
davidfowl Mar 30, 2026
f3f15c1
Move Japanese pipelines translation to match new slug
davidfowl Mar 30, 2026
64f50e0
Fix localized pipeline links to new deployment path
davidfowl Mar 30, 2026
cb9c5c8
Fix duplicate K8s sidebar entry and remove pipelines from docs.topics.ts
davidfowl Mar 30, 2026
4b1f4f5
Add TypeScript AppHost tabs to all deployment pages
davidfowl Mar 30, 2026
9395502
Fix TypeScript API examples to match actual compiler-verified signatures
davidfowl Mar 30, 2026
1f58ba9
Reorder deployment sidebar: group targets, add Advanced section
davidfowl Mar 30, 2026
b63218e
Fix 3 critical issues found by doc-tester
davidfowl Mar 30, 2026
9a5af57
Add TypeScript tab to pipelines page with 'not yet available' note
davidfowl Mar 30, 2026
b9ad0bc
Use tab pattern for unavailable TS APIs instead of standalone Aside
davidfowl Mar 30, 2026
1bb4718
Move app lifecycle guide to deployment section
davidfowl Mar 30, 2026
c9f2388
Clean .NET-centric language from app lifecycle guide
davidfowl Mar 30, 2026
f5b7355
Fix doc-tester final round issues
davidfowl Mar 30, 2026
f8c8b56
Fix K8s deploy column: no aspire deploy support for Kubernetes
davidfowl Mar 30, 2026
450e99e
Address PR review feedback from @JamesNK
davidfowl Mar 30, 2026
54da652
Address round 2 PR feedback from @JamesNK
davidfowl Mar 30, 2026
0be7088
Revert Kubernetes rename — keep 'Deploy to Kubernetes' in deployment …
davidfowl Mar 30, 2026
f6e9b96
Fix C#/TypeScript sample parity across deployment pages
davidfowl Mar 31, 2026
3a0c7bc
Use 'env' as Docker Compose resource name in examples
davidfowl Mar 31, 2026
809b9a8
Fix 'front end' -> 'frontend' consistency in deploy-first-app
davidfowl Mar 31, 2026
b14fba2
Fix remaining C#/TS sample mismatches
davidfowl Mar 31, 2026
3aba1e3
Clean up content, fix issues with C# APIs being incorrect, link to as…
IEvangelist Mar 31, 2026
b773187
Update Docker API reference links to point to aspire.dev
IEvangelist Mar 31, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -450,4 +450,5 @@ FodyWeavers.xsd


bin/
obj/
obj/
tmp-ts-validation/
4 changes: 4 additions & 0 deletions src/frontend/config/redirects.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,8 @@ export const redirects = {
'/reference/cli/commands/aspire-mcp-start/': '/reference/cli/commands/aspire-agent-mcp/',
'/reference/cli/commands/aspire-exec/': '/reference/cli/commands/aspire-resource/',
'/get-started/configure-mcp/': '/get-started/ai-coding-agents/',
'/get-started/pipelines/': '/deployment/pipelines/',
'/ja/get-started/pipelines/': '/ja/deployment/pipelines/',
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@IEvangelist Some locale specific redirects are here, but on for ja and only for some pages. Should they be removed? Or should more be added?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe they should be removed. The default locales should auto redirect.

'/deployment/manifest-format/': '/deployment/azure/manifest-format/',
'/fundamentals/app-lifecycle/': '/deployment/app-lifecycle/',
};
107 changes: 46 additions & 61 deletions src/frontend/config/sidebar/deployment.topics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,71 +64,16 @@ export const deploymentTopics: StarlightSidebarTopicsUserConfig = {
slug: 'deployment/overview',
},
{
label: 'Deploy JavaScript apps',
slug: 'deployment/javascript-apps',
label: 'Pipelines (aspire do)',
slug: 'deployment/pipelines',
},
{
label: 'Deployment manifest format',
translations: {
da: 'Udrulningsmanifestformat',
de: 'Bereitstellungsmanifestformat',
en: 'Deployment manifest format',
es: 'Formato de manifiesto de despliegue',
fr: 'Format de manifeste de déploiement',
hi: 'तैनाती मैनिफ़ेस्ट प्रारूप',
id: 'Format manifes penyebaran',
it: 'Formato del manifesto di distribuzione',
ja: 'デプロイマニフェスト形式',
ko: '배포 매니페스트 형식',
'pt-BR': 'Formato de manifesto de implantação',
ru: 'Формат манифеста развертывания',
tr: 'Dağıtım bildirimi biçimi',
uk: 'Формат маніфесту розгортання',
'zh-CN': '部署清单格式',
},
slug: 'deployment/manifest-format',
},
{
label: 'Deployment state caching',
translations: {
da: 'Cachelagring af udrulningstilstand',
de: 'Zwischenspeichern des Bereitstellungsstatus',
en: 'Deployment state caching',
es: 'Almacenamiento en caché del estado de despliegue',
fr: "Mise en cache de l'état de déploiement",
hi: 'तैनाती स्थिति कैशिंग',
id: 'Caching status penyebaran',
it: 'Memorizzazione nella cache dello stato di distribuzione',
ja: 'デプロイ状態のキャッシュ',
ko: '배포 상태 캐싱',
'pt-BR': 'Cache de estado de implantação',
ru: 'Кэширование состояния развертывания',
tr: 'Dağıtım durumu önbelleğe alma',
uk: 'Кешування стану розгортання',
'zh-CN': '部署状态缓存',
},
slug: 'deployment/deployment-state-caching',
label: 'Deploy to Docker Compose',
slug: 'deployment/docker-compose',
},
{
label: 'Custom deployment pipelines',
translations: {
da: 'Brugerdefinerede implementeringspipelines',
de: 'Benutzerdefinierte Bereitstellungspipelines',
en: 'Custom deployment pipelines',
es: 'Canalizaciones de despliegue personalizadas',
fr: 'Pipelines de déploiement personnalisés',
hi: 'कस्टम तैनाती पाइपलाइन',
id: 'Pipeline penyebaran kustom',
it: 'Pipeline di distribuzione personalizzate',
ja: 'カスタム デプロイ パイプライン',
ko: '사용자 지정 배포 파이프라인',
'pt-BR': 'Pipelines de implantação personalizados',
ru: 'Пользовательские конвейеры развертывания',
tr: 'Özel dağıtım işlem hatları',
uk: 'Користувацькі конвеєри розгортання',
'zh-CN': '自定义部署管道',
},
slug: 'deployment/custom-deployments',
label: 'Deploy to Kubernetes',
slug: 'deployment/kubernetes',
},
{
label: 'Deploy to Azure',
Expand Down Expand Up @@ -172,6 +117,10 @@ export const deploymentTopics: StarlightSidebarTopicsUserConfig = {
},
slug: 'deployment/azure/aca-deployment-aspire-cli',
},
{
label: 'Customize Azure Container Apps',
slug: 'deployment/azure/customize-container-apps',
},
{
label: 'Azure security best practices',
translations: {
Expand All @@ -193,6 +142,42 @@ export const deploymentTopics: StarlightSidebarTopicsUserConfig = {
},
slug: 'deployment/azure/azure-security-best-practices',
},
{
label: 'Azure Developer CLI (azd)',
collapsed: true,
items: [
{
label: 'Overview',
slug: 'deployment/azure/azure-developer-cli',
},
{
label: 'Deployment manifest format',
slug: 'deployment/azure/manifest-format',
},
],
},
],
},
{
label: 'Deploy JavaScript apps',
slug: 'deployment/javascript-apps',
},
{
label: 'App lifecycle (CI/CD)',
slug: 'deployment/app-lifecycle',
},
{
label: 'Advanced',
collapsed: true,
items: [
{
label: 'Deployment state caching',
slug: 'deployment/deployment-state-caching',
},
{
label: 'Custom deployment pipelines',
slug: 'deployment/custom-deployments',
},
],
},
],
Expand Down
44 changes: 1 addition & 43 deletions src/frontend/config/sidebar/docs.topics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -529,27 +529,6 @@ export const docsTopics: StarlightSidebarTopicsUserConfig = {
},
slug: 'get-started/app-host',
},
{
label: 'Pipelines and app topology',
translations: {
da: 'Udrulning og apptopologi',
de: 'Bereitstellung und App-Topologie',
en: 'Pipelines and app topology',
es: 'Despliegue y topología de la aplicación',
fr: 'Déploiement et topologie de l’application',
hi: 'परिनियोजन और ऐप टोपोलॉजी',
id: 'Penyebaran dan topologi aplikasi',
it: 'Distribuzione e topologia dell’applicazione',
ja: 'パイプラインとアプリのトポロジー',
ko: '배포 및 앱 토폴로지',
'pt-BR': 'Implantação e topologia do aplicativo',
ru: 'Развертывание и топология приложения',
tr: 'Dağıtım ve uygulama topolojisi',
uk: 'Розгортання і топологія застосунку',
'zh-CN': '部署与应用拓扑',
},
slug: 'get-started/pipelines',
},
{
label: 'Understanding resources',
translations: {
Expand All @@ -571,27 +550,6 @@ export const docsTopics: StarlightSidebarTopicsUserConfig = {
},
slug: 'get-started/resources',
},
{
label: 'Aspire app lifecycle guide',
slug: 'fundamentals/app-lifecycle',
translations: {
da: 'Guide til Aspire app-livscyklus',
de: 'Leitfaden zum Aspire-App-Lebenszyklus',
en: 'Aspire app lifecycle guide',
es: 'Guía del ciclo de vida de la aplicación Aspire',
fr: 'Guide du cycle de vie des applications Aspire',
hi: 'Aspire ऐप जीवनचक्र गाइड',
id: 'Panduan siklus hidup aplikasi Aspire',
it: 'Guida al ciclo di vita delle app Aspire',
ja: 'Aspire アプリのライフサイクル ガイド',
ko: 'Aspire 앱 수명 주기 가이드',
'pt-BR': 'Guia do ciclo de vida do aplicativo Aspire',
ru: 'Руководство по жизненному циклу приложения Aspire',
tr: 'Aspire uygulama yaşam döngüsü kılavuzu',
uk: 'Посібник з життєвого циклу застосунку Aspire',
'zh-CN': 'Aspire 应用生命周期指南',
},
},
{
label: 'Glossary',
slug: 'get-started/glossary',
Expand Down Expand Up @@ -1340,4 +1298,4 @@ export const docsTopics: StarlightSidebarTopicsUserConfig = {
],
},
],
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -629,4 +629,4 @@ The explicit container registry configuration introduced in Aspire 13.1 provides
- [Configure Azure Container Apps environments](/integrations/cloud/azure/configure-container-apps/)
- [`aspire do` command](/reference/cli/commands/aspire-do/)
- [External parameters](/fundamentals/external-parameters/)
- [Pipelines and app topology](/get-started/pipelines/)
- [Pipelines and app topology](/deployment/pipelines/)
2 changes: 1 addition & 1 deletion src/frontend/src/content/docs/da/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ import LanguagesSupported from '@components/LanguagesSupported.astro';

## Lokal-først, produktionsklar

**Bygget til lokal udvikling**, Aspire spejler produktionsmiljøer på din maskine, eliminerer "virker på min maskine" problemer for glatte deployments. [Lær om deployment og app-topologi](/da/get-started/pipelines/).
**Bygget til lokal udvikling**, Aspire spejler produktionsmiljøer på din maskine, eliminerer "virker på min maskine" problemer for glatte deployments. [Lær om deployment og app-topologi](/da/deployment/pipelines/).

import LocalVsProdEnvironments from '@components/LocalVsProdEnvironments.astro';

Expand Down
2 changes: 1 addition & 1 deletion src/frontend/src/content/docs/de/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ Aspire unterstützt viele Sprachen & Frameworks und lässt dich mit deinen Favor

## Lokal zuerst, produktionsbereit

**Für lokale Entwicklung gebaut**, Aspire spiegelt Produktionsumgebungen auf deiner Maschine und eliminiert „Works on my machine“-Probleme für reibungslose Deployments. [Mehr über Deployment & App-Topologie](/de/get-started/pipelines/).
**Für lokale Entwicklung gebaut**, Aspire spiegelt Produktionsumgebungen auf deiner Maschine und eliminiert „Works on my machine“-Probleme für reibungslose Deployments. [Mehr über Deployment & App-Topologie](/de/deployment/pipelines/).

import LocalVsProdEnvironments from '@components/LocalVsProdEnvironments.astro';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ description: Understand the lifecycle of Aspire applications from development to
import { Aside, FileTree, Steps } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';

This guide provides a high-level overview of the lifecycle phases of an Aspire application, from development through local deployment to production release. By using the same `AppHost` configuration across all phases, you ensure consistency and reduce configuration drift between environments.
This guide provides a high-level overview of the lifecycle phases of an Aspire application, from development through local deployment to production release. By using the same AppHost configuration across all phases, you ensure consistency and reduce configuration drift between environments.
The example in this guide demonstrates how Aspire orchestrates containerized applications with persistent storage and CI/CD automation using the [Docker Integration](/integrations/compute/docker/) and GitHub.

## App lifecycle
Expand All @@ -25,6 +25,8 @@ The Aspire application lifecycle consists of three main phases:

### Example

The following example uses a C# AppHost, but the same lifecycle applies to TypeScript AppHosts.

Consider [this example](https://github.com/BethMassi/VolumeMount/). You have a distributed application that consists of a Blazor web project that relies on a SQL Server database with a persistent data volume as well as a persistent writable file volume to capture user file uploads.
You want to distribute your Blazor app as a Docker container image via the GitHub Container Registry. You need the [Aspire.Hosting.Docker](/integrations/compute/docker/) and [Aspire.Hosting.SqlServer](/integrations/databases/sql-server/sql-server-get-started/) integrations.

Expand Down Expand Up @@ -104,7 +106,7 @@ When you run `aspire run`:
<Steps>

1. **Aspire dashboard launches** - A web-based dashboard starts, and its URL (often an HTTPS login URL like `https://localhost:<port>/login?...`) is printed to the console.
2. **Resources start** - All resources defined in your `AppHost.cs` are orchestrated.
2. **Resources start** - All resources defined in your AppHost are orchestrated.
3. **Live debugging** - You can attach debuggers, set breakpoints, and modify code with hot reload.
4. **Telemetry & logs** - Dashboard provides real-time logs, metrics, and distributed traces.

Expand Down Expand Up @@ -132,7 +134,7 @@ Dashboard: https://localhost:17244/login?t=9db79f2885dae24ee06c6ef10290b8b2

In the example above, when resources start with the run command:
- SQL Server container starts in Docker with persistent volume
- Blazor Web project runs as a .NET process (**not containerized**)
- Web project runs as a local process (**not containerized**)
- Database is automatically created and migrated (containerized)

## Phase 2: Local Deployment
Expand Down Expand Up @@ -193,7 +195,7 @@ In [this example](https://github.com/BethMassi/VolumeMount/blob/main/.github/wor

<Steps>

1. **Setup Environment** - Install .NET
1. **Setup Environment** - Install required SDKs
2. **Install Aspire CLI** - Install the Aspire CLI
3. **Build and Push Container Images** - Build app and push image to GitHub Container Registry with `aspire do push`
4. **Publish Docker Compose Artifacts** - Generate deployment files with `aspire publish`
Expand All @@ -204,6 +206,7 @@ In [this example](https://github.com/BethMassi/VolumeMount/blob/main/.github/wor
#### Step 1: Setup Environment

```yaml
# Required for C# AppHost projects
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
Expand Down Expand Up @@ -241,7 +244,7 @@ Replace `your-org/your-repo` with your actual GitHub organization and repository
</Aside>

The `aspire do push` command does the following:
- Analyzes your `AppHost.cs` configuration
- Analyzes your AppHost configuration
- Restores dependencies and builds the project
- Builds Docker container images for project resources
- Tags images with configured registry endpoint and repository
Expand All @@ -264,8 +267,12 @@ The `aspire do push` command does the following:
--output-path ./aspire-output
```

<Aside type="note">
The `--project` flag is needed when your AppHost isn't in the current directory.
</Aside>

The `aspire publish` command does the following:
- Analyzes your `AppHost.cs` configuration
- Analyzes your AppHost configuration
- Generates `docker-compose.yaml` file with all service definitions
- Creates `.env` template file for environment variables
- Packages configuration needed for deployment
Expand Down Expand Up @@ -329,11 +336,15 @@ After the workflow completes, you have everything needed for production deployme

| Phase | Command | Purpose | Environment | App | Database |
|-------|---------|---------|-------------|------------|------------|
| **Development** | `aspire run` | Inner-loop coding & debugging | Local machine | App process (i.e. .NET) | Container |
| **Development** | `aspire run` | Inner-loop coding & debugging | Local machine | Local process | Container |
| **Local Deploy** | `aspire deploy` | Test containerized app locally | Registered compute environment (i.e. Docker Desktop) | Container | Container |
| **Release** | CI/CD workflow (i.e. GitHub Actions) | Publish to staging/ production | Cloud/Server | Container | Container |

The `AppHost.cs` file is the **single source of truth** for your application architecture. Each phase above uses the exact same `AppHost` configuration. This eliminates configuration drift between development and deployment. It defines things your distributed application needs like:
<Aside type="tip">
This example uses a C# AppHost, but the same lifecycle workflow applies to TypeScript AppHosts. Replace `.csproj` references with your `apphost.ts` path as needed.
</Aside>

The AppHost is the **single source of truth** for your application architecture. Each phase above uses the exact same AppHost configuration. This eliminates configuration drift between development and deployment. It defines things your distributed application needs like:
- **Services & Dependencies** - Projects, containers, and their relationships
- **Configuration** - Connection strings, secrets, and parameters
- **Volumes** - Persistent storage for databases and files
Expand Down
Loading