The core engine for the Evolution Adaptation Ecosystem. This tool provides a powerful, version-aware D-based engine for migrating source code between library and framework versions using SDL-based rulesets.
-
Evolution Engine — The core binary that resolves and applies evolutionary rules.
-
Evolution Engine Action — Modular GitHub Action to automate code evolution in CI pipelines.
-
Evolution Rules: Code — Rules for migrating source code between library versions (e.g., PyQt5 to PyQt6).
-
Evolution Rules: Filesystem — Rules for cross-OS path mapping and equivalency.
-
Shortest Path Migration: Automatically find the optimal set of rules to migrate from version
Ato versionB. -
Git Rulesets: Dynamic retrieval of rulesets directly from Git repositories.
-
SDL Based: Human-readable and flexible rules using
sdlang-d. -
Cross Platform: Available on Windows, macOS, and Linux.
To migrate a project from version 5.15 to 6.0 using local rules:
evolution-engine --path ./src --rules-dir ./rules/qt --from 5.15 --to 6.0You can directly use a remote rules repository. The engine will clone the repo, find the necessary rules recursively, and clean up automatically.
evolution-engine --rules-repo https://github.com/AMDphreak/evolution-rules-code --from 5.15 --to 6.0 --path ./src| Option | Description |
|---|---|
|
Path to the project or file to process. |
|
Local directory containing |
|
Git URL of a remote rules repository. |
|
Branch to use for the remote repository (default: |
|
Source version (e.g., |
|
Target version (e.g., |
|
Comma-separated list of file extensions (default: |
|
Perform a dry run without modifying files. |
New rules should be added to the appropriate rules/<type>/<lang>/<library>/ subdirectory in the respective rules repository.
To ensure rules are easily consumable by the Evolution Engine in CI environments, each rules repository should implement a Release Workflow. This workflow packages the rules/ directory into versioned archives (.zip and .tar.gz) for ingestion by the engine.
.github/workflows/release.yml)name: Release
on:
push:
tags: ['v*']
permissions:
contents: write
jobs:
package:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create Archives
run: |
mkdir -p dist
tar -czf dist/repo-name-${{ github.ref_name }}.tar.gz rules/
zip -r dist/repo-name-${{ github.ref_name }}.zip rules/
- uses: actions/upload-artifact@v4
with:
name: rules-archives
path: dist/*
release:
needs: package
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: rules-archives
- uses: softprops/action-gh-release@v2
with:
files: |
*.tar.gz
*.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}Detailed history of changes is available in CHANGELOG.md.