-
Notifications
You must be signed in to change notification settings - Fork 0
CI CD Quick Reference
Quick commands and cheatsheet for nself-chat CI/CD system.
# Create a new release
gh workflow run release-v080.yml -f version=0.8.0 -f version_type=minor
# Or use tag
git tag v0.8.0 && git push origin v0.8.0
# Generate changelog manually
./scripts/generate-changelog.sh 0.8.0
# Bump version manually
./scripts/version-bump.sh 0.8.0# iOS
gh workflow run ios-build.yml -f build_type=release -f deploy_testflight=true
# Android
gh workflow run android-build.yml -f build_type=release -f output_format=aab -f deploy_playstore=true
# Desktop (all platforms)
gh workflow run desktop-build.yml -f platform=all -f framework=electron
# Desktop (macOS only)
gh workflow run desktop-build.yml -f platform=macos -f framework=electron# Run all checks locally
pnpm lint && pnpm type-check && pnpm test && pnpm build
# Run specific checks
pnpm lint # ESLint
pnpm lint:fix # Auto-fix lint issues
pnpm format # Format code
pnpm format:check # Check formatting
pnpm type-check # TypeScript
pnpm test # Unit tests
pnpm test:coverage # With coverage
pnpm test:e2e # E2E tests# Watch workflow run
gh run watch
# List recent runs
gh run list
# View workflow status
gh workflow view release-v080.yml
# Download artifacts
gh run download <run-id>APPLE_ID
APPLE_PASSWORD / APPLE_APP_SPECIFIC_PASSWORD
APPLE_TEAM_ID
CERTIFICATES_P12
CERTIFICATES_PASSWORD
PROVISIONING_PROFILE
MAC_CERTS
MAC_CERTS_PASSWORD
KEYSTORE_FILE
KEYSTORE_PASSWORD
KEY_ALIAS
KEY_PASSWORD
PLAY_STORE_JSON_KEY
WIN_CERTS (Windows)
WIN_CSC_KEY_PASSWORD (Windows)
GPG_PRIVATE_KEY (Linux)
GPG_PASSPHRASE (Linux)
SLACK_WEBHOOK_URL
SENDGRID_API_KEY (optional)
RELEASE_EMAIL_TO (optional)
| Workflow | Push (main) | Push (develop) | PR | Tag | Manual |
|---|---|---|---|---|---|
| PR Checks | β | β | β | β | β |
| iOS Build | β | β | β | β | β |
| Android Build | β | β | β | β | β |
| Desktop Build | β | β | β | β | β |
| Release | β | β | β | β | β |
# pnpm
${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
# Gradle
${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
# CocoaPods
${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
# Electron
${{ runner.os }}-electron-${{ hashFiles('platforms/electron/package.json') }}
# Rust/Tauri
rust-cache (automatic via Swatinem/rust-cache)# List caches
gh cache list
# Delete specific cache
gh cache delete <cache-key>
# Delete all caches
gh cache list | awk '{print $2}' | xargs -I {} gh cache delete {}Format: <type>(<scope>): <description>
| Type | Description | Changelog Section |
|---|---|---|
feat |
New feature | β¨ Features |
fix |
Bug fix | π Bug Fixes |
perf |
Performance improvement | β‘ Performance |
security |
Security fix | π Security |
docs |
Documentation | π Documentation |
refactor |
Code refactoring | β»οΈ Refactoring |
test |
Test changes | π§ͺ Tests |
build |
Build system | π¨ Build |
ci |
CI/CD changes | π· CI/CD |
chore |
Maintenance | (Other) |
git commit -m "feat(auth): add OAuth2 support"
git commit -m "fix(chat): resolve message ordering issue"
git commit -m "perf(search): optimize search algorithm"
git commit -m "security(api): add rate limiting"
git commit -m "docs(readme): update installation guide"git commit -m "feat(api): redesign authentication API
BREAKING CHANGE: Authentication endpoints now require OAuth2"# Deploy to TestFlight
./scripts/deploy-testflight.sh \
--ipa platforms/capacitor/ios/build/ipa/App.ipa \
--beta-group "Internal Testers" \
--notify
# Environment variables required
export APPLE_ID="developer@example.com"
export APPLE_PASSWORD="xxxx-xxxx-xxxx-xxxx"# Deploy to Play Store
./scripts/deploy-playstore.sh \
--track internal \
--rollout 50 \
--aab platforms/capacitor/android/app/build/outputs/bundle/release/app-release.aab
# Tracks: internal, alpha, beta, production
# Rollout: 1-100 (percentage)
# Environment variables required
export PLAY_STORE_JSON_KEY="<base64-encoded-json>"# Sign macOS app
./scripts/sign-desktop.sh macos dist/nchat.app
export CSC_LINK="<base64-p12>"
export CSC_KEY_PASSWORD="password"
# Notarize macOS app
./scripts/notarize-macos.sh dist/nchat.dmg
export APPLE_ID="developer@example.com"
export APPLE_APP_SPECIFIC_PASSWORD="xxxx-xxxx-xxxx-xxxx"
export APPLE_TEAM_ID="XXXXXXXXXX"
# Sign Windows app
./scripts/sign-desktop.sh windows dist/nchat.exe
export WIN_CSC_LINK="<base64-pfx>"
export WIN_CSC_KEY_PASSWORD="password"
# Sign Linux app
./scripts/sign-desktop.sh linux dist/nchat.AppImage
export GPG_PRIVATE_KEY="<base64-gpg-key>"
export GPG_PASSPHRASE="passphrase"# Re-run failed jobs
gh run rerun <run-id> --failed
# View logs
gh run view <run-id> --log
# Download logs
gh run view <run-id> --log > build.log# Validate iOS certificate
security find-identity -v -p codesigning
# Check provisioning profile
security cms -D -i profile.mobileprovision
# Verify Android keystore
keytool -list -v -keystore nchat-release.jks# Validate workflow syntax
gh workflow view <workflow-name>
# List workflow runs
gh run list --workflow=<workflow-name>
# Cancel running workflow
gh run cancel <run-id>-
Use caching:
- pnpm cache: ~2 min saved
- Gradle cache: ~3 min saved
- CocoaPods cache: ~5 min saved
- Electron cache: ~1 min saved
-
Parallelize builds:
- iOS + Android + Desktop in parallel
- Multiple desktop platforms in parallel
- Separate lint/test/build jobs
-
Skip unnecessary builds:
- Use path filters
- Skip CI:
[skip ci]in commit message - Skip specific workflows:
[skip ios],[skip android]
-
Optimize dependencies:
- Use
--frozen-lockfile - Minimize devDependencies
- Use lighter alternatives
- Use
The android-build job in ci.yml runs on every push to main or develop and on pull requests.
Stack: Capacitor + Next.js web assets compiled into an Android APK.
Runner: ubuntu-latest Β· Java: 17 (Temurin) Β· No signing secrets required.
What the job does:
- Installs Node.js + pnpm dependencies.
- Builds Next.js web assets (
pnpm build) with dev-auth env vars (no real backend needed). - Runs
cap sync androidto generate the native Android project underfrontend/platforms/mobile/android/. - Runs
./gradlew assembleDebug --no-daemonto produce the debug APK.
Trigger: Automatic on push/pull_request via the top-level ci.yml trigger.
Release / signed APK: handled by deploy-mobile-android.yml (requires Play Store secrets, not in ci.yml).
Version: 0.8.0 | Last Updated: 2026-01-31
nself-chat v0.3.0 | GitHub | Issues | Discussions | Demo
Edit this page | MIT License | Β© 2026
(See π Security section below for 2FA, PIN Lock, and security audits.)
(Search lives in π Reference below.)
- π¬ Advanced Messaging
- π E2EE Setup
- π Search Setup
- π Call Management
- πΊ Live Streaming
- π₯οΈ Screen Sharing
- πΉ Video Calling
- ποΈ Voice Calling
- π± Mobile Optimization
- π§ͺ Testing
- π i18n
- π API Overview
- π Complete Reference
- π» API Examples
- π€ Bot API
- π Auth API
- π GraphQL Schema
- π Deployment Overview
- π³ Docker
- βΈοΈ Kubernetes
- β Helm Charts
- β Production Checklist
- π Production Validation
- π’ Multi-Tenant
- ποΈ Architecture
- π Diagrams
- ποΈ Database Schema
- π Project Structure
- π TypeScript Types
- π SPORT Reference
- π 2FA
- π¬ Messaging
- π Call Management
- π Call State Machine
- π E2EE
- πΊ Live Streaming
- π± Mobile Calls
- π PIN Lock
- π Polls
- π₯οΈ Screen Sharing
- π Search
- π Social Media
- ποΈ Voice Calling
- π Security Overview
- π‘οΈ Security Audit
- β‘ Performance
- π Best Practices
- π 2FA
- π PIN Lock
- π E2EE
- π‘οΈ E2EE Audit
v1.0.0 β’ 2026