From f7e5e07864b88ce279666c7f3de83c4d93886f89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Ro=C5=BCnawski?= Date: Fri, 26 Jun 2026 10:04:42 +0200 Subject: [PATCH 1/3] FCE-3330: delete fishjam-chat & livestreaming deployment Examples migrated to the standalone fjc/examples repo. Remove the orphaned deploy workflows, the still-tracked mobile fishjam-chat app, and the stale readme link; regenerate yarn.lock. - rm .github/workflows/{fishjam-chat,livestreaming-example,mobile_eas_build}.yaml - rm examples/mobile-client/fishjam-chat - drop Fishjam Chat bullet from packages/react-client/readme.md --- .github/workflows/fishjam-chat.yaml | 49 - .github/workflows/livestreaming-example.yaml | 46 - .github/workflows/mobile_eas_build.yaml | 71 - .../mobile-client/fishjam-chat/.env.example | 3 - .../mobile-client/fishjam-chat/.eslintrc.js | 18 - .../mobile-client/fishjam-chat/.gitignore | 41 - examples/mobile-client/fishjam-chat/README.md | 84 - examples/mobile-client/fishjam-chat/app.json | 102 - .../fishjam-chat/app/(tabs)/_layout.tsx | 34 - .../fishjam-chat/app/(tabs)/livestream.tsx | 145 - .../fishjam-chat/app/(tabs)/room.tsx | 134 - .../fishjam-chat/app/_layout.tsx | 79 - .../mobile-client/fishjam-chat/app/index.tsx | 5 - .../app/livestream/screen-sharing.tsx | 173 - .../fishjam-chat/app/livestream/streamer.tsx | 210 -- .../fishjam-chat/app/livestream/viewer.tsx | 124 - .../fishjam-chat/app/room/[roomName].tsx | 170 - .../fishjam-chat/app/room/preview.tsx | 228 -- .../assets/images/adaptive-icon.png | Bin 3648 -> 0 bytes .../fishjam-chat/assets/images/favicon.png | Bin 1129 -> 0 bytes .../assets/images/fishjam-logo.png | Bin 3761 -> 0 bytes .../fishjam-chat/assets/images/icon.png | Bin 6483 -> 0 bytes .../fishjam-chat/assets/images/splash.png | Bin 6506 -> 0 bytes .../fishjam-chat/babel.config.js | 17 - .../fishjam-chat/components/Button.tsx | 68 - .../components/DismissKeyboard.tsx | 10 - .../fishjam-chat/components/InCallButton.tsx | 69 - .../fishjam-chat/components/NoCameraView.tsx | 53 - .../fishjam-chat/components/TextInput.tsx | 72 - .../fishjam-chat/components/Typo.tsx | 53 - .../fishjam-chat/components/VideosGrid.tsx | 255 -- .../fishjam-chat/components/index.ts | 7 - examples/mobile-client/fishjam-chat/eas.json | 36 - .../fishjam-chat/hooks/useMediaPermissions.ts | 45 - examples/mobile-client/fishjam-chat/index.js | 2 - .../mobile-client/fishjam-chat/package.json | 51 - .../fishjam-chat/prettier.config.js | 1 - .../mobile-client/fishjam-chat/tsconfig.json | 11 - .../fishjam-chat/utils/Colors.ts | 27 - .../fishjam-chat/utils/fishjamIdStore.ts | 9 - packages/react-client/readme.md | 1 - yarn.lock | 3341 +---------------- 42 files changed, 151 insertions(+), 5693 deletions(-) delete mode 100644 .github/workflows/fishjam-chat.yaml delete mode 100644 .github/workflows/livestreaming-example.yaml delete mode 100644 .github/workflows/mobile_eas_build.yaml delete mode 100644 examples/mobile-client/fishjam-chat/.env.example delete mode 100644 examples/mobile-client/fishjam-chat/.eslintrc.js delete mode 100644 examples/mobile-client/fishjam-chat/.gitignore delete mode 100644 examples/mobile-client/fishjam-chat/README.md delete mode 100644 examples/mobile-client/fishjam-chat/app.json delete mode 100644 examples/mobile-client/fishjam-chat/app/(tabs)/_layout.tsx delete mode 100644 examples/mobile-client/fishjam-chat/app/(tabs)/livestream.tsx delete mode 100644 examples/mobile-client/fishjam-chat/app/(tabs)/room.tsx delete mode 100644 examples/mobile-client/fishjam-chat/app/_layout.tsx delete mode 100644 examples/mobile-client/fishjam-chat/app/index.tsx delete mode 100644 examples/mobile-client/fishjam-chat/app/livestream/screen-sharing.tsx delete mode 100644 examples/mobile-client/fishjam-chat/app/livestream/streamer.tsx delete mode 100644 examples/mobile-client/fishjam-chat/app/livestream/viewer.tsx delete mode 100644 examples/mobile-client/fishjam-chat/app/room/[roomName].tsx delete mode 100644 examples/mobile-client/fishjam-chat/app/room/preview.tsx delete mode 100644 examples/mobile-client/fishjam-chat/assets/images/adaptive-icon.png delete mode 100644 examples/mobile-client/fishjam-chat/assets/images/favicon.png delete mode 100644 examples/mobile-client/fishjam-chat/assets/images/fishjam-logo.png delete mode 100644 examples/mobile-client/fishjam-chat/assets/images/icon.png delete mode 100644 examples/mobile-client/fishjam-chat/assets/images/splash.png delete mode 100644 examples/mobile-client/fishjam-chat/babel.config.js delete mode 100644 examples/mobile-client/fishjam-chat/components/Button.tsx delete mode 100644 examples/mobile-client/fishjam-chat/components/DismissKeyboard.tsx delete mode 100644 examples/mobile-client/fishjam-chat/components/InCallButton.tsx delete mode 100644 examples/mobile-client/fishjam-chat/components/NoCameraView.tsx delete mode 100644 examples/mobile-client/fishjam-chat/components/TextInput.tsx delete mode 100644 examples/mobile-client/fishjam-chat/components/Typo.tsx delete mode 100644 examples/mobile-client/fishjam-chat/components/VideosGrid.tsx delete mode 100644 examples/mobile-client/fishjam-chat/components/index.ts delete mode 100644 examples/mobile-client/fishjam-chat/eas.json delete mode 100644 examples/mobile-client/fishjam-chat/hooks/useMediaPermissions.ts delete mode 100644 examples/mobile-client/fishjam-chat/index.js delete mode 100644 examples/mobile-client/fishjam-chat/package.json delete mode 100644 examples/mobile-client/fishjam-chat/prettier.config.js delete mode 100644 examples/mobile-client/fishjam-chat/tsconfig.json delete mode 100644 examples/mobile-client/fishjam-chat/utils/Colors.ts delete mode 100644 examples/mobile-client/fishjam-chat/utils/fishjamIdStore.ts diff --git a/.github/workflows/fishjam-chat.yaml b/.github/workflows/fishjam-chat.yaml deleted file mode 100644 index 57e2b4b85..000000000 --- a/.github/workflows/fishjam-chat.yaml +++ /dev/null @@ -1,49 +0,0 @@ -name: Deploy Fishjam Chat as static page - -on: - push: - branches: ["main"] - - workflow_dispatch: - -permissions: - contents: read - -concurrency: - group: "fishjam-chat" - cancel-in-progress: false - -jobs: - build-deploy: - if: github.actor != 'dependabot[bot]' - environment: - name: fishjam-chat - url: ${{ vars.FISHJAM_CHAT_URL }} - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 24.4.1 - cache: "npm" - - name: Use corepack - run: corepack enable - - name: Install node dependencies - run: yarn - - name: Build project - run: yarn build - - name: Copy files to deployment server - uses: appleboy/scp-action@v0.1.7 - with: - host: ${{ vars.FISHJAM_CHAT_HOST }} - username: ${{ secrets.FISHJAM_CHAT_USERNAME }} - key: ${{ secrets.FISHJAM_CHAT_PRIVATE_KEY }} - rm: true - strip_components: 4 - source: examples/react-client/fishjam-chat/dist/* - target: /usr/share/nginx/html diff --git a/.github/workflows/livestreaming-example.yaml b/.github/workflows/livestreaming-example.yaml deleted file mode 100644 index 44b9a12db..000000000 --- a/.github/workflows/livestreaming-example.yaml +++ /dev/null @@ -1,46 +0,0 @@ -name: Deploy Livestreaming example -on: - push: - branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: recursive - - name: Setup Pages - uses: actions/configure-pages@v5 - - name: Use corepack - run: corepack enable - - name: Install node dependencies - run: yarn - - name: Build project - run: yarn build - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: "examples/react-client/livestreaming/dist" - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 diff --git a/.github/workflows/mobile_eas_build.yaml b/.github/workflows/mobile_eas_build.yaml deleted file mode 100644 index 4a6c40b15..000000000 --- a/.github/workflows/mobile_eas_build.yaml +++ /dev/null @@ -1,71 +0,0 @@ -name: Mobile EAS Build -on: - pull_request: - types: [labeled] - -permissions: - contents: read - pull-requests: write - -jobs: - build: - if: ${{ github.event.label.name == 'eas build' }} - runs-on: macOS-latest - steps: - - name: 🏗 Setup repo - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: 🏗 Setup Node - uses: actions/setup-node@v4 - with: - node-version: 22.x - cache: npm - - - name: 🏗 Setup EAS - uses: expo/expo-github-action@v8 - with: - eas-version: latest - token: ${{ secrets.EXPO_TOKEN }} - - - name: Use corepack - run: corepack enable - - - name: 📦 Install dependencies - run: yarn && yarn build - - - name: 🚀 Build app - run: eas build --non-interactive --platform=all --profile production - working-directory: examples/mobile-client/fishjam-chat - - - name: 🛫 Submit iOS app to TestFlight - run: eas submit --non-interactive --platform=ios --latest - working-directory: examples/mobile-client/fishjam-chat - - - name: ⛓️‍💥 Get iOS archive url and version - id: ios_build - run: eas build:list --json --non-interactive | jq -r '[.[] | select(.platform=="IOS")][0] | "version=\(.appVersion) (\(.appBuildVersion))"' >> $GITHUB_OUTPUT - working-directory: examples/mobile-client/fishjam-chat - - - name: ⛓️‍💥 Get Android archive url and version - id: android_build - run: eas build:list --json --non-interactive | jq -r '[.[] | select(.platform=="ANDROID")][0] | "url=\(.artifacts.applicationArchiveUrl)\nversion=\(.appVersion) (\(.appBuildVersion))"' >> $GITHUB_OUTPUT - working-directory: examples/mobile-client/fishjam-chat - - - name: 📱 Get App Store Connect app ID - id: asc_app - run: echo "id=$(jq -r '.submit.production.ios.ascAppId' eas.json)" >> $GITHUB_OUTPUT - working-directory: examples/mobile-client/fishjam-chat - - - name: 💬 Add comment with build links - uses: actions/github-script@v7 - with: - github-token: ${{secrets.GITHUB_TOKEN}} - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: '**Download links**\nAndroid - ${{ steps.android_build.outputs.version }}: ${{ steps.android_build.outputs.url }}\niOS - ${{ steps.ios_build.outputs.version }}: https://testflight.apple.com/v1/app/${{ steps.asc_app.outputs.id }}' - }) diff --git a/examples/mobile-client/fishjam-chat/.env.example b/examples/mobile-client/fishjam-chat/.env.example deleted file mode 100644 index 975cf0cb2..000000000 --- a/examples/mobile-client/fishjam-chat/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -EXPO_PUBLIC_FISHJAM_ID= -EXPO_PUBLIC_VIDEOROOM_STAGING_SANDBOX_URL= -EXPO_PUBLIC_SANDBOX_API_URL= \ No newline at end of file diff --git a/examples/mobile-client/fishjam-chat/.eslintrc.js b/examples/mobile-client/fishjam-chat/.eslintrc.js deleted file mode 100644 index 9d8402ae0..000000000 --- a/examples/mobile-client/fishjam-chat/.eslintrc.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - root: true, - extends: ['expo'], - ignorePatterns: [ - 'dist/*', - 'node_modules/*', - 'coverage/*', - 'build/*', - 'ios/*', - 'android/*', - '.eslintrc.js', - 'prettier.config.js', - 'global.d.ts', - ], - rules: { - 'import/no-unresolved': 'off', - }, -}; diff --git a/examples/mobile-client/fishjam-chat/.gitignore b/examples/mobile-client/fishjam-chat/.gitignore deleted file mode 100644 index 99491cc9c..000000000 --- a/examples/mobile-client/fishjam-chat/.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -# dependencies -node_modules/ - -# Expo -.expo/ -dist/ -web-build/ -expo-env.d.ts - -# Native -.kotlin/ -*.orig.* -*.jks -*.p8 -*.p12 -*.key -*.mobileprovision - -# Metro -.metro-health-check* - -# debug -npm-debug.* -yarn-debug.* -yarn-error.* - -# macOS -.DS_Store -*.pem - -# local env files -.env*.local - -# typescript -*.tsbuildinfo - -app-example - -# generated native folders -/ios -/android diff --git a/examples/mobile-client/fishjam-chat/README.md b/examples/mobile-client/fishjam-chat/README.md deleted file mode 100644 index 4ca4cdbce..000000000 --- a/examples/mobile-client/fishjam-chat/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# React Native Fishjam example - -## Prerequisites - -Copy `.env.example` to `.env` in the `examples/mobile-client/fishjam-chat` directory and fill in the required value: - -- `EXPO_PUBLIC_FISHJAM_ID` - Fishjam ID for connecting to fishjam platform -- `EXPO_PUBLIC_SANDBOX_API_URL` - Sandbox API URL used by `useSandbox` to create rooms and fetch peer, viewer, and streamer tokens - -You can find these values in the Fishjam dashboard: - -- `Fishjam ID` is available at [fishjam.io/app](https://fishjam.io/app). -- `Sandbox API url` is available at [fishjam.io/app/sandbox](https://fishjam.io/app/sandbox). - -There also exists this additional environment variable, which is used for internal testing purposes: - -- `EXPO_PUBLIC_VIDEOROOM_STAGING_SANDBOX_URL` - Sandbox URL for VideoRoom staging environment - -## Example Overview - -The app has 2 tabs showing different ways to connect to Fishjam video calls: - -**VideoRoom** - Connect to VideoRoom (Fishjam's demo service, something like Google Meet) by entering a room name and username. The app automatically creates the room and generates tokens for you. - -**Livestream** - Join existing livestreams or create your own livestream. - -## Project setup - -1. Clone the repository: - -``` -git clone https://github.com/fishjam-cloud/web-client-sdk.git -cd web-client-sdk -``` - -2. Install dependencies and build project: - -```sh -yarn -yarn build -``` - -> [!IMPORTANT] -> Before prebuilding, replace all occurrences of `io.fishjam.example.fishjamchat` in `app.json` with your own bundle identifier: -> -> - **iOS bundle identifier** — `expo.ios.bundleIdentifier` -> - **Android package name** — `expo.android.package` -> -> For example, if your bundle ID is `com.yourcompany.yourapp`: -> -> - iOS & Android: `com.yourcompany.yourapp` -> - ScreenBroadcastExtension: `com.yourcompany.yourapp.ScreenBroadcastExtension` -> - App group: `group.com.yourcompany.yourapp` - -3. Prebuild native files in example directory: - -```sh -cd examples/mobile-client/fishjam-chat -npx expo prebuild --clean -``` - -> [!NOTE] -> Be sure to run `npx expo prebuild` and not `yarn prebuild` as there's an issue with path generation for the `ios/.xcode.env.local` file - -4. Build app: - -``` -yarn ios -yarn android -``` - -## Development - -1. Whenever you make changes in the `packages` directory, make sure to build the app in the root directory (not in `examples/mobile-client/fishjam-chat`). This ensures that all related workspaces are also built: - -```sh -yarn build -``` - -2. Linter (run in the root directory): - -```sh -yarn lint -``` diff --git a/examples/mobile-client/fishjam-chat/app.json b/examples/mobile-client/fishjam-chat/app.json deleted file mode 100644 index a60680eb1..000000000 --- a/examples/mobile-client/fishjam-chat/app.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "expo": { - "name": "fishjam-chat", - "slug": "fishjam-chat", - "version": "1.0.0", - "orientation": "portrait", - "icon": "./assets/images/icon.png", - "scheme": "fishjamchat", - "userInterfaceStyle": "automatic", - "newArchEnabled": true, - "ios": { - "supportsTablet": true, - "bundleIdentifier": "io.fishjam.example.fishjamchat", - "infoPlist": { - "NSCameraUsageDescription": "Allow $(PRODUCT_NAME) to access your camera.", - "NSMicrophoneUsageDescription": "Allow $(PRODUCT_NAME) to access your microphone.", - "ITSAppUsesNonExemptEncryption": false - } - }, - "android": { - "adaptiveIcon": { - "foregroundImage": "./assets/images/adaptive-icon.png", - "monochromeImage": "./assets/images/adaptive-icon.png", - "backgroundColor": "#ffffff" - }, - "edgeToEdgeEnabled": true, - "predictiveBackGestureEnabled": false, - "permissions": [ - "android.permission.CAMERA", - "android.permission.RECORD_AUDIO", - "android.permission.MODIFY_AUDIO_SETTINGS", - "android.permission.ACCESS_NETWORK_STATE", - "android.permission.ACCESS_WIFI_STATE", - "android.permission.FOREGROUND_SERVICE", - "android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION", - "android.permission.FOREGROUND_SERVICE_CAMERA", - "android.permission.FOREGROUND_SERVICE_MICROPHONE", - "android.permission.POST_NOTIFICATIONS" - ], - "package": "io.fishjam.example.fishjamchat" - }, - "web": { - "output": "static", - "favicon": "./assets/images/favicon.png" - }, - "plugins": [ - "expo-router", - [ - "@fishjam-cloud/react-native-client", - { - "android": { - "supportsPictureInPicture": true, - "enableForegroundService": true, - "enableScreensharing": true - }, - "ios": { - "enableScreensharing": true, - "enableVoIPBackgroundMode": true, - "supportsPictureInPicture": true - } - } - ], - [ - "expo-splash-screen", - { - "image": "./assets/images/splash.png", - "resizeMode": "contain", - "backgroundColor": "#ffffff", - "dark": { - "backgroundColor": "#000000" - } - } - ] - ], - "experiments": { - "typedRoutes": true - }, - "extra": { - "eas": { - "projectId": "3cb3251a-603a-4c13-ab69-6fac3249072d", - "build": { - "experimental": { - "ios": { - "appExtensions": [ - { - "targetName": "ScreenBroadcastExtension", - "bundleIdentifier": "io.fishjam.example.fishjamchat.ScreenBroadcastExtension", - "entitlements": { - "com.apple.security.application-groups": [ - "group.io.fishjam.example.fishjamchat" - ] - } - } - ] - } - } - } - } - }, - "owner": "fishjam-cloud" - } -} diff --git a/examples/mobile-client/fishjam-chat/app/(tabs)/_layout.tsx b/examples/mobile-client/fishjam-chat/app/(tabs)/_layout.tsx deleted file mode 100644 index 4b006f292..000000000 --- a/examples/mobile-client/fishjam-chat/app/(tabs)/_layout.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Ionicons } from '@expo/vector-icons'; -import { Tabs } from 'expo-router'; - -import { BrandColors } from '../../utils/Colors'; - -export default function TabLayout() { - return ( - - ( - - ), - }} - /> - ( - - ), - }} - /> - - ); -} diff --git a/examples/mobile-client/fishjam-chat/app/(tabs)/livestream.tsx b/examples/mobile-client/fishjam-chat/app/(tabs)/livestream.tsx deleted file mode 100644 index c2d643179..000000000 --- a/examples/mobile-client/fishjam-chat/app/(tabs)/livestream.tsx +++ /dev/null @@ -1,145 +0,0 @@ -import { router } from 'expo-router'; -import React, { useState } from 'react'; -import { - Dimensions, - Image, - Keyboard, - KeyboardAvoidingView, - StyleSheet, - Text, -} from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; - -import { Button, DismissKeyboard, TextInput } from '../../components'; - -// eslint-disable-next-line @typescript-eslint/no-require-imports -const FishjamLogo = require('../../assets/images/fishjam-logo.png'); - -export default function LivestreamScreen() { - const [connectionError, setConnectionError] = useState(null); - - const [fishjamId, setFishjamId] = useState( - process.env.EXPO_PUBLIC_FISHJAM_ID ?? '', - ); - const [roomName, setRoomName] = useState(''); - - const validateInputs = () => { - if (!fishjamId) { - throw new Error('Fishjam ID is required'); - } - - if (!roomName) { - throw new Error('Room name is required'); - } - }; - - const onTapConnectViewerButton = async () => { - try { - validateInputs(); - setConnectionError(null); - Keyboard.dismiss(); - router.push({ - pathname: '/livestream/viewer', - params: { fishjamId, roomName }, - }); - } catch (e) { - const message = - 'message' in (e as Error) ? (e as Error).message : 'Unknown error'; - setConnectionError(message); - } - }; - - const onTapConnectStreamerButton = async () => { - try { - validateInputs(); - setConnectionError(null); - Keyboard.dismiss(); - router.push({ - pathname: '/livestream/streamer', - params: { fishjamId, roomName }, - }); - } catch (e) { - const message = - 'message' in (e as Error) ? (e as Error).message : 'Unknown error'; - setConnectionError(message); - } - }; - - const onTapConnectScreenSharingButton = async () => { - try { - validateInputs(); - setConnectionError(null); - Keyboard.dismiss(); - router.push({ - pathname: '/livestream/screen-sharing', - params: { fishjamId, roomName }, - }); - } catch (e) { - const message = - 'message' in (e as Error) ? (e as Error).message : 'Unknown error'; - setConnectionError(message); - } - }; - - return ( - - - - {connectionError && ( - {connectionError} - )} - - - -