Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
19 changes: 10 additions & 9 deletions src/pages/docs.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ modDate: 2024-03-18
title: Hello, Octopus Deploy! 👋
subtitle: Best-of-breed Continuous Delivery
navTitle: Introduction
crumbTitle: Docs
description: Need help with Octopus Deploy? Check out our comprehensive documentation covering everything from getting started to advanced issues and features.``
navOrder: 0
---
Expand All @@ -19,14 +20,14 @@ Octopus Deploy is a sophisticated, best-of-breed continuous delivery (CD) platfo

Octopus has a modern, friendly user experience that makes it easy for your teams to self-service application releases, and democratizes how you deliver software. Octopus also has a comprehensive API - anything the UI can do, the API can do too.

Octopus takes over where your CI server ends, modelling the entire release orchestration process of software. This includes:
Octopus takes over where your CI server ends, modelling the entire release orchestration process of software. This includes:

- Release versioning
- Environment promotion (beyond simple dev/test/prod workflows)
- Deployment automation
- Progressive software delivery (rolling deployments, blue/green, canary)
- Configuration management
- Approvals & ITSM integration
- Approvals & ITSM integration
- Deployment freezes
- Coordinating deployments across projects and their dependencies

Expand All @@ -45,11 +46,11 @@ Built by experienced DevOps practitioners over a decade, and battle tested by th
- Consistency across processes, teams and environments
- Pragmatic use of version control and GitOps

### Why do I need Octopus, I have a CI/CD tool
## Why do I need Octopus, I have a CI/CD tool

On most teams, continuous integration (CI) or build automation is a solved problem. Great options like GitHub Actions, GitLab CI, Jenkins, TeamCity, BuildKite, and Azure DevOps exist and are widely used by teams today.

These systems are all designed in a similar way - they monitor source code repositories for changes, compile code, run unit tests, and give software developers fast feedback on their code changes.
These systems are all designed in a similar way - they monitor source code repositories for changes, compile code, run unit tests, and give software developers fast feedback on their code changes.

For most of these systems, the CD functionality often just means they provide some ability to call a deployment script that you provide - the deployment script is up to you. They might also provide some way to model simple dev/test/production promotion workflows by calling a different deployment script for each environment.

Expand All @@ -61,15 +62,15 @@ When a software team is starting out, this “put your deployment script here”

Decoupling the CI platform from the CD platform allows teams to bring their favorite CI tool - and most organizations have more than one - while we focus on giving you the most powerful best-of-breed CD capabilities. Octopus integrates with popular CI tools like GitHub Actions, Jenkins or TeamCity, letting them do what they do best - the CI part of the feedback loop. Octopus then takes over “artifact-forward”, and handles the release and deployment aspects of CD in advanced ways that no CI/CD tool can.

We promise that when using Octopus, compared to a generic CI/CD tool, youll spend 1/10th the amount of time building DIY shadow CD glue, and more time shipping new features and delivering valuable software to production.
We promise that when using Octopus, compared to a generic CI/CD tool, you'll spend 1/10th the amount of time building DIY shadow CD glue, and more time shipping new features and delivering valuable software to production.

### Getting Started
## Getting Started

Octopus is easy to get started with - you can go from zero to fully automating your deployments in minutes.
Octopus is easy to get started with - you can go from zero to fully automating your deployments in minutes.

For a tour of the key Octopus concepts, begin with our [Getting Started](/docs/getting-started) guide.

If you deliver software to Kubernetes, our [Kubernetes overview](/docs/deployments/kubernetes) is a good starting point.
If you deliver software to Kubernetes, our [Kubernetes overview](/docs/deployments/kubernetes) is a good starting point.

If you enjoy learning via video, the Octopus 101 recording below also serves as a great introduction to the key Octopus concepts in the context of modern deployments.

Expand All @@ -90,4 +91,4 @@ Happy deployments!

## Recent changes

<RecentlyUpdated count="5" />
<RecentlyUpdated count="5" />
32 changes: 27 additions & 5 deletions src/themes/octopus/components/Breadcrumbs.astro
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
---
import { Accelerator } from 'astro-accelerator-utils';
import type { Frontmatter } from 'astro-accelerator-utils/types/Frontmatter';
import type { Frontmatter as OriginalFrontmatter } from 'astro-accelerator-utils/types/Frontmatter';
import { SITE } from '@config';
import { Translations, Lang } from '@util/Languages';

// Extend Frontmatter with crumbTitle
type Frontmatter = OriginalFrontmatter & {
crumbTitle?: string;
};

const accelerator = new Accelerator(SITE);
const stats = new accelerator.statistics(
'octopus/components/Breadcrumbs.astro'
Expand All @@ -30,12 +35,29 @@ const navPages = accelerator.navigation.breadcrumbs(
breadcrumbs?.length ?? 0
);

const allPages = accelerator.posts.all();

// Apply crumbTitle from frontmatter if available
for (let i = 0; i < navPages.length; i++) {
navPages[i].title = navPages[i].section || navPages[i].title;
}
const matchingPage = allPages.find((p) => {
const pageUrl = accelerator.urlFormatter.addSlashToAddress(p.url ?? '/');
return pageUrl === navPages[i].url;
});

// The last breadcrumb should use the full name
//navPages[navPages.length -1].title = navPages[navPages.length -1].fullTitle;
if (matchingPage) {
const fm = matchingPage.frontmatter as Frontmatter;
if (fm.crumbTitle) {
// Use crumbTitle if it's set in frontmatter
navPages[i].title = fm.crumbTitle;
} else {
// Fall back to original behavior
navPages[i].title = navPages[i].section || navPages[i].title;
}
} else {
// No matching page found, use original behavior
navPages[i].title = navPages[i].section || navPages[i].title;
}
}

let metaIndex = navPages.length;

Expand Down