Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
bdabdaf
main: New website design
slusarz Jul 16, 2026
477e7b5
pigeonhole: New website design
slusarz Jul 16, 2026
76eb1a7
Update check-spelling metadata
slusarz Jul 17, 2026
46c3743
Remove dark mode
slusarz Jul 30, 2026
c384230
main: Make Dovecot Pro banner on homepage full-width
slusarz Aug 12, 2026
3e8b6ab
main: Remove About page, move features to homepage, drop nav link
slusarz Aug 12, 2026
5f85856
main: Format Open Source section as inline badge with centered layout
slusarz Aug 12, 2026
454bec9
main: Various minor fixes caught by automated testing
slusarz Aug 12, 2026
4e9c3d8
npm: Hoist shared dependencies to project root
slusarz Aug 12, 2026
5ab57c7
main: Add sitemap creation
slusarz Aug 12, 2026
e422d3d
pigeonhole: Format Open Source section as inline badge with centered …
slusarz Aug 12, 2026
25a4cdf
pigeonhole: Add sitemap creation
slusarz Aug 13, 2026
158d6e7
pigeonhole: Various minor fixes caught by website review
slusarz Aug 13, 2026
a42583e
package.json: Add root scripts for multi-site actions
slusarz Aug 13, 2026
8077676
main: Point ImapTest link to the ImapTest webpage, not github
slusarz Aug 13, 2026
73b6f5d
main: Categorize available packages by type on download page
slusarz Aug 13, 2026
2d36d9b
main: Move PGP key data to lib/data/
slusarz Aug 13, 2026
0dd2a0b
main: Editorial and content changes
slusarz Aug 13, 2026
43d17c5
shared-ui: Improve size of copy widget
slusarz Aug 13, 2026
48bfee3
pigeonhole: Move data out of display logic
slusarz Aug 13, 2026
320c8d6
pigeonhole: Remove Under Development & Planned roadmap section
slusarz Aug 13, 2026
31becbf
pigeonhole: Editorial and content changes
slusarz Aug 13, 2026
3d21e1b
main: Add config upgrader link
slusarz Aug 17, 2026
c6955e9
main: Move 2.3 downloads to a separate EOL page
slusarz Aug 17, 2026
71b5674
main: Add OX/Dovecot Pro links to footer
slusarz Aug 21, 2026
c2cbc9c
main: Fix spacing issues on download page
slusarz Aug 21, 2026
492be3c
pigeonhole: remove unused 'spec' field
slusarz Aug 21, 2026
f9bf561
main: Remove dead code in scripts/parse-markdown.js
slusarz Aug 21, 2026
3a48f30
main: Simplify README.md
slusarz Aug 21, 2026
75aad19
pigeonhole: Simplify README.md
slusarz Aug 21, 2026
9d73b2f
package.json: Update dependencies
slusarz Aug 21, 2026
bc52f3e
main: Improve Dovecot logo slide on front page
slusarz Aug 22, 2026
282c4b4
main: Too much whitespace on top of homepage
slusarz Aug 22, 2026
787d71a
pigeonhole: too much whitespace on top of homepage
slusarz Aug 22, 2026
3572902
global: use fonts.bunny.net
slusarz Aug 24, 2026
c9d332d
main: Store pro logo locally
slusarz Aug 24, 2026
5f38d7b
shared-ui: Abstract out shared display language from the 2 sites
slusarz Aug 24, 2026
9f1b0a7
Update spelling
cmouse Aug 25, 2026
408762e
repo: Add redirection page
cmouse Aug 25, 2026
58173c9
deploy: split deployment into per-site GitHub environments
cmouse Aug 25, 2026
d2f43c5
Update spelling
cmouse Aug 25, 2026
b667ef8
deploy: fold dovecot-dev back into the dovecot environment
cmouse Aug 25, 2026
8df1dc7
deploy: deploy every environment from both branches
cmouse Aug 25, 2026
2ed48cc
deploy: restore --delete for the repo environment
cmouse Aug 25, 2026
b016705
deploy: take the ssh user from the environment too
cmouse Aug 25, 2026
65c6b25
main: Move features to a separate page
slusarz Aug 25, 2026
fb1816d
shared-ui: allow Picture type for logoSrc prop
slusarz Aug 25, 2026
503aed2
main: Improve Dovecot Pro card formatting and content
slusarz Aug 25, 2026
472c0f5
pigeonhole: Remove unused graphics
slusarz Aug 25, 2026
26fa187
pigeonhole: improved logo only graphic
slusarz Aug 25, 2026
46d2535
pigeonhole: Never use text-xs text size
slusarz Aug 25, 2026
9ae7b5b
main: Remove unused graphic
slusarz Aug 25, 2026
d4edfdc
pigeonhole: Never use text-xs text size
slusarz Aug 25, 2026
7f93e56
main: Simplify Download page heading
slusarz Aug 25, 2026
90c130e
main: Improve formatting for open source info on home page
slusarz Aug 25, 2026
ceb4546
pigeonhole: Improve formatting for open source info on home page
slusarz Aug 25, 2026
202fb3c
shared-ui: Improve location of underline for active page in top navbar
slusarz Aug 25, 2026
ff6a675
pigeonhole: Display full pigeonhole logo on about page
slusarz Aug 25, 2026
cb27939
main: Formatting fixes for main page hero section
slusarz Aug 25, 2026
8ca6ae5
pigeonhole: Formatting fixes for main page hero section
slusarz Aug 25, 2026
1aece5b
main: Correct info for bug reporting and pull requests
slusarz Aug 25, 2026
bfe8f57
shared-ui: Fix website source link
slusarz Aug 25, 2026
01848c1
release: Update distributions for 2.4.5
slusarz Sep 2, 2026
477244e
main: Add dovecot released news
cmouse Aug 28, 2026
4bb8b54
pigeonhole: Update release to 2.4.5
slusarz Sep 2, 2026
0973b7d
heroes: extract shared HeroCarousel component for both sites
slusarz Sep 15, 2026
ea23025
css: drop @tailwindcss/forms
slusarz Sep 15, 2026
dcce297
codeblock: replace copyId state map with a single boolean
slusarz Sep 15, 2026
b18db81
header: drop unused logoHref prop
slusarz Sep 15, 2026
8cbdc0d
css: drop unused font-body-sm theme vars
slusarz Sep 15, 2026
3248802
header: remove inert animate-fade-in class
slusarz Sep 15, 2026
b7bca5c
package.json: Update dependencies
slusarz Sep 16, 2026
6fc2640
main: Update yeswehack URL on security page
slusarz Sep 16, 2026
2534c53
pigeonhole: Add a Security page
slusarz Sep 16, 2026
a4065c2
security pages: link to Dovecot Pro Security Advisories
slusarz Sep 16, 2026
e9d373a
Update check-spelling metadata
slusarz Sep 16, 2026
1d46564
main: Parse CVE information from OX CSAF website
slusarz Sep 16, 2026
e407203
Update check-spelling metadata
slusarz Sep 16, 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
5 changes: 4 additions & 1 deletion .github/actions/spelling/allow.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ fsp
gpg
gpgcheck
gpgkey
grotesk
gssapi
heroicons
hmr
Expand Down Expand Up @@ -67,6 +68,7 @@ NTLM
oftc
oldstable
OOXML
osx
OTP
oxdc
passdb
Expand All @@ -77,6 +79,7 @@ precompressed
problue
redhat
releasever
REMOTEPATH
rhel
RPA
RPMS
Expand Down Expand Up @@ -110,5 +113,5 @@ workarounds
wwwdev
wwwkeys
xchange
xmpp
XMPP
xmpp
3 changes: 2 additions & 1 deletion .github/actions/spelling/excludes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
(?:^|/)vendor/
(?:^|/|\b)requirements(?:-dev|-doc|-test|)\.txt$
-lock\.yaml$
/static/gpgkeys/[^/]+$
\.a$
\.ai$
\.all-contributorsrc$
Expand Down Expand Up @@ -80,6 +81,6 @@
\.xpm$
\.xz$
\.zip$
ignore$
^\.github/
^\.vitepress/
ignore$
20 changes: 20 additions & 0 deletions .github/actions/spelling/expect.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
Admins
Bento
coreutils
csaf
DFBB
Dists
gpgkeys
idx
ircs
listinfo
noopener
noreferrer
onsubmit
openemailsurvey
prerender
proactively
sitemap
SLAs
splitscreen
yeswehack
31 changes: 31 additions & 0 deletions .github/actions/spelling/patterns.txt
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,34 @@ public key [0-9A-F]{8,}\b
# Ignore links to mailing list
https://dovecot.org/mailman3/\S*
https://dovecot.org/pipermail/\S*

# Automatically suggested patterns

# hit-count: 41 file-count: 1
# in check-spelling@v0.0.22+, printf markers aren't automatically consumed
# printf markers
(?<!\\)\\[nrt](?=[a-z]{2,})

# hit-count: 41 file-count: 1
# alternate printf markers if you run into latex and friends
(?<!\\)\\[nrt](?=[a-z]{2,})(?=.*['"`])

# hit-count: 4 file-count: 4
# githubusercontent
/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]*

# hit-count: 4 file-count: 4
# version suffix <word>v#
(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_]))

# hit-count: 2 file-count: 2
# Repeated letters
\b([a-z])\g{-1}{2,}\b

# hit-count: 1 file-count: 1
# css url wrappings
\burl\([^)]+\)

# hit-count: 1 file-count: 1
# regex choice
\((?:\?:|)[^)|]+\|[^)|][^)]*\)
2 changes: 1 addition & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
version: 2
updates:
# Checks for dependency updates for documentation (VitePress)
# Checks for dependency updates for documentation
- package-ecosystem: "npm"
directory: "/"
schedule:
Expand Down
11 changes: 4 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,9 @@ jobs:
cache: npm
- name: Install Dependencies
run: npm ci --no-fund --no-audit
- name: Build main with VitePress
- name: Build main with Sveltekit
run: |
npm run -w main docs:build
- name: Build repo with VitePress
npm run -w main build
- name: Build pigeonhole with Sveltekit
run: |
npm run -w repo docs:build
- name: Build pigeonhole with VitePress
run: |
npm run -w pigeonhole docs:build
npm run -w pigeonhole build
85 changes: 58 additions & 27 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ on:
- develop

jobs:
releasenew:
dovecot:
runs-on: ubuntu-latest
environment: dovecot
steps:
- name: Checkout
uses: actions/checkout@v6
Expand All @@ -19,48 +20,78 @@ jobs:
cache: npm
- name: Install Dependencies
run: npm ci --no-fund --no-audit
- name: Build dovecot.org with VitePress
- name: Build dovecot.org with Sveltekit
run: |
npm run -w main docs:build
- name: Build repo.dovecot.org with VitePress
run: |
npm run -w repo docs:build
- name: Build pigeonhole with VitePress
run: |
npm run -w pigeonhole docs:build
- name: Deploy dovecot.org
npm run -w main build
- name: Deploy
uses: dovecot/rsync-deployments@v2.0.3
with:
FLAGS: -azr --delete
HOST: dovecot.org
USER: website
LOCALPATH: /main/.vitepress/dist/.
REMOTEPATH: public_html/main/${{ github.ref_name }}
HOST: ${{ env.HOST }}
USER: ${{ env.DEPLOY_USER }}
LOCALPATH: /main/build/.
REMOTEPATH: ${{ env.REMOTEPATH }}/${{ github.ref_name }}
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
if: env.DEPLOY_KEY
if: env.DEPLOY_KEY && env.HOST && env.DEPLOY_USER && env.REMOTEPATH
env:
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
- name: Deploy repo.dovecot.org
HOST: ${{ vars.HOST }}
# Not named USER: that would shadow the container's own USER.
DEPLOY_USER: ${{ vars.USER }}
REMOTEPATH: ${{ vars.REMOTEPATH }}

pigeonhole:
runs-on: ubuntu-latest
environment: pigeonhole
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: 24
cache: npm
- name: Install Dependencies
run: npm ci --no-fund --no-audit
- name: Build pigeonhole with Sveltekit
run: |
npm run -w pigeonhole build
- name: Deploy
uses: dovecot/rsync-deployments@v2.0.3
with:
FLAGS: -azr --delete
HOST: repo.dovecot.org
USER: website
LOCALPATH: /repo/.vitepress/dist/.
REMOTEPATH: public_html/${{ github.ref_name }}
HOST: ${{ env.HOST }}
USER: ${{ env.DEPLOY_USER }}
LOCALPATH: /pigeonhole/build/.
REMOTEPATH: ${{ env.REMOTEPATH }}/${{ github.ref_name }}
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
if: env.DEPLOY_KEY
if: env.DEPLOY_KEY && env.HOST && env.DEPLOY_USER && env.REMOTEPATH
env:
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
- name: Deploy pigeonhole.dovecot.org
HOST: ${{ vars.HOST }}
# Not named USER: that would shadow the container's own USER.
DEPLOY_USER: ${{ vars.USER }}
REMOTEPATH: ${{ vars.REMOTEPATH }}

repo:
runs-on: ubuntu-latest
environment: repo
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Deploy
uses: dovecot/rsync-deployments@v2.0.3
with:
FLAGS: -azr --delete
HOST: pigeonhole.dovecot.org
USER: website
LOCALPATH: /pigeonhole/.vitepress/dist/.
REMOTEPATH: public_html/pigeonhole/${{ github.ref_name }}
HOST: ${{ env.HOST }}
USER: ${{ env.DEPLOY_USER }}
LOCALPATH: /repo/.
REMOTEPATH: ${{ env.REMOTEPATH }}/${{ github.ref_name }}
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
if: env.DEPLOY_KEY
if: env.DEPLOY_KEY && env.HOST && env.DEPLOY_USER && env.REMOTEPATH
env:
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
HOST: ${{ vars.HOST }}
# Not named USER: that would shadow the container's own USER.
DEPLOY_USER: ${{ vars.USER }}
REMOTEPATH: ${{ vars.REMOTEPATH }}
61 changes: 47 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,58 @@
Dovecot websites
================
# Dovecot Websites

This repository is for maintaining Dovecot's public websites.

Map of websites

- main => dovecot.org website
- repo => repo.dovecot.org
- pigeonhole => pigeonhole.dovecot.org
- main => dovecot.org website
- pigeonhole => pigeonhole.dovecot.org
- repo => repository index redirect page (host/path set in the `repo` environment)

Building a website
------------------
## Building a Website

You can use npm run -w <website> run docs:build
`npm run -w <website> build`

Adding new one
--------------
## Adding New Website

Use `npm init -w ./name` to add new website. This should get added into package.json too
Use `npm init -w ./name` to add new website. This should get added into package.json too.

## Testing

Push changes first to `develop` branch to make sure they work, this will deploy as <https://wwwdev.dovecot.org>.

Testing
-------
Push changes first to `develop` branch to make sure they work, this will deploy as https://wwwdev.dovecot.org.
Once you've checked your changes, create pull request to main branch.

Local testing can be accomplished via `npm run -w <website> dev`.

## Deployment

Deployment is driven by GitHub Actions environments, one per site:

| Environment | Source |
|--------------|------------------------|
| `dovecot` | `main/build` |
| `pigeonhole` | `pigeonhole/build` |
| `repo` | `repo/` (copied as-is) |

Every environment deploys from both `main` and `develop`.

Each environment supplies `HOST`, `USER` and `REMOTEPATH` as environment
variables and `DEPLOY_KEY` as an environment secret. `REMOTEPATH` is the base directory; the
branch name is appended to it, so each site keeps its `main` and `develop`
copies side by side under `/home/website/public_html/<component>/<branch>`;
<https://wwwdev.dovecot.org> is served from the `dovecot` environment's
`develop` one.

A missing `DEPLOY_KEY`, `HOST`, `USER` or `REMOTEPATH` makes that environment's
deploy step skip silently.

### Subdirectory Deployments (`BASE_PATH`)

If hosting a website under a custom subdirectory (for instance `/test/main`),
supply the `BASE_PATH` environment variable when building:

```bash
BASE_PATH=/test/main npm run -w main build
```

This updates SvelteKit's `paths.base` configuration so all routes and static assets resolve correctly.
20 changes: 20 additions & 0 deletions main/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
node_modules

# Output
.output
/.svelte-kit
/build

# Env
.env
.env.*
!.env.example
!.env.test

# Vite
vite.config.js.timestamp-*
vite.config.ts.timestamp-*

# Auto-generated data files
src/lib/data/news.json
src/lib/data/security.json
1 change: 1 addition & 0 deletions main/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
engine-strict=true
47 changes: 0 additions & 47 deletions main/.vitepress/components/CriticalVuln.vue

This file was deleted.

Loading