diff --git a/.github/workflows/generate.yml b/.github/workflows/generate.yml index 833c939..b05920b 100644 --- a/.github/workflows/generate.yml +++ b/.github/workflows/generate.yml @@ -1,68 +1,157 @@ -name: "publish" - +name: Publish Release on: push: - branches: - - main + tags: + - "v*" + branches: "*" + workflow_dispatch: -# This is the example from the readme. -# On each push to the `release` branch it will create or update a GitHub release, build your app, and upload the artifacts to the release. +env: + APP_NAME: "Dester Desktop App" jobs: - publish-tauri: - permissions: - contents: write + changelog: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Build changelog + id: build_changelog + run: | + # NOTE: if commits subjects are standardized, you can filter the git log based on feat: and fix: + # and then replace "feat:" with "New: " and "fix:" with "Fixed " + # when AI gets good, we can also summarized commits into a bullet point list + PREV_TAG=$(git tag --list v* | tail -n2 | head -n1) + echo "changelog=$(git log $PREV_TAG...${{ github.ref_name }} --pretty=format:"- %s")" >> $GITHUB_OUTPUT + outputs: + changelog: ${{ steps.build_changelog.outputs.changelog }} + build-arm: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Setup ARM build environment + run: | + rustup target add aarch64-unknown-linux-gnu + sudo apt install gcc-aarch64-linux-gnu + sudo dpkg --add-architecture arm64 + . /etc/os-release + echo "using Ubuntu with codename $VERSION_CODENAME" + echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME main restricted" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-updates main restricted" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME universe" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-updates universe" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME multiverse" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-updates multiverse" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-security main restricted" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-security universe" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-security multiverse" | sudo tee -a /etc/apt/sources.list + sudo apt update + sudo apt upgrade -y + sudo apt install libwebkit2gtk-4.0-dev:arm64 -y + sudo apt install libssl-dev:arm64 -y + export PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu/ + pnpm install + pnpm rls --target aarch64-unknown-linux-gnu + - name: Upload deb bundle + uses: actions/upload-artifact@v4 + with: + name: ARM Debian File + path: src-tauri/target/release/bundle/deb/*arm64.deb + release: 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: "" - + platform: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.platform }} + needs: [changelog] steps: - - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v4 - - name: Setup pnpm - uses: pnpm/action-setup@v3 + # build the changelog based on the commit messages between the versioned tags + - name: Install pnpm + uses: pnpm/action-setup@v4 with: - version: 8 + version: 9 - - name: setup node + - name: Setup Node.js uses: actions/setup-node@v4 + # NOTE: enterprise developers may hard code a version with: - node-version: lts/* + node-version: "lts/*" + cache: pnpm + # node-version-file: '.nvmrc' + + - name: Setup Rust + run: | + rustup update --no-self-update - - name: install Rust stable - uses: dtolnay/rust-toolchain@stable + - name: Rust cache + uses: swatinem/rust-cache@v2 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' || '' }} + workspaces: "./src-tauri -> target" - - name: install dependencies (ubuntu only) - if: matrix.platform == 'ubuntu-22.04' # This must match the platform value defined above. + - name: Install Ubuntu dependencies + if: matrix.platform == 'ubuntu-latest' run: | - sudo apt-get update - sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf - # webkitgtk 4.0 is for Tauri v1 - webkitgtk 4.1 is for Tauri v2. - # You can remove the one that doesn't apply to your app to speed up the workflow a bit. + sudo apt update + xargs sudo apt install -y < environment/apt_packages.txt - - name: install frontend dependencies - run: pnpm install # change this to npm, pnpm or bun depending on which one you use. + - name: Install frontend + run: | + pnpm install + + - name: CI Build + if: ${{ github.ref_type == 'branch' }} + run: | + pnpm rls + + - name: CI Upload Windows + if: ${{ github.ref_type == 'branch' && matrix.platform == 'windows-latest' }} + uses: actions/upload-artifact@v4 + with: + name: "Windows Installers" + path: | + src-tauri/release/bundle/msi/*.msi + src-tauri/release/bundle/nsis/*.exe + + - name: CI Upload macOS + if: ${{ github.ref_type == 'branch' && matrix.platform == 'macos-latest' }} + uses: actions/upload-artifact@v4 + with: + name: "macOS Installer" + path: | + src-tauri/release/bundle/dmg/*.dmg + + - name: CI Upload Linux + if: ${{ github.ref_type == 'branch' && matrix.platform == 'ubuntu-latest' }} + uses: actions/upload-artifact@v4 + with: + name: "Linux Distributions" + path: | + src-tauri/target/release/bundle/deb/*.deb + src-tauri/target/release/bundle/AppImage/*.AppImage - - uses: tauri-apps/tauri-action@v0 + # TODO: https://tauri.app/v1/guides/building/linux#cross-compiling-tauri-applications-for-arm-based-devices + - name: Build Tauri app + uses: tauri-apps/tauri-action@v0 + if: ${{ github.ref_type == 'tag' }} + # if u get Error: Resource not accessible by integration + # go to repository Settings => Action => General => Workflow permissions => Switch to Read and Write permisions env: + CI: true GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} + TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} 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." + # tauri-action replaces \_\_VERSION\_\_ with the app version + tagName: ${{ github.ref_name }} + releaseName: "${{ env.APP_NAME }} v__VERSION__" + releaseBody: | + ${{needs.changelog.outputs.changelog}} + See the assets to download this version and install. releaseDraft: true prerelease: false - args: ${{ matrix.args }} diff --git a/app/(dester)/layout.tsx b/app/(dester)/layout.tsx new file mode 100644 index 0000000..7dfabe0 --- /dev/null +++ b/app/(dester)/layout.tsx @@ -0,0 +1,31 @@ +import type { Metadata } from "next"; +import "../globals.css"; +import Navbar from "@/lib/components/Navbar"; +import Sidebar from "@/lib/components/Sidebar"; +import Background from "@/lib/components/Background"; + +export const metadata: Metadata = { + title: "Dester Desktop App", + description: "An intuvitive way to see all your content library at one place", +}; + +export default function AppLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( +