Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/cloudflare_pages.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ jobs:

- name: maintain-comment
if: ${{ github.event_name == 'pull_request' }}
uses: actions-cool/maintain-one-comment@v3
uses: marocchino/sticky-pull-request-comment@0ea0beb66eb9baf113663a64ec522f60e49231c0 # v3.0.4
with:
body: |
header: cloudflare-preview
message: |
[![Pages Preview](https://img.shields.io/badge/Pages%20Preview-obsidianirc-blue?style=flat-square)](${{ steps.deploy.outputs.pages-deployment-alias-url }})
Preview URL: ${{ steps.deploy.outputs.pages-deployment-alias-url }}

Automated deployment preview for the PR in the Cloudflare Pages.
emojis: 'rocket, eyes, +1, -1'
71 changes: 43 additions & 28 deletions .github/workflows/publish.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
draft: "false"
prerelease: ${{ github.ref_type != 'tag' && 'true' || 'false' }}
release_body: ${{ steps.release-notes.outputs.release_body }}
name: ObsidianIRC ${{ steps.package-version.outputs.tag_name }}
name: Obby ${{ steps.package-version.outputs.tag_name }}
steps:
- uses: actions/checkout@v6
- name: Get Node project version
Expand Down Expand Up @@ -89,6 +89,7 @@ jobs:
timeout-minutes: 60
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout tag
uses: actions/checkout@v6
Expand All @@ -101,7 +102,9 @@ jobs:
extra_nix_config: |
experimental-features = nix-command flakes

- name: Update npmDeps hash on main
- name: Open PR with updated npmDeps hash
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail

Expand All @@ -118,11 +121,23 @@ jobs:

nix flake check && nix build .#obsidianirc --no-link --print-build-logs

# main's branch ruleset blocks direct bot pushes, so route the hash bump through a PR.
BRANCH="automation/nix-npmdeps-${GITHUB_REF_NAME}"
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git switch -c "$BRANCH"
git add nix/obsidianirc.nix
git commit -m "build(nix): update npmDeps hash [skip ci]"
git push origin main
git commit -m "build(nix): update npmDeps hash for ${GITHUB_REF_NAME}"
git push -f origin "$BRANCH"

# Re-runs force-push the same branch; only open a PR if one isn't already up.
if [ -n "$(gh pr list --head "$BRANCH" --state open --json number --jq '.[0].number')" ]; then
echo "PR already open for $BRANCH; pushed updated hash to it."
else
gh pr create --base main --head "$BRANCH" \
--title "build(nix): update npmDeps hash for ${GITHUB_REF_NAME}" \
--body "Automated npmDeps hash sync after release ${GITHUB_REF_NAME}. Merge to keep \`nix build\` working on main."
fi

publish-tauri:
needs: collect-version
Expand Down Expand Up @@ -206,7 +221,7 @@ jobs:
echo "Embedding update info in $appimage"
# Embed update URL at ELF .upd_info offset (33651 bytes) per AppImageUpdate spec.
# Format: gh-releases-zsync|ORG|REPO|CHANNEL|FILENAME_GLOB
printf 'gh-releases-zsync|ObsidianIRC|ObsidianIRC|latest|ObsidianIRC_*_amd64.AppImage.zsync' | \
printf 'gh-releases-zsync|obbyworld|obby|latest|Obby_*_amd64.AppImage.zsync' | \
dd of="$appimage" bs=1 seek=33651 count=512 conv=notrunc
fi
done
Expand Down Expand Up @@ -254,20 +269,20 @@ jobs:

- name: Generate zsync files
run: |
APPIMAGE_PATH="./src-tauri/target/release/bundle/appimage/ObsidianIRC_${{ needs.collect-version.outputs.current_version}}_aarch64.AppImage"
APPIMAGE_PATH="./src-tauri/target/release/bundle/appimage/Obby_${{ needs.collect-version.outputs.current_version}}_aarch64.AppImage"
if [ -f "$APPIMAGE_PATH" ]; then
echo "Generating zsync for $APPIMAGE_PATH"
zsyncmake -o "${APPIMAGE_PATH}.zsync" "$APPIMAGE_PATH"
fi

- name: Embed update information in AppImage
run: |
APPIMAGE_PATH="./src-tauri/target/release/bundle/appimage/ObsidianIRC_${{ needs.collect-version.outputs.current_version}}_aarch64.AppImage"
APPIMAGE_PATH="./src-tauri/target/release/bundle/appimage/Obby_${{ needs.collect-version.outputs.current_version}}_aarch64.AppImage"
if [ -f "$APPIMAGE_PATH" ]; then
echo "Embedding update info in $APPIMAGE_PATH"
# Embed update URL at ELF .upd_info offset (33651 bytes) per AppImageUpdate spec.
# Format: gh-releases-zsync|ORG|REPO|CHANNEL|FILENAME_GLOB
printf 'gh-releases-zsync|ObsidianIRC|ObsidianIRC|latest|ObsidianIRC_*_aarch64.AppImage.zsync' | \
printf 'gh-releases-zsync|obbyworld|obby|latest|Obby_*_aarch64.AppImage.zsync' | \
dd of="$APPIMAGE_PATH" bs=1 seek=33651 count=512 conv=notrunc
fi

Expand All @@ -281,10 +296,10 @@ jobs:
tag_name: ${{ needs.collect-version.outputs.tag_name }}
make_latest: ${{ needs.collect-version.outputs.prerelease != 'true' }}
files: |
./src-tauri/target/release/bundle/deb/ObsidianIRC_${{ needs.collect-version.outputs.current_version}}_arm64.deb
./src-tauri/target/release/bundle/rpm/ObsidianIRC-${{ needs.collect-version.outputs.current_version}}-1.aarch64.rpm
./src-tauri/target/release/bundle/appimage/ObsidianIRC_${{ needs.collect-version.outputs.current_version}}_aarch64.AppImage
./src-tauri/target/release/bundle/appimage/ObsidianIRC_${{ needs.collect-version.outputs.current_version}}_aarch64.AppImage.zsync
./src-tauri/target/release/bundle/deb/Obby_${{ needs.collect-version.outputs.current_version}}_arm64.deb
./src-tauri/target/release/bundle/rpm/Obby-${{ needs.collect-version.outputs.current_version}}-1.aarch64.rpm
./src-tauri/target/release/bundle/appimage/Obby_${{ needs.collect-version.outputs.current_version}}_aarch64.AppImage
./src-tauri/target/release/bundle/appimage/Obby_${{ needs.collect-version.outputs.current_version}}_aarch64.AppImage.zsync

publish-android:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -358,14 +373,14 @@ jobs:

- name: Rename APK and AAB file
run: |
mv ./src-tauri/gen/android/app/build/outputs/apk/universal/release/app-universal-release-signed.apk ./src-tauri/gen/android/app/build/outputs/apk/universal/release/ObsidianIRC-${{ needs.collect-version.outputs.current_version}}.apk
mv ./src-tauri/gen/android/app/build/outputs/bundle/universalRelease/app-universal-release-signed.aab ./src-tauri/gen/android/app/build/outputs/bundle/universalRelease/ObsidianIRC-${{ needs.collect-version.outputs.current_version}}.aab
mv ./src-tauri/gen/android/app/build/outputs/apk/universal/release/app-universal-release-signed.apk ./src-tauri/gen/android/app/build/outputs/apk/universal/release/Obby-${{ needs.collect-version.outputs.current_version}}.apk
mv ./src-tauri/gen/android/app/build/outputs/bundle/universalRelease/app-universal-release-signed.aab ./src-tauri/gen/android/app/build/outputs/bundle/universalRelease/Obby-${{ needs.collect-version.outputs.current_version}}.aab

- name: Upload signed AAB artifact for Google Play
uses: actions/upload-artifact@v7
with:
name: signed-aab
path: ./src-tauri/gen/android/app/build/outputs/bundle/universalRelease/ObsidianIRC-${{ needs.collect-version.outputs.current_version }}.aab
path: ./src-tauri/gen/android/app/build/outputs/bundle/universalRelease/Obby-${{ needs.collect-version.outputs.current_version }}.aab
retention-days: 1

- name: Publish
Expand All @@ -378,8 +393,8 @@ jobs:
tag_name: ${{ needs.collect-version.outputs.tag_name }}
make_latest: ${{ needs.collect-version.outputs.prerelease != 'true' }}
files: |
./src-tauri/gen/android/app/build/outputs/apk/universal/release/ObsidianIRC-${{ needs.collect-version.outputs.current_version}}.apk
./src-tauri/gen/android/app/build/outputs/bundle/universalRelease/ObsidianIRC-${{ needs.collect-version.outputs.current_version}}.aab
./src-tauri/gen/android/app/build/outputs/apk/universal/release/Obby-${{ needs.collect-version.outputs.current_version}}.apk
./src-tauri/gen/android/app/build/outputs/bundle/universalRelease/Obby-${{ needs.collect-version.outputs.current_version}}.aab

publish-android-google-play-internal:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -535,10 +550,10 @@ jobs:
with:
serviceAccountJson: ${{ steps.auth.outputs.credentials_file_path }}
packageName: com.obsidianirc.dev
releaseFiles: ./ObsidianIRC-${{ needs.collect-version.outputs.current_version }}.aab
releaseFiles: ./Obby-${{ needs.collect-version.outputs.current_version }}.aab
track: production
status: completed
releaseName: ObsidianIRC v${{ needs.collect-version.outputs.current_version }}
releaseName: Obby v${{ needs.collect-version.outputs.current_version }}

publish-ios:
runs-on: macos-latest
Expand Down Expand Up @@ -586,15 +601,15 @@ jobs:
-sdk iphoneos \
-configuration release \
-destination 'generic/platform=iOS' \
-archivePath ${{ runner.temp }}/ObsidianIRC.xcarchive \
-archivePath ${{ runner.temp }}/Obby.xcarchive \
clean archive \
CODE_SIGNING_ALLOWED=NO \
CODE_SIGN_IDENTITY="" \
DEVELOPMENT_TEAM=""

- name: Package unsigned .ipa
run: |
ARCHIVE_PATH="${{ runner.temp }}/ObsidianIRC.xcarchive"
ARCHIVE_PATH="${{ runner.temp }}/Obby.xcarchive"
WORK_DIR="${{ runner.temp }}/ipa-build"

# Create working directory
Expand All @@ -619,15 +634,15 @@ jobs:

# Create IPA
cd "$WORK_DIR"
zip -r -0 -y ObsidianIRC-${{ needs.collect-version.outputs.current_version }}-unsigned.ipa Payload SwiftSupport 2>/dev/null || \
zip -r -0 -y ObsidianIRC-${{ needs.collect-version.outputs.current_version }}-unsigned.ipa Payload
zip -r -0 -y Obby-${{ needs.collect-version.outputs.current_version }}-unsigned.ipa Payload SwiftSupport 2>/dev/null || \
zip -r -0 -y Obby-${{ needs.collect-version.outputs.current_version }}-unsigned.ipa Payload

# Move to expected location
mv ObsidianIRC-${{ needs.collect-version.outputs.current_version }}-unsigned.ipa "${{ runner.temp }}/"
mv Obby-${{ needs.collect-version.outputs.current_version }}-unsigned.ipa "${{ runner.temp }}/"

# Verify IPA structure
echo "IPA contents:"
unzip -l "${{ runner.temp }}/ObsidianIRC-${{ needs.collect-version.outputs.current_version }}-unsigned.ipa" | head -n 20
unzip -l "${{ runner.temp }}/Obby-${{ needs.collect-version.outputs.current_version }}-unsigned.ipa" | head -n 20

- name: Publish
uses: softprops/action-gh-release@v3
Expand All @@ -639,7 +654,7 @@ jobs:
tag_name: ${{ needs.collect-version.outputs.tag_name }}
make_latest: ${{ needs.collect-version.outputs.prerelease != 'true' }}
files: |
${{ runner.temp }}/ObsidianIRC-${{ needs.collect-version.outputs.current_version }}-unsigned.ipa
${{ runner.temp }}/Obby-${{ needs.collect-version.outputs.current_version }}-unsigned.ipa

publish-web:
runs-on: ubuntu-latest
Expand All @@ -661,7 +676,7 @@ jobs:
- name: Build
run: |
npm run build
zip -r ObsidianIRC-${{ needs.collect-version.outputs.current_version}}-web.zip ./dist
zip -r Obby-${{ needs.collect-version.outputs.current_version}}-web.zip ./dist

- name: Publish
uses: softprops/action-gh-release@v3
Expand All @@ -673,4 +688,4 @@ jobs:
tag_name: ${{ needs.collect-version.outputs.tag_name }}
make_latest: ${{ needs.collect-version.outputs.prerelease != 'true' }}
files: |
./ObsidianIRC-${{ needs.collect-version.outputs.current_version}}-web.zip
./Obby-${{ needs.collect-version.outputs.current_version}}-web.zip
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# ObsidianIRC — Agent Reference
# Obby — Agent Reference

React + TypeScript + TailwindCSS + DaisyUI + Zustand + Tauri (desktop/mobile).
WebSocket-only IRC client. Tauri wraps the web app with native bindings for TCP sockets
Expand Down
4 changes: 2 additions & 2 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# ObsidianIRC Architecture
# Obby Architecture

> **Modern IRC Client** - React + TypeScript + TailwindCSS + Tauri
> Next-generation IRC client supporting websockets only

## 🏗️ Project Structure

```
ObsidianIRC/
obby/
├── src/
│ ├── components/
│ │ ├── layout/ # Core layout components
Expand Down
8 changes: 4 additions & 4 deletions BUILD.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# Compile ObsidianIRC
# Compile Obby

This covers instructions for how to manually build ObsidianIRC from source for different platforms. If you are willing
This covers instructions for how to manually build Obby from source for different platforms. If you are willing
to simply install it, maybe take a look at [Install instructions](INSTALL.md) first.

## Clone Repo

```sh
cd ~
git clone https://github.com/ObsidianIRC/ObsidianIRC
cd ObsidianIRC
git clone https://github.com/obbyworld/obby
cd obby
npm install
```

Expand Down
12 changes: 6 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,21 @@
## Clone and setup the repository

```sh
git clone https://github.com/ObsidianIRC/ObsidianIRC
cd ObsidianIRC
git clone https://github.com/obbyworld/obby
cd obby
npm install
npm run dev # Start the development server
```

Use **`npm run …`** for scripts regardless of which toolchain you choose below.

**Optional — Nix** (Nix installs on other OSes too — [non-NixOS Linux](https://nixos.org/download/) is common): **`nix develop`** from this repo works only where the **ObsidianIRC** flake exposes a **devShell**, i.e. **`x86_64-linux`** / **`aarch64-linux`** today (**`nix build .#obsidianirc`** same). On **macOS or Windows** extend `flake.nix` or install **Node ≥22** and **Rust stable** (**rustfmt**, **clippy**) per [`rust-toolchain.toml`](rust-toolchain.toml). Desktop build via Nix: [BUILD.md — Nix (flake)](BUILD.md#nix-flake). Details: [AGENTS.md](AGENTS.md).
**Optional — Nix** (Nix installs on other OSes too — [non-NixOS Linux](https://nixos.org/download/) is common): **`nix develop`** from this repo works only where the **Obby** flake exposes a **devShell**, i.e. **`x86_64-linux`** / **`aarch64-linux`** today (**`nix build .#obsidianirc`** same). On **macOS or Windows** extend `flake.nix` or install **Node ≥22** and **Rust stable** (**rustfmt**, **clippy**) per [`rust-toolchain.toml`](rust-toolchain.toml). Desktop build via Nix: [BUILD.md — Nix (flake)](BUILD.md#nix-flake). Details: [AGENTS.md](AGENTS.md).

**Home Manager:** upstream patterns are summarized in **[Home Manager manual — Flakes](https://nix-community.github.io/home-manager/index.xhtml#ch-nix-flakes)** (e.g. **`inputs.home-manager.inputs.nixpkgs.follows`** in your flake, **`home-manager.extraSpecialArgs`**, **`useGlobalPkgs`**, **`useUserPackages`** where applicable). This repo exposes **`outputs.homeManagerModules.obsidianirc`** and **`outputs.homeModules.obsidianirc`** (same module). Detailed **`useGlobalPkgs`** overlay wiring: [BUILD.md — Nix (flake)](BUILD.md#nix-flake). If Home Manager doesn’t manage your shell, **`hm-session-vars.sh`** sourcing is unchanged from upstream — see the manual’s Installing / FAQ sections.

**Optional — [direnv](https://direnv.net/) + Nix:** install the [shell hook](https://direnv.net/docs/hook.html), then **`direnv allow`** so [.envrc](.envrc) runs **`use flake`** (nix-direnv is optional; **`.direnv/`** is gitignored).

Alternatively to run the full ObsidianIRC stack:
Alternatively to run the full Obby stack:

```sh
docker compose up
Expand Down Expand Up @@ -51,8 +51,8 @@ Now every time you commit the lint and format commands will run automatically.
1. **Clone and install dependencies:**

```bash
git clone https://github.com/ObsidianIRC/ObsidianIRC
cd ObsidianIRC
git clone https://github.com/obbyworld/obby
cd obby
npm install
```

Expand Down
Loading
Loading