remage6794220
Add release workflow and changelog for v0.1.0
+125 −0
3 files changed
- A .github/workflows/release.yml +59 −0
- A CHANGELOG.md +44 −0
- M README.md +22 −0
| @@ -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 | |
| @@ -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. | |
| @@ -3,6 +3,8 @@ | |||
| 3 | 3 | <p>A keyboard-centric image viewer for Linux. Fast, quiet and vim-shaped.</p> | |
| 4 | 4 | ||
| 5 | 5 | [](https://github.com/krolyxon/remage/actions/workflows/ci.yml) | |
| 6 | + | [](https://github.com/krolyxon/remage/releases/latest) | |
| 7 | + | [](https://github.com/krolyxon/remage/releases) | |
| 6 | 8 | [](https://github.com/krolyxon/remage) | |
| 7 | 9 | [](src) | |
| 8 | 10 | [](LICENSE) | |
| @@ -58,6 +60,22 @@ it with plain shell commands and an IPC socket. | |||
| 58 | 60 | ||
| 59 | 61 | ## Install | |
| 60 | 62 | ||
| 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 | + | ||
| 61 | 79 | ### Arch Linux | |
| 62 | 80 | ||
| 63 | 81 | 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 | |||
| 211 | 229 | ||
| 212 | 230 | `tests/fixtures/make.sh` regenerates the decoder fixtures. | |
| 213 | 231 | ||
| 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 | + | ||
| 214 | 236 | ## License | |
| 215 | 237 | ||
| 216 | 238 | remage is licensed under the [GNU AGPL v3](LICENSE). The embedded fonts (Space Grotesk, Space | |