Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
c7bd4dc
Update to maplibre with color relief/hillshade
acalcutt Apr 28, 2026
488ed7f
add workflow
acalcutt Apr 28, 2026
fa12b89
enable long paths
acalcutt Apr 28, 2026
0e44426
Update release.yml
acalcutt Apr 28, 2026
b9a3c67
Update release.yml
acalcutt Apr 28, 2026
cc3e2ca
Update release.yml
acalcutt Apr 28, 2026
018cffa
Update release.yml
acalcutt Apr 28, 2026
7475529
Update CMakeLists.txt
acalcutt Apr 29, 2026
81400c6
Update Convert.h
acalcutt Apr 29, 2026
0413265
Update Convert.h
acalcutt Apr 29, 2026
06c5e63
Update Image.h
acalcutt Apr 29, 2026
1795c35
Update Image.h
acalcutt Apr 29, 2026
2c04060
build fixes
acalcutt Apr 29, 2026
67c27ce
Update FileSource.cpp
acalcutt Apr 29, 2026
48662cd
fixes
acalcutt Apr 29, 2026
81938a5
Update Resource.cpp
acalcutt Apr 29, 2026
66f9012
fixes
acalcutt Apr 29, 2026
f21e0bc
fixes
acalcutt Apr 30, 2026
c7a77c1
Update Vector.cpp
acalcutt Apr 30, 2026
6c3ddd8
Update release.yml
acalcutt Apr 30, 2026
54db433
output a .NET 8-loadable assembly
acalcutt Apr 30, 2026
472654d
fix: ENABLE_EXPORTS ON + /clr:netcore for Ninja to fix LNK1146 empty …
acalcutt Apr 30, 2026
51dbbe1
fix: add /AI .NET Core reference assemblies path for Ninja + /clr:net…
acalcutt Apr 30, 2026
1cc91fe
use Visual Studio 17 2022 instead of ninja
acalcutt Apr 30, 2026
23e1d82
fix: add VS_GLOBAL_TargetFramework net8.0 to fix NETSDK1013 with VS g…
acalcutt Apr 30, 2026
6ac94b7
Add MapLibreLogger to forward mbgl::Log to C#
acalcutt Apr 30, 2026
78ad165
Update CMakeLists.txt
acalcutt Apr 30, 2026
053dd20
Release v1.0.1
acalcutt Apr 30, 2026
d013420
Merge pull request #1 from acalcutt/release-v1.0.1
acalcutt Apr 30, 2026
dec4a36
Add GeoJSON source/layer API to Style + MaplibreNative.NET.WPF project
acalcutt May 1, 2026
66fc0f9
Release v1.0.2 (#2)
github-actions[bot] May 1, 2026
dab61b3
Update release.yml
acalcutt May 1, 2026
3dde6f3
Fix WPF csproj DLL path (remove VistumblerCS reference); fix release …
acalcutt May 1, 2026
8231305
Remove fork-specific name from WPF csproj comment
acalcutt May 1, 2026
ef38d9c
Support multiple .NET versions in build; update examples to net8.0
acalcutt May 1, 2026
405ec64
Release v1.0.3 (#3)
github-actions[bot] May 1, 2026
a9c687f
Fix matrix: add arch as top-level dimension so dotnet x arch cross-mu…
acalcutt May 1, 2026
f640e1b
README: rewrite build instructions for local PowerShell workflow
acalcutt May 1, 2026
5cb178e
README: restore upstream repo URL for clone command
acalcutt May 1, 2026
03137d1
README: remove vector-tile remote workaround (local issue only)
acalcutt May 1, 2026
c2ce04b
README: use --config core.longpaths=true --recurse-submodules in clon…
acalcutt May 1, 2026
0db6ba6
README: remove depth 1 note
acalcutt May 1, 2026
3c0fe35
Add Windows CI workflow for pull requests
acalcutt May 1, 2026
ec72343
CI: also run on push to main/master
acalcutt May 1, 2026
2d214b2
Add full Layer and Source type wrapping
acalcutt May 1, 2026
7ebeeb3
Add Light, StyleImage, TransitionOptions, and Style image management
acalcutt May 1, 2026
4d716d3
Add layer enums, full SymbolLayer layout/paint, missing Fill/Line/Cir…
acalcutt May 1, 2026
144edb2
Add remaining layer properties + ColorReliefLayer.ColorRamp
acalcutt May 1, 2026
8d8138d
Update windows-ci.yml
acalcutt May 1, 2026
7ae7881
Add Tier 1 parity: LocationIndicatorLayer, GeoJSONOptions, Source pre…
acalcutt May 1, 2026
cf870a4
Add Tier 2 parity: LineLayer.Gradient, HeatmapLayer.Color, ImageSourc…
acalcutt May 1, 2026
3d9094a
Add formatting: .editorconfig, format.ps1, normalize src/ and include/
acalcutt May 1, 2026
eb3a86c
Fix CI build errors; add DocFX self-documentation
acalcutt May 1, 2026
2651b62
Fix CI errors: NativePointerHolder C3137, JSDocument namespace, marsh…
acalcutt May 1, 2026
88c5626
Fix CI errors: Convertible JSDocument*, IconPadding, HillshadeLayer t…
acalcutt May 2, 2026
e940e07
Fix C3923: move generic lambdas out of managed member functions
acalcutt May 2, 2026
cc14b8a
Sync MaplibreNative.NET.WPF from VistumblerCS (location indicator + f…
acalcutt May 2, 2026
fa1f412
docs: document MaplibreNative.NET.WPF in README
acalcutt May 2, 2026
ea0584a
ci: enable git long paths before checkout in docs workflow
acalcutt May 2, 2026
badfd81
Update windows-ci.yml
acalcutt May 2, 2026
5beb96f
Release v2.0.0 (#4)
github-actions[bot] May 2, 2026
fd0bb68
Add Layer property read-back, Style.GetSourceAttributions, Renderer.Q…
acalcutt May 8, 2026
6e1c517
Release v2.1.0 (#6)
github-actions[bot] May 8, 2026
f201781
Clean up CHANGELOG by removing empty bug fix section
acalcutt May 8, 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
39 changes: 39 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
root = true

# All files
[*]
charset = utf-8
end_of_line = crlf
insert_final_newline = true
trim_trailing_whitespace = true

# C++/CLI source and headers
[*.{cpp,h,hpp}]
indent_style = space
indent_size = 4

# CMake
[CMakeLists.txt]
indent_style = space
indent_size = 2

[*.cmake]
indent_style = space
indent_size = 2

# PowerShell
[*.ps1]
indent_style = space
indent_size = 4

# JSON / YAML
[*.{json,yml,yaml}]
indent_style = space
indent_size = 2

# Dependencies are managed externally — do not reformat
[dependencies/**]
indent_style = unset
indent_size = unset
trim_trailing_whitespace = false
insert_final_newline = false
221 changes: 221 additions & 0 deletions .github/workflows/bump-version.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
name: Create bump version PR

on:
workflow_dispatch:
inputs:
version:
description: Version bump type.
required: true
type: choice
options:
- patch
- minor
- major
- prepatch
- preminor
- premajor
- prerelease
preid:
description: Prerelease identifier (e.g., 'alpha', 'beta', 'rc'). Only used with pre* version types.
required: false
type: string
default: 'rc'

permissions:
contents: write
pull-requests: write

jobs:
bump-version-pr:
name: Bump version PR
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Create bump script
run: |
cat > bump-version.py << 'PYEOF'
import re, sys, os, subprocess, json

version_type = sys.argv[1]
preid = sys.argv[2] if len(sys.argv) > 2 and sys.argv[2].strip() else 'rc'
cmake_path = 'CMakeLists.txt'
changelog_path = 'CHANGELOG.md'

# ── Read current version from CMakeLists.txt ─────────────────────────────
cmake = open(cmake_path).read()
m = re.search(r'set\(MAPLIBRE_NET_VERSION "([^"]+)"\)', cmake)
if not m:
raise RuntimeError(f"Could not find MAPLIBRE_NET_VERSION in {cmake_path}")
current = m.group(1).strip()
print(f"Current version: {current}")

# ── Parse version (supports X.Y.Z and X.Y.Z-pre.N) ──────────────────────
pre_match = re.match(r'^(\d+)\.(\d+)\.(\d+)-(.+?)\.(\d+)$', current)
rel_match = re.match(r'^(\d+)\.(\d+)\.(\d+)$', current)

if pre_match:
major, minor, patch = int(pre_match.group(1)), int(pre_match.group(2)), int(pre_match.group(3))
pre_tag, pre_num = pre_match.group(4), int(pre_match.group(5))
is_pre = True
elif rel_match:
major, minor, patch = int(rel_match.group(1)), int(rel_match.group(2)), int(rel_match.group(3))
pre_tag, pre_num = None, 0
is_pre = False
else:
raise RuntimeError(f"Unrecognised version format: {current}")

# ── Compute new version ──────────────────────────────────────────────────
if version_type == 'patch':
new_version = f"{major}.{minor}.{patch}" if is_pre else f"{major}.{minor}.{patch + 1}"
elif version_type == 'minor':
new_version = f"{major}.{minor}.0" if is_pre else f"{major}.{minor + 1}.0"
elif version_type == 'major':
new_version = f"{major}.0.0" if is_pre else f"{major + 1}.0.0"
elif version_type == 'prepatch':
new_version = f"{major}.{minor}.{patch + 1}-{preid}.1"
elif version_type == 'preminor':
new_version = f"{major}.{minor + 1}.0-{preid}.1"
elif version_type == 'premajor':
new_version = f"{major + 1}.0.0-{preid}.1"
elif version_type == 'prerelease':
if is_pre:
new_version = f"{major}.{minor}.{patch}-{pre_tag}.{pre_num + 1}"
else:
new_version = f"{major}.{minor}.{patch + 1}-{preid}.1"
else:
raise RuntimeError(f"Unknown version type: {version_type}")

print(f"New version: {new_version}")

# ── Update CMakeLists.txt ────────────────────────────────────────────────
cmake = re.sub(
r'(set\(MAPLIBRE_NET_VERSION ")[^"]+(")',
rf'\g<1>{new_version}\g<2>',
cmake)
open(cmake_path, 'w').write(cmake)
print(f"Updated {cmake_path}")

# ── Update CHANGELOG.md ──────────────────────────────────────────────────
if not os.path.exists(changelog_path):
print("No CHANGELOG.md found, creating one")
open(changelog_path, 'w').write('# Changelog\n\n')

changelog = open(changelog_path).read()

# Collect PRs since last tag that aren't already in the changelog
missing_entries = []
try:
latest_tag = subprocess.check_output(
['git', 'describe', '--tags', '--abbrev=0'], text=True).strip()
print(f"Latest tag: {latest_tag}")
commit_range = f"{latest_tag}..HEAD"
except subprocess.CalledProcessError:
print("No previous tags found, using all commits")
commit_range = 'HEAD'

try:
commits = subprocess.check_output(
['git', 'log', commit_range, '--oneline'], text=True)
except subprocess.CalledProcessError:
commits = ''

pr_numbers = re.findall(r'#(\d+)', commits)
missing_prs = [n for n in pr_numbers if f'#{n}' not in changelog]
print(f"Found {len(missing_prs)} new PRs to add to changelog")

if missing_prs:
try:
remote_url = subprocess.check_output(
['git', 'config', '--get', 'remote.origin.url'], text=True).strip()
repo_match = re.search(r'github\.com[:/](.+?)(?:\.git)?$', remote_url)
repo_full = repo_match.group(1) if repo_match else None
except Exception:
repo_full = None

for pr_num in missing_prs:
try:
pr_json = subprocess.check_output(
['gh', 'pr', 'view', pr_num, '--json', 'title,author,number'], text=True)
pr = json.loads(pr_json)
if 'dependabot' in pr['author']['login']:
continue
pr_url = f"https://github.com/{repo_full}/pull/{pr['number']}" if repo_full else f"#{pr['number']}"
entry = f"- {pr['title']} ([#{pr['number']}]({pr_url})) (@{pr['author']['login']})"
missing_entries.append(entry)
print(f"Added: {entry}")
except Exception as e:
print(f"Could not fetch PR #{pr_num}: {e}")

# Replace "## master" or "## main" with new version heading
changelog = re.sub(r'^## (?:master|main)\s*$', f'## {new_version}', changelog, flags=re.MULTILINE)
changelog = changelog.replace('- _...Add new stuff here..._\n', '')

# Prepend fresh master section
master_section = '\n'.join([
'## master',
'### ✨ Features and improvements',
'- _...Add new stuff here..._',
'',
'### 🐞 Bug fixes',
'- _...Add new stuff here..._',
'',
'',
])

title_match = re.match(r'^(# .+?\n\n)', changelog)
if title_match:
title = title_match.group(1)
rest = changelog[len(title):]
else:
title = '# Changelog\n\n'
rest = changelog

# Insert missing PR entries into the Bug fixes block of the new version section
if missing_entries:
bug_fix_pattern = re.compile(
r'^(## [^\n]+\n### ✨ Features and improvements\n(?:.*\n)*?### 🐞 Bug fixes\n)',
re.MULTILINE)
bf_match = bug_fix_pattern.search(rest)
if bf_match:
insert_at = bf_match.end()
entries_text = '\n' + '\n'.join(missing_entries) + '\n'
rest = rest[:insert_at] + entries_text + rest[insert_at:]
else:
rest = rest + '\n' + '\n'.join(missing_entries) + '\n'

changelog = title + master_section + rest
open(changelog_path, 'w').write(changelog)
print("Updated CHANGELOG.md")

with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
f.write(f"version={new_version}\n")
PYEOF

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Bump version and update changelog
id: version-details
run: |
python bump-version.py "${{ inputs.version }}" "${{ inputs.preid }}"
rm bump-version.py
env:
GH_TOKEN: ${{ github.token }}

- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
commit-message: Release v${{ steps.version-details.outputs.version }}
branch: release-v${{ steps.version-details.outputs.version }}
title: Release v${{ steps.version-details.outputs.version }}
body: |
Automated version bump to `v${{ steps.version-details.outputs.version }}`.

Review the `CHANGELOG.md` entries before merging. Once merged, trigger the **Build and Release** workflow to publish the GitHub release.
labels: release
97 changes: 97 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: Docs

on:
push:
branches: [main]
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: false

jobs:
build-docs:
name: Build documentation
runs-on: windows-latest

steps:
- name: Enable Git long paths
run: git config --global core.longpaths true

- uses: actions/checkout@v4
with:
submodules: recursive

- name: Set up MSVC developer tools
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64

- name: Get vcpkg commit ID
id: vcpkg-id
shell: pwsh
run: |
$id = git -C dependencies/maplibre-native/platform/windows/vendor/vcpkg rev-parse HEAD
Add-Content -Path $env:GITHUB_OUTPUT -Value "commit_id=$id"

- name: Cache vcpkg binary cache
uses: actions/cache@v4
with:
path: dependencies/maplibre-native/platform/windows/vendor/vcpkg/archives
key: vcpkg-x64-windows-${{ steps.vcpkg-id.outputs.commit_id }}

- name: Bootstrap vcpkg
run: |
& "dependencies\maplibre-native\platform\windows\vendor\vcpkg\bootstrap-vcpkg.bat" -disableMetrics

- name: Configure CMake
shell: pwsh
env:
VCPKG_BINARY_SOURCES: "clear;files,${{ github.workspace }}\\dependencies\\maplibre-native\\platform\\windows\\vendor\\vcpkg\\archives,readwrite"
run: |
$maxAttempts = 3
for ($attempt = 1; $attempt -le $maxAttempts; $attempt++) {
cmake -B build -G "Visual Studio 17 2022" -A x64 `
-DMLN_WITH_OPENGL=ON `
-DMLN_WITH_EGL=OFF `
-DMLN_WITH_VULKAN=OFF `
"-DCMAKE_CXX_FLAGS=/wd4267" `
"-DMAPLIBRE_NET_DOTNET_VERSION=net9.0"
if ($LASTEXITCODE -eq 0) { break }
if ($attempt -lt $maxAttempts) {
Remove-Item -Recurse -Force build -ErrorAction SilentlyContinue
} else {
exit $LASTEXITCODE
}
}

- name: Build (Release)
run: cmake --build build --target mbgl-dotnet --config Release --parallel

- name: Install docfx
run: dotnet tool install -g docfx

- name: Build documentation
run: docfx docs/docfx.json

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: docs/_site

deploy:
name: Deploy to GitHub Pages
needs: build-docs
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
Loading