diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5acf374..3b7ed3c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -38,11 +38,16 @@ jobs: run: | python3 - <<'PY' import importlib.util, os + from pathlib import Path spec = importlib.util.spec_from_file_location('package', 'scripts/package.py') package = importlib.util.module_from_spec(spec) spec.loader.exec_module(package) version = package.version() package.check_tag(os.environ['RELEASE_TAG'], version) + if os.environ['RELEASE_TAG']: + notes = Path('docs/releases') / f"v{version}.md" + if not notes.read_text().strip(): + raise ValueError('Release notes are empty') with open(os.environ['GITHUB_OUTPUT'], 'a') as output: print(f'version={version}', file=output) PY @@ -129,6 +134,7 @@ jobs: permissions: contents: write steps: + - uses: actions/checkout@v6 - uses: actions/download-artifact@v8 with: pattern: release-* @@ -140,6 +146,12 @@ jobs: script: | const tag = context.ref.slice('refs/tags/'.length); const repo = context.repo; + const fs = require('node:fs'); + if (!/^v\d+\.\d+\.\d+(?:-[0-9A-Za-z.]+)?$/.test(tag)) { + throw new Error('Invalid release tag'); + } + const body = fs.readFileSync(`docs/releases/${tag}.md`, 'utf8'); + if (!body.trim()) throw new Error('Release notes are empty'); const commit = await github.rest.repos.getCommit({...repo, ref: tag}); if (commit.data.sha !== context.sha) { throw new Error('Release tag moved after validation'); @@ -156,7 +168,12 @@ jobs: if (!release) { await github.rest.repos.createRelease({ ...repo, tag_name: tag, name: tag, draft: true, - generate_release_notes: true, prerelease: tag.includes('-') + body, prerelease: tag.includes('-') + }); + } else { + await github.rest.repos.updateRelease({ + ...repo, release_id: release.id, body, + prerelease: tag.includes('-') }); } - name: Upload packages and publish completed release diff --git a/Cargo.lock b/Cargo.lock index e2be3b2..d813f42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1807,7 +1807,7 @@ dependencies = [ [[package]] name = "ferese" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "ab_glyph", "async-channel", @@ -1840,14 +1840,14 @@ dependencies = [ [[package]] name = "ferese-activities" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "serde", ] [[package]] name = "ferese-animation" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "ferese-layout", "serde", @@ -1855,7 +1855,7 @@ dependencies = [ [[package]] name = "ferese-config" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "ferese-activities", "ferese-panel", @@ -1870,7 +1870,7 @@ dependencies = [ [[package]] name = "ferese-core" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "ferese-layout", "serde", @@ -1878,7 +1878,7 @@ dependencies = [ [[package]] name = "ferese-ipc" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "ferese-activities", "ferese-theme-model", @@ -1889,11 +1889,11 @@ dependencies = [ [[package]] name = "ferese-layout" -version = "0.1.0-beta.2" +version = "0.1.0" [[package]] name = "ferese-lock" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "ferese-config", "ferese-ipc", @@ -1913,7 +1913,7 @@ dependencies = [ [[package]] name = "ferese-panel" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "ferese-animation", "ferese-layout", @@ -1923,7 +1923,7 @@ dependencies = [ [[package]] name = "ferese-polkit-agent" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "ferese-config", "ferese-ipc", @@ -1942,7 +1942,7 @@ dependencies = [ [[package]] name = "ferese-protocols" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "bitflags 2.13.2", "wayland-backend", @@ -1955,7 +1955,7 @@ dependencies = [ [[package]] name = "ferese-settings" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "ferese-config", "ferese-ipc", @@ -1981,7 +1981,7 @@ source = "git+https://github.com/ferese-wm/ferese-shape?tag=v0.1.0#63d7b6dfd520d [[package]] name = "ferese-shell" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "base64", "ferese-activities", @@ -2017,7 +2017,7 @@ dependencies = [ [[package]] name = "ferese-theme" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "ferese-config", "ferese-layout", @@ -2031,7 +2031,7 @@ dependencies = [ [[package]] name = "ferese-theme-client" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "ferese-config", "ferese-ipc", @@ -2045,14 +2045,14 @@ dependencies = [ [[package]] name = "ferese-theme-model" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "serde", ] [[package]] name = "feresectl" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "clap", "ferese-activities", @@ -8368,7 +8368,7 @@ checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] name = "xdg-desktop-portal-ferese" -version = "0.1.0-beta.2" +version = "0.1.0" dependencies = [ "calloop", "dirs 6.0.0", diff --git a/Cargo.toml b/Cargo.toml index 0635336..90e6038 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ members = [ resolver = "3" [workspace.package] -version = "0.1.0-beta.2" +version = "0.1.0" edition = "2024" license = "MIT" rust-version = "1.95" diff --git a/README.md b/README.md index 24763e6..1f7fa31 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ Ferese is a Linux desktop built in Rust with Smithay. It includes a window manag desktop shell, Settings and a lock screen, with shared configuration and theming. Choose a layout per workspace and configure the desktop through Settings or a KDL file. -**Beta:** [0.1.0-beta](https://github.com/ferese-wm/ferese/releases/tag/v0.1.0-beta) -has packages for Fedora 44 and Arch Linux on x86_64. This README and the wiki -describe `main`. +**Version 0.1.0** is the first stable release. See the [release notes](docs/releases/v0.1.0.md) +for what's included. Packages target Fedora 44 and Arch Linux on x86_64. +This README and the wiki describe `main`. ![Ferese desktop with the launcher, build progress, Appearance settings and terminal windows](docs/images/screenshots/ferese-desktop.png) @@ -37,7 +37,7 @@ describe `main`. Configuration edits apply live. Invalid edits leave the last working configuration active. - Manage displays, Wi-Fi, Bluetooth and audio from Settings and Control Center. Multiple monitors, fractional scaling and monitor mirroring are supported. -- Annotate screenshots, share a window or display, and record a monitor or selected +- Annotate screenshots, share a window, workspace or display, and record a monitor or selected region with audio. The [feature roadmap](https://github.com/ferese-wm/ferese/issues/5) tracks implemented features and remaining work. @@ -45,9 +45,9 @@ The [feature roadmap](https://github.com/ferese-wm/ferese/issues/5) tracks imple ## Install Download the package for your distribution from -[Releases](https://github.com/ferese-wm/ferese/releases/tag/v0.1.0-beta), then follow +[Releases](https://github.com/ferese-wm/ferese/releases/tag/v0.1.0), then follow the [package installation instructions](https://github.com/ferese-wm/ferese/wiki/Packages-and-Releases#install-a-release-package). -The release notes list the beta's limitations. +Read the [release notes](docs/releases/v0.1.0.md) before upgrading. To build the current development version, install the [build dependencies](https://github.com/ferese-wm/ferese/wiki/Installation#requirements) diff --git a/docs/README.md b/docs/README.md index 392da00..6479e93 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,9 +1,8 @@ # Documentation These guides describe the development version on `main`. -For the packaged **0.1.0-beta**, use the -[release notes](https://github.com/ferese-wm/ferese/releases/tag/v0.1.0-beta) -and [guides at that tag](https://github.com/ferese-wm/ferese/tree/v0.1.0-beta/docs). +For **0.1.0**, use the [release notes](https://github.com/ferese-wm/ferese/releases/tag/v0.1.0) and +[guides at the release tag](https://github.com/ferese-wm/ferese/tree/v0.1.0/docs). ## Usage diff --git a/docs/installation.md b/docs/installation.md index c871cb7..4509df7 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -3,17 +3,16 @@ Ferese runs on Linux as its own Wayland session alongside your existing desktop. Launch it from a login manager, a command-based greeter or a local TTY. -The [0.1.0-beta release](https://github.com/ferese-wm/ferese/releases/tag/v0.1.0-beta) +The [0.1.0 release](https://github.com/ferese-wm/ferese/releases/tag/v0.1.0) has packages for Fedora 44 and Arch Linux on x86_64. Follow [package installation](packaging.md#install-a-release-package) to use those builds. -The steps below build the development version from `main`. It includes tabbed -window groups, binding modes, Live Activities, new panel styles, and audio and -region recording added since the beta. The wiki describes this development version. +The steps below build from `main`, which may include changes made after the +release. The wiki follows `main` too. ## Requirements -For a full session, you’ll need a Wayland-capable graphics driver and a local user +For a full session, you'll need a Wayland-capable graphics driver and a local user session with seat access through logind or seatd. A nested preview runs inside your existing Wayland desktop. diff --git a/docs/packaging.md b/docs/packaging.md index ed57c40..446bfed 100644 --- a/docs/packaging.md +++ b/docs/packaging.md @@ -89,12 +89,13 @@ release package. Submit that recipe to AUR separately if you want AUR distributi ## Publish a release 1. Set `workspace.package.version` in `Cargo.toml` and update `Cargo.lock`. -2. Commit the release changes and push them. +2. Write `docs/releases/v.md`. The workflow uses this file as the release + notes. Commit the release changes and push them. 3. Tag that commit with the same version, prefixed by `v`, then push the tag: ```sh - git tag v0.1.0-beta - git push origin v0.1.0-beta + git tag v0.1.0 + git push origin v0.1.0 ``` A tag/version mismatch fails before packaging. Tags with a prerelease suffix, diff --git a/docs/releases/v0.1.0.md b/docs/releases/v0.1.0.md new file mode 100644 index 0000000..39a4cf8 --- /dev/null +++ b/docs/releases/v0.1.0.md @@ -0,0 +1,60 @@ +# Ferese 0.1.0 + +Ferese 0.1.0 is our first stable release. It includes the window manager, panel, +Settings, notifications and lock screen, with one set of appearance settings +across the desktop. + +## Arrange your windows + +Choose a layout for each workspace. Scroll through columns of windows, tile them +to fit the screen, or let them float. You can switch layouts as your work changes +and group related windows into tabs. + +Move and resize windows with the mouse or keyboard. Overview shows your open +windows and workspaces, and the launcher finds apps, files and commands. +Display scaling has finer steps for getting text to a comfortable size. + +## Change the panel and appearance + +Build your panel in Settings. Move controls between groups, put the panel at the +top or bottom, and choose anything from a full-width bar to separate floating +controls. Morph keeps the panel in a small hub that opens when you need it. + +Pick from six themes with light and dark versions, then adjust the colors, +wallpaper, transparency and motion. The shell, Settings, menus and lock screen +follow the same theme. Changes apply as you make them. + +The panel can also show command and build progress, music controls, and a focus +timer with work and break sessions. + +## Share and record + +Share a window, a display, or one workspace. A shared workspace stays on screen +for your audience when you switch elsewhere, and leaves out the panel and +notifications. Sharing ends when you lock the desktop. + +Record a display or a selected area from the panel, with optional microphone +and system audio. The new **Capture status** item shows which apps are sharing. +With the optional OBS connection set up, it also shows when you're live, +recording, paused or reconnecting. An OBS preview alone shows **Sharing**. + +Your saved panel layout stays as it is. To add the new indicator, open +**Settings → Panel & Shell → Edit panel → Add item** and choose **Capture status**. +The [sharing guide](https://github.com/ferese-wm/ferese/blob/v0.1.0/docs/screen-sharing.md#panel-status) +includes the OBS setup steps. + +We removed repeated background checks and work that redraws an unchanged screen. +Fixes also cover floating windows opening on the wrong monitor and notification +menus closing when their unread badge clears. + +## Install or upgrade + +Packages are available below for Fedora 44 and Arch Linux on 64-bit Intel and +AMD PCs. Other distributions can [build from source](https://github.com/ferese-wm/ferese/blob/v0.1.0/docs/installation.md). + +If you're moving from a source installation to a package, follow the +[package installation guide](https://github.com/ferese-wm/ferese/blob/v0.1.0/docs/packaging.md#install-a-release-package) +first. Keep your personal configuration, then log out and back in after updating. + +Found a problem? [Open an issue](https://github.com/ferese-wm/ferese/issues) +with what happened, how to reproduce it, and your Ferese version. diff --git a/packaging/arch/ferese-git/PKGBUILD b/packaging/arch/ferese-git/PKGBUILD index 690f573..ce88283 100644 --- a/packaging/arch/ferese-git/PKGBUILD +++ b/packaging/arch/ferese-git/PKGBUILD @@ -1,5 +1,5 @@ pkgname=ferese-git -pkgver=0.1.0beta.r0.g0000000 +pkgver=0.1.0.r0.g0000000 pkgrel=1 pkgdesc='Scrolling Wayland desktop with its shell, Settings and desktop portal (Git)' arch=('x86_64') diff --git a/site/index.html b/site/index.html index 071bebb..50594af 100644 --- a/site/index.html +++ b/site/index.html @@ -4,9 +4,9 @@ - + - + @@ -36,7 +36,7 @@

A configurable Wayland desktop.

Ferese is a Wayland desktop for Linux with an included shell, Settings and lock screen. Choose a layout per workspace and configure it all in Settings or a KDL file.

-

0.1.0-beta is available for Fedora 44 and Arch Linux on x86_64. This page and the wiki describe the development version.

+

0.1.0 is the first stable release, with packages for Fedora 44 and Arch Linux on x86_64. This page and the wiki describe the development version.

@@ -63,7 +63,7 @@
-

Try Ferese.

Download the beta for Fedora 44 or Arch Linux, or build from source for the latest changes. You can preview Ferese inside an existing Wayland session.

+

Try Ferese.

Download Ferese 0.1.0 for Fedora 44 or Arch Linux, or build from source. You can preview Ferese inside an existing Wayland session.