diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..08b9bcd --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,45 @@ +name: Release Creation + +on: + release: + types: [published] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + # get part of the tag after the `v` + - name: Extract tag version number + id: get_version + uses: battila7/get-version-action@v2 + + # Substitute the Manifest and Download URLs in the module.json + - name: Substitute Manifest and Download Links For Versioned Ones + id: sub_manifest_link_version + uses: microsoft/variable-substitution@v1 + with: + files: 'module.json' + env: + version: ${{steps.get_version.outputs.version-without-v}} + url: https://github.com/${{github.repository}} + manifest: https://github.com/${{github.repository}}/releases/latest/download/module.json + download: https://github.com/${{github.repository}}/releases/download/${{github.event.release.tag_name}}/module.zip + + # Create a zip file with all files required by the module to add to the release + - run: zip -r ./module.zip MaterialDeck.js module.json README.md DEVGUIDE.md changelog.md css/ wiki/ img/ lang/ src/ templates/ + + # Create a release for this specific version + - name: Update Release with Files + id: create_version_release + uses: ncipollo/release-action@v1 + with: + allowUpdates: true # Set this to false if you want to prevent updating existing releases + name: ${{ github.event.release.name }} + draft: ${{ github.event.release.unpublished }} + prerelease: ${{ github.event.release.prerelease }} + token: ${{ secrets.GITHUB_TOKEN }} + artifacts: './module.json, ./module.zip' + tag: ${{ github.event.release.tag_name }} + body: ${{ github.event.release.body }} diff --git a/DEVGUIDE.md b/DEVGUIDE.md index cc1f038..f1047f1 100644 --- a/DEVGUIDE.md +++ b/DEVGUIDE.md @@ -7,7 +7,7 @@ In addition to this repo, you will also need to check out the [MaterialDeck_SD g ### Make a new system.js file -In the [src/systems](src/systems) directory, create a new system file by copying and pasting a similar system to it; for example, `cp demonlord.js wfrp4.js` +In the [src/systems](src/systems) directory, create a new system file by copying and pasting a similar system to it, or use template.js; for example, `cp demonlord.js wfrp4.js` You then need to go through all the functions in there and make sure that the correct data is set. ### Update TokenHelper diff --git a/MaterialDeck.js b/MaterialDeck.js index 0a15ed0..c9fd6de 100644 --- a/MaterialDeck.js +++ b/MaterialDeck.js @@ -1,15 +1,19 @@ -import {registerSettings} from "./src/settings.js"; -import {StreamDeck} from "./src/streamDeck.js"; -import {TokenControl} from "./src/token.js"; -import {MacroControl} from "./src/macro.js"; -import {CombatTracker} from "./src/combattracker.js"; -import {PlaylistControl} from "./src/playlist.js"; -import {SoundboardControl} from "./src/soundboard.js"; -import {OtherControls} from "./src/othercontrols.js"; -import {ExternalModules} from "./src/external.js"; -import {SceneControl} from "./src/scene.js"; -import {downloadUtility, compatibleCore, compareVersions} from "./src/misc.js"; -import {TokenHelper} from "./src/systems/tokenHelper.js"; +import { registerSettings } from "./src/settings.js"; +import { StreamDeck } from "./src/streamDeck.js"; +import { TokenControl } from "./src/actions/token.js"; +import { MacroControl } from "./src/actions/macro.js"; +import { CombatTracker } from "./src/actions/combattracker.js"; +import { PlaylistControl } from "./src/actions/playlist.js"; +import { SoundboardControl } from "./src/actions/soundboard.js"; +import { OtherControls } from "./src/actions/othercontrols.js"; +import { ExternalModules } from "./src/actions/external.js"; +import { SceneControl } from "./src/actions/scene.js"; +import { downloadUtility, compareVersions, compatibleCore } from "./src/misc.js"; +import { TokenHelper } from "./src/systems/tokenHelper.js"; + +export const minimumSDversion = "1.4.11"; +export const minimumMSversion = "1.0.2"; + export var streamDeck; export var tokenControl; export var macroControl; @@ -20,21 +24,15 @@ export var otherControls; export var externalModules; export var sceneControl; export var tokenHelper; - export const moduleName = "MaterialDeck"; - export let gamingSystem = "dnd5e"; - -let ready = false; - export let hotbarUses = false; export let calculateHotbarUses; - -let controlTokenTimer; - export let sdVersion; export let msVersion; +let ready = false; +let controlTokenTimer; let updateDialog; //CONFIG.debug.hooks = true; @@ -67,33 +65,58 @@ async function analyzeWSmessage(msg){ const msg = { target: "SD", type: "init", - system: gamingSystem + system: getGamingSystem(), + coreVersion: game.version.split('.')[0] } ws.send(JSON.stringify(msg)); if (data.MSversion) msVersion = data.MSversion; + if (data.SDversion) sdVersion = data.SDversion; console.log("streamdeck connected to server", msVersion); streamDeck.resetImageBuffer(); } if (data.type == "version" && data.source == "SD") { - let minimumSDversion; - let minimumMSversion; - if (compatibleCore("0.8.5")) { - minimumSDversion = game.modules.get("MaterialDeck").data.flags.minimumSDversion.replace('v',''); - minimumMSversion = game.modules.get("MaterialDeck").data.flags.minimumMSversion; - } - else { - minimumSDversion = game.modules.get("MaterialDeck").data.minimumSDversion.replace('v',''); - minimumMSversion = game.modules.get("MaterialDeck").data.minimumMSversion; - } - sdVersion = data.version; - if (!compareVersions(minimumSDversion,data.version) && updateDialog == undefined) { + const sdCompatible = compareVersions(minimumSDversion,sdVersion); + const msCompatible = compareVersions(minimumMSversion,msVersion); + + if ((!sdCompatible || !msCompatible) && updateDialog == undefined) { + let content = ""; + + if (!sdCompatible && !msCompatible) + content = game.i18n.localize("MaterialDeck.SdMsUpdateRequired") + else if (!sdCompatible) + content = game.i18n.localize("MaterialDeck.SdUpdateRequired") + else + content = game.i18n.localize("MaterialDeck.MsUpdateRequired") + const sd = sdCompatible ? 'display:none' : '' + const ms = msCompatible ? 'display:none' : '' + content += ` +
| + | ${game.i18n.localize("MaterialDeck.DownloadUtility.Current")} | +${game.i18n.localize("MaterialDeck.DownloadUtility.Minimum")} | +
|---|---|---|
| Stream Deck Plugin | +||
| Material Server + | ||
The Stream Deck plugin version you're using is v" + data.version + ", which is incompatible with this version of the module.
Update to v" + minimumSDversion + " or newer.