From 0c08d8c46f507a31ad9cb3257b995e8a34a36251 Mon Sep 17 00:00:00 2001 From: tversteeg Date: Sun, 10 Mar 2024 12:22:41 +0100 Subject: [PATCH] chore(ci): use automated release and README generation --- .github/workflows/doc.yml | 33 +++++++++++++++++++++ .github/workflows/release.yml | 29 ++++++++++++++++++ .github/workflows/rust.yml | 55 ++++++++++++----------------------- README.md | 21 +++++++------ src/lib.rs | 2 +- 5 files changed, 93 insertions(+), 47 deletions(-) create mode 100644 .github/workflows/doc.yml create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml new file mode 100644 index 0000000..d671836 --- /dev/null +++ b/.github/workflows/doc.yml @@ -0,0 +1,33 @@ +name: Readme +on: push + +jobs: + # Generate the readme from lib.rs + readme: + name: Generate README.md + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + # Needed for the amend + fetch-depth: 2 + + - uses: cargo-bins/cargo-binstall@main + + - name: Install cargo-rdme + run: cargo binstall cargo-rdme -y + + - name: Get last commit message + id: last-commit-message + run: | + echo "msg=$(git log -1 --pretty=%s)" >> $GITHUB_OUTPUT + + - name: Run cargo-rdme + run: cargo rdme + + - uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: ${{ steps.last-commit-message.outputs.msg }} + commit_options: '--amend --no-edit' + push_options: '--force' + skip_fetch: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..efe5e7a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,29 @@ +name: Release + +permissions: + pull-requests: write + contents: write + +on: + push: + branches: + - main + +jobs: + release-plz: + name: Release PR + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Run release-plz + uses: MarcoIeni/release-plz-action@v0.5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index e6296a5..d7124be 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -4,17 +4,14 @@ on: paths-ignore: - "docs/**" - "**.md" - pull_request: - paths-ignore: - - "docs/**" - - "**.md" jobs: + # Check for formatting rustfmt: name: Formatter check runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@v4 - uses: actions-rs/toolchain@v1 with: @@ -29,8 +26,7 @@ jobs: command: fmt args: --all -- --check - # Run compile check on Linux, macOS, and Windows - # On both Rust stable and Rust nightly + # Run a compilation check on Linux, macOS, and Windows compile: name: Compile runs-on: ${{ matrix.os }} @@ -38,63 +34,48 @@ jobs: fail-fast: true matrix: os: [ubuntu-latest, macOS-latest, windows-latest] - toolchain: [stable, nightly] steps: # Checkout the branch being tested - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@v4 # Install rust stable - uses: dtolnay/rust-toolchain@master with: - toolchain: ${{ matrix.toolchain }} - - # Cache the built dependencies - - uses: Swatinem/rust-cache@v2.7.3 - with: - save-if: ${{ github.event_name == 'push' }} + toolchain: stable # Install cargo-hack - uses: taiki-e/install-action@cargo-hack - # Compile all feature combinations on the target platform - - name: Compile - run: cargo hack --feature-powerset check + # Check if all feature combinations compile + - name: Test + run: cargo hack --each-feature check # Run tests on Linux - # On both Rust stable and Rust nightly test: name: Test runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - toolchain: [stable, nightly] steps: # Checkout the branch being tested - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@v4 # Install rust stable - uses: dtolnay/rust-toolchain@master with: - toolchain: ${{ matrix.toolchain }} - - # Cache the built dependencies - - uses: Swatinem/rust-cache@v2.7.3 - with: - save-if: ${{ github.event_name == 'push' }} + toolchain: stable # Install cargo-hack - uses: taiki-e/install-action@cargo-hack - # Run the ignored tests that expect the above setup - - name: Run all tests + # Test all features on the target platform + - name: Test run: cargo hack --feature-powerset test + # Build the WASM target & push it to GitHub pages wasm: - name: WASM examples + name: WASM test & build runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@v4 # Install rust stable - uses: dtolnay/rust-toolchain@master @@ -107,8 +88,8 @@ jobs: with: save-if: ${{ github.event_name == 'push' }} - # Build the WASM examples - - name: Build example + # Build the WASM + - name: Build run: cargo run --package run-wasm -- --release --build-only --example window # Deploy to GitHub pages @@ -117,5 +98,5 @@ jobs: env: REPO: self BRANCH: gh-pages - FOLDER: target/wasm-examples + FOLDER: target/wasm-examples/window GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 1da2527..00c5961 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,19 @@ # rotsprite -Rust implementation/library of the RotSprite algorithm. +[![Build Status](https://github.com/tversteeg/rotsprite/workflows/CI/badge.svg)](https://github.com/tversteeg/rotsprite/actions?workflow=CI) +[![Crates.io](https://img.shields.io/crates/v/rotsprite.svg)](https://crates.io/crates/rotsprite) +[![Documentation](https://docs.rs/rotsprite/badge.svg)](https://docs.rs/rotsprite) +[![License: AGPL-3.0-or-later](https://img.shields.io/crates/l/rotsprite.svg)](#license) +[![Downloads](https://img.shields.io/crates/d/rotsprite.svg)](#downloads) -![CI](https://github.com/tversteeg/rotsprite/workflows/CI/badge.svg?branch=master) -Version -Rust Documentation -License +### [Documentation](https://docs.rs/rotsprite/) -Works with many types of pixel buffers. + +Pixel Art rotation algorithms that works with many types of pixel buffers. + +This library allows you to rotate pixel art using the [rotsprite](https://en.wikipedia.org/wiki/Pixel-art_scaling_algorithms#RotSprite) algorithm. + ![Large](docs/example-large.png?raw=true) ![Small](docs/example-small.png?raw=true) @@ -17,8 +22,6 @@ Works with many types of pixel buffers. |-|-|-| | Source Image | Rotated 30° using RotSprite | Rotated 30° using naive rotation | -## Example - ## Demos ### [WASM Demo](https://tversteeg.nl/rotsprite/window/) @@ -33,7 +36,7 @@ Uses the `["blit"]` feature flag. cargo run --example window ``` -## Credits +#### Credits [RotSprite algorithm - Xenowhirl](https://en.wikipedia.org/wiki/Pixel-art_scaling_algorithms#RotSprite)
[Pixel Art - Redshrike](https://opengameart.org/content/3-form-rpg-boss-harlequin-epicycle) diff --git a/src/lib.rs b/src/lib.rs index 8779eb9..c069438 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,4 @@ -//! # Pixel Art Rotation +//! Pixel Art rotation algorithms that works with many types of pixel buffers. //! //! This library allows you to rotate pixel art using the [rotsprite](https://en.wikipedia.org/wiki/Pixel-art_scaling_algorithms#RotSprite) algorithm.