Skip to content

Migration to v1.0.0

This is the steps to migrating from < v1 into v1.0.0.

Rearrange Folder Structure

Old folder structure looks like:

.
├── assets
│   └── profile_example.png
├── benches
│   └── my_benchmark
│       ├── main.rs
│       └── util.rs
├── bindings
│   └── csharp
│       ├── csharp.csproj
│       ├── .gitignore
│       ├── Init.cs
│       ├── NativeMethods.cs
│       └── nuget-icon.png
├── docs
│   ├── contributing.md
│   ├── index.md
│   └── requirements.txt
├── .github
│   ├── ISSUE_TEMPLATE
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   ├── workflows
│   │   ├── auto-changelog.yml
│   │   ├── deploy-mkdocs.yml
│   │   └── rust.yml
│   ├── dependabot.yml
│   └── pull_request_template.md
├── src
│   ├── exports.rs
│   └── lib.rs
├── .vscode
│   ├── settings.json
│   └── tasks.json
├── build.rs
├── Cargo.toml
├── cbindgen_cpp.toml
├── cbindgen_c.toml
├── codecov.yml
├── CONTRIBUTING.MD
├── flake.nix
├── .gitignore
├── .gitmodules
├── LICENSE
├── mkdocs.yml
├── README-DEV.MD
└── README.MD

New folder structure looks like:

.
├── doc
│   ├── docs
│   │   ├── contributing.md
│   │   ├── index.md
│   │   └── requirements.txt
│   ├── mkdocs.yml
│   ├── README.md
│   └── start_docs.py
├── .github
│   ├── ISSUE_TEMPLATE
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   ├── workflows
│   │   ├── auto-changelog.yml
│   │   ├── deploy-mkdocs.yml
│   │   └── rust.yml
│   ├── cbindgen_cpp.toml
│   ├── cbindgen_c.toml
│   ├── changelog.hbs
│   ├── codecov.yml
│   ├── dependabot.yml
│   └── pull_request_template.md
├── src
│   ├── bindings
│   │   └── csharp
│   │       ├── csharp.csproj
│   │       ├── Init.cs
│   │       ├── NativeMethods.cs
│   │       └── nuget-icon.png
│   ├── cli
│   ├── prs-rs
│   │   ├── build.rs
│   │   └── Cargo.toml
│   ├── Cargo.lock
│   ├── Cargo.toml
│   ├── .gitignore
│   └── rust-toolchain.toml
├── .vscode
│   ├── launch.json
│   ├── settings.json
│   └── tasks.json
├── .gitignore
├── .gitmodules
├── flake.nix
├── LICENSE
└── README.MD

Namely:

  • All source code moved to src/ directory, including bindings/ (now src/bindings/)
  • Introduced cargo workspace structure with src/Cargo.toml as the workspace root
  • Configuration files moved from root to .github/ directory:
  • cbindgen_*.toml, codecov.yml, dependabot.yml
  • Documentation restructured: docs/doc/docs/ with added mkdocs.yml and start_docs.py
  • Project code moved to src/<project-name>/ directory

Move IDE Configuration

Move the .vscode directory to the src/ folder and open src/ in your IDE for development.

Split VSCode Configuration

Editor-Specific Configuration

This section describes VSCode-specific configuration. If you use a different code editor, you may adapt these settings to your editor's format or skip this section.

The template now splits VSCode configuration between two directories:

  • src/.vscode/ - Rust development settings
  • doc/.vscode/ - Documentation and markdown settings

Rust Development Settings (src/.vscode/)

The src/.vscode/settings.json file contains settings for Rust development:

{
  "rust-analyzer.check.command": "clippy",
  "editor.formatOnSave": true,
  "coverage-gutters.coverageFileNames": [
    "cobertura.xml"
  ],
  "coverage-gutters.coverageReportFileName": "tarpaulin-report.html"
}

Documentation Settings (doc/.vscode/)

The doc/.vscode/settings.json file contains settings for documentation work:

{
  "editor.formatOnSave": true,
  "files.exclude": {
    "venv/": true,
    "__pycache__/": true
  },
  "files.associations": {
    "mkdocs.yml": "yaml",
    "requirements.txt": "plaintext"
  },
  "[markdown]": {
    "editor.wordWrap": "on",
    "editor.rulers": [80]
  }
}

Update VS Code Task Paths

When migrating to the new workspace structure, move the .vscode folder to the src/ directory and open src/ in your code editor. This ensures all tasks run from the correct context without needing cwd overrides. Update watch paths in .vscode/tasks.json to reflect the new template structure:

--- a/src/.vscode/tasks.json
+++ b/src/.vscode/tasks.json
@@ -4,13 +4,11 @@
      {
        "label": "Auto Test on Save",
        "type": "shell",
-       "command": "cargo watch -x \"test\" -w <project-name>/src",
+       "command": "cargo watch -x \"test\" -w {{project-name}}/src",
        "group": "test",
        "presentation": {
          "reveal": "always"
        },
        "problemMatcher": [],
-       "options": {
-         "cwd": "${workspaceFolder}/src"
-       }
      },
      {
        "label": "Auto Coverage on Save",
        "type": "shell",
-       "command": "cargo install cargo-tarpaulin --quiet && cargo watch -x \"tarpaulin --skip-clean --out Xml --out Html --engine llvm --target-dir target/coverage-build\" -w <project-name>/src",
+       "command": "cargo install cargo-tarpaulin --quiet && cargo watch -x \"tarpaulin --skip-clean --out Xml --out Html --engine llvm --target-dir target/coverage-build\" -w {{project-name}}/src",
        "group": "test",
        "presentation": {
          "reveal": "always"
        },
        "problemMatcher": [],
-       "options": {
-         "cwd": "${workspaceFolder}/src"
-       }
      },
      {
        "label": "Generate Code Coverage",
        "type": "shell",
        "command": "cargo install cargo-tarpaulin --quiet && cargo tarpaulin --skip-clean --out Xml --out Html --engine llvm --target-dir target/coverage-build",
        "group": "test",
        "presentation": {
          "reveal": "always"
        },
        "problemMatcher": [],
-       "options": {
-         "cwd": "${workspaceFolder}/src"
-       }
      }
    ]
 }

Key changes:

  • Remove cwd options: Delete the "options": { "cwd": "${workspaceFolder}/src" } blocks from all tasks—they are no longer needed since you're opening src/ as the workspace root
  • Update watch paths to use template variables: {{project-name}}/src
  • .vscode folder should be located in src/ directory
  • Open src/ folder in your code editor for automatic task context

Replace {{project-name}} with your actual project name (e.g., my-library, my-mod, etc.).

Add C# GitIgnore File

For C# bindings projects, add a comprehensive .gitignore file to the src/<project-name>/bindings/csharp/ directory:

Create src/bindings/csharp/.gitignore with the following content:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.sln.docstates

# Build results

[Dd]ebug/
[Rr]elease/
x64/
[Bb]in/
[Oo]bj/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.log
*.svclog
*.scc

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile

# Visual Studio profiler
*.psess
*.vsp
*.vspx

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# Click-Once directory
publish/

# Publish Web Output
*.Publish.xml
*.pubxml
*.azurePubxml

# NuGet Packages Directory
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
packages/
## TODO: If the tool you use requires repositories.config, also uncomment the next line
!packages/repositories.config

# Windows Azure Build Output
csx/
*.build.csdef

# Windows Store app package directory
AppPackages/

# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
![Ss]tyle[Cc]op.targets
~$*
*~
*.dbmdl
*.[Pp]ublish.xml

*.publishsettings

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
App_Data/*.mdf
App_Data/*.ldf

# =========================
# Windows detritus
# =========================

# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Mac desktop service store files
.DS_Store

_NCrunch*

Update Dependabot Configuration

Update the Dependabot configuration in .github/dependabot.yml to point to the new workspace structure:

    version: 2
    updates:
      # Enable version updates for Cargo
      - package-ecosystem: "cargo"
-     directory: "/"
+     directory: "src"
       schedule:
         interval: "weekly"
         day: "monday"

Since the workspace root and Cargo.toml are now located in the src/ directory, Dependabot needs to be configured to monitor dependencies in that directory instead of the repository root.

Update GitHub Issue Templates

Copy the following files to .github/ISSUE_TEMPLATE/:

Update VS Code Settings

Add the following settings to .vscode/settings.json:

{
  "coverage-gutters.coverageReportFileName": "tarpaulin-report.html",
  "editor.formatOnSave": true
}

These settings: - Configure Coverage Gutters extension to use the correct tarpaulin report file - Enable automatic formatting for all files on save

Update .gitignore

Add the following entries to your .gitignore files:

Top-level .gitignore

# LLM Prompts
PROMPT.MD
PROMPT-*.MD

src/.gitignore

# Profiling files
perf.data.old
perf.data
flamegraph.svg

# Code Coverage
tarpaulin-report.html
cobertura.xml

This prevents committing LLM prompt files to the repository (top-level) and profiling/coverage files to the repository (src-level).

Add Clippy Fix Task

Add a task to automatically fix clippy lints to src/.vscode/tasks.json:

     {
+      "label": "Fix Clippy Lints",
+      "type": "shell",
+      "command": "cargo clippy --fix --allow-dirty --allow-staged",
+      "group": "build",
+      "presentation": {
+        "reveal": "always"
+      },
+      "problemMatcher": []
     }

This task: - Runs cargo clippy --fix to automatically fix applicable lints - Uses --allow-dirty to work on uncommitted changes - Uses --allow-staged to work on staged changes

Remove Reloaded: Prefix from Task Labels

Update your VS Code task labels to remove the Reloaded: prefix for cleaner task names:

--- a/src/.vscode/tasks.json
+++ b/src/.vscode/tasks.json
@@ -4,29 +4,29 @@
      {
-       "label": "Reloaded: Cargo Watch Test (Auto Test on Save)",
+       "label": "Auto Test on Save",
        "type": "shell",
-       "command": "cargo watch -x \"test\" -w <project-name>/src",
+       "command": "cargo watch -x \"test\" -w {{project-name}}/src",
        "group": "test",
        "presentation": {
          "reveal": "always"
        },
        "problemMatcher": []
      },
      {
-       "label": "Reloaded: Cargo Watch Tarpaulin (Auto Coverage on Save)",
+       "label": "Auto Coverage on Save",
        "type": "shell",
-       "command": "cargo install cargo-tarpaulin --quiet && cargo watch -x \"tarpaulin --skip-clean --out Xml --out Html --engine llvm --target-dir target/coverage-build\" -w <project-name>/src",
+       "command": "cargo install cargo-tarpaulin --quiet && cargo watch -x \"tarpaulin --skip-clean --out Xml --out Html --engine llvm --target-dir target/coverage-build\" -w {{project-name}}/src",
        "group": "test",
        "presentation": {
          "reveal": "always"
        },
        "problemMatcher": []
      },
      {
-       "label": "Reloaded: Generate Code Coverage",
+       "label": "Generate Code Coverage",
        "type": "shell",
        "command": "cargo install cargo-tarpaulin --quiet && cargo tarpaulin --skip-clean --out Xml --out Html --engine llvm --target-dir target/coverage-build",
        "group": "test",
        "presentation": {
          "reveal": "always"
        },
        "problemMatcher": []
      },
      {
-       "label": "Reloaded: Fix Clippy Lints",
+       "label": "Fix Clippy Lints",
        "type": "shell",
        "command": "cargo clippy --fix --allow-dirty --allow-staged",
        "group": "build",
        "presentation": {
          "reveal": "always"
        },
        "problemMatcher": []
      }
    ]
 }

This change: - Removes the Reloaded: prefix from all task labels for cleaner display in VS Code - Maintains all task functionality and configuration - Makes task names more concise and easier to read

Task Name Changes

Update your VS Code task labels to use more intuitive and user-friendly names:

--- a/src/.vscode/tasks.json
+++ b/src/.vscode/tasks.json
@@ -4,28 +4,28 @@
      {
-       "label": "Cargo Watch Test (Auto Test on Save)",
+       "label": "Auto Test on Save",
        "type": "shell",
-       "command": "cargo watch -x \"test\" -w <project-name>/src",
+       "command": "cargo watch -x \"test\" -w {{project-name}}/src",
        "group": "test",
        "presentation": {
          "reveal": "always"
        },
        "problemMatcher": []
      },
      {
-       "label": "Cargo Watch Tarpaulin (Auto Coverage on Save)",
+       "label": "Auto Coverage on Save",
        "type": "shell",
-       "command": "cargo install cargo-watch --quiet && cargo install cargo-tarpaulin --quiet && cargo watch -x \"tarpaulin --skip-clean --out Xml --out Html --engine llvm --target-dir target/coverage-build\" -w <project-name>/src",
+       "command": "cargo install cargo-watch --quiet && cargo install cargo-tarpaulin --quiet && cargo watch -x \"tarpaulin --skip-clean --out Xml --out Html --engine llvm --target-dir target/coverage-build\" -w {{project-name}}/src",
        "group": "test",
        "presentation": {
          "reveal": "always"
        },
        "problemMatcher": []
      }

This change renames tasks to be more intuitive and concise.

Add Benchmark Task

Add a task to run benchmarks to src/.vscode/tasks.json when the bench feature is enabled:

     {
+      "label": "Run Benchmarks",
+      "type": "shell",
+      "command": "cargo bench",
+      "group": "test",
+      "presentation": {
+        "reveal": "always"
+      },
+      "problemMatcher": []
     }

Add C/C++ Bindings Generation Tasks

Add tasks to generate C/C++ bindings manually to src/.vscode/tasks.json:

     {
+      "label": "Generate C Bindings",
+      "type": "shell",
+      "command": "cargo install cbindgen --quiet && cbindgen --config ../.github/cbindgen_c.toml --output bindings/c/{{project-name}}.h {{project-name}}",
+      "group": "build",
+      "presentation": {
+        "reveal": "always"
+      },
+      "problemMatcher": []
+    },
+    {
+      "label": "Generate C++ Bindings",
+      "type": "shell",
+      "command": "cargo install cbindgen --quiet && cbindgen --config ../.github/cbindgen_cpp.toml --output bindings/cpp/{{project-name}}.hpp {{project-name}}",
+      "group": "build",
+      "presentation": {
+        "reveal": "always"
+      },
+      "problemMatcher": []
     }

Replace {{project-name}} with your actual project name.

These tasks: - Install cbindgen automatically if not present - Generate C and/or C++ headers from Rust code - Use configuration files in .github/ directory - Place generated headers in bindings/c/ and bindings/cpp/ directories

Add Miri Testing Tasks

Miri is a testing tool that checks your Rust code for hidden bugs that can cause crashes, data corruption, or security problems. These bugs are called undefined behavior (UB) - situations where your program's behavior becomes unpredictable. Undefined behavior might work fine on your computer but crash on someone else's, appear to work but corrupt data silently, create security vulnerabilities that attackers can exploit, or only show up months later in production.

Rust normally prevents many types of bugs automatically through its safety checks. However, sometimes you need to write unsafe code that bypasses these checks (for performance or when interfacing with hardware/other languages). Unsafe code can introduce undefined behavior if not written carefully.

Miri detects issues like:

  • Out-of-bounds memory accesses and use-after-free: Reading or writing memory outside valid regions or after it's been freed
  • Invalid use of uninitialized data: Using memory before it's been given a valid value
  • Not sufficiently aligned memory accesses: Accessing memory with incorrect alignment requirements

These tasks are optional and typically used when writing unsafe code. For more information, see the Miri testing documentation.

Standard Miri Task

Add the standard Miri task to src/.vscode/tasks.json when the miri feature is enabled in cargo-generate:

     {
+      "label": "Run Tests to Detect Undefined Behaviour",
+      "type": "shell",
+      "command": "cargo +nightly install cargo-miri --quiet && cargo +nightly miri test",
+      "group": "test",
+      "presentation": {
+        "reveal": "always"
+      },
+      "problemMatcher": []
     }

This task uses the friendly name "Run Tests to Detect Undefined Behaviour" to clearly communicate its purpose to developers who may not be familiar with Miri.

Big-Endian Miri Task

If you need big-endian testing support, add this task to src/.vscode/tasks.json when both miri AND big_endian features are enabled:

     {
+      "label": "Run Tests to Detect Undefined Behaviour (Big Endian)",
+      "type": "shell",
+      "command": "cargo +nightly install cargo-miri --quiet && cargo +nightly miri test --target powerpc64-unknown-linux-gnu",
+      "group": "test",
+      "presentation": {
+        "reveal": "always"
+      },
+      "problemMatcher": []
     }

Nightly Toolchain Required

Miri requires the nightly Rust toolchain. The tasks automatically use cargo +nightly to run Miri tests with the nightly toolchain.

Migrate Documentation

The theme now uses a vendoring approach instead of submodules. You now copy the necessary files directly instead of managing submodules.

Setup:

  • Copy the contents of the copy-me folder from Reloaded.MkDocsMaterial.Themes.R2 to your project's doc/ directory
  • Skip .gitignore and mkdocs.yml if already present, and do updates below instead

There is also now a README.md next to mkdocs.yml in the doc folder.

Referencing Theme Documentation

If you need to reference pages from the theme's documentation (such as contributing guidelines or examples), use direct URLs instead of local file references.

mkdocs.yml Changes:

  nav:
-  - How to Document: Reloaded/Pages/contributing.md
-  - Testing Zone: Reloaded/Pages/testing-zone.md
+  - How to Document: https://reloaded-project.github.io/Reloaded.MkDocsMaterial.Themes.R2/Pages/contributing.html
+  - Testing Zone: https://reloaded-project.github.io/Reloaded.MkDocsMaterial.Themes.R2/Pages/testing-zone.html

Previously this was done via submodule, but turned out unnecessary.

Updated Exclude Patterns

With the vendoring approach, exclude patterns are no longer needed for the Reloaded folder since the files are now part of your project.

mkdocs.yml Changes:

  plugins:
    - exclude:
        glob:
-        - Reloaded/docs/Pages/private/*
-        - Reloaded/docs/*.txt
-        - Reloaded/.gitignore
-        - Reloaded/Readme.md
-        - Reloaded/LICENSE
-        - Reloaded/*.yml
-        - Reloaded/*.py
-        - Reloaded/venv/*

Image References

Since the files are now vendored, you may need to move them out to your own docs folder.

Actions Required:

  • Move any images from the vendored theme files to your doc/docs/Images/ folder
  • Update image references in your markdown files to use the new paths

Example Changes:

- ![Reloaded Icon](Reloaded/Images/Reloaded-Icon.avif)
+ ![Reloaded Icon](Images/Reloaded-Icon.avif)

Image Format Migration

All PNG images in the theme have been converted to AVIF format for better compression.

Actions Required:

  • If you reference any images from the theme template (e.g., Reloaded logo), you may need to change the file extension from .png to .avif
  • Example: ../Images/Reloaded-Icon.png../Images/Reloaded-Icon.avif

Build System Enhancements

Added minification plugin for optimized builds.

Actions Required:

  • Add to doc/docs/requirements.txt:

    mkdocs-minify-plugin
    

  • Add to doc/mkdocs.yml plugins section:

    plugins:
       - offline
       - search
       - minify:
           minify_html: true
           minify_js: true
           minify_css: true
           htmlmin_opts:
             remove_comments: true
           cache_safe: true
    

Setup Script Improvements

New automated setup script available.

Actions Required:

  • Add start_docs.py from the copy-me folder to your doc/ directory
  • Update .gitignore to include:
    # MkDocs build output
    site/
    
    # Python virtual environments
    venv/
    

Version Tracking

Version information is now stored in version.txt files in the vendor folder for future migration.

Remove Cross-Platform Scripts

Delete the scripts/ directory. The scripts have been migrated to VSCode tasks.

The following tasks are added to src/.vscode/tasks.json when xplat is enabled:

{
   "label": "Test Cross-Compile: Linux (x64)",
   "type": "shell",
   "command": "cargo install cross --git https://github.com/cross-rs/cross --quiet && cross test --target x86_64-unknown-linux-gnu",
   "group": "test",
   "presentation": {
     "reveal": "always"
   },
   "problemMatcher": []
},
{
   "label": "Test Cross-Compile: Linux (x86)",
   "type": "shell",
   "command": "cargo install cross --git https://github.com/cross-rs/cross --quiet && cross test --target i686-unknown-linux-gnu",
   "group": "test",
   "presentation": {
     "reveal": "always"
   },
   "problemMatcher": []
},
{
   "label": "Test Cross-Compile: Windows (x64) [Test on Linux via Wine]",
   "type": "shell",
   "command": "cargo install cross --git https://github.com/cross-rs/cross --quiet && cross test --target x86_64-pc-windows-gnu",
   "group": "test",
   "presentation": {
     "reveal": "always"
   },
   "problemMatcher": []
},
{
   "label": "Test Cross-Compile: Windows (x86) [Test on Linux via Wine]",
   "type": "shell",
   "command": "cargo install cross --git https://github.com/cross-rs/cross --quiet && cross test --target i686-pc-windows-gnu",
   "group": "test",
   "presentation": {
     "reveal": "always"
   },
   "problemMatcher": []
}

Big Endian Support

A new big_endian placeholder has been added to optionally include PowerPC big endian target support. When enabled, the following additional tasks are added to src/.vscode/tasks.json:

{
   "label": "Test Cross-Compile: Linux (PowerPC 32-bit) [Big Endian]",
   "type": "shell",
   "command": "cargo install cross --git https://github.com/cross-rs/cross --quiet && cross test --target powerpc-unknown-linux-gnu",
   "group": "test",
   "presentation": {
     "reveal": "always"
   },
   "problemMatcher": []
},
{
   "label": "Test Cross-Compile: Linux (PowerPC 64-bit) [Big Endian]",
   "type": "shell",
   "command": "cargo install cross --git https://github.com/cross-rs/cross --quiet && cross test --target powerpc64-unknown-linux-gnu",
   "group": "test",
   "presentation": {
     "reveal": "always"
   },
   "problemMatcher": []
}

The GitHub Actions workflow also includes PowerPC targets in the CI matrix when this feature is enabled: - powerpc-unknown-linux-gnu (32-bit big endian) - powerpc64-unknown-linux-gnu (64-bit big endian)

Both targets use cross compilation and do not support PGO due to lack of native runners.

Fix Auto Coverage on Save Task Command

Some existing "Auto Coverage on Save" task commands may be missing the cargo-watch installation, which can cause the task to fail.

Check your src/.vscode/tasks.json for tasks with either of these labels: - "Auto Coverage on Save" - "Cargo Watch Tarpaulin (Auto Coverage on Save)"

If you find a command that looks like this (missing cargo-watch):

"command": "cargo install cargo-tarpaulin --quiet && cargo watch -x \"tarpaulin --skip-clean --out Xml --out Html --engine llvm --target-dir target/coverage-build\" -w {{project-name}}/src"

Update it to include both installations:

"command": "cargo install cargo-watch --quiet && cargo install cargo-tarpaulin --quiet && cargo watch -x \"tarpaulin --skip-clean --out Xml --out Html --engine llvm --target-dir target/coverage-build\" -w {{project-name}}/src"

This ensures both required tools are installed before running the coverage task.

Configure Workspace Profile Optimization

Previously the profiles were a bit unoptimized. As you migrate towards workspaces, you can reduce this redundancy, with something like this:

# [workspace]
# resolver = "2"
# members = ["your-project-name", "cli"]

# Profile Build
[profile.profile]
inherits = "release"
debug = true
strip = false        # symbols are needed for good profile data

# Benchmark Build
[profile.bench]
inherits = "profile"

# Optimized Release Build
[profile.release]
codegen-units = 1
lto = true
strip = true      # Automatically strip symbols from the binary.
panic = "abort"

Redundant lines in profile were removed.

Run Tests and Coverage on WINE

When using the Reloaded-Project/devops-rust-test-and-coverage action for testing on WINE, remove redundant settings that are no longer required:

    - uses: Reloaded-Project/devops-rust-test-and-coverage@v1
      with:
        rust-project-path: ./src
-        rust-toolchain: nightly
-        target: {% raw %}${{ matrix.target }}{% endraw %}
-        install-rust-toolchain: true
-        setup-rust-cache: true
         upload-coverage: true
         codecov-token: {% raw %}${{ secrets.CODECOV_TOKEN }}{% endraw %}
+        target: {% raw %}${{ matrix.target }}{% endraw %}
         use-cross: true
         additional-test-args: --release

Removed settings:

  • rust-toolchain: nightly - the action handles toolchain setup automatically
  • install-rust-toolchain: true - redundant with the action's defaults
  • setup-rust-cache: true - redundant with the action's defaults

Remove pprof from Benchmark Configuration

The pprof dependency has been completely removed from the benchmark configuration.

Although pprof is maintained, its maintainers have ignored a simple 1-line fix to make it work with Criterion for many months, blocking upgrades.

To eliminate dependabot annoyance and enable Criterion versions greater than 0.5.0, pprof was removed in favor of cargo flamegraph for profiling.

This simplifies the benchmark setup, and allows flamegraphs on Windows.

Changes to Cargo.toml

The pprof dependency and target-specific configuration have been removed:

  [dev-dependencies]
- criterion = "0.5.1"
- 
- [target.'cfg(all(any(target_os = "linux", target_os = "macos"), any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")))'.dev-dependencies]
- pprof = { version = "0.15", features = ["flamegraph", "criterion"] }
+ criterion = "0.7.0"

Changes to Benchmark File

The pprof-specific code has been removed from benches/my_benchmark/main.rs:

- #[cfg(all(any(target_os = "linux", target_os = "macos"), any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")))]
- use pprof::criterion::{Output, PProfProfiler};
- 
  fn fibonacci(n: u64) -> u64 {
      // ... function implementation
  }

- #[cfg(all(any(target_os = "linux", target_os = "macos"), any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")))]
- criterion_group! {
-     name = benches;
-     config = Criterion::default().with_profiler(PProfProfiler::new(100, Output::Flamegraph(None)));
-     targets = criterion_benchmark
- }
- 
- #[cfg(not(all(any(target_os = "linux", target_os = "macos"), any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))))]
  criterion_group! {
       name = benches;
       config = Criterion::default();
       targets = criterion_benchmark
   }

Update LICENSE-GPL3-R File

The LICENSE-GPL3-R file now includes a helpful introductory blurb at the top before the full GPLv3 license text.

Actions Required:

Replace your existing LICENSE-GPL3-R file content with the updated version that includes the following header:

This project is licensed under the GNU General Public License v3.0 (GPLv3).

For a detailed FAQ about this license and its implications, please visit:
https://reloaded-project.github.io/License/GPLv3/about.html

For custom/alternative/commercial licensing options, contact admin@sewer56.dev

===================

                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007
[... rest of GPL3 license text ...]

Update README License References

The template no longer includes a "Learn more about Reloaded's general choice of licensing for projects" link in README.MD files.

Actions Required:

  ## License

- Licensed under [{{license}}](./LICENSE).  
- 
- [Learn more about Reloaded's general choice of licensing for projects.][reloaded-license].  
+ Licensed under [{{license}}](./LICENSE).

  [codecov]: https://app.codecov.io
  ...
- [docs]: https://{{gh_reponame}}.github.io/{{gh_reponame}} {%- endif %}
- [reloaded-license]: https://reloaded-project.github.io/Reloaded.MkDocsMaterial.Themes.R2/Pages/license/
+ [docs]: https://{{gh_reponame}}.github.io/{{gh_reponame}} {%- endif %}