Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
aa6ef5a
Add Lume docs site migration
ejsmith Jul 1, 2026
60b1370
Merge branch 'main' into feature/docs-site-migration
ejsmith Jul 1, 2026
0b78436
Add docs GitHub Pages workflow
ejsmith Jul 1, 2026
35e6d51
Rename website deployment workflow
ejsmith Jul 1, 2026
b5f053a
Deploy website after tagged builds
ejsmith Jul 1, 2026
4b22963
Update GitHub Actions versions
ejsmith Jul 1, 2026
d0e259b
Merge branch 'main' into feature/docs-site-migration
ejsmith Jul 2, 2026
bae13c4
Allow website preview branch deploys
ejsmith Jul 2, 2026
7dcb1e5
Always deploy website preview branch
ejsmith Jul 2, 2026
7bc6959
Use separate Pages preview environment
ejsmith Jul 2, 2026
087ea2b
Configure Pages for preview deploys
ejsmith Jul 2, 2026
318abf8
Revert tour screenshots to legacy UI
ejsmith Jul 2, 2026
e64d2f3
Increase website deploy timeout
ejsmith Jul 2, 2026
982dc8c
Retry website deploy on Pages timeout
ejsmith Jul 2, 2026
fa058d1
Use long-polling Pages deploy
ejsmith Jul 2, 2026
97fb033
Use standard Pages deploy action
ejsmith Jul 2, 2026
cf3c619
Add news archive pagination
ejsmith Jul 2, 2026
7e5402d
Enable docs site syntax highlighting
ejsmith Jul 2, 2026
51714da
Remove broken contact links from site
ejsmith Jul 4, 2026
ccd091d
Add static contact form
ejsmith Jul 4, 2026
643c172
Improve docs site Lighthouse baseline
ejsmith Jul 4, 2026
b541491
Replace homepage slider with native JavaScript
ejsmith Jul 4, 2026
b56fc3b
Replace tour lightbox with native dialog
ejsmith Jul 4, 2026
4c1803b
Merge docs site migration updates into preview
ejsmith Jul 4, 2026
87150f0
Fix homepage carousel slide visibility
ejsmith Jul 4, 2026
b181106
Restore homepage carousel fade behavior
ejsmith Jul 4, 2026
0b6690a
Fix homepage CTA link colors
ejsmith Jul 4, 2026
7f644b0
Match homepage account link color
ejsmith Jul 4, 2026
64051aa
Add responsive homepage image variants
ejsmith Jul 4, 2026
085d25a
Self-host website fonts
ejsmith Jul 4, 2026
db19b4e
Restore website content link color
ejsmith Jul 4, 2026
7659d8a
Match documentation title color
ejsmith Jul 4, 2026
cc75195
Update social link to X
ejsmith Jul 4, 2026
6fda91b
Limit website deploys to tags
ejsmith Jul 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/build-arm64.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-24.04-arm
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Setup .NET Core
Expand Down
26 changes: 18 additions & 8 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
steps:
- name: Resolve preview pull request
id: pr
uses: actions/github-script@v8
uses: actions/github-script@v9
with:
script: |
if (context.eventName === "repository_dispatch") {
Expand Down Expand Up @@ -89,7 +89,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 0
ref: ${{ (github.event_name == 'repository_dispatch' && github.event.client_payload.head_sha) || github.event.pull_request.head.sha || github.sha }}
Expand Down Expand Up @@ -135,7 +135,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: ${{ (github.event_name == 'repository_dispatch' && github.event.client_payload.head_sha) || github.event.pull_request.head.sha || github.sha }}

Expand All @@ -144,7 +144,7 @@ jobs:
with:
dotnet-version: 10.0.301

- uses: actions/cache@v5
- uses: actions/cache@v6
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('**/packages.lock.json') }}
Expand Down Expand Up @@ -187,7 +187,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: ${{ (github.event_name == 'repository_dispatch' && github.event.client_payload.head_sha) || github.event.pull_request.head.sha || github.sha }}

Expand All @@ -197,7 +197,7 @@ jobs:
node-version: 24

- name: Cache node_modules
uses: actions/cache@v5
uses: actions/cache@v6
id: cache-node-modules
with:
path: src/Exceptionless.Web/ClientApp/node_modules
Expand Down Expand Up @@ -233,7 +233,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: ${{ (github.event_name == 'repository_dispatch' && github.event.client_payload.head_sha) || github.event.pull_request.head.sha || github.sha }}

Expand Down Expand Up @@ -382,7 +382,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: ${{ (github.event_name == 'repository_dispatch' && github.event.client_payload.head_sha) || github.event.pull_request.head.sha || github.sha }}

Expand Down Expand Up @@ -464,6 +464,16 @@ jobs:
echo "- **Deployment**: Skipped" >> $GITHUB_STEP_SUMMARY
fi

deploy-website:
name: Deploy website
if: ${{ needs.version.outputs.is_prod_deploy == 'true' }}
needs: [version, deploy]
permissions:
contents: read
pages: write
id-token: write
uses: ./.github/workflows/website.yml

preview-comment-result:
needs: [preview-context, version, test-api, test-client, docker-build, docker-publish, deploy]
if: ${{ always() && needs.preview-context.outputs.pr-number != '' }}
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/copilot-setup-steps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 0

Expand All @@ -38,7 +38,7 @@ jobs:
echo "$HOME/.dotnet/tools" >> "$GITHUB_PATH"
aspire --version

- uses: actions/cache@v5
- uses: actions/cache@v6
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('**/packages.lock.json') }}
Expand All @@ -54,7 +54,7 @@ jobs:
node-version: 24

- name: Cache node_modules
uses: actions/cache@v5
uses: actions/cache@v6
id: cache-node-modules
with:
path: src/Exceptionless.Web/ClientApp/node_modules
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dev-environment-reset.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7

- name: Azure Login
run: az login --service-principal --username ${{ secrets.AZ_USERNAME }} --password ${{ secrets.AZ_PASSWORD }} --tenant ${{ secrets.AZ_TENANT }} --output none
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dev-environment-start.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7

- name: Azure Login
run: az login --service-principal --username ${{ secrets.AZ_USERNAME }} --password ${{ secrets.AZ_PASSWORD }} --tenant ${{ secrets.AZ_TENANT }} --output none
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dev-environment-stop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7

- name: Check Schedule Window
id: schedule_window
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/elasticsearch-docker-8.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
if: startsWith(github.ref, 'refs/tags/v') != true

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
- name: Setup .NET Core
uses: actions/setup-dotnet@v5
with:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/preview-command.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
steps:
- name: Prepare Preview
id: preview
uses: actions/github-script@v8
uses: actions/github-script@v9
with:
script: |
const owner = context.repo.owner;
Expand Down Expand Up @@ -136,7 +136,7 @@ jobs:

- name: Dispatch Preview
if: ${{ steps.preview.outputs.pr-number != '' }}
uses: actions/github-script@v8
uses: actions/github-script@v9
env:
PR_NUMBER: ${{ steps.preview.outputs.pr-number }}
HEAD_REF: ${{ steps.preview.outputs.head-ref }}
Expand Down
75 changes: 75 additions & 0 deletions .github/workflows/website.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Website

on:
workflow_dispatch:
workflow_call:
push:
tags: ["v*"]
pull_request:
paths:
- "docs/**"
- ".github/workflows/website.yml"

permissions:
contents: read

jobs:
build:
name: Build website
runs-on: ubuntu-latest
timeout-minutes: 10
defaults:
run:
working-directory: docs

steps:
- name: Checkout
uses: actions/checkout@v7

- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: lts
cache: true

- name: Check
run: deno task check

- name: Verify
run: deno task verify

- name: Check unused assets
run: deno run --allow-read scripts/find-unused.ts

- name: Upload Pages artifact
if: github.event_name != 'pull_request'
uses: actions/upload-pages-artifact@v5
with:
path: docs/_site

deploy:
name: Deploy website
if: github.event_name != 'pull_request'
needs: build
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: github-pages
cancel-in-progress: false
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}

steps:
- name: Setup Pages
uses: actions/configure-pages@v6
with:
enablement: true

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v5
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ k8s/ex-*-snapshots.yaml
tmpclaude*
dogfood-output/
debug-storybook.log
docs/_cache/

.devcontainer/devcontainer-lock.json

Expand Down
4 changes: 4 additions & 0 deletions docs/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
_site/
.cache/
_data/generated.ts
snapshots/
11 changes: 11 additions & 0 deletions docs/404.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
title: "Not Found"
layout: "layouts/page.vto"
permalink: "404.html"
---

Sorry, but the page you were trying to view does not exist.
It looks like this was the result of either:

- a mistyped address
- an out-of-date link
97 changes: 97 additions & 0 deletions docs/_config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import lume from "lume/mod.ts"
import codeHighlight from "lume/plugins/code_highlight.ts"
import picture from "lume/plugins/picture.ts"
import transformImages from "lume/plugins/transform_images.ts"
import { docsNavHtml, siteDataJson } from "./scripts/site-collections.ts"

const site = lume({
src: ".",
dest: "_site",
location: new URL("https://exceptionless.com/"),
})

site.ignore(
".cache",
".gitignore",
".npmrc",
"_site",
"deno.json",
"deno.lock",
"news/index.md",
"news/2020/2020-11-11-self-hosted-error-monitoring-on-azure.md",
"package-lock.json",
"package.json",
"public",
"README.md",
"scripts",
"serialization-architecture.md",
"site-migration-plan.md",
"snapshots",
)

site.use(codeHighlight())
site.use(picture())
site.use(transformImages())
site.add("public/assets/img/dashboard-2-1024x594.png", "assets/img/dashboard-2-1024x594.png")
site.add("public/assets/img/toexceptionless.png", "assets/img/toexceptionless.png")
site.add("public/assets/img/logs-2.jpg", "assets/img/logs-2.jpg")
site.add("public/assets/img/slider-github.jpg", "assets/img/slider-github.jpg")

site.hooks.markdownIt((markdownIt: any) => {
const defaultHeadingOpen = markdownIt.renderer.rules.heading_open ??
((tokens: any[], index: number, options: unknown, env: Record<string, unknown>, self: any) => {
return self.renderToken(tokens, index, options)
})

markdownIt.renderer.rules.heading_open = (
tokens: any[],
index: number,
options: unknown,
env: Record<string, unknown>,
self: any,
) => {
const token = tokens[index]
if (!token.attrGet("id")) {
const content = tokens[index + 1]?.content ?? ""
token.attrSet("id", uniqueHeadingSlug(content, env))
}

return defaultHeadingOpen(tokens, index, options, env, self)
}
})

site.data("docsNavHtml", docsNavHtml)
site.data("siteDataJson", siteDataJson)
site.data("copyrightYear", new Date().getFullYear())

export default site

function uniqueHeadingSlug(value: string, env: Record<string, unknown>): string {
const counts = getHeadingSlugCounts(env)
const baseSlug = slugifyHeading(value) || "section"
const count = counts.get(baseSlug) ?? 0
counts.set(baseSlug, count + 1)
return count ? `${baseSlug}-${count}` : baseSlug
}

function getHeadingSlugCounts(env: Record<string, unknown>): Map<string, number> {
const key = "__headingSlugCounts"
const existing = env[key]
if (existing instanceof Map) {
return existing as Map<string, number>
}

const counts = new Map<string, number>()
env[key] = counts
return counts
}

function slugifyHeading(value: string): string {
return value
.trim()
.toLowerCase()
.replace(/\s+/g, "-")
.replace(/\./g, "")
.replace(/[^a-z0-9_-]/g, "")
.replace(/^-+|-+$/g, "")
}
10 changes: 10 additions & 0 deletions docs/_data/site.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"url": "https://exceptionless.com",
"title": "Exceptionless",
"description": "Real-time exception reporting for ASP.NET, Web API, WebForms, WPF, Console, and MVC applications. Includes event organization, notifications, and more.",
"author": "Exceptionless Team",
"twitter": "@Exceptionless",
"signupUrl": "https://be.exceptionless.io/signup?domain=exceptionless.com&type=organic",
"appUrl": "https://be.exceptionless.io",
"githubUrl": "https://github.com/exceptionless/Exceptionless"
}
Loading