Files
JonKazama-Hellion 614e97abf7 Add release pipeline, custom repo manifest, and pre-push linter
First release-ready cycle for Forgeimizer. Bumps the version to 0.1.0,
introduces the Hellion Forge custom repo distribution path, and wires
up the HellionChat-style pre-push lint gate.

Version:
- csproj <Version> 2.9.1.1 → 0.1.0. Forgeimizer adopts its own SemVer
  line starting at 0.1.0; the upstream Craftimizer 2.9.1.1 base is
  documented in the manifest description, CHANGELOG, README, and
  NOTICE for each release.

Release pipeline (.gitea/workflows/):
- build.yml on push/PR/dispatch: downloads Dalamud staging, dotnet
  restore + build of Craftimizer/Craftimizer.csproj. Fails the workflow
  if the plugin no longer compiles against current SDK 15.
- release.yml on v*-tag + dispatch: builds Release, locates the
  packager-produced latest.zip under Craftimizer/bin/x64/Release/,
  extracts the matching ## vX.Y.Z block from CHANGELOG.md via awk,
  appends .gitea/release-footer.md, and attaches everything to the
  Gitea release via gitea.com/actions/release-action.
- release-footer.md: install path with the custom-repo URL, conflict
  notice, attribution to Asriel Camora, MIT licence reference,
  Hellion Forge footer.
- security.yml: references the shared
  JonKazama-Hellion/security-workflows/security-scan.yml@main
  workflow (Semgrep + Trivy) on push/PR + weekly Monday schedule +
  dispatch.

Custom Dalamud repo manifest:
- repo.json at the repo root. AssemblyVersion 0.1.0.0,
  TestingAssemblyVersion 0.1.0.0, all three DownloadLink* pointing
  at releases/download/v0.1.0/latest.zip, embedded Changelog block,
  full description, tag list, icon and image URLs hosted off the
  Hellion Gitea. Subscribers add the raw URL of this file to
  Dalamud's Custom Plugin Repositories list.

Linter tooling:
- dotnet-tools.json with csharpier 1.2.6 as a local tool.
- .markdownlint.json copied from HellionChat (atx headers, dash
  bullets, underscore italics, asterisk strong) with MD060 disabled
  for our long-cell tables.
- renovate.json adapted from HellionChat: weekly schedule, grouped
  minor/patch updates per ecosystem, major updates get their own
  breaking-change PR, weekly lock file refresh, OSV vulnerability
  alerts.

Pre-push lint gate (.githooks/ + scripts/):
- .githooks/pre-push runs scripts/preflight.sh.
- preflight.sh: 4 blocks A (version consistency), B (dotnet build),
  C (dotnet csharpier check Craftimizer/), D (markdownlint via npx).
- verify-version-consistency.sh: csproj <Version> matches
  repo.json AssemblyVersion + TestingAssemblyVersion + a vX.Y.Z
  tag string is present in all three DownloadLink* URLs. Block A
  fails loud with a Fix: hint if anything drifts.
- setup-hooks.sh: sets core.hooksPath to .githooks, chmod +x the
  scripts. Run once after cloning.

CHANGELOG:
- New CHANGELOG.md at the repo root. First entry is v0.1.0 with the
  Hellion-style block (date, summary, bullet list, upstream-base
  attribution, full-history link). The release workflow extracts
  this entry verbatim as the Gitea release body.

Docs:
- README header updated with the new version badge, a release badge,
  and a build badge. New CHANGELOG reference, slash-command table,
  install section with both custom-repo and dev-install paths,
  conflict notice paragraph.

Plugin Version 0.1.0 stays in line with the verify-version-consistency
check; tag v0.1.0 is intentionally NOT pushed in this commit. Once the
user enables Gitea Actions on the repo, push the tag separately to
trigger the first release build.
2026-05-26 20:21:54 +02:00

178 lines
9.1 KiB
Markdown

# Forgeimizer
[![Build](https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer/actions/workflows/build.yml/badge.svg?branch=main)](https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer/actions/workflows/build.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Latest release](https://img.shields.io/badge/release-v0.1.0-brightgreen)](https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer/releases/latest)
[![Dalamud API](https://img.shields.io/badge/Dalamud-API_15-purple)](https://github.com/goatcorp/Dalamud)
[![.NET](https://img.shields.io/badge/.NET-10.0-512BD4)](https://dotnet.microsoft.com/)
[![FFXIV](https://img.shields.io/badge/FFXIV-7.5+-c3a37f)](https://www.finalfantasyxiv.com/)
[![Upstream](https://img.shields.io/badge/upstream-WorkingRobot%2FCraftimizer-blue)](https://github.com/WorkingRobot/Craftimizer)
<p align="center">
<img src="docs/images/hellion-forge.png" alt="Hellion Forge" width="180" />
</p>
**Version 0.1.0** — a Hellion Forge maintenance fork of
[Craftimizer](https://github.com/WorkingRobot/Craftimizer) 2.9.1.1 by
[Asriel Camora](https://github.com/WorkingRobot), brought back to life on
Dalamud SDK 15 for FFXIV 7.5+. Installs as a standalone plugin under the name
**Forgeimizer**, refuses to load while upstream Craftimizer is active.
Forgeimizer uses an independent version line (starting at 0.1.0). The
upstream Craftimizer version the current fork is built on is always
called out in the description above and the changelog entry for each
release. See [`CHANGELOG.md`](CHANGELOG.md) for the full release history.
Upstream Craftimizer received its last update for FFXIV 7.4 in late 2025 and
has been dormant since. With the Dalamud API jump from level 14 to 15 in
early 2026, the plugin stopped loading. Forgeimizer is a narrow
API-compatibility cycle that gets the crafting plugin back on its feet for
personal and friend-circle use. No features added, no design changes, no
behavior departures from upstream. If Asriel ships an official SDK 15 update
upstream, Forgeimizer folds back into a pure mirror and the recommendation
will be to switch back.
## Acknowledgements
Every line of crafting logic, every solver heuristic, the entire simulator,
the recipe data layer, the synthesis hooks, and all UI windows are
**[Asriel Camora](https://github.com/WorkingRobot)**'s work. Forgeimizer only
unblocks the API path and changes the user-facing plugin identity. Full
acknowledgement in [NOTICE.md](NOTICE.md).
Forgeimizer is maintained under **Hellion Forge**, the modding and plugin
line of [Hellion Online Media](https://hellion-media.de).
---
## What this fork changes
| Area | Upstream Craftimizer 2.9.1.1 | Forgeimizer |
| ----------------------------------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------- |
| Plugin display name (Dalamud installer) | `Craftimizer` | **`Forgeimizer`** |
| InternalName (config slot) | `Craftimizer` | **`Forgeimizer`** (separate `pluginConfigs/Forgeimizer/`) |
| Assembly | `Craftimizer.dll` | **`Forgeimizer.dll`** |
| Conflict handling | n/a | Throws `InvalidOperationException` on load if upstream `Craftimizer` is active |
| Dalamud SDK | 14.0.1 | **15.0.0** |
| Dalamud API Level | 14 | **15** |
| `FFXIVClientStructs.FFXIV.Component.GUI` type | `ValueType` | `AtkValueType` (upstream rename) |
| `Dalamud.Interface.Utility.Raii.ImRaii` nested | `IEndObject`, `Color` (removed in SDK15) | local `IEndObject` interface in `ImRaii2.cs`; typed `ImRaii.*Disposable` returns |
| `Settings.TabItem` ref-bool lifetime | `var open = true; TabItem(label, ref open, flags)` (rejected by SDK 15 escape analysis) | `TabItem(label, flags)` overload (no ref) |
Internal namespaces (`Craftimizer.*`) are intentionally left alone. This is a
deliberate light-rename so a future upstream merge stays simple.
---
## Tech Stack
| Category | Technology |
| ---------- | ------------------------------------------------------- |
| Platform | Dalamud Plugin (API Level 15) |
| Language | C# / .NET 10 (`net10.0-windows`) |
| Build | Dalamud.NET.Sdk 15.0.0 |
| UI | Dear ImGui via Dalamud bindings |
| Solver | Raphael (Rust crate, bundled as `raphael_bindings.dll`) |
| Toolchain | dotnet 10 SDK |
---
## Install
### From custom repository (recommended, friend-circle install)
> Coming once the release pipeline lands. Once active, point Dalamud at
> the `repo.json` URL from this repository root and `Forgeimizer` shows
> up in the **All Plugins** list.
### From source (dev install)
```bash
git clone ssh://git@gitea.hellion-forge.cloud:2222/JonKazama-Hellion/Craftimizer.git
cd Craftimizer
dotnet build Craftimizer.sln -c Release
```
The plugin DLL plus manifest land in `Craftimizer/bin/x64/Release/`. Point
Dalamud's **Dev Plugin Locations** at that folder (`/xlsettings`
**Experimental**) to load it as a dev plugin.
### Conflict with upstream Craftimizer
Forgeimizer refuses to load if upstream Craftimizer is also active. Both
plugins hook the same FFXIV `UseAction` and `IsActionHighlighted` paths, and
running them in parallel would corrupt either's state. The Forgeimizer
constructor throws an `InvalidOperationException` with a clear message
pointing at `/xlplugins` if it detects an active Craftimizer install.
Disable upstream Craftimizer in `/xlplugins` before enabling Forgeimizer.
---
## Project Status
**Experimental Hellion fork — small-circle use.** Custom repo and release
pipeline are next on the roadmap. If upstream Craftimizer resumes active
maintenance, Forgeimizer archives and the recommendation will be to switch
back upstream.
---
## Slash Commands
All upstream Craftimizer slash commands work unchanged, plus one alias:
| Command | What it does |
| -------------------------------------- | ------------------------------------------------ |
| `/craftimizer` _or_ **`/forgeimizer`** | Open the settings window |
| `/crafteditor` _or_ `/macroeditor` | Open the crafting macro editor |
| `/craftaction` | Execute the next suggested action in synth helper |
| `/craftretry` | Click "Retry" in the synthesis helper |
| `/craftmacros` _or_ `/macrolist` | Open the crafting macros window |
---
## Community & Support
- Bug reports and questions:
[Gitea Issues](https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer/issues)
- Discord DM: `@j.j_kazama`
- Email (business): <kontakt@hellion-media.de>
For anything that relates back to upstream Craftimizer or to attribution,
see the contact path in [NOTICE.md](NOTICE.md).
---
## License
MIT (same license as upstream Craftimizer). Full text in [LICENSE](LICENSE).
Copyright details with dual-holder block in [COPYRIGHT](COPYRIGHT). Personal
acknowledgement to the upstream author in [NOTICE.md](NOTICE.md).
© 2023 [Asriel Camora](https://github.com/WorkingRobot) for the original
Craftimizer plugin. © 2026 Hellion Online Media for the Forgeimizer
rebrand and the Dalamud SDK 15 fork-maintenance modifications.
### FFXIV Disclaimer
FINAL FANTASY XIV © SQUARE ENIX CO., LTD. All rights reserved. Craftimizer
and Forgeimizer are unofficial, fan-made plugins and are not affiliated
with, supported by, sponsored by, or approved by Square Enix.
---
## Project Documents
| Document | Contents |
| -------------------------- | -------------------------------------------------------------- |
| [`LICENSE`](LICENSE) | MIT licence full text (Asriel Camora original notice intact). |
| [`COPYRIGHT`](COPYRIGHT) | Dual-holder copyright block, visual asset attribution. |
| [`NOTICE.md`](NOTICE.md) | Acknowledgement to upstream author, scope of fork, contact. |
---
Maintained under **Hellion Forge**, the modding and plugin line of
**Hellion Online Media** | Bad Harzburg |
[hellion-media.de](https://hellion-media.de)