diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 85ba2d9..f39f4c1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,6 +31,30 @@ jobs: ./ppd-editor-linux-${{ github.ref_name }}.tar.gz ./ppd-viewer-linux-${{ github.ref_name }}.tar.gz + macos: + runs-on: macos-11 + permissions: + contents: write + + steps: + - uses: actions/checkout@v3 + - name: Install ARM target + run: rustup update && rustup target add aarch64-apple-darwin + - name: Build ARM + run: GIT_COMMIT_HASH=$(git rev-parse --short HEAD) cargo build --release --target=aarch64-apple-darwin + - name: Copy + run: cp ./target/release/osx/ppd-editor ./ppd-editor-macos-${{ github.ref_name }} + - name: Make DMG + run: | + make dmg-universal + mv ./target/release/osx/ppd-editor.dmg ./ppd-editor-macos-${{ github.ref_name }}.dmg + - name: Release + uses: softprops/action-gh-release@v1 + with: + files: | + ./ppd-editor-macos-${{ github.ref_name }}.dmg + ./ppd-editor-macos-${{ github.ref_name }} + windows: runs-on: windows-latest defaults: diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7280c18 --- /dev/null +++ b/Makefile @@ -0,0 +1,68 @@ +TARGET = ppd-editor + +ASSETS_DIR = extra +RELEASE_DIR = target/release + +APP_NAME = PpdEditor.app +APP_TEMPLATE = $(ASSETS_DIR)/osx/$(APP_NAME) +APP_DIR = $(RELEASE_DIR)/osx +APP_BINARY = $(RELEASE_DIR)/$(TARGET) +APP_BINARY_DIR = $(APP_DIR)/$(APP_NAME)/Contents/MacOS +APP_EXTRAS_DIR = $(APP_DIR)/$(APP_NAME)/Contents/Resources + +DMG_NAME = PpdEditor.dmg +DMG_DIR = $(RELEASE_DIR)/osx + +vpath $(TARGET) $(RELEASE_DIR) +vpath $(APP_NAME) $(APP_DIR) +vpath $(DMG_NAME) $(APP_DIR) + +all: help + +help: ## Print this help message + @grep -E '^[a-zA-Z._-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' + +binary: $(TARGET)-native ## Build a release binary +binary-universal: $(TARGET)-universal ## Build a universal release binary +$(TARGET)-native: + MACOSX_DEPLOYMENT_TARGET="10.11" cargo build --release +$(TARGET)-universal: + MACOSX_DEPLOYMENT_TARGET="10.11" cargo build --release --target=x86_64-apple-darwin + MACOSX_DEPLOYMENT_TARGET="10.11" cargo build --release --target=aarch64-apple-darwin + @lipo target/{x86_64,aarch64}-apple-darwin/release/$(TARGET) -create -output $(APP_BINARY) + +app: $(APP_NAME)-native ## Create an PpdEditor.app +app-universal: $(APP_NAME)-universal ## Create a universal PpdEditor.app +$(APP_NAME)-%: $(TARGET)-% + @mkdir -p $(APP_BINARY_DIR) + @mkdir -p $(APP_EXTRAS_DIR) + @gzip -c $(MANPAGE) > $(APP_EXTRAS_DIR)/ppd-editor.1.gz + @gzip -c $(MANPAGE-MSG) > $(APP_EXTRAS_DIR)/ppd-editor-msg.1.gz + @cp -fRp $(APP_TEMPLATE) $(APP_DIR) + @cp -fp $(APP_BINARY) $(APP_BINARY_DIR) + @touch -r "$(APP_BINARY)" "$(APP_DIR)/$(APP_NAME)" + @codesign --remove-signature "$(APP_DIR)/$(APP_NAME)" + @codesign --force --deep --sign - "$(APP_DIR)/$(APP_NAME)" + @echo "Created '$(APP_NAME)' in '$(APP_DIR)'" + +dmg: $(DMG_NAME)-native ## Create an PpdEditor.dmg +dmg-universal: $(DMG_NAME)-universal ## Create a universal PpdEditor.dmg +$(DMG_NAME)-%: $(APP_NAME)-% + @echo "Packing disk image..." + @ln -sf /Applications $(DMG_DIR)/Applications + @hdiutil create $(DMG_DIR)/$(DMG_NAME) \ + -volname "PpdEditor" \ + -fs HFS+ \ + -srcfolder $(APP_DIR) \ + -ov -format UDZO + @echo "Packed '$(APP_NAME)' in '$(APP_DIR)'" + +install: $(INSTALL)-native ## Mount disk image +install-universal: $(INSTALL)-native ## Mount universal disk image +$(INSTALL)-%: $(DMG_NAME)-% + @open $(DMG_DIR)/$(DMG_NAME) + +.PHONY: app binary clean dmg install $(TARGET) $(TARGET)-universal + +clean: ## Remove all build artifacts + @cargo clean \ No newline at end of file diff --git a/build/macos/PpdEditor.app/Contents/Info.plist b/build/macos/PpdEditor.app/Contents/Info.plist new file mode 100644 index 0000000..b6f7681 --- /dev/null +++ b/build/macos/PpdEditor.app/Contents/Info.plist @@ -0,0 +1,36 @@ + + +ppd-editor + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ppd-editor + CFBundleIdentifier + io.github.fralonra.PpdEditor + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + PpdEditor + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.3.1 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1 + CFBundleIconFile + ppd-editor.icns + NSHighResolutionCapable + + NSSupportsAutomaticGraphicsSwitching + + CFBundleDisplayName + PpdEditor + NSRequiresAquaSystemAppearance + NO + + \ No newline at end of file diff --git a/build/macos/PpdEditor.app/Contents/Resources/ppd-editor.icns b/build/macos/PpdEditor.app/Contents/Resources/ppd-editor.icns new file mode 100644 index 0000000..ef62381 Binary files /dev/null and b/build/macos/PpdEditor.app/Contents/Resources/ppd-editor.icns differ