diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..a9720e6 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,54 @@ +name: Build + +on: + workflow_dispatch: + +jobs: + build: + name: ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + - uses: actions/cache@v4 + continue-on-error: false + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-build-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ runner.os }}-build- + - uses: extractions/setup-just@v2 + - name: Mac build + if: startsWith(runner.os, 'macos') + working-directory: crates/rpack_egui + run: just create_mac_installer + - name: Regular installer + if: ${{ !startsWith(runner.os, 'macos') }} + working-directory: crates/rpack_egui + run: | + just create_installer + mkdir ../../artifacts + cp RpackInstaller.pkg ../../artifacts/RpackInstaller.pkg + - uses: actions/upload-artifact@v4 + if: startsWith(runner.os, 'macos') + with: + name: macos-installer + path: artifacts + - name: Copy artifacts + if: ${{ startsWith(runner.os, 'windows') }} + run: | + mkdir artifacts + cp target/release/rpack_egui.exe artifacts/rpack_egui.exe + - uses: actions/upload-artifact@v4 + if: startsWith(runner.os, 'windows') + with: + name: windows-exe + path: artifacts diff --git a/.gitignore b/.gitignore index 9bd6e2d..a3c8f05 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ result.png /.vscode Cargo.lock .DS_Store +Rpack.app +crates/rpack_egui/static/resources diff --git a/crates/rpack_egui/Cargo.toml b/crates/rpack_egui/Cargo.toml index 367d5ef..6131654 100644 --- a/crates/rpack_egui/Cargo.toml +++ b/crates/rpack_egui/Cargo.toml @@ -45,3 +45,11 @@ web-sys = { version = "0.3", features = [ "BlobPropertyBag", ] } js-sys = "0.3" + +[package.metadata.bundle] +name = "Rpack" +resources = ["static/resources/*"] +identifier = "io.github.leinnan.rpack" +osx_url_schemes = ["io.github.leinnan.rpack"] +short_description = "Tilemap Editor" +long_description = "Tilemap Editor built with egui in Rust" diff --git a/crates/rpack_egui/assets/favicon.ico b/crates/rpack_egui/assets/favicon.ico deleted file mode 100644 index 61ad031..0000000 Binary files a/crates/rpack_egui/assets/favicon.ico and /dev/null differ diff --git a/crates/rpack_egui/assets/icon-1024.png b/crates/rpack_egui/assets/icon-1024.png deleted file mode 100644 index 1b5868a..0000000 Binary files a/crates/rpack_egui/assets/icon-1024.png and /dev/null differ diff --git a/crates/rpack_egui/assets/icon-256.png b/crates/rpack_egui/assets/icon-256.png deleted file mode 100644 index ae72287..0000000 Binary files a/crates/rpack_egui/assets/icon-256.png and /dev/null differ diff --git a/crates/rpack_egui/assets/icon_ios_touch_192.png b/crates/rpack_egui/assets/icon_ios_touch_192.png deleted file mode 100644 index 8472802..0000000 Binary files a/crates/rpack_egui/assets/icon_ios_touch_192.png and /dev/null differ diff --git a/crates/rpack_egui/assets/maskable_icon_x512.png b/crates/rpack_egui/assets/maskable_icon_x512.png deleted file mode 100644 index db8df3e..0000000 Binary files a/crates/rpack_egui/assets/maskable_icon_x512.png and /dev/null differ diff --git a/crates/rpack_egui/justfile b/crates/rpack_egui/justfile new file mode 100644 index 0000000..df4964d --- /dev/null +++ b/crates/rpack_egui/justfile @@ -0,0 +1,50 @@ + +_gen_icon size postfix: + sips -z {{size}} {{size}} static/base_icon.png --out static/icon.iconset/icon_{{postfix}}.png + cp static/icon.iconset/icon_{{postfix}}.png static/resources/{{postfix}}.png + +make_win_icon: + convert static/base_icon.png -define icon:auto-resize=16,24,32,48,64,128,256,512 static/icon.ico + +# Build the icon for macOS app +make_mac_icon: + rm -rf static/icon.iconset + mkdir -p static/icon.iconset + rm -rf static/resources + mkdir -p static/resources + just _gen_icon 16 "16x16" + just _gen_icon 32 "32x32" + just _gen_icon 64 "64x64" + just _gen_icon 128 "128x128" + just _gen_icon 256 "256x256" + just _gen_icon 512 "512x512" + just _gen_icon 1024 "1024x1024" + just _gen_icon 32 "16x16@2x" + just _gen_icon 64 "32x32@2x" + just _gen_icon 128 "64x64@2x" + just _gen_icon 256 "128x128@2x" + just _gen_icon 512 "256x256@2x" + just _gen_icon 1024 "512x512@2x" + + iconutil -c icns static/icon.iconset + rm -rf static/icon.iconset + mv static/icon.icns static/resources/icon.icns + +# Build the macOS app +build_mac_app: make_mac_icon + rm -rf Rpack.app + cargo build --release + mkdir -p Rpack.app + mkdir -p Rpack.app/Contents + mkdir -p Rpack.app/Contents/MacOS + mkdir -p Rpack.app/Contents/Resources + cp static/Info.plist Rpack.app/Contents/Info.plist + cp static/resources/* Rpack.app/Contents/Resources/ + cp ../../target/release/rpack_egui Rpack.app/Contents/MacOS/rpack_egui + +create_mac_installer: build_mac_app + pkgbuild --install-location /Applications --component Rpack.app RpackInstaller.pkg + +# Create the installer using cargo-bundle +create_installer: + cargo bundle --release diff --git a/crates/rpack_egui/src/main.rs b/crates/rpack_egui/src/main.rs index be3c01d..fca2364 100644 --- a/crates/rpack_egui/src/main.rs +++ b/crates/rpack_egui/src/main.rs @@ -13,7 +13,11 @@ fn main() -> eframe::Result<()> { let native_options = eframe::NativeOptions { viewport: egui::ViewportBuilder::default() .with_inner_size([400.0, 300.0]) - .with_min_inner_size([300.0, 220.0]), + .with_icon( + eframe::icon_data::from_png_bytes(include_bytes!("../static/base_icon.png")) + .unwrap_or_default(), + ) + .with_min_inner_size([400.0, 300.0]), ..Default::default() }; eframe::run_native( diff --git a/crates/rpack_egui/static/Info.plist b/crates/rpack_egui/static/Info.plist new file mode 100644 index 0000000..25aeb6b --- /dev/null +++ b/crates/rpack_egui/static/Info.plist @@ -0,0 +1,38 @@ + + + + + CFBundleName + Rpack + CFBundleIdentifier + io.github.leinnan.rpack + CFBundleVersion + 0.3.0 + CFBundleExecutable + rpack_egui + CFBundlePackageType + APPL + CFBundleIconFile + icon + CFBundleDocumentTypes + + + CFBundleTypeName + Rpack gen config + CFBundleTypeExtensions + + rpack_gen.json + + CFBundleTypeRole + Editor + LSHandlerRank + Owner + LSItemContentTypes + + public.data + + + + + diff --git a/crates/rpack_egui/static/base_icon.png b/crates/rpack_egui/static/base_icon.png new file mode 100644 index 0000000..7dc5918 Binary files /dev/null and b/crates/rpack_egui/static/base_icon.png differ