notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit d57a3ebc6293aa53a454edb62dffceb9411db23a
parent e812be476db10087facd4e5b074cba50188a544b
Author: William Casarin <jb55@jb55.com>
Date:   Wed, 27 Nov 2024 11:59:20 -0800

github: add windows build matrix and installer package

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
M.github/workflows/rust.yml | 212++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------
Mscripts/windows-installer.iss | 2+-
2 files changed, 135 insertions(+), 79 deletions(-)

diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml @@ -1,61 +1,8 @@ -on: [push, pull_request] +on: [pull_request] name: CI -env: - # This is required to enable the web_sys clipboard API which egui_web uses - # https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html - # https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html - RUSTFLAGS: --cfg=web_sys_unstable_apis - jobs: - check: - name: Check - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable - override: true - - uses: actions-rs/cargo@v1 - with: - command: check -# args: --all-features - -# check_wasm: -# name: Check wasm32 -# runs-on: ubuntu-latest -# steps: -# - uses: actions/checkout@v2 -# - uses: actions-rs/toolchain@v1 -# with: -# profile: minimal -# toolchain: stable -# target: wasm32-unknown-unknown -# override: true -# - uses: actions-rs/cargo@v1 -# with: -# command: check -# args: --all-features --lib --target wasm32-unknown-unknown - - test: - name: Test Suite - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable - override: true - - run: sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libspeechd-dev libxkbcommon-dev libssl-dev - - uses: actions-rs/cargo@v1 - with: - command: test - args: --lib - fmt: name: Rustfmt runs-on: ubuntu-latest @@ -83,59 +30,168 @@ jobs: toolchain: stable override: true components: clippy + + - uses: Swatinem/rust-cache@v2 - uses: actions-rs/cargo@v1 with: command: clippy args: -- -D warnings -# trunk: -# name: trunk -# runs-on: ubuntu-latest -# steps: -# - uses: actions/checkout@v2 -# - uses: actions-rs/toolchain@v1 -# with: -# profile: minimal -# toolchain: 1.61.0 -# target: wasm32-unknown-unknown -# override: true -# - name: Download and install Trunk binary -# run: wget -qO- https://github.com/thedodd/trunk/releases/latest/download/trunk-x86_64-unknown-linux-gnu.tar.gz | tar -xzf- -# - name: Build -# run: ./trunk build - - packages: - name: Build Packages + build-and-test: + name: Build and Test (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest] + toolchain: [stable] + steps: + # Checkout the repository + - name: Checkout Code + uses: actions/checkout@v2 + + # Set up the Rust toolchain + - name: Setup Rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: ${{ matrix.toolchain }} + override: true + + # Cache + - name: Rust cache + uses: Swatinem/rust-cache@v2 + + # Install dependencies (only for Ubuntu) + - name: Install Dependencies (Ubuntu) + if: runner.os == 'Linux' + run: sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libspeechd-dev libxkbcommon-dev libssl-dev + + # Run tests + - name: Run Tests + uses: actions-rs/cargo@v1 + with: + command: test + args: --release + + # Build + - name: Build + uses: actions-rs/cargo@v1 + with: + command: build + args: --release + + # Strip Debug Symbols + # + ## > Don't strip for now < + # + #- name: Strip Debug Symbols + # if: runner.os == 'Linux' + # run: strip target/release/notedeck || echo "Skipping strip if not applicable" + + # Upload bin for further packaging steps + - name: Upload Build Artifacts (Linux) + if: runner.os == 'Linux' + uses: actions/upload-artifact@v4 + with: + name: notedeck-linux-bin + path: target/release/notedeck + + # Upload exe for further packaging steps + - name: Upload Build Artifacts (Windows) + if: runner.os == 'Windows' + uses: actions/upload-artifact@v4 + with: + name: notedeck.exe + path: target/release/notedeck.exe + + packaging: + name: Build Linux Packages runs-on: ubuntu-latest + needs: build-and-test steps: + # Checkout the repository - name: Checkout Code uses: actions/checkout@v2 + # Install Packaging Tools - name: Install Packaging Tools run: | sudo apt-get update sudo apt-get install -y rpm binutils cargo install cargo-generate-rpm cargo-deb - - name: Build Project - run: cargo build --release + - name: Download Build Artifacts + uses: actions/download-artifact@v4 + with: + name: notedeck-linux-bin # Assuming you need the Release build + path: target/release - - name: Strip Debug Symbols - run: strip target/release/notedeck || echo "Skipping strip if not applicable" + # Cache + - name: Rust cache + uses: Swatinem/rust-cache@v2 + # Build Packages - name: Build Packages run: | cargo generate-rpm cargo deb + # Upload RPM Package - name: Upload RPM Package uses: actions/upload-artifact@v4 with: - name: notedeck-rpm + name: notedeck.rpm path: target/generate-rpm/*.rpm + # Upload Debian Package - name: Upload Debian Package uses: actions/upload-artifact@v4 with: - name: notedeck-deb + name: notedeck.deb path: target/debian/*.deb + + windows-installer: + name: Build Windows Installer + runs-on: windows-latest + needs: build-and-test + steps: + # Checkout the repository + - name: Checkout Code + uses: actions/checkout@v2 + + - name: Download Build Artifacts + uses: actions/download-artifact@v4 + with: + name: notedeck.exe # Assuming you need the Release build + path: target/release + + # Create packages directory + - name: Create packages directory + run: mkdir packages + + # Install Inno Setup + - name: Install Inno Setup + run: choco install innosetup --no-progress --yes + + # Validate executable exists + - name: Validate required files + run: | + if (!(Test-Path -Path target\release\notedeck.exe)) { + throw "Executable 'notedeck.exe' not found in 'target/release'." + } + + # Build Installer + - name: Run Inno Setup Script + run: | + & "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" "scripts\windows-installer.iss" + + # List outputs + - name: List Inno Script outputs + run: dir packages + + # Upload the installer as an artifact + - name: Upload Installer + uses: actions/upload-artifact@v4 + with: + name: DamusNotedeckInstaller.exe + path: packages\DamusNotedeckInstaller.exe diff --git a/scripts/windows-installer.iss b/scripts/windows-installer.iss @@ -3,7 +3,7 @@ AppName=Damus Notedeck AppVersion=0.1 DefaultDirName={pf}\Notedeck DefaultGroupName=Damus Notedeck -OutputDir=packages +OutputDir=..\packages OutputBaseFilename=DamusNotedeckInstaller Compression=lzma SolidCompression=yes