Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
4d91c38
Added gradient support
FlorianRappl Aug 1, 2026
a24d1fa
Added image support
FlorianRappl Aug 1, 2026
b136016
Added flexbox
FlorianRappl Aug 1, 2026
c6dc3ef
Added grid spec
FlorianRappl Aug 1, 2026
7272c7a
Stabilize img rendering
FlorianRappl Aug 2, 2026
392c6d8
Started with CSSOM View spec impl
FlorianRappl Aug 2, 2026
4ee90bc
Improved public API
FlorianRappl Aug 2, 2026
9a2c022
Added caret position
FlorianRappl Aug 2, 2026
c67ab96
Further enhancements for CSSOM view
FlorianRappl Aug 2, 2026
62ed273
Changelog updated
FlorianRappl Aug 2, 2026
dece006
Move the build orchestrator to the Fallout stable channel (10.4.0)
lahma Aug 8, 2026
35d6b81
Prepare next release
FlorianRappl Sep 5, 2026
0fb5fb5
Merge pull request #4 from lahma/fallout-10.4
FlorianRappl Sep 5, 2026
167887f
Merge branch 'devel' of https://github.com/AngleSharp/AngleSharp.Rend…
FlorianRappl Sep 5, 2026
197695c
Updated defaults
FlorianRappl Sep 5, 2026
bbe959b
Updated missing case
FlorianRappl Sep 5, 2026
1517012
Improved snapshot testing
FlorianRappl Sep 5, 2026
f206a7b
Regenerate visual snapshot baselines for all platforms
github-actions[bot] Sep 5, 2026
a081338
Improved rendering
FlorianRappl Sep 5, 2026
15a065c
Regenerate visual snapshot baselines for all platforms
github-actions[bot] Sep 5, 2026
f989f4c
Updated changelog
FlorianRappl Sep 5, 2026
aa9aa93
Added support for SVG
FlorianRappl Sep 7, 2026
4d7aeed
Improved gradient rendering
FlorianRappl Sep 7, 2026
b015735
Updated visuals
FlorianRappl Sep 7, 2026
417b1ec
Regenerate visual snapshot baselines for all platforms
github-actions[bot] Sep 7, 2026
518017e
Improved tolerance for snapshots
FlorianRappl Sep 7, 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
4 changes: 2 additions & 2 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
"version": 1,
"isRoot": true,
"tools": {
"fallout.cli": {
"version": "11.0.18",
"fallout.globaltool": {
"version": "10.4.0",
"commands": [
"fallout"
]
Expand Down
79 changes: 42 additions & 37 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ env:
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
DOCS_PATH: ${{ secrets.DOCS_PATH }}
DOCS_BRANCH: ${{ secrets.DOCS_BRANCH }}
# Snapshot baselines are per-platform and committed; a missing one is a gap, never a pass.
ANGLESHARP_SNAPSHOT_STRICT: 1
ANGLESHARP_VERSION: 1.8.0
ANGLESHARP_CSS_VERSION: 1.1.0

jobs:
can_document:
Expand Down Expand Up @@ -44,73 +48,74 @@ jobs:
cd $DOCS_PATH
npx pilet publish --fresh --url https://feed.piral.cloud/api/v1/pilet/anglesharp --api-key ${{ secrets.PIRAL_FEED_KEY }}

linux:
runs-on: ubuntu-22.04
# Every platform that has committed snapshot baselines has to run them. Skia rasterizes
# glyphs through a different scaler per platform, so a baseline is only ever exercised by
# the platform it was recorded on. The runner images are pinned on purpose: bumping one
# changes the rasterization and requires regenerating the baselines via `update-snapshots`.
test:
name: Test (${{ matrix.name }})
runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
include:
- name: linux
os: ubuntu-22.04
- name: windows
os: windows-2022
- name: macos
os: macos-14

steps:
- uses: actions/checkout@v5

- name: Install deterministic fonts for snapshots
run: |
sudo apt-get update
sudo apt-get install -y fonts-dejavu-core fontconfig
fc-cache -f
fc-match "DejaVu Serif"
fc-match "DejaVu Sans"
fc-match "DejaVu Sans Mono"
fc-list | grep -q "DejaVu Serif"
fc-list | grep -q "DejaVu Sans"
fc-list | grep -q "DejaVu Sans Mono"

- name: Setup dotnet
uses: actions/setup-dotnet@v5
with:
dotnet-version: |
dotnet-version: |
8.0.x
10.0.x

- name: Build
env:
ANGLESHARP_SNAPSHOT_STRICT: 1
run: ./build.sh -AngleSharpVersion 1.5.0
- name: Test
if: runner.os != 'Windows'
run: ./build.sh -Target RunUnitTests -AngleSharpVersion $ANGLESHARP_VERSION -AngleSharpCssVersion $ANGLESHARP_CSS_VERSION

- name: Test
if: runner.os == 'Windows'
run: .\build.ps1 -Target RunUnitTests -AngleSharpVersion $env:ANGLESHARP_VERSION -AngleSharpCssVersion $env:ANGLESHARP_CSS_VERSION

- name: Upload visual assets
if: always()
uses: actions/upload-artifact@v4
with:
name: linux-visual-assets
name: visual-assets-${{ matrix.name }}
path: |
src/AngleSharp.Renderer.Tests/verification-assets/**
src/AngleSharp.Renderer.Tests/failure-assets/**
if-no-files-found: ignore

windows:
runs-on: windows-latest
# Packaging and publishing stay on Windows, but only once every platform is green.
package:
needs: [test]
runs-on: windows-2022

steps:
- uses: actions/checkout@v5

- name: Setup dotnet
uses: actions/setup-dotnet@v5
with:
dotnet-version: |
dotnet-version: |
8.0.x
10.0.x

- name: Build
run: |
if ($env:GITHUB_REF -eq "refs/heads/main") {
.\build.ps1 -Target Publish -AngleSharpVersion 1.5.0
.\build.ps1 -Target Publish -AngleSharpVersion $env:ANGLESHARP_VERSION -AngleSharpCssVersion $env:ANGLESHARP_CSS_VERSION
} elseif ($env:GITHUB_REF -eq "refs/heads/devel") {
.\build.ps1 -Target PrePublish -AngleSharpVersion 1.5.0
.\build.ps1 -Target PrePublish -AngleSharpVersion $env:ANGLESHARP_VERSION -AngleSharpCssVersion $env:ANGLESHARP_CSS_VERSION
} else {
.\build.ps1 -AngleSharpVersion 1.5.0
.\build.ps1 -AngleSharpVersion $env:ANGLESHARP_VERSION -AngleSharpCssVersion $env:ANGLESHARP_CSS_VERSION
}

- name: Upload visual assets
if: always()
uses: actions/upload-artifact@v4
with:
name: windows-visual-assets
path: |
src/AngleSharp.Renderer.Tests/verification-assets/**
src/AngleSharp.Renderer.Tests/failure-assets/**
if-no-files-found: ignore
137 changes: 137 additions & 0 deletions .github/workflows/update-snapshots.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
name: Update Snapshots

# Visual baselines are platform specific, so a contributor can only ever regenerate the one
# for the machine they are sitting at. This workflow renders them on all supported platforms
# and pushes the complete set back, which is the only way to keep the matrix in sync.
on:
workflow_dispatch:
inputs:
commit:
description: "Commit the regenerated baselines back to the branch"
type: boolean
default: true

permissions:
contents: write

env:
ANGLESHARP_VERSION: 1.8.0
ANGLESHARP_CSS_VERSION: 1.1.0

jobs:
# Keep this matrix identical to the `test` matrix in ci.yml, images included - a baseline
# recorded on one image is not valid for another.
render:
name: Render (${{ matrix.name }})
runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
include:
- name: linux
os: ubuntu-22.04
- name: windows
os: windows-2022
- name: macos
os: macos-14

steps:
- uses: actions/checkout@v5
with:
ref: ${{ github.ref }}

- name: Setup dotnet
uses: actions/setup-dotnet@v5
with:
dotnet-version: |
8.0.x
10.0.x

- name: Render baselines
env:
ANGLESHARP_SNAPSHOT_UPDATE: 1
run: >
dotnet test src/AngleSharp.Renderer.Tests/AngleSharp.Renderer.Tests.csproj
--framework net8.0
--filter "Category=Visual"
-p:AngleSharpVersion=${{ env.ANGLESHARP_VERSION }}
-p:AngleSharpCssVersion=${{ env.ANGLESHARP_CSS_VERSION }}

- name: Upload baselines
uses: actions/upload-artifact@v4
with:
name: baselines-${{ matrix.name }}
path: src/AngleSharp.Renderer.Tests/verification-assets/*.${{ matrix.name }}.png
if-no-files-found: error

collect:
name: Collect and commit
needs: [render]
runs-on: ubuntu-22.04

steps:
- uses: actions/checkout@v5
with:
ref: ${{ github.ref }}

- name: Setup dotnet
uses: actions/setup-dotnet@v5
with:
dotnet-version: |
8.0.x
10.0.x

- name: Download baselines
uses: actions/download-artifact@v4
with:
pattern: baselines-*
merge-multiple: true
path: src/AngleSharp.Renderer.Tests/verification-assets

- name: Verify the platform matrix is complete
run: >
dotnet test src/AngleSharp.Renderer.Tests/AngleSharp.Renderer.Tests.csproj
--framework net8.0
--filter "Category=SnapshotCoverage"
-p:AngleSharpVersion=${{ env.ANGLESHARP_VERSION }}
-p:AngleSharpCssVersion=${{ env.ANGLESHARP_CSS_VERSION }}

- name: Summarize changes
run: |
{
echo "### Regenerated baselines"
echo
if git diff --quiet --exit-code -- src/AngleSharp.Renderer.Tests/verification-assets; then
echo "No baseline changed."
else
echo '```'
git diff --stat -- src/AngleSharp.Renderer.Tests/verification-assets
echo '```'
fi
echo
echo "Untracked:"
echo '```'
git ls-files --others --exclude-standard -- src/AngleSharp.Renderer.Tests/verification-assets
echo '```'
} >> "$GITHUB_STEP_SUMMARY"

- name: Commit baselines
if: inputs.commit
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add -- src/AngleSharp.Renderer.Tests/verification-assets
if git diff --cached --quiet --exit-code; then
echo "Baselines are already up to date."
exit 0
fi
git commit -m "Regenerate visual snapshot baselines for all platforms"
git push origin HEAD:${{ github.ref_name }}

- name: Upload combined baselines
if: ${{ !inputs.commit }}
uses: actions/upload-artifact@v4
with:
name: baselines-all
path: src/AngleSharp.Renderer.Tests/verification-assets/*.png
Loading
Loading