summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/mod-build-config.md22
-rw-r--r--docs/technical-docs.md236
-rw-r--r--docs/web-services.md104
-rw-r--r--src/SMAPI.sln1
4 files changed, 182 insertions, 181 deletions
diff --git a/docs/mod-build-config.md b/docs/mod-build-config.md
index 9121c175..6c8ea2fa 100644
--- a/docs/mod-build-config.md
+++ b/docs/mod-build-config.md
@@ -14,6 +14,7 @@ for SMAPI mods and related tools. The package is fully compatible with Linux, Ma
* [Special cases](#special-cases)
* [Custom game path](#custom-game-path)
* [Non-mod projects](#non-mod-projects)
+* [For SMAPI developers](#for-smapi-developers)
* [Release notes](#release-notes)
## Use
@@ -265,6 +266,27 @@ If you need to copy the referenced DLLs into your build output, add this too:
<CopyModReferencesToBuildOutput>true</CopyModReferencesToBuildOutput>
```
+## For SMAPI developers
+The mod build package consists of three projects:
+
+project | purpose
+------------------------------------------------- | ----------------
+`StardewModdingAPI.ModBuildConfig` | Configures the build (references, deploying the mod files, setting up debugging, etc).
+`StardewModdingAPI.ModBuildConfig.Analyzer` | Adds C# analyzers which show code warnings in Visual Studio.
+`StardewModdingAPI.ModBuildConfig.Analyzer.Tests` | Unit tests for the C# analyzers.
+
+To prepare a build of the NuGet package:
+1. Install the [NuGet CLI](https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools#nugetexe-cli).
+1. Change the version and release notes in `package.nuspec`.
+2. Rebuild the solution in _Release_ mode.
+3. Open a terminal in the `bin/Pathoschild.Stardew.ModBuildConfig` package and run this command:
+ ```bash
+ nuget.exe pack
+ ```
+
+That will create a `Pathoschild.Stardew.ModBuildConfig-<version>.nupkg` file in the same directory
+which can be uploaded to NuGet or referenced directly.
+
## Release notes
### Upcoming release
* Updated for SMAPI 3.0 and Stardew Valley 1.4.
diff --git a/docs/technical-docs.md b/docs/technical-docs.md
index 5598b7a8..5ef6dfb1 100644
--- a/docs/technical-docs.md
+++ b/docs/technical-docs.md
@@ -3,27 +3,60 @@
This file provides more technical documentation about SMAPI. If you only want to use or create
mods, this section isn't relevant to you; see the main README to use or create mods.
+This document is about SMAPI itself; see also [mod build package](mod-build-config.md) and
+[web services](web-services.md).
+
# Contents
-* [SMAPI](#smapi)
- * [Development](#development)
- * [Compiling from source](#compiling-from-source)
- * [Debugging a local build](#debugging-a-local-build)
- * [Preparing a release](#preparing-a-release)
- * [Customisation](#customisation)
- * [Configuration file](#configuration-file)
- * [Command-line arguments](#command-line-arguments)
- * [Compile flags](#compile-flags)
-* [SMAPI web services](#smapi-web-services)
- * [Overview](#overview)
- * [Log parser](#log-parser)
- * [Web API](#web-api)
- * [Development](#development-2)
- * [Local development](#local-development)
- * [Deploying to Amazon Beanstalk](#deploying-to-amazon-beanstalk)
-* [Mod build config package](#mod-build-config-package)
-
-# SMAPI
-## Development
+* [Customisation](#customisation)
+ * [Configuration file](#configuration-file)
+ * [Command-line arguments](#command-line-arguments)
+ * [Compile flags](#compile-flags)
+* [For SMAPI developers](#for-smapi-developers)
+ * [Compiling from source](#compiling-from-source)
+ * [Debugging a local build](#debugging-a-local-build)
+ * [Preparing a release](#preparing-a-release)
+* [Release notes](#release-notes)
+
+## Customisation
+### Configuration file
+You can customise the SMAPI behaviour by editing the `smapi-internal/config.json` file in your game
+folder.
+
+Basic fields:
+
+field | purpose
+----------------- | -------
+`DeveloperMode` | Default `false` (except in _SMAPI for developers_ releases). Whether to enable features intended for mod developers (mainly more detailed console logging).
+`CheckForUpdates` | Default `true`. Whether SMAPI should check for a newer version when you load the game. If a new version is available, a small message will appear in the console. This doesn't affect the load time even if your connection is offline or slow, because it happens in the background.
+`VerboseLogging` | Default `false`. Whether SMAPI should log more information about the game context.
+`ModData` | Internal metadata about SMAPI mods. Changing this isn't recommended and may destabilise your game. See documentation in the file.
+
+### Command-line arguments
+The SMAPI installer recognises three command-line arguments:
+
+argument | purpose
+-------- | -------
+`--install` | Preselects the install action, skipping the prompt asking what the user wants to do.
+`--uninstall` | Preselects the uninstall action, skipping the prompt asking what the user wants to do.
+`--game-path "path"` | Specifies the full path to the folder containing the Stardew Valley executable, skipping automatic detection and any prompt to choose a path. If the path is not valid, the installer displays an error.
+
+SMAPI itself recognises two arguments, but these are intended for internal use or testing and may
+change without warning.
+
+argument | purpose
+-------- | -------
+`--no-terminal` | SMAPI won't write anything to the console window. (Messages will still be written to the log file.)
+`--mods-path` | The path to search for mods, if not the standard `Mods` folder. This can be a path relative to the game folder (like `--mods-path "Mods (test)"`) or an absolute path.
+
+### Compile flags
+SMAPI uses a small number of conditional compilation constants, which you can set by editing the
+`<DefineConstants>` element in `StardewModdingAPI.csproj`. Supported constants:
+
+flag | purpose
+---- | -------
+`SMAPI_FOR_WINDOWS` | Whether SMAPI is being compiled on Windows for players on Windows. Set automatically in `crossplatform.targets`.
+
+## For SMAPI developers
### Compiling from source
Using an official SMAPI release is recommended for most users.
@@ -68,164 +101,5 @@ on the wiki for the first-time setup.
3. Rename the folders to `SMAPI <version> installer` and `SMAPI <version> installer for developers`.
4. Zip the two folders.
-## Customisation
-### Configuration file
-You can customise the SMAPI behaviour by editing the `smapi-internal/config.json` file in your game
-folder.
-
-Basic fields:
-
-field | purpose
------------------ | -------
-`DeveloperMode` | Default `false` (except in _SMAPI for developers_ releases). Whether to enable features intended for mod developers (mainly more detailed console logging).
-`CheckForUpdates` | Default `true`. Whether SMAPI should check for a newer version when you load the game. If a new version is available, a small message will appear in the console. This doesn't affect the load time even if your connection is offline or slow, because it happens in the background.
-`VerboseLogging` | Default `false`. Whether SMAPI should log more information about the game context.
-`ModData` | Internal metadata about SMAPI mods. Changing this isn't recommended and may destabilise your game. See documentation in the file.
-
-### Command-line arguments
-The SMAPI installer recognises three command-line arguments:
-
-argument | purpose
--------- | -------
-`--install` | Preselects the install action, skipping the prompt asking what the user wants to do.
-`--uninstall` | Preselects the uninstall action, skipping the prompt asking what the user wants to do.
-`--game-path "path"` | Specifies the full path to the folder containing the Stardew Valley executable, skipping automatic detection and any prompt to choose a path. If the path is not valid, the installer displays an error.
-
-SMAPI itself recognises two arguments, but these are intended for internal use or testing and may
-change without warning.
-
-argument | purpose
--------- | -------
-`--no-terminal` | SMAPI won't write anything to the console window. (Messages will still be written to the log file.)
-`--mods-path` | The path to search for mods, if not the standard `Mods` folder. This can be a path relative to the game folder (like `--mods-path "Mods (test)"`) or an absolute path.
-
-### Compile flags
-SMAPI uses a small number of conditional compilation constants, which you can set by editing the
-`<DefineConstants>` element in `StardewModdingAPI.csproj`. Supported constants:
-
-flag | purpose
----- | -------
-`SMAPI_FOR_WINDOWS` | Whether SMAPI is being compiled on Windows for players on Windows. Set automatically in `crossplatform.targets`.
-
-# SMAPI web services
-## Overview
-The `StardewModdingAPI.Web` project provides an API and web UI hosted at `*.smapi.io`.
-
-### Log parser
-The log parser provides a web UI for uploading, parsing, and sharing SMAPI logs. The logs are
-persisted in a compressed form to Pastebin.
-
-The log parser lives at https://log.smapi.io.
-
-### Web API
-SMAPI provides a web API at `api.smapi.io` for use by SMAPI and external tools. The URL includes a
-`{version}` token, which is the SMAPI version for backwards compatibility. This API is publicly
-accessible but not officially released; it may change at any time.
-
-The API has one `/mods` endpoint. This provides mod info, including official versions and URLs
-(from Chucklefish, GitHub, or Nexus), unofficial versions from the wiki, and optional mod metadata
-from the wiki and SMAPI's internal data. This is used by SMAPI to perform update checks, and by
-external tools to fetch mod data.
-
-The API accepts a `POST` request with the mods to match, each of which **must** specify an ID and
-may _optionally_ specify [update keys](https://stardewvalleywiki.com/Modding:Modder_Guide/APIs/Manifest#Update_checks).
-The API will automatically try to fetch known update keys from the wiki and internal data based on
-the given ID.
-
-```
-POST https://api.smapi.io/v2.0/mods
-{
- "mods": [
- {
- "id": "Pathoschild.LookupAnything",
- "updateKeys": [ "nexus:541", "chucklefish:4250" ]
- }
- ],
- "includeExtendedMetadata": true
-}
-```
-
-The API will automatically aggregate versions and errors. Each mod will include...
-* an `id` (matching what you passed in);
-* up to three versions: `main` (e.g. 'latest version' field on Nexus), `optional` if newer (e.g.
- optional files on Nexus), and `unofficial` if newer (from the wiki);
-* `metadata` with mod info crossreferenced from the wiki and internal data (only if you specified
- `includeExtendedMetadata: true`);
-* and `errors` containing any error messages that occurred while fetching data.
-
-For example:
-```
-[
- {
- "id": "Pathoschild.LookupAnything",
- "main": {
- "version": "1.19",
- "url": "https://www.nexusmods.com/stardewvalley/mods/541"
- },
- "metadata": {
- "id": [
- "Pathoschild.LookupAnything",
- "LookupAnything"
- ],
- "name": "Lookup Anything",
- "nexusID": 541,
- "gitHubRepo": "Pathoschild/StardewMods",
- "compatibilityStatus": "Ok",
- "compatibilitySummary": "✓ use latest version."
- },
- "errors": []
- }
-]
-```
-
-## Development
-### Local development
-`StardewModdingAPI.Web` is a regular ASP.NET MVC Core app, so you can just launch it from within
-Visual Studio to run a local version.
-
-There are two differences when it's run locally: all endpoints use HTTP instead of HTTPS, and the
-subdomain portion becomes a route (e.g. `log.smapi.io` &rarr; `localhost:59482/log`).
-
-Before running it locally, you need to enter your credentials in the `appsettings.Development.json`
-file. See the next section for a description of each setting. This file is listed in `.gitignore`
-to prevent accidentally committing credentials.
-
-### Deploying to Amazon Beanstalk
-The app can be deployed to a standard Amazon Beanstalk IIS environment. When creating the
-environment, make sure to specify the following environment properties:
-
-property name | description
-------------------------------- | -----------------
-`LogParser:PastebinDevKey` | The [Pastebin developer key](https://pastebin.com/api#1) used to authenticate with the Pastebin API.
-`LogParser:PastebinUserKey` | The [Pastebin user key](https://pastebin.com/api#8) used to authenticate with the Pastebin API. Can be left blank to post anonymously.
-`LogParser:SectionUrl` | The root URL of the log page, like `https://log.smapi.io/`.
-`ModUpdateCheck:GitHubPassword` | The password with which to authenticate to GitHub when fetching release info.
-`ModUpdateCheck:GitHubUsername` | The username with which to authenticate to GitHub when fetching release info.
-
-## Mod build config package
-### Overview
-The mod build config package is a NuGet package that mods reference to automatically set up
-references, configure the build, and add analyzers specific to Stardew Valley mods.
-
-This involves three projects:
-
-project | purpose
-------------------------------------------------- | ----------------
-`StardewModdingAPI.ModBuildConfig` | Configures the build (references, deploying the mod files, setting up debugging, etc).
-`StardewModdingAPI.ModBuildConfig.Analyzer` | Adds C# analyzers which show code warnings in Visual Studio.
-`StardewModdingAPI.ModBuildConfig.Analyzer.Tests` | Unit tests for the C# analyzers.
-
-When the projects are built, the relevant files are copied into `bin/Pathoschild.Stardew.ModBuildConfig`.
-
-### Preparing a build
-To prepare a build of the NuGet package:
-1. Install the [NuGet CLI](https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools#nugetexe-cli).
-1. Change the version and release notes in `package.nuspec`.
-2. Rebuild the solution in _Release_ mode.
-3. Open a terminal in the `bin/Pathoschild.Stardew.ModBuildConfig` package and run this command:
- ```bash
- nuget.exe pack
- ```
-
-That will create a `Pathoschild.Stardew.ModBuildConfig-<version>.nupkg` file in the same directory
-which can be uploaded to NuGet or referenced directly.
+## Release notes
+See [release notes](release-notes.md).
diff --git a/docs/web-services.md b/docs/web-services.md
new file mode 100644
index 00000000..601152de
--- /dev/null
+++ b/docs/web-services.md
@@ -0,0 +1,104 @@
+**SMAPI.Web** contains the code for the `smapi.io` website, including the mod compatibility list
+and update check API.
+
+## Contents
+* [Overview](#overview)
+ * [Log parser](#log-parser)
+ * [Web API](#web-api)
+* [For SMAPI developers](#for-smapi-developers)
+ * [Local development](#local-development)
+ * [Deploying to Amazon Beanstalk](#deploying-to-amazon-beanstalk)
+
+## Overview
+The `StardewModdingAPI.Web` project provides an API and web UI hosted at `*.smapi.io`.
+
+### Log parser
+The log parser provides a web UI for uploading, parsing, and sharing SMAPI logs. The logs are
+persisted in a compressed form to Pastebin.
+
+The log parser lives at https://log.smapi.io.
+
+### Web API
+SMAPI provides a web API at `api.smapi.io` for use by SMAPI and external tools. The URL includes a
+`{version}` token, which is the SMAPI version for backwards compatibility. This API is publicly
+accessible but not officially released; it may change at any time.
+
+The API has one `/mods` endpoint. This provides mod info, including official versions and URLs
+(from Chucklefish, GitHub, or Nexus), unofficial versions from the wiki, and optional mod metadata
+from the wiki and SMAPI's internal data. This is used by SMAPI to perform update checks, and by
+external tools to fetch mod data.
+
+The API accepts a `POST` request with the mods to match, each of which **must** specify an ID and
+may _optionally_ specify [update keys](https://stardewvalleywiki.com/Modding:Modder_Guide/APIs/Manifest#Update_checks).
+The API will automatically try to fetch known update keys from the wiki and internal data based on
+the given ID.
+
+```
+POST https://api.smapi.io/v2.0/mods
+{
+ "mods": [
+ {
+ "id": "Pathoschild.LookupAnything",
+ "updateKeys": [ "nexus:541", "chucklefish:4250" ]
+ }
+ ],
+ "includeExtendedMetadata": true
+}
+```
+
+The API will automatically aggregate versions and errors. Each mod will include...
+* an `id` (matching what you passed in);
+* up to three versions: `main` (e.g. 'latest version' field on Nexus), `optional` if newer (e.g.
+ optional files on Nexus), and `unofficial` if newer (from the wiki);
+* `metadata` with mod info crossreferenced from the wiki and internal data (only if you specified
+ `includeExtendedMetadata: true`);
+* and `errors` containing any error messages that occurred while fetching data.
+
+For example:
+```
+[
+ {
+ "id": "Pathoschild.LookupAnything",
+ "main": {
+ "version": "1.19",
+ "url": "https://www.nexusmods.com/stardewvalley/mods/541"
+ },
+ "metadata": {
+ "id": [
+ "Pathoschild.LookupAnything",
+ "LookupAnything"
+ ],
+ "name": "Lookup Anything",
+ "nexusID": 541,
+ "gitHubRepo": "Pathoschild/StardewMods",
+ "compatibilityStatus": "Ok",
+ "compatibilitySummary": "✓ use latest version."
+ },
+ "errors": []
+ }
+]
+```
+
+## For SMAPI developers
+### Local development
+`StardewModdingAPI.Web` is a regular ASP.NET MVC Core app, so you can just launch it from within
+Visual Studio to run a local version.
+
+There are two differences when it's run locally: all endpoints use HTTP instead of HTTPS, and the
+subdomain portion becomes a route (e.g. `log.smapi.io` &rarr; `localhost:59482/log`).
+
+Before running it locally, you need to enter your credentials in the `appsettings.Development.json`
+file. See the next section for a description of each setting. This file is listed in `.gitignore`
+to prevent accidentally committing credentials.
+
+### Deploying to Amazon Beanstalk
+The app can be deployed to a standard Amazon Beanstalk IIS environment. When creating the
+environment, make sure to specify the following environment properties:
+
+property name | description
+------------------------------- | -----------------
+`LogParser:PastebinDevKey` | The [Pastebin developer key](https://pastebin.com/api#1) used to authenticate with the Pastebin API.
+`LogParser:PastebinUserKey` | The [Pastebin user key](https://pastebin.com/api#8) used to authenticate with the Pastebin API. Can be left blank to post anonymously.
+`LogParser:SectionUrl` | The root URL of the log page, like `https://log.smapi.io/`.
+`ModUpdateCheck:GitHubPassword` | The password with which to authenticate to GitHub when fetching release info.
+`ModUpdateCheck:GitHubUsername` | The username with which to authenticate to GitHub when fetching release info.
diff --git a/src/SMAPI.sln b/src/SMAPI.sln
index 3a8ed920..08a47a46 100644
--- a/src/SMAPI.sln
+++ b/src/SMAPI.sln
@@ -39,6 +39,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{EB35A917-6
..\docs\README.md = ..\docs\README.md
..\docs\release-notes.md = ..\docs\release-notes.md
..\docs\technical-docs.md = ..\docs\technical-docs.md
+ ..\docs\web-services.md = ..\docs\web-services.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Internal", "Internal", "{82D22ED7-A0A7-4D64-8E92-4B6A5E74ED11}"