From b90b1c68ffcc39f32e96f4b4f4e4a1e96f852667 Mon Sep 17 00:00:00 2001 From: alenvelocity Date: Thu, 8 Oct 2026 23:15:25 +0530 Subject: [PATCH] Prepare the 0.1.0 release Set the version to 0.1.0 everywhere, add a Release workflow that builds the CLI for Windows, macOS, and Linux on a v* tag and publishes the archives with checksums, and add a download page that links to them through the stable releases/latest URLs. CHANGELOG.md holds the notes the workflow publishes. --- .github/workflows/release.yml | 110 ++++++++++++++++++++++++++++ CHANGELOG.md | 35 +++++++++ CONTRIBUTING.md | 9 +++ Cargo.lock | 6 +- Cargo.toml | 4 +- README.md | 8 +- site/content/docs.md | 2 + site/package.json | 2 +- site/public/wasm/meowscript_bg.wasm | Bin 304426 -> 304426 bytes site/src/app/download/page.tsx | 102 ++++++++++++++++++++++++++ site/src/app/page.tsx | 7 +- site/src/components/SiteHeader.tsx | 3 + site/src/generated/stdlib.ts | 2 +- 13 files changed, 280 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 CHANGELOG.md create mode 100644 site/src/app/download/page.tsx diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..6989031 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,110 @@ +name: Release + +on: + push: + tags: ["v*"] + +permissions: + contents: write + +jobs: + build: + name: Build ${{ matrix.target }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + - os: ubuntu-24.04-arm + target: aarch64-unknown-linux-gnu + - os: macos-latest + target: aarch64-apple-darwin + - os: macos-latest + target: x86_64-apple-darwin + - os: windows-latest + target: x86_64-pc-windows-msvc + steps: + - uses: actions/checkout@v4 + + - name: Tag must match the crate version + shell: bash + run: | + tag="${GITHUB_REF_NAME#v}" + version="$(grep -m1 '^version = ' Cargo.toml | cut -d'"' -f2)" + if [ "$tag" != "$version" ]; then + echo "tag v$tag does not match Cargo.toml version $version" + exit 1 + fi + + - uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + + - uses: Swatinem/rust-cache@v2 + with: + key: ${{ matrix.target }} + + - run: cargo build --release -p meowscript-cli --target ${{ matrix.target }} + + - name: Package + shell: bash + run: | + name="meowscript-${{ matrix.target }}" + mkdir -p "dist/$name" + cp README.md CHANGELOG.md "dist/$name/" + cp -r examples "dist/$name/examples" + case "${{ matrix.target }}" in + *windows*) + cp "target/${{ matrix.target }}/release/meowscript.exe" "dist/$name/" + (cd dist && 7z a -tzip "$name.zip" "$name" > /dev/null) + ;; + *) + cp "target/${{ matrix.target }}/release/meowscript" "dist/$name/" + (cd dist && tar -czf "$name.tar.gz" "$name") + ;; + esac + ls -la dist + + - uses: actions/upload-artifact@v4 + with: + name: meowscript-${{ matrix.target }} + path: | + dist/*.zip + dist/*.tar.gz + if-no-files-found: error + + release: + name: Publish release + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/download-artifact@v4 + with: + path: dist + merge-multiple: true + + - name: Release notes from CHANGELOG.md + run: | + version="${GITHUB_REF_NAME#v}" + awk -v v="$version" ' + $0 ~ "^## " v "( |$)" { on = 1; next } + /^## / && on { exit } + on { print } + ' CHANGELOG.md > notes.md + if [ ! -s notes.md ]; then + echo "No changelog entry for $version." > notes.md + fi + cat notes.md + + - name: Checksums + run: cd dist && sha256sum * > SHA256SUMS.txt && cat SHA256SUMS.txt + + - uses: softprops/action-gh-release@v2 + with: + name: MeowScript ${{ github.ref_name }} + body_path: notes.md + files: dist/* diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..508a9d8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,35 @@ +# Changelog + +Each release has a section here. The release workflow uses the matching section as the GitHub release notes. + +## 0.1.0 (2026-10-08) + +The first release of the rewritten interpreter. The previous code, kept in git history, was a learning project that had stopped compiling; this is a new implementation with the same keywords. + +### Language + +- `scratch`, `amew`, `pawction`, `purrhaps`/`meowtually`, `tail`, `furrever`, `hiss`, `continue`, `furreal`, `pawckage`, `purrfect`, `clawful`, and the `'s` possessive, as before. +- New: `mew` (null), `&&` and `||`, `fur item ~ things` loops, `furrever` with a condition, named `pawction` declarations, `amew` into object keys and furrball elements, string escapes, block comments, and `purrhaps` as an expression. +- Furrballs and objects are reference types. Blocks, loops, and calls each open a scope. +- Operators use Python's precedence. Only `mew` and `clawful` are falsy. Dividing by zero is an error. +- Errors report a line and column with a caret, and unknown names get a "did you mean" hint. + +### Standard library + +- Always available: `meow`, `purr`, `log`, `length`. +- `nya:clawtility`, `nya:furrball`, `nya:whiskers`, `nya:catculator`, `nya:rundamn`, and `nya:scratchpad`, about 70 functions in all, every one with an arity check. +- `pawckage "./file.meow"` imports another file, resolved relative to the importing file. + +### Command line + +- `meowscript FILE`, `meowscript eval CODE`, `meowscript packages`, and a REPL that keeps reading while a block is open. +- Prebuilt binaries for Windows x64, macOS (Apple silicon and Intel), and Linux (x64 and arm64). They are not code-signed, so Windows and macOS show a warning on first run. + +### Playground + +- The interpreter runs in the browser as WebAssembly inside a Web Worker, with a Stop button, streamed output, and a docs page whose library reference comes from the interpreter itself. + +### Known limits + +- `kibble` (input) and file pawckages don't work in the browser. +- Reference cycles between closures and their scopes are never freed; long REPL sessions grow. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 72e6fd2..ca159ba 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,3 +62,12 @@ and commit the results in `site/public/wasm` and `site/src/generated`. CI checks ## Pull requests Say what changed and why. If it changes the language, show a before and after. + +## Releasing + +1. Set the new version in `Cargo.toml` (the `[workspace.package]` entry and the `meowscript` dependency) and in `site/package.json`, then run `cargo build` so `Cargo.lock` follows. +2. In `site/`, run `pnpm build:wasm && pnpm sync`, so the playground and docs report the new version. +3. Add a section to `CHANGELOG.md` headed `## X.Y.Z (YYYY-MM-DD)`. The release workflow uses it as the release notes. +4. Merge to master, then tag it: `git tag vX.Y.Z && git push origin vX.Y.Z`. + +The Release workflow builds the CLI for Windows x64, macOS (both chips), and Linux (x64 and arm64), and publishes a GitHub release with the archives and a `SHA256SUMS.txt`. It refuses a tag whose version differs from `Cargo.toml`. The download page links to `releases/latest/download/`, so the asset names must stay the same across releases. diff --git a/Cargo.lock b/Cargo.lock index fd625e0..345b2db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -124,14 +124,14 @@ dependencies = [ [[package]] name = "meowscript" -version = "1.0.0" +version = "0.1.0" dependencies = [ "indexmap", ] [[package]] name = "meowscript-cli" -version = "1.0.0" +version = "0.1.0" dependencies = [ "clap", "meowscript", @@ -139,7 +139,7 @@ dependencies = [ [[package]] name = "meowscript-wasm" -version = "1.0.0" +version = "0.1.0" dependencies = [ "js-sys", "meowscript", diff --git a/Cargo.toml b/Cargo.toml index 00d07b3..8a1f2c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,13 +7,13 @@ members = [ ] [workspace.package] -version = "1.0.0" +version = "0.1.0" edition = "2024" repository = "https://github.com/AlenVelocity/MeowScript" rust-version = "1.88" [workspace.dependencies] -meowscript = { path = "crates/meowscript", version = "1.0.0" } +meowscript = { path = "crates/meowscript", version = "0.1.0" } indexmap = "2" [profile.release] diff --git a/README.md b/README.md index 5814f15..86210c3 100644 --- a/README.md +++ b/README.md @@ -58,10 +58,12 @@ Meow-sterious! name error: `cuont` hasn't been `scratch`ed yet; did you mean `co ## Install -With a Rust toolchain: +Prebuilt binaries for Windows x64, macOS (Apple silicon and Intel), and Linux (x64 and arm64) are on the [releases page](https://github.com/AlenVelocity/MeowScript/releases/latest), with a `SHA256SUMS.txt`. The [download page](https://meowscript.vercel.app/download) picks the right file for each platform and explains the unsigned-binary warnings on Windows and macOS. Unpack the archive and put `meowscript` on your PATH. + +With a Rust toolchain (1.88 or newer): ```bash -cargo install --git https://github.com/AlenVelocity/MeowScript meowscript-cli +cargo install --git https://github.com/AlenVelocity/MeowScript --tag v0.1.0 meowscript-cli ``` ``` @@ -71,6 +73,8 @@ meowscript eval "1 + 2" # evaluate a snippet meowscript packages # what the nya: pawckages contain ``` +Changes between versions are in [CHANGELOG.md](CHANGELOG.md). + ## Layout ``` diff --git a/site/content/docs.md b/site/content/docs.md index f783f4a..ef3ac7c 100644 --- a/site/content/docs.md +++ b/site/content/docs.md @@ -243,6 +243,8 @@ The exclamation tells you the kind: *Meowch!* for syntax, *Meow-sterious!* for a ## The command line +Prebuilt binaries are on the [download page](/download). With a Rust toolchain you can also build it yourself: + ``` cargo install --git https://github.com/AlenVelocity/MeowScript meowscript-cli diff --git a/site/package.json b/site/package.json index 4c8a5e4..826904f 100644 --- a/site/package.json +++ b/site/package.json @@ -1,6 +1,6 @@ { "name": "meowscript-site", - "version": "1.0.0", + "version": "0.1.0", "private": true, "engines": { "node": "24.x" diff --git a/site/public/wasm/meowscript_bg.wasm b/site/public/wasm/meowscript_bg.wasm index 01951458524987613499b0300e788b30129d7636..c854ad6dcf8e9e442cb001c6ff63b282b094b7e8 100644 GIT binary patch delta 25 hcmZ2=N@&$7p@tU57N#xCj<1;w^bEJVyk>s3699;x3Y7o= delta 25 hcmZ2=N@&$7p@tU57N#xCj<1;w^$fPVyk>s3699;z3Y7o= diff --git a/site/src/app/download/page.tsx b/site/src/app/download/page.tsx new file mode 100644 index 0000000..addf2c0 --- /dev/null +++ b/site/src/app/download/page.tsx @@ -0,0 +1,102 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { CodeBlock } from "@/components/CodeBlock"; +import { SiteFooter } from "@/components/SiteFooter"; +import { SiteHeader } from "@/components/SiteHeader"; +import { stdlib } from "@/generated/stdlib"; + +export const metadata: Metadata = { + title: "Download", + description: "Prebuilt MeowScript binaries for Windows, macOS, and Linux, and how to build from source.", +}; + +const RELEASES = "https://github.com/AlenVelocity/MeowScript/releases"; +const LATEST = `${RELEASES}/latest/download`; + +const builds = [ + { os: "Windows", chip: "x64", file: "meowscript-x86_64-pc-windows-msvc.zip" }, + { os: "macOS", chip: "Apple silicon", file: "meowscript-aarch64-apple-darwin.tar.gz" }, + { os: "macOS", chip: "Intel", file: "meowscript-x86_64-apple-darwin.tar.gz" }, + { os: "Linux", chip: "x64", file: "meowscript-x86_64-unknown-linux-gnu.tar.gz" }, + { os: "Linux", chip: "arm64", file: "meowscript-aarch64-unknown-linux-gnu.tar.gz" }, +]; + +export default function DownloadPage() { + const version = `v${stdlib.version}`; + return ( + <> + +
+
+

Download

+

+ The command line build runs .meow files, has a REPL, and can read and write files, which the + playground can't. The current release is {version}. Every release, with checksums, is on the{" "} + + releases page + + . +

+ + + +

After downloading

+

+ The archive holds the meowscript program, the README, and the example programs. Unpack it + anywhere and either run it from that folder or put it on your PATH. +

+ +
    +
  • + Windows may say the publisher is unknown, because the binary is + not signed. Choose More info, then Run anyway. +
  • +
  • + macOS blocks unsigned downloads until you clear the quarantine + flag: run xattr -d com.apple.quarantine ./meowscript once, or right-click the file and + choose Open. +
  • +
  • + Linux needs nothing extra. The tarball keeps the executable + bit. +
  • +
+ +

Build from source

+

With a Rust toolchain (1.88 or newer), cargo can build and install it:

+ +

+ The commands and the REPL are described at the end of the{" "} + + reference + + . +

+
+
+ + + ); +} diff --git a/site/src/app/page.tsx b/site/src/app/page.tsx index b673320..1f201a7 100644 --- a/site/src/app/page.tsx +++ b/site/src/app/page.tsx @@ -93,7 +93,12 @@ export default function Home() { Run it on your own machine

- The command line build adds a REPL and file access. It needs a Rust toolchain. + The command line build adds a REPL and file access. Prebuilt binaries for Windows, macOS, and Linux are on + the{" "} + + download page + + , or build it with cargo:

Docs + + Download + GitHub diff --git a/site/src/generated/stdlib.ts b/site/src/generated/stdlib.ts index 2389b45..34dc37a 100644 --- a/site/src/generated/stdlib.ts +++ b/site/src/generated/stdlib.ts @@ -26,7 +26,7 @@ export interface StdlibDoc { } export const stdlib: StdlibDoc = { - "version": "1.0.0", + "version": "0.1.0", "prelude": [ { "name": "meow",