diff --git a/.github/actions/install-android/action.yml b/.github/actions/install-android/action.yml new file mode 100644 index 00000000..32f1af85 --- /dev/null +++ b/.github/actions/install-android/action.yml @@ -0,0 +1,29 @@ +name: Android +description: Manage your Android environment +author: David Myers +inputs: + ndk-version: + description: The version of the Android NDK to install. + required: false + default: r26d +outputs: + ndk-path: + description: The Android NDK path. + value: ${{ steps.install-ndk.outputs.ndk-path }} +runs: + using: composite + steps: + - name: Install Java + uses: ./.github/actions/install-java + - name: Install Android SDK + uses: android-actions/setup-android@v3 + - name: Install Android NDK + id: install-ndk + uses: nttld/setup-ndk@v1 + with: + link-to-sdk: true + ndk-version: ${{ inputs.ndk-version }} + - name: Set the NDK_HOME environment variable + shell: bash + run: | + echo "NDK_HOME=${{ steps.install-ndk.outputs.ndk-path }}" >> $GITHUB_ENV diff --git a/.github/actions/install-certificates/action.yml b/.github/actions/install-certificates/action.yml new file mode 100644 index 00000000..784e81cf --- /dev/null +++ b/.github/actions/install-certificates/action.yml @@ -0,0 +1,53 @@ +name: Certificates +description: Manage your signing certificates +author: David Myers +inputs: + certificate: + description: A base64-encoded signing certificate. + required: true + certificate-password: + description: The password for the signing certificate. + required: false + default: + certificate-regex: + description: A regular expression to match the signing certificate. + required: false + default: Apple Distribution + keychain: + description: The name of the keychain to create. + required: false + default: default.keychain + keychain-password: + description: The password for the keychain. + required: false + default: default-password +outputs: + certificate-id: + description: The ID of the imported certificate. + value: ${{ steps.export-certificate.outputs.certificate-id }} +runs: + using: composite + steps: + - name: Create keychain + shell: bash + run: | + security create-keychain -p "${{ inputs.keychain-password }}" ${{ inputs.keychain }} + security default-keychain -s ${{ inputs.keychain }} + security unlock-keychain -p "${{ inputs.keychain-password }}" ${{ inputs.keychain }} + security set-keychain-settings -lu ${{ inputs.keychain }} + security show-keychain-info ${{ inputs.keychain }} + - name: Import signing certificate + shell: bash + run: | + echo ${{ inputs.certificate }} | base64 --decode > certificate.p12 + security import certificate.p12 -k ${{ inputs.keychain }} -P "${{ inputs.certificate-password }}" -T /usr/bin/codesign + security set-key-partition-list -S apple:,apple-tool:,codesign: -s -k "${{ inputs.keychain-password }}" ${{ inputs.keychain }} + security find-identity -v -p codesigning ${{ inputs.keychain }} + - name: Export certificate + id: export-certificate + shell: bash + run: | + set -x + MOBILE_CERT_INFO=$(security find-identity -v -p codesigning ${{ inputs.keychain }} | grep -E "${{ inputs.certificate-regex }}") + MOBILE_CERT_ID=$(echo "$MOBILE_CERT_INFO" | awk -F'"' '{print $2}') + echo "certificate-id=$MOBILE_CERT_ID" >> $GITHUB_OUTPUT diff --git a/.github/actions/install-java/action.yml b/.github/actions/install-java/action.yml new file mode 100644 index 00000000..0aaf55e6 --- /dev/null +++ b/.github/actions/install-java/action.yml @@ -0,0 +1,20 @@ +name: Java +description: Manage your Java environment +author: David Myers +inputs: + distribution: + description: The distribution of Java to install. + required: false + default: zulu + version: + description: The version of Java to install. + required: false + default: 17 +runs: + using: composite + steps: + - name: Install Java + uses: actions/setup-java@v4 + with: + distribution: ${{ inputs.distribution }} + java-version: ${{ inputs.version }} diff --git a/.github/actions/install-node/action.yml b/.github/actions/install-node/action.yml new file mode 100644 index 00000000..5a91e3b5 --- /dev/null +++ b/.github/actions/install-node/action.yml @@ -0,0 +1,33 @@ +name: Node.js +description: Manage your Node.js environment +author: David Myers +inputs: + version: + description: The version of Node.js to install. + required: false + default: 18 +runs: + using: composite + steps: + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: ${{ inputs.version }} + - name: Install PNPM + uses: pnpm/action-setup@v4 + with: + run_install: false + - name: Set PNPM store path + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + - name: Setup pnpm cache + uses: actions/cache@v4 + with: + key: v1-${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + path: | + ${{ env.STORE_PATH }} + restore-keys: v1-${{ runner.os }}-pnpm-store- + - name: Install project dependencies + shell: bash + run: pnpm install --shamefully-hoist diff --git a/.github/actions/install-rust/action.yml b/.github/actions/install-rust/action.yml new file mode 100644 index 00000000..15f65691 --- /dev/null +++ b/.github/actions/install-rust/action.yml @@ -0,0 +1,21 @@ +name: Rust +description: Manage your Rust environment +author: David Myers +inputs: + targets: + description: The targets to install. + required: false + toolchain: + # https://rust-lang.github.io/rustup/concepts/toolchains.html + description: The toolchain to install. Defaults to stable. + required: false + default: stable +runs: + using: composite + steps: + - name: Install Rust + # https://github.com/crusty-pie/toolchain + uses: crusty-pie/toolchain@v1 + with: + targets: ${{ inputs.targets }} + toolchain: ${{ inputs.toolchain }} diff --git a/.github/actions/install-tauri/action.yml b/.github/actions/install-tauri/action.yml new file mode 100644 index 00000000..8a0c0dcb --- /dev/null +++ b/.github/actions/install-tauri/action.yml @@ -0,0 +1,12 @@ +name: Tauri +description: Manage your Tauri environment +author: David Myers +runs: + using: composite + steps: + - name: Install Tauri dependencies + if: runner.os == 'Linux' + shell: bash + run: | + sudo apt-get update + sudo apt-get install -y libappindicator3-dev librsvg2-dev libwebkit2gtk-4.1-dev patchelf diff --git a/.github/actions/install-xcode/action.yml b/.github/actions/install-xcode/action.yml new file mode 100644 index 00000000..2170c51b --- /dev/null +++ b/.github/actions/install-xcode/action.yml @@ -0,0 +1,17 @@ +name: Xcode +description: Manage your Xcode environment +author: David Myers +inputs: + version: + description: The version of Xcode to install. + required: false + default: latest-stable +runs: + using: composite + steps: + - name: Install Xcode + if: runner.os == 'macOS' + # https://github.com/maxim-lobanov/setup-xcode + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: ${{ inputs.version }} diff --git a/.github/workflows/deploy-tauri.yml b/.github/workflows/deploy-tauri.yml index ea073559..fc2c0654 100644 --- a/.github/workflows/deploy-tauri.yml +++ b/.github/workflows/deploy-tauri.yml @@ -7,55 +7,288 @@ on: workflow_dispatch: # This workflow will trigger on each push to the `release` branch to create or update a GitHub release, build your app, and upload the artifacts to the release. - +env: + APP_VERSION: v0.0.1-alpha.1 + APPLE_DEVELOPMENT_TEAM: ${{ secrets.APPLE_TEAM_ID }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} + APPLE_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + NODE_OPTIONS: --max-old-space-size=4096 + NUXT_PUBLIC_CDN_URL: ${{ secrets.VITE_APP_CDN_URL }} + NUXT_PUBLIC_DISCORD_INVITE_LINK: ${{ secrets.VITE_DISCORD_INVITE_LINK }} + NUXT_PUBLIC_FATHOM_EVENT_ACCOUNT_REGISTRATION: ${{ secrets.VUE_APP_FATHOM_GOAL_ACCOUNT_REGISTRATION }} + NUXT_PUBLIC_FATHOM_EVENT_CTA_CONTINUE_WITH_PRO: ${{ secrets.VUE_APP_FATHOM_EVENT_CTA_CONTINUE_WITH_PRO }} + NUXT_PUBLIC_FATHOM_EVENT_CTA_MODAL_UPGRADE: ${{ secrets.VITE_FATHOM_EVENT_CTA_MODAL_UPGRADE }} + NUXT_PUBLIC_FATHOM_EVENT_CTA_OPEN_APP: ${{ secrets.VITE_FATHOM_EVENT_CTA_OPEN_APP }} + NUXT_PUBLIC_FATHOM_EVENT_CTA_SAVE_DOCS: ${{ secrets.VUE_APP_FATHOM_GOAL_CTA_SYNC_DOCS }} + NUXT_PUBLIC_FATHOM_EVENT_CTA_SETTINGS_UPGRADE: ${{ secrets.VITE_FATHOM_EVENT_CTA_SETTINGS_UPGRADE }} + NUXT_PUBLIC_FATHOM_EVENT_CTA_SIGN_UP_NOW: ${{ secrets.VITE_FATHOM_EVENT_CTA_SIGN_UP_NOW }} + NUXT_PUBLIC_FATHOM_EVENT_CTA_TRY_IT_OUT: ${{ secrets.VITE_FATHOM_EVENT_CTA_TRY_IT_OUT }} + NUXT_PUBLIC_FATHOM_EVENT_CTA_UPGRADE_TO_PRO: ${{ secrets.VUE_APP_FATHOM_EVENT_CTA_UPGRADE_TO_PRO }} + NUXT_PUBLIC_FATHOM_SITE_ID: ${{ secrets.VUE_APP_FATHOM_SITE_ID }} + NUXT_PUBLIC_FATHOM_SITE_URL: ${{ secrets.VUE_APP_FATHOM_SITE_URL }} + NUXT_PUBLIC_FIREBASE_API_KEY: ${{ secrets.VUE_APP_FIREBASE_API_KEY }} + NUXT_PUBLIC_FIREBASE_APP_ID: ${{ secrets.VUE_APP_FIREBASE_APP_ID }} + NUXT_PUBLIC_FIREBASE_AUTH_DOMAIN: ${{ secrets.VUE_APP_FIREBASE_AUTH_DOMAIN }} + NUXT_PUBLIC_FIREBASE_DATABASE_URL: ${{ secrets.VUE_APP_FIREBASE_DATABASE_URL }} + NUXT_PUBLIC_FIREBASE_DISABLED: + NUXT_PUBLIC_FIREBASE_LOG_LEVEL: ${{ secrets.VITE_FIREBASE_LOG_LEVEL }} + NUXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID: ${{ secrets.VUE_APP_FIREBASE_MESSAGING_SENDER_ID }} + NUXT_PUBLIC_FIREBASE_PROJECT_ID: ${{ secrets.VUE_APP_FIREBASE_PROJECT_ID }} + NUXT_PUBLIC_FIREBASE_STORAGE_BUCKET: ${{ secrets.VUE_APP_FIREBASE_STORAGE_BUCKET }} + NUXT_PUBLIC_LINK_FEEDBACK: ${{ secrets.LINK_FEEDBACK }} + NUXT_PUBLIC_STRIPE_MONTHLY_PRICE: ${{ secrets.VUE_APP_STRIPE_MONTHLY_PRICE }} + TAURI: 1 + TAURI_DESKTOP: 1 + TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} + TAURI_SIGNING_PRIVATE_KEY_PASSWORD: jobs: - publish-tauri: - permissions: - contents: write + build-desktop-linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/install-rust + - uses: ./.github/actions/install-tauri + - uses: ./.github/actions/install-xcode + - uses: ./.github/actions/install-node + - name: Build Web app + run: | + pnpm build + - name: Build Linux app + run: | + pnpm tauri build --verbose + - name: Rename build artifacts + run: | + mv ./src-tauri/target/release/bundle/deb/*.deb ./octo-${{ env.APP_VERSION }}-amd64.deb + mv ./src-tauri/target/release/bundle/deb/*.deb.sig ./octo-${{ env.APP_VERSION }}-amd64.deb.sig + mv ./src-tauri/target/release/bundle/rpm/*.rpm ./octo-${{ env.APP_VERSION }}-x64.rpm + mv ./src-tauri/target/release/bundle/appimage/*.AppImage ./octo-${{ env.APP_VERSION }}-amd64.AppImage + mv ./src-tauri/target/release/bundle/appimage/*.AppImage.sig ./octo-${{ env.APP_VERSION }}-amd64.AppImage.sig + - name: Release + uses: softprops/action-gh-release@v2 + with: + draft: true + files: | + ./octo-${{ env.APP_VERSION }}-amd64.deb + ./octo-${{ env.APP_VERSION }}-amd64.deb.sig + ./octo-${{ env.APP_VERSION }}-x64.rpm + ./octo-${{ env.APP_VERSION }}-amd64.AppImage + ./octo-${{ env.APP_VERSION }}-amd64.AppImage.sig + make_latest: true + name: App ${{ env.APP_VERSION }} + tag_name: app-${{ env.APP_VERSION }} + target_commitish: ${{ github.sha }} + build-desktop-macos: strategy: fail-fast: false matrix: include: - - platform: macos-latest # for Arm based macs (M1 and above). - args: --target aarch64-apple-darwin - - platform: macos-latest # for Intel based macs. - args: --target x86_64-apple-darwin - - platform: ubuntu-22.04 # for Tauri v1 you could replace this with ubuntu-20.04. - args: '' - - platform: windows-latest - args: '' - - runs-on: ${{ matrix.platform }} + # Arm based macs (M1 and above). + - bundle-id: aarch64 + rust-targets: aarch64-apple-darwin + tauri-target: aarch64-apple-darwin + # Intel based macs. + - bundle-id: x64 + rust-targets: x86_64-apple-darwin + tauri-target: x86_64-apple-darwin + # Universal + - bundle-id: universal + rust-targets: aarch64-apple-darwin,x86_64-apple-darwin + tauri-target: universal-apple-darwin + runs-on: macos-latest + env: + APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} + APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} steps: - uses: actions/checkout@v4 - - - name: setup node - uses: actions/setup-node@v4 + - uses: ./.github/actions/install-rust with: - node-version: lts/* - - - name: install Rust stable - uses: dtolnay/rust-toolchain@stable + targets: ${{ matrix.rust-targets }} + - uses: ./.github/actions/install-tauri + - uses: ./.github/actions/install-xcode + - uses: ./.github/actions/install-node + - uses: ./.github/actions/install-certificates + id: import-certificate with: - # Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds. - targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }} - - - name: install dependencies (ubuntu only) - if: matrix.platform == 'ubuntu-22.04' # This must match the platform value defined above. + certificate: ${{ env.APPLE_CERTIFICATE }} + certificate-password: ${{ env.APPLE_CERTIFICATE_PASSWORD }} + certificate-regex: Developer ID Application + keychain-password: ${{ env.KEYCHAIN_PASSWORD }} + - name: Build Web app run: | - sudo apt-get update - sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf - - - name: install frontend dependencies - run: pnpm install - - - uses: tauri-apps/tauri-action@v0 + pnpm build + - name: Build macOS app + run: | + pnpm tauri build --verbose --target ${{ matrix.tauri-target }} + - name: Rename build artifacts + run: | + mv ./src-tauri/target/${{ matrix.tauri-target }}/release/bundle/macos/octo.app ./octo-${{ env.APP_VERSION }}-${{ matrix.bundle-id }}.app + mv ./src-tauri/target/${{ matrix.tauri-target }}/release/bundle/macos/octo.app.tar.gz ./octo-${{ env.APP_VERSION }}-${{ matrix.bundle-id }}.app.tar.gz + mv ./src-tauri/target/${{ matrix.tauri-target }}/release/bundle/macos/octo.app.tar.gz.sig ./octo-${{ env.APP_VERSION }}-${{ matrix.bundle-id }}.app.tar.gz.sig + mv ./src-tauri/target/${{ matrix.tauri-target }}/release/bundle/dmg/octo_*.dmg ./octo-${{ env.APP_VERSION }}-${{ matrix.bundle-id }}.dmg + - name: Release + uses: softprops/action-gh-release@v2 + with: + draft: true + files: | + ./octo-${{ env.APP_VERSION }}-${{ matrix.bundle-id }}.app + ./octo-${{ env.APP_VERSION }}-${{ matrix.bundle-id }}.app.tar.gz + ./octo-${{ env.APP_VERSION }}-${{ matrix.bundle-id }}.app.tar.gz.sig + ./octo-${{ env.APP_VERSION }}-${{ matrix.bundle-id }}.dmg + make_latest: true + name: App ${{ env.APP_VERSION }} + tag_name: app-${{ env.APP_VERSION }} + target_commitish: ${{ github.sha }} + build-desktop-windows: + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/install-rust + - uses: ./.github/actions/install-tauri + - uses: ./.github/actions/install-node + - name: Build Web app + run: | + pnpm build + - name: Build Windows app + run: | + pnpm tauri build --verbose + - name: Rename build artifacts + run: | + mv ./src-tauri/target/release/bundle/msi/*.msi ./octo-${{ env.APP_VERSION }}-x64.msi + mv ./src-tauri/target/release/bundle/msi/*.msi.sig ./octo-${{ env.APP_VERSION }}-x64.msi.sig + mv ./src-tauri/target/release/bundle/nsis/*.exe ./octo-${{ env.APP_VERSION }}-x64.exe + mv ./src-tauri/target/release/bundle/nsis/*.exe.sig ./octo-${{ env.APP_VERSION }}-x64.exe.sig + - name: Release + uses: softprops/action-gh-release@v2 + with: + draft: true + files: | + ./octo-${{ env.APP_VERSION }}-x64.msi + ./octo-${{ env.APP_VERSION }}-x64.msi.sig + ./octo-${{ env.APP_VERSION }}-x64.exe + ./octo-${{ env.APP_VERSION }}-x64.exe.sig + make_latest: true + name: App ${{ env.APP_VERSION }} + tag_name: app-${{ env.APP_VERSION }} + target_commitish: ${{ github.sha }} + build-mobile-android: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/install-rust + with: + targets: aarch64-linux-android,armv7-linux-androideabi,i686-linux-android,x86_64-linux-android + - uses: ./.github/actions/install-android + - uses: ./.github/actions/install-tauri + - uses: ./.github/actions/install-node + - name: Init Android app + run: | + pnpm tauri android init + - name: Build Web app + run: | + pnpm build + - name: Build Android app + run: | + pnpm tauri android build --verbose + - name: Rename build artifacts + run: | + mv ./src-tauri/gen/android/app/build/outputs/apk/universal/release/*.apk ./octo-${{ env.APP_VERSION }}-universal.apk + mv ./src-tauri/gen/android/app/build/outputs/bundle/universalRelease/*.aab ./octo-${{ env.APP_VERSION }}-universal.aab + - name: Release + uses: softprops/action-gh-release@v2 + with: + draft: true + files: | + ./octo-${{ env.APP_VERSION }}-universal.apk + ./octo-${{ env.APP_VERSION }}-universal.aab + make_latest: true + name: App ${{ env.APP_VERSION }} + tag_name: app-${{ env.APP_VERSION }} + target_commitish: ${{ github.sha }} + build-mobile-ios: + runs-on: macos-latest + env: + IOS_CERTIFICATE: ${{ secrets.IOS_CERTIFICATE }} + IOS_CERTIFICATE_PASSWORD: ${{ secrets.IOS_CERTIFICATE_PASSWORD }} + IOS_MOBILE_PROVISION: ${{ secrets.IOS_MOBILE_PROVISION }} + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/install-rust + with: + targets: aarch64-apple-ios,x86_64-apple-ios,aarch64-apple-ios-sim + - uses: ./.github/actions/install-tauri + - uses: ./.github/actions/install-xcode + - uses: ./.github/actions/install-node + - uses: ./.github/actions/install-certificates + id: import-certificate + with: + certificate: ${{ env.IOS_CERTIFICATE }} + certificate-password: ${{ env.IOS_CERTIFICATE_PASSWORD }} + keychain-password: ${{ env.KEYCHAIN_PASSWORD }} + - name: init ios + run: | + pnpm tauri ios init --verbose + - name: download iOS platform + run: | + xcodebuild -downloadPlatform iOS + - name: checkout files + run: | + git checkout -- ./src-tauri/gen/apple + - name: Build Web app + run: | + pnpm build + - name: Tauri info + run: | + pnpm tauri info + - name: Build iOS app env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tagName: app-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version. - releaseName: App v__VERSION__ - releaseBody: See the assets to download this version and install. - releaseDraft: true - prerelease: false - args: ${{ matrix.args }} + APPLE_SIGNING_IDENTITY: ${{ steps.import-certificate.outputs.certificate-id }} + run: | + pnpm tauri ios build --verbose --export-method app-store-connect + # Todo: Move this into an action + - name: Rename build artifacts + run: | + mv ./src-tauri/gen/apple/build/arm64/octo.ipa ./octo-${{ env.APP_VERSION }}-arm64.ipa + # Todo: Move this into an action + - name: Release + uses: softprops/action-gh-release@v2 + with: + draft: true + files: | + ./octo-${{ env.APP_VERSION }}-arm64.ipa + make_latest: true + name: App ${{ env.APP_VERSION }} + tag_name: app-${{ env.APP_VERSION }} + target_commitish: ${{ github.sha }} + # - uses: tauri-apps/tauri-action@v0 + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} + # APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + # APPLE_ID: ${{ secrets.APPLE_ID }} + # APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} + # APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + # APPLE_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} + # APPLE_SIGNING_IDENTITY: ${{ env.DESKTOP_CERT_ID }} + # with: + # tagName: app-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version. + # releaseName: App v__VERSION__ + # releaseBody: See the assets to download this version and install. + # releaseDraft: true + # prerelease: false + # args: ${{ matrix.args }} + release: + permissions: + contents: write + runs-on: ubuntu-latest + needs: + - build-desktop-linux + - build-desktop-macos + - build-desktop-windows + - build-mobile-android + - build-mobile-ios + steps: + - run: echo 'Release' diff --git a/bin/build-ios b/bin/build-ios new file mode 100755 index 00000000..9732238b --- /dev/null +++ b/bin/build-ios @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -o allexport +source .env +set +o allexport + +pnpm tauri ios build --export-method app-store-connect diff --git a/package.json b/package.json index ba2ae327..4c3cafd7 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "@headlessui/vue": "^1.7.22", "@mermaid-js/mermaid-mindmap": "^9.3.0", "@tabler/icons-vue": "^3.11.0", - "@tauri-apps/plugin-opener": "^2.2.4", + "@tauri-apps/plugin-opener": "^2.2.5", "codemirror-lang-mermaid": "^0.2.2", "culori": "^3.3.0", "deepmerge": "^4.3.1", @@ -68,10 +68,10 @@ "@playwright/test": "^1.49.1", "@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/typography": "^0.5.16", - "@tauri-apps/cli": "^2.1.0", + "@tauri-apps/cli": "^2.2.7", "@tauri-apps/plugin-dialog": "^2.2.0", "@tauri-apps/plugin-process": "^2.2.0", - "@tauri-apps/plugin-updater": "~2", + "@tauri-apps/plugin-updater": "~2.5.0", "@types/culori": "^2.0.4", "@types/file-saver": "^2.0.7", "@types/lodash-es": "^4.17.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f46858dd..e31b99e3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,7 +25,7 @@ importers: specifier: ^3.11.0 version: 3.11.0(vue@3.5.13(typescript@5.3.3)) '@tauri-apps/plugin-opener': - specifier: ^2.2.4 + specifier: ^2.2.5 version: 2.2.5 codemirror-lang-mermaid: specifier: ^0.2.2 @@ -119,7 +119,7 @@ importers: specifier: ^0.5.16 version: 0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@18.19.4)(typescript@5.3.3))) '@tauri-apps/cli': - specifier: ^2.1.0 + specifier: ^2.2.7 version: 2.2.7 '@tauri-apps/plugin-dialog': specifier: ^2.2.0 @@ -128,7 +128,7 @@ importers: specifier: ^2.2.0 version: 2.2.0 '@tauri-apps/plugin-updater': - specifier: ~2 + specifier: ~2.5.0 version: 2.5.0 '@types/culori': specifier: ^2.0.4 diff --git a/src-tauri/gen/apple/app.xcodeproj/project.pbxproj b/src-tauri/gen/apple/app.xcodeproj/project.pbxproj index 4e31419d..eb63bd12 100644 --- a/src-tauri/gen/apple/app.xcodeproj/project.pbxproj +++ b/src-tauri/gen/apple/app.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 56; objects = { /* Begin PBXBuildFile section */ @@ -26,8 +26,8 @@ 02B7F8347F94B067E6B27396 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 04B56F58E2E44DDE1D67E7B7 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; }; 0E2B15F176E4B041AE33EEEA /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 1631E4CFBB715FFDBF919C8C /* main.rs */ = {isa = PBXFileReference; path = main.rs; sourceTree = ""; }; - 17B52554D60D361AFE791C3E /* lib.rs */ = {isa = PBXFileReference; path = lib.rs; sourceTree = ""; }; + 1631E4CFBB715FFDBF919C8C /* main.rs */ = {isa = PBXFileReference; lastKnownFileType = text; path = main.rs; sourceTree = ""; }; + 17B52554D60D361AFE791C3E /* lib.rs */ = {isa = PBXFileReference; lastKnownFileType = text; path = lib.rs; sourceTree = ""; }; 1E81BD6B453D87B7F7B1597B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 306B9C1792E7B1C53FA262A6 /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bindings.h; sourceTree = ""; }; 3842AE2A64FB9933D0400EA4 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = SOURCE_ROOT; }; @@ -39,7 +39,7 @@ CE1209BFDECB28E00189B168 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; D8F57162F5CC7AEDD55F173D /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; F3673D372C5ABDD1AD6E7067 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - FBC720DFA1D01F55B0A32344 /* app_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = app_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; + FBC720DFA1D01F55B0A32344 /* octo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = octo.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -136,7 +136,7 @@ EE72B6AC647386A11F795E44 /* Products */ = { isa = PBXGroup; children = ( - FBC720DFA1D01F55B0A32344 /* app_iOS.app */, + FBC720DFA1D01F55B0A32344 /* octo.app */, ); name = Products; sourceTree = ""; @@ -168,7 +168,7 @@ ); name = app_iOS; productName = app_iOS; - productReference = FBC720DFA1D01F55B0A32344 /* app_iOS.app */; + productReference = FBC720DFA1D01F55B0A32344 /* octo.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -179,8 +179,6 @@ attributes = { BuildIndependentTargetsInParallel = YES; LastUpgradeCheck = 1430; - TargetAttributes = { - }; }; buildConfigurationList = B302E784349268C93E6F0A36 /* Build configuration list for PBXProject "app" */; compatibilityVersion = "Xcode 14.0"; @@ -259,7 +257,11 @@ ); ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = app_iOS/app_iOS.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_IDENTITY = "Apple Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Distribution"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = "BL2RJ5DCNK"; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = "BL2RJ5DCNK"; ENABLE_BITCODE = NO; "EXCLUDED_ARCHS[sdk=iphoneos*]" = "arm64-sim x86_64"; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; @@ -272,11 +274,30 @@ "$(inherited)", "@executable_path/Frameworks", ); - "LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; - "LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; - "LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; + "LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = ( + "$(inherited)", + "$(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION)", + "$(SDKROOT)/usr/lib/swift", + "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", + "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", + ); + "LIBRARY_SEARCH_PATHS[arch=arm64]" = ( + "$(inherited)", + "$(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION)", + "$(SDKROOT)/usr/lib/swift", + "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", + "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", + ); + "LIBRARY_SEARCH_PATHS[arch=x86_64]" = ( + "$(inherited)", + "$(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION)", + "$(SDKROOT)/usr/lib/swift", + "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", + "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", + ); PRODUCT_BUNDLE_IDENTIFIER = app.octo; PRODUCT_NAME = octo; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "Octo Dev"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALID_ARCHS = "arm64 arm64-sim"; @@ -349,7 +370,11 @@ ); ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = app_iOS/app_iOS.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_IDENTITY = "Apple Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Distribution"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = "BL2RJ5DCNK"; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = "BL2RJ5DCNK"; ENABLE_BITCODE = NO; "EXCLUDED_ARCHS[sdk=iphoneos*]" = "arm64-sim x86_64"; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; @@ -362,11 +387,30 @@ "$(inherited)", "@executable_path/Frameworks", ); - "LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; - "LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; - "LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; + "LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = ( + "$(inherited)", + "$(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION)", + "$(SDKROOT)/usr/lib/swift", + "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", + "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", + ); + "LIBRARY_SEARCH_PATHS[arch=arm64]" = ( + "$(inherited)", + "$(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION)", + "$(SDKROOT)/usr/lib/swift", + "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", + "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", + ); + "LIBRARY_SEARCH_PATHS[arch=x86_64]" = ( + "$(inherited)", + "$(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION)", + "$(SDKROOT)/usr/lib/swift", + "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", + "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", + ); PRODUCT_BUNDLE_IDENTIFIER = app.octo; PRODUCT_NAME = octo; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "Octo Dev"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALID_ARCHS = "arm64 arm64-sim"; diff --git a/src-tauri/gen/apple/app.xcodeproj/xcshareddata/xcschemes/app_iOS.xcscheme b/src-tauri/gen/apple/app.xcodeproj/xcshareddata/xcschemes/app_iOS.xcscheme index e8a9f976..d9a4a2db 100644 --- a/src-tauri/gen/apple/app.xcodeproj/xcshareddata/xcschemes/app_iOS.xcscheme +++ b/src-tauri/gen/apple/app.xcodeproj/xcshareddata/xcschemes/app_iOS.xcscheme @@ -1,11 +1,10 @@ + version = "1.3"> + buildImplicitDependencies = "YES"> @@ -27,21 +26,16 @@ buildConfiguration = "debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "NO" - onlyGenerateCoverageForSpecifiedTargets = "NO"> + shouldUseLaunchSchemeArgsEnv = "NO"> - - - - + + - - - - CFBundlePackageType APPL CFBundleShortVersionString - 0.1.0 + 0.1.2 CFBundleVersion - 0.1.0 + 0.1.2 LSRequiresIPhoneOS UILaunchStoryboardName diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index e3437e55..dfe683b8 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -2,7 +2,7 @@ pub fn run() { tauri::Builder::default() .plugin(tauri_plugin_opener::init()) - .plugin(tauri_plugin_updater::Builder::new().build()) + // https://github.com/tauri-apps/plugins-workspace/blob/7a5495963b704467412fa00bc9b1b26df0de009c/examples/api/src-tauri/src/lib.rs#L42 .setup(|app| { if cfg!(debug_assertions) { app.handle().plugin( @@ -11,6 +11,12 @@ pub fn run() { .build(), )?; } + + #[cfg(desktop)] + { + app.handle().plugin(tauri_plugin_updater::Builder::new().build()); + } + Ok(()) }) .plugin(tauri_plugin_dialog::init()) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index bea7136a..4ca5ecf3 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,13 +1,13 @@ { "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", "productName": "octo", - "version": "0.1.0", + "version": "0.1.2", "identifier": "app.octo", "build": { "frontendDist": "../dist", "devUrl": "http://127.0.0.1:8888", - "beforeDevCommand": "TAURI=1 TAURI_DESKTOP=1 pnpm dev", - "beforeBuildCommand": "TAURI=1 TAURI_DESKTOP=1 pnpm build" + "beforeDevCommand": "pnpm dev", + "beforeBuildCommand": "echo 'skipping web build' || pnpm build" }, "app": { "windows": [ @@ -27,6 +27,8 @@ "bundle": { "active": true, "createUpdaterArtifacts": true, + "macOS": { + }, "targets": "all", "icon": [ "icons/32x32.png",