Project-level dotnet build defaults to AnyCPU and emits to
Craftimizer/bin/Release/, even though the csproj declares
<Platforms>x64</Platforms> and <RuntimeIdentifier>win-x64</RuntimeIdentifier>.
That mismatch silently broke the first v0.1.0 release run
(/JonKazama-Hellion/Craftimizer/actions/runs/387): build succeeded
but 'find Craftimizer/bin/x64/Release -name latest.zip' returned
'No such file or directory' so the release-action got nothing to attach.
Local builds via 'dotnet build Craftimizer.sln' work because solution-
level builds inherit the per-project Platforms list as the default,
which is a different code path from project-level builds.
Add -p:Platform=x64 to both build.yml and release.yml dotnet steps so
the CI build agrees with the find paths in the same workflow.
After this push, the v0.1.0 release can be re-triggered via Gitea's
workflow_dispatch on the tag (Actions UI -> Release -> Run workflow,
pick v0.1.0 from the Ref dropdown). The tag itself stays unchanged.
csharpier check fails with 'different line endings than formatting would
result in' when .cs files are CRLF. Linux dev box and Gitea Actions
runners both work with LF natively. Extend the LF-override to .cs,
.csproj, .sln, .yml, .yaml, .json, .md.
Asriel's original CRLF default still applies to file types not listed,
to keep the diff against upstream minimal.
Upstream defaults all text files to CRLF (Windows-only dev). On Linux,
bash refuses to execute shell scripts with CRLF line endings, which
blocked the v0.1.0 pre-push hook with 'env: »bash\r«: nicht gefunden'.
Override the default for *.sh, .githooks/*, and scripts/* to eol=lf
so the hook + preflight runs cleanly on both Linux and Windows.
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.
Reformats the entire Craftimizer source tree with dotnet csharpier 1.2.6
to match the Hellion Forge house style (matches what HellionChat enforces
in its pre-push pipeline). Pure whitespace + using-block sorting; no
semantic changes.
This is a one-time noisy commit. Future code edits in this fork should
land csharpier-clean because the pre-push hook (introduced in the next
commit) runs `dotnet csharpier check Craftimizer/` as Block C of the
preflight gate.
Trade-off acknowledged: this widens the merge gap with upstream
Craftimizer should Asriel ever resume maintenance. Given the upstream
has been dormant since FFXIV 7.4 and the fork is light-rename only
(internal namespaces unchanged), the marginal cost is acceptable.
User-facing rebrand of the Hellion Forge maintenance fork so it installs
as a separate Dalamud plugin slot named Forgeimizer and refuses to load
in parallel with upstream Craftimizer. Internal namespaces stay as
Craftimizer.* — this is a deliberate light-rename so a future upstream
merge stays straightforward.
Manifest and build:
- csproj AssemblyName = Forgeimizer (DLL is now Forgeimizer.dll)
- csproj PackageProjectUrl points at the Hellion Gitea
- csproj Authors dual-credits Asriel Camora and Hellion Forge
- Craftimizer.json renamed to Forgeimizer.json with Name/InternalName/
Punchline/Description/RepoUrl/IconUrl/ImageUrls/Tags updated to
Forgeimizer + Hellion-hosted URLs
Conflict detector:
- New Utils/CraftimizerConflictDetector.cs checks
pluginInterface.InstalledPlugins for an active InternalName=="Craftimizer"
and throws InvalidOperationException with /xlplugins guidance if found
- Plugin.cs constructor calls the detector before Service.Initialize so
no Dalamud state is touched on conflict
Other user-facing strings:
- WindowSystem name "Craftimizer" -> "Forgeimizer"
- Settings about-tab header "Craftimizer" -> "Forgeimizer", hyperlink
retargeted to the Hellion Gitea repo (upstream attribution stays on
the WorkingRobot author line below)
- Configuration.MacroMateName default "Craftimizer" -> "Forgeimizer"
- /craftimizer slash command gains a /forgeimizer alias (all other
upstream commands stay unchanged for muscle-memory compatibility)
Docs:
- README rewritten with Forgeimizer title, install section, conflict
notice, slash command table, dual-holder license footer
- COPYRIGHT title and source-code block updated to call out both the
rebrand and the SDK 15 migration as Hellion Forge fork maintenance
- NOTICE.md direct-word-to-Asriel section now also covers the rebrand
scope and the conflict detector language, with explicit invitation
to flag anything that does not sit right
LICENSE remains unchanged — Asriel Camora's MIT notice is mandatory.
Plugin Version stays at 2.9.1.1; this is a rebrand cycle, not a
version bump.
Initial Hellion Forge documentation for the Craftimizer fork.
- Replace stub README with full project page (badges, fork scope table,
tech stack, build instructions, project status, license block, FFXIV
disclaimer, Hellion Forge footer)
- Add NOTICE.md with acknowledgement to Asriel Camora as the upstream
author, direct word on fork intent, scope of changes, contact path,
and explicit non-upstreaming rationale
- Add COPYRIGHT with dual-holder source code block (Asriel 2023 +
Hellion Online Media 2026 for the SDK 15 maintenance), visual asset
block (Hellion Forge logo by Florian Eck, all-rights-reserved), and
bundled binary attribution (Raphael solver)
- Drop in the Hellion Forge logo under docs/images/
LICENSE remains unchanged — Asriel Camora's original MIT notice is
mandatory under MIT clause 3.
- Update Dalamud.NET.Sdk version in csproj
- Regenerate packages.lock.json against SDK 15
- Migrate FFXIVClientStructs.FFXIV.Component.GUI.ValueType → AtkValueType
(SynthesisValues.cs)
- Introduce local IEndObject interface in ImRaii2.cs (Dalamud's nested
ImRaii.IEndObject was removed in SDK 15)
- Switch direct Dalamud ImRaii returns to typed disposables
(ImRaii.TabItemDisposable, ImRaii.ColorDisposable)
- Replace `if (!panel)` / `if (plot)` with `.Success` checks for the
local IEndObject helpers
- Fix ref-bool lifetime issue in Settings.TabItem by using the
ImRaii.TabItem(label, flags) overload
This fixes recipes that adjust to the job level (i.e., Cosmic
Exploration) not being set to the right level after a level up when the recipe
doesn't change. This happens frequently during Red Alerts.
This can be considered an extended fix for #43.