Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
7885e05
DataMapper 2.0.0-beta1 release
Nov 24, 2025
d6d61b3
Guard autoloader subclass prefix lookup
Nov 24, 2025
3cb5a71
Remove camelCase soft delete aliases
Nov 24, 2025
6706645
Standardize snake_case helper naming
Nov 24, 2025
82ecd89
Ensure snake_case soft delete compatibility
Nov 25, 2025
6e61b51
feat: expand collection snake_case helpers and sync docs
Nov 26, 2025
c96acca
Collection test
Nov 26, 2025
f84c87c
fix: removal of lang files
Nov 26, 2025
165b0cc
removal of index.html in language dir
Nov 26, 2025
a91c88f
updated model template
Nov 26, 2025
9316031
Fix optgroup label assignment in htmlform.php #26
Nov 26, 2025
af1d18f
Drop camelCase cache aliases; require snake_case driver methods and u…
Nov 26, 2025
ea7c502
docs: drop camelCase helper references
Nov 26, 2025
062c554
Fix trait autoload for DataMapper in CI3
Dec 2, 2025
b318225
Guard eager relation assignments against column collisions
Dec 3, 2025
0899a4e
Align DataMapper exception usage
Dec 4, 2025
a6cebbd
Remove sugar methods; QueryBuilder::get() now returns model
Dec 4, 2025
d86bc4a
Update CHANGELOG and docs for API cleanup
Dec 4, 2025
5c4af3a
Consolidate helpers, remove deprecated shims, update extensions
Dec 4, 2025
29431ba
Fixed assigning eager relationships
Dec 4, 2025
b98c9a2
Add debug() and benchmark() methods for query profiling
Dec 4, 2025
4cf2517
Add debugging documentation page
Dec 4, 2025
50de0f6
Suppress VitePress chunk size warning
Dec 4, 2025
30c6d0f
Add helpful error message when with() is called in constraint callback
Dec 4, 2025
bb6aaec
Add debug/benchmark to docs
Dec 4, 2025
f13ca5a
Fix SoftDeleteDisabledModelStub test for cross-PHP compatibility
Dec 4, 2025
b7a73fc
Array to String conversion error fixed when using casts
Dec 9, 2025
15da44d
Support CamelCase models and capitalized folder names in autoloader
Dec 12, 2025
4d78e35
chunking
Dec 16, 2025
640c5d3
case sensitive relationship handling bug fixed
Jan 6, 2026
fc07bfa
Datamapper typecasting
May 8, 2026
48fb6ad
fix: query builder edge cases and conditional wrapper type narrowing
May 26, 2026
6696954
docs: correct documentation to match implemented features
May 26, 2026
ce04d6a
docs changes
May 26, 2026
e8ffec5
ci: add CI/CD workflows and docs deployment actions
May 27, 2026
72a8af9
fix: harden security and clean up deprecations
May 27, 2026
32ccaa2
docs: update changelogs and reserved-names for 2.0.0 cleanup
May 27, 2026
ecf6742
feat: add DataMapper 2.0 documentation, tests, and field_data guard
May 27, 2026
9365f56
minor fix to the readme
May 27, 2026
9c2acf0
docs: overhaul README with new features, examples, and fix CI badge b…
May 27, 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
  •  
  •  
  •  
76 changes: 76 additions & 0 deletions .github/actions/check-docs-deploy/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Check Docs Deploy
description: Validate docs deployment inputs and set defaults
inputs:
host:
description: Target host for deployment
required: false
user:
description: SSH username
required: false
ssh_key:
description: SSH private key for deployment
required: false
port:
description: SSH port
required: false
path:
description: Remote path for documentation files
required: false
outputs:
ready:
description: Indicates whether deployment can proceed
value: ${{ steps.evaluate.outputs.ready }}
host:
description: Resolved SSH host
value: ${{ steps.evaluate.outputs.host }}
user:
description: Resolved SSH username
value: ${{ steps.evaluate.outputs.user }}
port:
description: Resolved SSH port
value: ${{ steps.evaluate.outputs.port }}
path:
description: Resolved remote path
value: ${{ steps.evaluate.outputs.path }}
runs:
using: composite
steps:
- id: evaluate
shell: bash
run: |
set -euo pipefail

host="${{ inputs.host }}"
user="${{ inputs.user }}"
ssh_key="${{ inputs.ssh_key }}"
port="${{ inputs.port }}"
path="${{ inputs.path }}"

ready=true
for var in host user ssh_key; do
value="${!var}"
if [ -z "$value" ]; then
case "$var" in
host) label="DOCS_HOST" ;;
user) label="DOCS_USER" ;;
ssh_key) label="DOCS_SSH_KEY" ;;
*) label="$var" ;;
esac
echo "::warning::Missing required deploy secret: $label"
ready=false
fi
done

if [ -z "$port" ]; then
port=2200
fi

if [ -z "$path" ]; then
path="/var/www/datamapper/docs"
fi

echo "ready=$ready" >> "$GITHUB_OUTPUT"
echo "host=$host" >> "$GITHUB_OUTPUT"
echo "user=$user" >> "$GITHUB_OUTPUT"
echo "port=$port" >> "$GITHUB_OUTPUT"
echo "path=$path" >> "$GITHUB_OUTPUT"
41 changes: 41 additions & 0 deletions .github/actions/deploy-docs/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Deploy Docs Bundle
description: Upload built documentation via rsync over SSH
inputs:
host:
description: Target host for deployment
required: true
user:
description: SSH username
required: true
port:
description: SSH port
required: true
path:
description: Remote path for documentation files
required: true
ssh_key:
description: SSH private key used for deployment
required: true
runs:
using: composite
steps:
- shell: bash
run: |
set -euo pipefail

host="${{ inputs.host }}"
user="${{ inputs.user }}"
port="${{ inputs.port }}"
path="${{ inputs.path }}"
ssh_key="${{ inputs.ssh_key }}"

mkdir -p "$HOME/.ssh"
printf '%s\n' "$ssh_key" > "$HOME/.ssh/id_rsa"
chmod 600 "$HOME/.ssh/id_rsa"

if ! ssh-keygen -F "$host" >/dev/null 2>&1; then
ssh-keyscan -p "$port" -H "$host" >> "$HOME/.ssh/known_hosts"
fi

rsync -az --delete -e "ssh -p $port -i $HOME/.ssh/id_rsa -o StrictHostKeyChecking=yes" \
docs/.vitepress/dist/ "$user@$host:$path/"
49 changes: 49 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: CI

on:
push:
branches:
- master
- 2.0.0-beta1
pull_request:
branches:
- master
- 2.0.0-beta1

jobs:
tests:
name: PHP ${{ matrix.php-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php-version: ["8.1", "8.2", "8.3", "8.4", "8.5"]

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
coverage: none
tools: composer:v2

- name: Validate composer.json
run: composer validate --no-check-publish

- name: Cache Composer dependencies
uses: actions/cache@v4
with:
path: vendor
key: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ hashFiles('composer.lock') }}
restore-keys: |
${{ runner.os }}-php-${{ matrix.php-version }}-
${{ runner.os }}-php-

- name: Install dependencies
run: composer install --no-interaction --prefer-dist --no-progress

- name: Run test suite
run: vendor/bin/phpunit -c tests/phpunit.xml
64 changes: 64 additions & 0 deletions .github/workflows/docs-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# actionlint: allow-secrets DOCS_HOST,DOCS_USER,DOCS_SSH_KEY,DOCS_PORT,DOCS_PATH
name: Deploy Documentation

on:
push:
branches:
- master
- 2.0.0-beta1
paths:
- 'docs/**'
- 'package.json'
- 'package-lock.json'
- '.github/workflows/docs-deploy.yml'
workflow_dispatch:

concurrency:
group: docs-deploy-${{ github.ref }}
cancel-in-progress: true

jobs:
publish:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Install dependencies
run: npm ci

- name: Build VitePress site
run: npm run docs:build
env:
DOCS_BASE: /

- name: Check deployment prerequisites
id: check
uses: ./.github/actions/check-docs-deploy
with:
host: ${{ secrets.DOCS_HOST }} # actionlint: allow
user: ${{ secrets.DOCS_USER }} # actionlint: allow
ssh_key: ${{ secrets.DOCS_SSH_KEY }} # actionlint: allow
port: ${{ secrets.DOCS_PORT }} # actionlint: allow
path: ${{ secrets.DOCS_PATH }} # actionlint: allow

- name: Deploy documentation bundle
if: steps.check.outputs.ready == 'true'
uses: ./.github/actions/deploy-docs
with:
host: ${{ steps.check.outputs.host }}
user: ${{ steps.check.outputs.user }}
port: ${{ steps.check.outputs.port }}
path: ${{ steps.check.outputs.path }}
ssh_key: ${{ secrets.DOCS_SSH_KEY }} # actionlint: allow

- name: Deployment skipped
if: steps.check.outputs.ready != 'true'
run: echo "Documentation build complete, but deploy secrets are missing so upload was skipped."
51 changes: 49 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,51 @@
# Ignore Eclipse project files
# Composer dependencies
/vendor/

# Composer utility artifacts
/composer.phar
/.composer/

# Node-based docs build output
/node_modules/
/docs/.vitepress/cache/
/docs/.vitepress/dist/

# Python helper cache (conversion scripts, etc.)
__pycache__/
*.py[cod]
*$py.class
.venv/
venv/

# Logs & coverage
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
/coverage/
.phpunit.result.cache

# Editor/IDE settings
.vscode/
.idea/
.buildpath
.project
.settings/
.settings/
*.code-workspace
*.swp
*.swo
*~

# Operating system junk
Thumbs.db
.DS_Store

# Local environment overrides & temp files
.env
.env.*
*.tmp
*.temp

# Local documentation notes
copilot/
TODO_PRODUCTION_READINESS.md
Loading
Loading