Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 11 additions & 24 deletions .github/workflows/curator-build.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# Modificus Curator: PR build gate: auto-format (same-repo PRs only), build, test.
# Modificus Curator: PR build gate: auto-format, build, test.
#
# This workflow runs on pull requests targeting any branch.
#
# There is intentionally no `push:` trigger here. The release workflow
# (.github/workflows/release.yml) runs on push to main. This workflow is the
# trust gate for merges.
#
# Format behavior:
# - On pull_request from same repo: checkout PR head, run dotnet format, commit/push if changes
# - On pull_request from fork: run format in no-commit mode, skip push (forks cannot be auto-formatted)
# - On workflow_dispatch: verify-only mode (no auto-commit)
# - On pull_request: checkout PR head, run dotnet format, auto-commit with [skip ci]
# - On workflow_dispatch: run format without committing
#
# paths-ignore skips release-please's bot-authored release PRs (they only touch
# version/changelog files). Without this, those GITHUB_TOKEN-authored PRs would
Expand All @@ -16,7 +17,6 @@ name: curator-build

on:
pull_request:
branches: [main]
paths-ignore:
- 'CHANGELOG.md'
- '.release-please-manifest.json'
Expand All @@ -40,26 +40,23 @@ jobs:
working-directory: src
steps:
- uses: actions/checkout@v7
if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
with:
ref: ${{ github.head_ref }}

- uses: actions/checkout@v7
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository
ref: ${{ github.event_name == 'pull_request' && github.head_ref || github.ref }}

- name: Setup .NET 10
uses: actions/setup-dotnet@v5
with:
dotnet-version: '10.0.x'

- name: Format and commit (same-repo PR)
if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
- name: Format
run: dotnet format modificus-curator.sln

- name: Commit formatting changes
if: github.event_name != 'workflow_dispatch'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

dotnet format modificus-curator.sln

if ! git diff --quiet; then
git add -A
git commit -m "style: dotnet format [skip ci]"
Expand All @@ -69,16 +66,6 @@ jobs:
echo "No formatting changes needed"
fi

- name: Format check only (fork PR or workflow_dispatch)
if: github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository)
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
echo "Fork PR detected - running format in no-commit mode only"
else
echo "Manual workflow_dispatch - running format verification"
fi
dotnet format modificus-curator.sln --verify-no-changes

build:
name: build (${{ matrix.os }})
runs-on: ${{ matrix.os }}
Expand Down
1,222 changes: 792 additions & 430 deletions AGENTS.md

Large diffs are not rendered by default.

27 changes: 20 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
**Modificus Curator** is a mod manager for **Warhammer 40,000: Darktide**. It launches the
game modded via
[Mod Relay](https://github.com/ModifAmorphic/darktide-mod-relay) (DLL
injection: no files in the game directory, no bundle-database patching) and
stays out of the way for vanilla play (launch the game from Steam and it runs
unmodified).
injection: no patched game files, no copies, no bundle-database patching; one
self-identifying, opt-in mods link in the game folder hosts your active
profile's mod list, and nothing loads mods unless Curator launches through
Relay) and stays out of the way for vanilla play (launch the game from Steam
and it runs unmodified).

<div align="center">
<img src="docs/images/screenshots/mods_detailed_2k.png" alt="Modificus Curator main application window showing the mod list interface">
Expand All @@ -27,11 +29,22 @@ unmodified).
cached thumbnail when one is available, with a neutral placeholder otherwise.
Reorder mods by dragging the grip at the left edge of a row, or with the Move
Up and Move Down buttons; lock a mod's load-order position so reordering
leaves it in place.
leaves it in place. Downloads show up in the same list: clicking
"Download with manager" on a Nexus mod page sends the download to Curator,
which appears as a row (in place on the mod it is updating, or at the bottom
of the list for a new mod) with live progress and a Cancel button, and
Retry on failure. Downloading an older file of a mod pins it to that
version; downloading the newest file tracks the mod's latest release.
Premium update installs and opt-in automatic updates download the same way.
Curator also supports an alternate mod manager mod (for example
[AML](https://www.nexusmods.com/warhammer40kdarktide/mods/246)): add it to
a profile like any other mod and Curator stages it with the profile, hands it
to the launcher at launch, and shows a banner on the Mods page while the
manager (rather than Curator) controls mod ordering.
On first startup a one-time Welcome window introduces Curator and offers to
set up the Nexus integration. See
[`src/README.md`](src/README.md) for developer/build
details.
set up the Nexus integration. See
[`src/README.md`](src/README.md) for developer/build
details.
- **Mod Relay** (separate repo):
[darktide-mod-relay](https://github.com/ModifAmorphic/darktide-mod-relay): the
injected modding runtime + its launcher (including the mod loader that loads
Expand Down
Loading