diff --git a/.github/workflows/dreamforge-desktop-release.yml b/.github/workflows/dreamforge-desktop-release.yml index 36d43dc9a80..72c13f13e2c 100644 --- a/.github/workflows/dreamforge-desktop-release.yml +++ b/.github/workflows/dreamforge-desktop-release.yml @@ -275,7 +275,7 @@ jobs: BASE="https://github.com/$GH_REPO/releases/download/$TAG" MAC="Dreamforge_${VERSION}" EXE="Dreamforge_${VERSION}_x64-setup.exe" - for f in "${MAC}_aarch64.app.tar.gz" "${MAC}_x64.app.tar.gz" "$EXE"; do + for f in "${MAC}_aarch64.app.tar.gz" "${MAC}_x64.app.tar.gz" "${MAC}_aarch64.dmg" "${MAC}_x64.dmg" "$EXE"; do [ -s "dist/$f" ] || { echo "::error::missing dist/$f"; exit 1; } done # --pubkey refuses signatures from any key but the one installed apps trust. @@ -286,17 +286,24 @@ jobs: cat latest.json - name: Upload to the rolling release - env: - NOTES: | - Dreamforge desktop installers. Take the newest version number. - - **Windows:** download `Dreamforge__x64-setup.exe` and run it. If SmartScreen says "Windows protected your PC", click **More info**, then **Run anyway**. - - **Mac:** download the DMG for your chip (`aarch64` for Apple Silicon, `x64` for Intel), open it and drag Dreamforge to Applications. The first launch is blocked because the app is not notarized: open **System Settings**, **Privacy & Security**, and click **Open Anyway**. - - Installed apps update themselves from `latest.json` here. run: | - gh release view "$TAG" > /dev/null 2>&1 || gh release create "$TAG" --target "$GITHUB_SHA" --title "Dreamforge desktop" --notes "$NOTES" + BASE="https://github.com/$GH_REPO/releases/download/$TAG" + # VERSION is plain x.y.z here: "Write latest.json" refused anything else. + sed -e "s/{VERSION}/$VERSION/g" -e "s#{BASE}#$BASE#g" scripts/dreamforge-release-notes.md > notes.md + ! grep -q '[{}]' notes.md || { echo "::error::unfilled placeholder in the release notes"; exit 1; } + gh release view "$TAG" > /dev/null 2>&1 || gh release create "$TAG" --target "$GITHUB_SHA" --title "Dreamforge $VERSION" --notes-file notes.md gh release upload "$TAG" dist/*.dmg dist/*.app.tar.gz dist/*.exe dist/*.sig --clobber + # The notes only link files uploaded above, so the page may run ahead of the feed. + gh release edit "$TAG" --title "Dreamforge $VERSION" --notes-file notes.md # latest.json last, so apps only see the new version once every file it names is uploaded. gh release upload "$TAG" latest.json --clobber + # Live from here, and a rerun would be refused as "not newer": warn, never fail. + # Remove the previous version's files: latest.json no longer names them, + # and a single set keeps "which file is mine" obvious on the page. + names=$(gh release view "$TAG" --json assets --jq '.assets[].name') || echo "::warning::could not list release assets; remove old files by hand" + for name in $names; do + case "$name" in + latest.json|*"_${VERSION}_"*) ;; + *) gh release delete-asset "$TAG" "$name" --yes || echo "::warning::could not delete $name; remove it by hand" ;; + esac + done diff --git a/scripts/dreamforge-release-notes.md b/scripts/dreamforge-release-notes.md new file mode 100644 index 00000000000..b32b567219a --- /dev/null +++ b/scripts/dreamforge-release-notes.md @@ -0,0 +1,30 @@ +## Download Dreamforge {VERSION} + +Pick the one line that matches your computer and click its file. You only download from this page once: after that, Dreamforge fetches new versions itself, and when **Ready to update!** appears in its sidebar, click it. + +| Your computer | Click this file | +|---|---| +| **Windows PC** | [Dreamforge_{VERSION}_x64-setup.exe]({BASE}/Dreamforge_{VERSION}_x64-setup.exe) | +| **Mac with an Apple chip** (M1, M2, M3, M4, M5, A18 Pro or newer; most Macs from late 2020 on) | [Dreamforge_{VERSION}_aarch64.dmg]({BASE}/Dreamforge_{VERSION}_aarch64.dmg) | +| **Mac with an Intel chip** (older Macs) | [Dreamforge_{VERSION}_x64.dmg]({BASE}/Dreamforge_{VERSION}_x64.dmg) | + +**Not sure which Mac you have?** Click the Apple menu in the top-left corner, then **About This Mac**. If there is a line called **Chip** (Apple M1, M4, A18 Pro or any other Apple chip), take the Apple chip file. If there is a line called **Processor** that mentions **Intel**, take the Intel file. + +### Install on Windows + +1. If your browser warns that the file "isn't commonly downloaded", keep it. In Edge, click **...** next to the download, then **Keep**, then **Show more**, then **Keep anyway**. +2. Open the downloaded file. +3. If Windows says "Windows protected your PC", click **More info**, then **Run anyway**. This appears because Dreamforge is new and its installer isn't signed with a paid code-signing certificate. +4. Follow the installer, then open Dreamforge from the Start menu. + +If Windows instead says **Smart App Control blocked an app**, there is no Run anyway button: Windows won't allow unsigned apps while Smart App Control is on. Ask whoever sent you this link for help before changing that setting. + +### Install on a Mac + +1. Open the downloaded file and drag **Dreamforge** into **Applications**. +2. Open Dreamforge from Applications. The first time, macOS says "Dreamforge" Not Opened, because it isn't notarized by Apple. Click **Done**, not Move to Trash. +3. Within the hour, open **System Settings**, then **Privacy & Security**, and scroll down to **Security**. Next to "Dreamforge" was blocked, click **Open Anyway**. Click **Open Anyway** again and enter your Mac login password (or use Touch ID). If the button isn't there, do step 2 again. From then on, Dreamforge opens normally. + +### You can ignore the other files + +The files ending in `.app.tar.gz` and `.sig`, and `latest.json`, are what Dreamforge downloads by itself to update. The "Source code" links are added by GitHub. You don't need any of them.