Krolyxon
Commit 6794220

Branches

Tags

Refs →

remage6794220

Add release workflow and changelog for v0.1.0

Author
krolyxon
Date
2026-11-05 00:37 +0530
Parent
8b10288
Commit
6794220bc2782495c800eceed6ed812bea99a807

+125 −0

3 files changed

  1. A .github/workflows/release.yml +59 −0
  2. A CHANGELOG.md +44 −0
  3. M README.md +22 −0
A .github/workflows/release.yml View
@@ -0,0 +1,59 @@
1+name: Release
2+
3+on:
4+ push:
5+ tags: ['v*']
6+
7+permissions:
8+ contents: write
9+
10+env:
11+ CARGO_TERM_COLOR: always
12+
13+jobs:
14+ release:
15+ name: build and publish
16+ runs-on: ubuntu-latest
17+ # Built on Arch: the binary links the system dav1d and libheif, so it suits Arch and other
18+ # rolling distros. Elsewhere, build from source.
19+ container: archlinux:latest
20+ steps:
21+ - name: Install system dependencies
22+ run: |
23+ pacman -Syu --noconfirm --needed base-devel git pkgconf rustup github-cli \
24+ dav1d libheif libxkbcommon wayland
25+ rustup default stable
26+ - uses: actions/checkout@v7
27+ - name: Check the tag matches Cargo.toml
28+ run: |
29+ version="$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -1)"
30+ test "v$version" = "$GITHUB_REF_NAME" || { echo "tag $GITHUB_REF_NAME, Cargo.toml $version"; exit 1; }
31+ - run: cargo test --locked --release
32+ - run: cargo build --locked --release
33+ - name: Package
34+ run: |
35+ name="remage-${GITHUB_REF_NAME}-x86_64-linux"
36+ dir="dist/$name"
37+ mkdir -p "$dir/completions" "$dir/contrib"
38+ install -m755 -s target/release/remage "$dir/"
39+ target/release/remage man > "$dir/remage.1"
40+ target/release/remage completions zsh > "$dir/completions/_remage"
41+ target/release/remage completions bash > "$dir/completions/remage.bash"
42+ target/release/remage completions fish > "$dir/completions/remage.fish"
43+ cp -r contrib/remage.desktop contrib/config.example.toml contrib/matugen contrib/pywal "$dir/contrib/"
44+ cp README.md LICENSE "$dir/"
45+ cp assets/fonts/OFL.txt "$dir/OFL-fonts.txt"
46+ tar -C dist -czf "dist/$name.tar.gz" "$name"
47+ (cd dist && sha256sum "$name.tar.gz" > "$name.tar.gz.sha256")
48+ - name: Release notes from CHANGELOG.md
49+ run: |
50+ version="${GITHUB_REF_NAME#v}"
51+ awk -v v="$version" '/^## /{p = index($0, "[" v "]") > 0; next} p' CHANGELOG.md > notes.md
52+ test -s notes.md || { echo "no CHANGELOG.md section for $version"; exit 1; }
53+ - name: Publish
54+ env:
55+ GH_TOKEN: ${{ github.token }}
56+ run: |
57+ git config --global --add safe.directory "$GITHUB_WORKSPACE"
58+ gh release create "$GITHUB_REF_NAME" --title "remage $GITHUB_REF_NAME" \
59+ --notes-file notes.md dist/*.tar.gz dist/*.sha256
A CHANGELOG.md View
@@ -0,0 +1,44 @@
1+# Changelog
2+
3+## [0.1.0] - 2026-11-05
4+
5+The first release: a keyboard-centric image viewer for Linux, at nsxiv parity with vim keys,
6+GPU rendering and wallpaper theming.
7+
8+**Viewing**
9+- Opens files, directories (`-r` for trees) or a list on stdin (`-i`, `-0`); a single file opens
10+ its whole directory. Natural, name, mtime, size and random sort, and the queue follows files
11+ appearing and vanishing on disk.
12+- GPU-rendered with wgpu: the first image in about 90 ms, neighbours preloaded so `n`/`p` take one
13+ frame, and no CPU use while the view is still.
14+- Fit modes, zoom at the cursor, smooth panning, rotation and flips, automatic nearest filtering for
15+ pixel art, gamma/brightness/contrast, and a dot-matrix transparency background.
16+- Thumbnail grid on the shared freedesktop cache, with marks, visual-mode ranges and smooth
17+ scrolling.
18+- Slideshow, and animation playback with frame stepping.
19+
20+**Formats**
21+- JPEG, PNG/APNG, GIF, WebP, BMP, ICO, TIFF (multi-page), TGA, PNM, QOI, DDS, HDR and OpenEXR,
22+ plus JPEG XL, AVIF, HEIC/HEIF, SVG/SVGZ (re-rendered sharp at any zoom) and camera RAW.
23+- ICC and CICP colour management, EXIF orientation, HDR tone-mapping, and tiling for images larger
24+ than the GPU's texture limit.
25+- External decoders through `[[decoders]]`, such as ImageMagick for PSD and XCF.
26+
27+**Control**
28+- Vim key notation with sequences and counts. Every feature is an action you can bind, run from the
29+ `:` palette or send over IPC.
30+- `/` fuzzy filename search, which-key hints, `?` help built from the live keymap, and an info panel
31+ with EXIF data.
32+- User commands that replace nsxiv's key-handler: placeholders, marks as targets, inline confirm,
33+ output fed back as actions, and an automatic refresh afterwards.
34+- An IPC socket and the `remage msg` client, with queries and event subscriptions.
35+
36+**Configuration**
37+- One TOML file with live reload, includes, `file:line:col` errors and "did you mean" hints.
38+- `nothing-dark` and `nothing-light` themes; matugen and pywal recolour open windows live.
39+- A man page (`remage man`) and shell completions (`remage completions <shell>`).
40+
41+**Known gaps**
42+- RAW support is built but hasn't been tested on real camera files yet.
43+- The prebuilt binary is built on Arch Linux and needs `dav1d` and `libheif` installed. On other
44+ distributions, build from source.
M README.md View
@@ -3,6 +3,8 @@
33 <p>A keyboard-centric image viewer for Linux. Fast, quiet and vim-shaped.</p>
44
55 [![CI](https://img.shields.io/github/actions/workflow/status/krolyxon/remage/ci.yml?branch=master&style=flat-square&label=CI&labelColor=000000)](https://github.com/krolyxon/remage/actions/workflows/ci.yml)
6+[![Release](https://img.shields.io/github/v/release/krolyxon/remage?style=flat-square&label=release&labelColor=000000&color=333333)](https://github.com/krolyxon/remage/releases/latest)
7+[![Downloads](https://img.shields.io/github/downloads/krolyxon/remage/total?style=flat-square&labelColor=000000&color=333333)](https://github.com/krolyxon/remage/releases)
68 [![Top language](https://img.shields.io/github/languages/top/krolyxon/remage?style=flat-square&logo=rust&logoColor=white&labelColor=000000&color=333333)](https://github.com/krolyxon/remage)
79 [![Lines of code](https://img.shields.io/badge/lines%20of%20code-17.5k-333333?style=flat-square&labelColor=000000)](src)
810 [![License](https://img.shields.io/github/license/krolyxon/remage?style=flat-square&labelColor=000000&color=333333)](LICENSE)
@@ -58,6 +60,22 @@ it with plain shell commands and an IPC socket.
5860
5961 ## Install
6062
63+### Prebuilt binary
64+
65+Each [release](https://github.com/krolyxon/remage/releases/latest) has an x86_64 tarball built on
66+Arch Linux. It needs `dav1d` and `libheif` installed and suits Arch and other rolling distros; on
67+anything else, build from source.
68+
69+```bash
70+v=0.1.0
71+curl -LO https://github.com/krolyxon/remage/releases/download/v$v/remage-v$v-x86_64-linux.tar.gz
72+tar xf remage-v$v-x86_64-linux.tar.gz && cd remage-v$v-x86_64-linux
73+install -Dm755 remage ~/.local/bin/remage
74+install -Dm644 remage.1 ~/.local/share/man/man1/remage.1
75+```
76+
77+The tarball also holds zsh/bash/fish completions, the desktop file and the example config.
78+
6179 ### Arch Linux
6280
6381 A `remage-git` PKGBUILD lives in [`contrib/PKGBUILD`](contrib/PKGBUILD):
@@ -211,6 +229,10 @@ REMAGE_SNAPSHOT=/tmp/x.png remage … # also write each settled frame t
211229
212230 `tests/fixtures/make.sh` regenerates the decoder fixtures.
213231
232+To release, bump `version` in `Cargo.toml`, add a section to [`CHANGELOG.md`](CHANGELOG.md),
233+then push a tag: `git tag v0.2.0 && git push origin v0.2.0`. The release workflow builds the
234+tarball and publishes the release with that changelog section as its notes.
235+
214236 ## License
215237
216238 remage is licensed under the [GNU AGPL v3](LICENSE). The embedded fonts (Space Grotesk, Space