v1.8.0 #429

Merged
LukeGus merged 198 commits from dev-1.8.0 into main 2025-11-05 16:36:16 +00:00
10 changed files with 1470 additions and 0 deletions
Showing only changes of commit 214dd4be30 - Show all commits

View File

@@ -653,6 +653,411 @@ jobs:
path: choco-build/*.nupkg path: choco-build/*.nupkg
retention-days: 30 retention-days: 30
submit-to-flatpak:
runs-on: ubuntu-latest
if: github.event.inputs.artifact_destination == 'submit'
needs: [build-linux]
permissions:
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 1
- name: Get version from package.json
id: package-version
run: |
VERSION=$(node -p "require('./package.json').version")
RELEASE_DATE=$(date +%Y-%m-%d)
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "release_date=$RELEASE_DATE" >> $GITHUB_OUTPUT
echo "Building Flatpak submission for version: $VERSION"
- name: Download Linux x64 AppImage artifact
uses: actions/download-artifact@v4
with:
name: termix_linux_x64_appimage
path: artifact-x64
- name: Download Linux arm64 AppImage artifact
uses: actions/download-artifact@v4
with:
name: termix_linux_arm64_appimage
path: artifact-arm64
- name: Get AppImage file info
id: appimage-info
run: |
VERSION="${{ steps.package-version.outputs.version }}"
# x64 AppImage
APPIMAGE_X64_FILE=$(find artifact-x64 -name "*.AppImage" -type f | head -n 1)
APPIMAGE_X64_NAME=$(basename "$APPIMAGE_X64_FILE")
CHECKSUM_X64=$(sha256sum "$APPIMAGE_X64_FILE" | awk '{print $1}')
# arm64 AppImage
APPIMAGE_ARM64_FILE=$(find artifact-arm64 -name "*.AppImage" -type f | head -n 1)
APPIMAGE_ARM64_NAME=$(basename "$APPIMAGE_ARM64_FILE")
CHECKSUM_ARM64=$(sha256sum "$APPIMAGE_ARM64_FILE" | awk '{print $1}')
echo "appimage_x64_name=$APPIMAGE_X64_NAME" >> $GITHUB_OUTPUT
echo "checksum_x64=$CHECKSUM_X64" >> $GITHUB_OUTPUT
echo "appimage_arm64_name=$APPIMAGE_ARM64_NAME" >> $GITHUB_OUTPUT
echo "checksum_arm64=$CHECKSUM_ARM64" >> $GITHUB_OUTPUT
echo "x64 AppImage: $APPIMAGE_X64_NAME"
echo "x64 SHA256: $CHECKSUM_X64"
echo "arm64 AppImage: $APPIMAGE_ARM64_NAME"
echo "arm64 SHA256: $CHECKSUM_ARM64"
- name: Install ImageMagick for icon generation
run: |
sudo apt-get update
sudo apt-get install -y imagemagick
- name: Prepare Flatpak submission files
run: |
VERSION="${{ steps.package-version.outputs.version }}"
CHECKSUM_X64="${{ steps.appimage-info.outputs.checksum_x64 }}"
CHECKSUM_ARM64="${{ steps.appimage-info.outputs.checksum_arm64 }}"
RELEASE_DATE="${{ steps.package-version.outputs.release_date }}"
APPIMAGE_X64_NAME="${{ steps.appimage-info.outputs.appimage_x64_name }}"
APPIMAGE_ARM64_NAME="${{ steps.appimage-info.outputs.appimage_arm64_name }}"
# Create submission directory
mkdir -p flatpak-submission
# Copy Flatpak files to submission directory
cp flatpak/com.karmaa.termix.yml flatpak-submission/
cp flatpak/com.karmaa.termix.desktop flatpak-submission/
cp flatpak/com.karmaa.termix.metainfo.xml flatpak-submission/
cp flatpak/flathub.json flatpak-submission/
# Copy and prepare icons
cp public/icon.svg flatpak-submission/com.karmaa.termix.svg
convert public/icon.png -resize 256x256 flatpak-submission/icon-256.png
convert public/icon.png -resize 128x128 flatpak-submission/icon-128.png
# Update manifest with version and checksums
sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" flatpak-submission/com.karmaa.termix.yml
sed -i "s/CHECKSUM_X64_PLACEHOLDER/$CHECKSUM_X64/g" flatpak-submission/com.karmaa.termix.yml
sed -i "s/CHECKSUM_ARM64_PLACEHOLDER/$CHECKSUM_ARM64/g" flatpak-submission/com.karmaa.termix.yml
# Update metainfo with version and date
sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" flatpak-submission/com.karmaa.termix.metainfo.xml
sed -i "s/DATE_PLACEHOLDER/$RELEASE_DATE/g" flatpak-submission/com.karmaa.termix.metainfo.xml
echo "✅ Flatpak submission files prepared for version $VERSION"
echo "x64 Download URL: https://github.com/Termix-SSH/Termix/releases/download/release-$VERSION-tag/$APPIMAGE_X64_NAME"
echo "arm64 Download URL: https://github.com/Termix-SSH/Termix/releases/download/release-$VERSION-tag/$APPIMAGE_ARM64_NAME"
- name: Create submission instructions
run: |
cat > flatpak-submission/SUBMISSION_INSTRUCTIONS.md << 'EOF'
# Flathub Submission Instructions for Termix
## Automatic Submission (Recommended)
All files needed for Flathub submission are in this artifact. Follow these steps:
1. **Fork the Flathub repository**:
- Go to https://github.com/flathub/flathub
- Click "Fork" button
2. **Clone your fork**:
```bash
git clone https://github.com/YOUR-USERNAME/flathub.git
cd flathub
git checkout -b com.karmaa.termix
```
3. **Copy all files from this artifact** to the root of your flathub fork
4. **Commit and push**:
```bash
git add .
git commit -m "Add Termix ${{ steps.package-version.outputs.version }}"
git push origin com.karmaa.termix
```
5. **Create Pull Request**:
- Go to https://github.com/YOUR-USERNAME/flathub
- Click "Compare & pull request"
- Submit PR to flathub/flathub
## Files in this submission:
- `com.karmaa.termix.yml` - Flatpak manifest
- `com.karmaa.termix.desktop` - Desktop entry
- `com.karmaa.termix.metainfo.xml` - AppStream metadata
- `flathub.json` - Flathub configuration
- `com.karmaa.termix.svg` - SVG icon
- `icon-256.png` - 256x256 icon
- `icon-128.png` - 128x128 icon
## Version Information:
- Version: ${{ steps.package-version.outputs.version }}
- Release Date: ${{ steps.package-version.outputs.release_date }}
- x64 AppImage SHA256: ${{ steps.appimage-info.outputs.checksum_x64 }}
- arm64 AppImage SHA256: ${{ steps.appimage-info.outputs.checksum_arm64 }}
## After Submission:
1. Flathub maintainers will review your submission (usually 1-5 days)
2. They may request changes - be responsive to feedback
3. Once approved, Termix will be available via: `flatpak install flathub com.karmaa.termix`
## Resources:
- [Flathub Submission Guidelines](https://docs.flathub.org/docs/for-app-authors/submission)
- [Flatpak Documentation](https://docs.flatpak.org/)
EOF
echo "✅ Created submission instructions"
- name: List submission files
run: |
echo "Flatpak submission files:"
ls -la flatpak-submission/
- name: Upload Flatpak submission as artifact
uses: actions/upload-artifact@v4
with:
name: flatpak-submission
path: flatpak-submission/*
retention-days: 30
- name: Display next steps
run: |
echo ""
echo "🎉 Flatpak submission files ready!"
echo ""
echo "📦 Download the 'flatpak-submission' artifact and follow SUBMISSION_INSTRUCTIONS.md"
echo ""
echo "Quick summary:"
echo "1. Fork https://github.com/flathub/flathub"
echo "2. Copy artifact files to your fork"
echo "3. Create PR to flathub/flathub"
echo ""
submit-to-homebrew:
runs-on: macos-latest
if: github.event.inputs.artifact_destination == 'submit'
needs: [build-macos]
permissions:
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 1
- name: Get version from package.json
id: package-version
run: |
VERSION=$(node -p "require('./package.json').version")
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Building Homebrew Cask for version: $VERSION"
- name: Download macOS Universal DMG artifact
uses: actions/download-artifact@v4
with:
name: termix_macos_universal_dmg
path: artifact
- name: Get DMG file info
id: dmg-info
run: |
VERSION="${{ steps.package-version.outputs.version }}"
DMG_FILE=$(find artifact -name "*.dmg" -type f | head -n 1)
DMG_NAME=$(basename "$DMG_FILE")
CHECKSUM=$(shasum -a 256 "$DMG_FILE" | awk '{print $1}')
echo "dmg_name=$DMG_NAME" >> $GITHUB_OUTPUT
echo "checksum=$CHECKSUM" >> $GITHUB_OUTPUT
echo "DMG File: $DMG_NAME"
echo "SHA256: $CHECKSUM"
- name: Prepare Homebrew submission files
run: |
VERSION="${{ steps.package-version.outputs.version }}"
CHECKSUM="${{ steps.dmg-info.outputs.checksum }}"
DMG_NAME="${{ steps.dmg-info.outputs.dmg_name }}"
# Create submission directory
mkdir -p homebrew-submission/Casks/t
# Copy Homebrew cask file
cp homebrew/termix.rb homebrew-submission/Casks/t/termix.rb
cp homebrew/README.md homebrew-submission/
# Update cask with version and checksum
sed -i '' "s/VERSION_PLACEHOLDER/$VERSION/g" homebrew-submission/Casks/t/termix.rb
sed -i '' "s/CHECKSUM_PLACEHOLDER/$CHECKSUM/g" homebrew-submission/Casks/t/termix.rb
echo "✅ Homebrew Cask prepared for version $VERSION"
echo "Download URL: https://github.com/Termix-SSH/Termix/releases/download/release-$VERSION-tag/$DMG_NAME"
- name: Verify Cask syntax
run: |
# Install Homebrew if not present (should be on macos-latest)
if ! command -v brew &> /dev/null; then
echo "Installing Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
# Basic syntax check
ruby -c homebrew-submission/Casks/t/termix.rb
echo "✅ Cask syntax is valid"
- name: Create submission instructions
run: |
cat > homebrew-submission/SUBMISSION_INSTRUCTIONS.md << 'EOF'
# Homebrew Cask Submission Instructions for Termix
## Option 1: Submit to Official Homebrew Cask (Recommended)
### Prerequisites
- macOS with Homebrew installed
- GitHub account
### Steps
1. **Fork the Homebrew Cask repository**:
- Go to https://github.com/Homebrew/homebrew-cask
- Click "Fork" button
2. **Clone your fork**:
```bash
git clone https://github.com/YOUR-USERNAME/homebrew-cask.git
cd homebrew-cask
git checkout -b termix
```
3. **Copy the cask file**:
- Copy `Casks/t/termix.rb` from this artifact to your fork at `Casks/t/termix.rb`
- Note: Casks are organized by first letter in subdirectories
4. **Test the cask locally**:
```bash
brew install --cask ./Casks/t/termix.rb
brew uninstall --cask termix
```
5. **Run audit checks**:
```bash
brew audit --cask --online ./Casks/t/termix.rb
brew style ./Casks/t/termix.rb
```
6. **Commit and push**:
```bash
git add Casks/t/termix.rb
git commit -m "Add Termix ${{ steps.package-version.outputs.version }}"
git push origin termix
```
7. **Create Pull Request**:
- Go to https://github.com/YOUR-USERNAME/homebrew-cask
- Click "Compare & pull request"
- Fill in the PR template
- Submit to Homebrew/homebrew-cask
### PR Requirements
Your PR should include:
- Clear commit message: "Add Termix X.Y.Z" or "Update Termix to X.Y.Z"
- All audit checks passing
- Working download URL
- Valid SHA256 checksum
## Option 2: Create Your Own Tap (Alternative)
If you want more control and faster updates:
1. **Create a tap repository**:
- Create repo: `Termix-SSH/homebrew-termix`
- Add `Casks/termix.rb` to the repo
2. **Users install with**:
```bash
brew tap termix-ssh/termix
brew install --cask termix
```
### Advantages of Custom Tap
- No approval process
- Instant updates
- Full control
- Can include beta versions
### Disadvantages
- Less discoverable
- Users must add tap first
- You maintain it yourself
## Files in this submission:
- `Casks/t/termix.rb` - Homebrew Cask formula
- `README.md` - Detailed documentation
- `SUBMISSION_INSTRUCTIONS.md` - This file
## Version Information:
- Version: ${{ steps.package-version.outputs.version }}
- DMG SHA256: ${{ steps.dmg-info.outputs.checksum }}
- DMG URL: https://github.com/Termix-SSH/Termix/releases/download/release-${{ steps.package-version.outputs.version }}-tag/${{ steps.dmg-info.outputs.dmg_name }}
## After Submission:
### Official Homebrew Cask:
1. Maintainers will review (usually 24-48 hours)
2. May request changes or fixes
3. Once merged, users can install with: `brew install --cask termix`
4. Homebrew bot will auto-update for future releases
### Custom Tap:
1. Push to your tap repository
2. Immediately available to users
3. Update the cask file for each new release
## Resources:
- [Homebrew Cask Documentation](https://docs.brew.sh/Cask-Cookbook)
- [Acceptable Casks](https://docs.brew.sh/Acceptable-Casks)
- [How to Open a PR](https://docs.brew.sh/How-To-Open-a-Homebrew-Pull-Request)
EOF
echo "✅ Created submission instructions"
- name: List submission files
run: |
echo "Homebrew submission files:"
find homebrew-submission -type f
- name: Upload Homebrew submission as artifact
uses: actions/upload-artifact@v4
with:
name: homebrew-submission
path: homebrew-submission/*
retention-days: 30
- name: Display next steps
run: |
echo ""
echo "🍺 Homebrew Cask ready!"
echo ""
echo "📦 Download the 'homebrew-submission' artifact and follow SUBMISSION_INSTRUCTIONS.md"
echo ""
echo "Quick summary:"
echo "Option 1 (Recommended): Fork https://github.com/Homebrew/homebrew-cask and submit PR"
echo "Option 2 (Alternative): Create your own tap at Termix-SSH/homebrew-termix"
echo ""
upload-to-release: upload-to-release:
runs-on: blacksmith-4vcpu-ubuntu-2404 runs-on: blacksmith-4vcpu-ubuntu-2404
if: github.event.inputs.artifact_destination == 'release' if: github.event.inputs.artifact_destination == 'release'

362
PACKAGE_MANAGERS.md Normal file
View File

@@ -0,0 +1,362 @@
# Package Manager Submissions for Termix
This document describes the package manager integrations for Termix and how to use them.
## Chocolatey (Windows)
### Overview
Chocolatey package files are located in the `chocolatey/` directory.
### Files
- `termix.nuspec` - Package manifest
- `tools/chocolateyinstall.ps1` - Installation script
- `tools/chocolateyuninstall.ps1` - Uninstallation script
### Automatic Submission
When you run the "Build Electron App" workflow with `artifact_destination: submit`:
1. The workflow builds the Windows x64 MSI
2. Automatically creates a Chocolatey package
3. Pushes to Chocolatey if `CHOCOLATEY_API_KEY` secret is configured
### Setup
Add your Chocolatey API key as a GitHub secret:
- Secret name: `CHOCOLATEY_API_KEY`
- Get your API key from: https://community.chocolatey.org/account
### Manual Submission
If you prefer to submit manually:
1. Download the `chocolatey-package` artifact from GitHub Actions
2. Run: `choco push termix.{VERSION}.nupkg --source https://push.chocolatey.org/`
### Installation (for users)
Once approved on Chocolatey:
```powershell
choco install termix
```
---
## Flatpak (Linux)
### Overview
Flatpak package files are located in the `flatpak/` directory.
### Files
- `com.karmaa.termix.yml` - Flatpak manifest (supports x64 and arm64)
- `com.karmaa.termix.desktop` - Desktop entry file
- `com.karmaa.termix.metainfo.xml` - AppStream metadata
- `flathub.json` - Flathub configuration
- `prepare-flatpak.sh` - Helper script for manual preparation
- `README.md` - Detailed Flatpak documentation
### Automatic Preparation
When you run the "Build Electron App" workflow with `artifact_destination: submit`:
1. The workflow builds Linux x64 and arm64 AppImages
2. Generates all required Flatpak submission files
3. Creates a `flatpak-submission` artifact with everything needed
### Submission Process
Flatpak requires manual PR submission to Flathub:
1. **Download the artifact**
- Download `flatpak-submission` from the GitHub Actions run
- Extract all files
2. **Fork Flathub**
- Go to https://github.com/flathub/flathub
- Click "Fork"
3. **Prepare your fork**
```bash
git clone https://github.com/YOUR-USERNAME/flathub.git
cd flathub
git checkout -b com.karmaa.termix
```
4. **Copy submission files**
- Copy all files from the `flatpak-submission` artifact to your fork root
5. **Submit PR**
```bash
git add .
git commit -m "Add Termix application"
git push origin com.karmaa.termix
```
- Go to your fork on GitHub
- Click "Compare & pull request"
- Submit to flathub/flathub
6. **Wait for review**
- Flathub maintainers will review (typically 1-5 days)
- Be responsive to feedback
### Testing Locally
Before submitting, you can test the Flatpak build:
```bash
# Install flatpak-builder
sudo apt install flatpak-builder
# Build and install
cd flatpak/
flatpak-builder --user --install --force-clean build-dir com.karmaa.termix.yml
# Run
flatpak run com.karmaa.termix
```
### Installation (for users)
Once approved on Flathub:
```bash
flatpak install flathub com.karmaa.termix
```
---
## Homebrew Cask (macOS)
### Overview
Homebrew Cask files are located in the `homebrew/` directory. Casks are used for GUI macOS applications.
### Files
- `termix.rb` - Homebrew Cask formula
- `README.md` - Detailed documentation
### Submission Options
You have two options for distributing via Homebrew:
#### Option 1: Official Homebrew Cask (Recommended)
Submit to https://github.com/Homebrew/homebrew-cask for maximum visibility.
**Advantages:**
- Discoverable by all Homebrew users
- Automatic update checking
- Official Homebrew support
**Process:**
1. Download the `homebrew-submission` artifact from GitHub Actions
2. Fork Homebrew/homebrew-cask
3. Add the cask file to `Casks/t/termix.rb`
4. Test locally and run audit checks
5. Submit PR
**Requirements:**
- App must be stable (not beta)
- Source code must be public
- Must pass `brew audit --cask` checks
- DMG must be code-signed and notarized (already done)
#### Option 2: Custom Tap (Alternative)
Create your own Homebrew tap at `Termix-SSH/homebrew-termix`.
**Advantages:**
- Full control over updates
- No approval process
- Can include beta releases
**Setup:**
```bash
# Create repository: Termix-SSH/homebrew-termix
# Add file: Casks/termix.rb (from homebrew-submission artifact)
```
**Users install with:**
```bash
brew tap termix-ssh/termix
brew install --cask termix
```
### Automatic Preparation
When you run the "Build Electron App" workflow with `artifact_destination: submit`:
1. Builds macOS universal DMG
2. Calculates SHA256 checksum
3. Updates cask file with version and checksum
4. Verifies Ruby syntax
5. Creates a `homebrew-submission` artifact
### Installation (for users)
**From Official Homebrew (after approval):**
```bash
brew install --cask termix
```
**From Custom Tap:**
```bash
brew tap termix-ssh/termix
brew install --cask termix
```
### Updating the Cask
**Official Homebrew Cask:**
- Homebrew bot auto-updates within hours of new releases
- Or manually submit PR with new version/checksum
**Custom Tap:**
- Update version and sha256 in termix.rb
- Commit to your tap repository
- Users run: `brew upgrade --cask termix`
### Testing Locally
```bash
# Test installation
brew install --cask ./homebrew/termix.rb
# Verify it works
open /Applications/Termix.app
# Uninstall
brew uninstall --cask termix
# Run audit
brew audit --cask --online ./homebrew/termix.rb
brew style ./homebrew/termix.rb
```
---
## Workflow Integration
### GitHub Actions Workflow
The `.github/workflows/electron-build.yml` includes three package manager submission jobs:
1. **submit-to-chocolatey** - Automatically submits to Chocolatey
- Requires: `CHOCOLATEY_API_KEY` secret
- Runs when: `artifact_destination == 'submit'`
- Platform: Windows
- Output: Auto-pushes to Chocolatey + artifact
2. **submit-to-flatpak** - Prepares Flatpak submission files
- No secrets required
- Runs when: `artifact_destination == 'submit'`
- Platform: Linux
- Output: Artifact for manual Flathub PR (both x64 and arm64)
3. **submit-to-homebrew** - Prepares Homebrew Cask submission files
- No secrets required
- Runs when: `artifact_destination == 'submit'`
- Platform: macOS
- Output: Artifact for manual Homebrew PR or custom tap
### Usage
When creating a release, select "submit" for artifact destination:
- This will build for all platforms (Windows, Linux, macOS)
- Automatically submit to Chocolatey (if API key is configured)
- Create Flatpak submission artifact for manual Flathub PR
- Create Homebrew submission artifact for manual Homebrew PR or custom tap
### Artifacts Generated
- `chocolatey-package` - .nupkg file (also auto-pushed if key configured)
- `flatpak-submission` - Complete Flathub submission (x64 + arm64)
- `homebrew-submission` - Complete Homebrew Cask submission (universal DMG)
---
## Version Management
Both package managers automatically use the version from `package.json`:
- Current version: 1.8.0
- Version is dynamically injected during the build process
- Download URLs are constructed using the release tag format: `release-{VERSION}-tag`
### Important Notes
- Ensure your GitHub releases follow the tag format: `release-X.Y.Z-tag`
- Example: `release-1.8.0-tag`
- If your tag format differs, update the workflows accordingly
---
## Support
For issues with:
- **Chocolatey package**: Open issue at https://community.chocolatey.org/packages/termix
- **Flatpak package**: Open issue at https://github.com/flathub/com.karmaa.termix
- **Homebrew Cask**:
- Official: Open issue at https://github.com/Homebrew/homebrew-cask/issues
- Custom tap: Open issue in your tap repository
- **Build process**: Open issue at https://github.com/Termix-SSH/Termix/issues
## Installation Summary
### Windows
```powershell
# Chocolatey (after approval)
choco install termix
```
### Linux
```bash
# Flatpak (after approval)
flatpak install flathub com.karmaa.termix
```
### macOS
```bash
# Official Homebrew Cask (after approval)
brew install --cask termix
# Or from custom tap
brew tap termix-ssh/termix
brew install --cask termix
```
---
## Future Package Managers
To add support for additional package managers:
1. Create a directory with package files (e.g., `snap/`, `homebrew/`)
2. Add a job to `.github/workflows/electron-build.yml`
3. Update this document with instructions
4. Consider whether submission can be automated or requires manual PR

View File

@@ -0,0 +1,309 @@
# Package Submission Setup Summary
This document summarizes all the package manager integrations that have been set up for Termix.
## Overview
Termix now has complete package manager support for all three major platforms:
- **Windows**: Chocolatey
- **Linux**: Flatpak (Flathub)
- **macOS**: Homebrew Cask
## Files Created
### Chocolatey (Windows)
```
chocolatey/
├── termix.nuspec # Package manifest
└── tools/
├── chocolateyinstall.ps1 # Installation script
└── chocolateyuninstall.ps1 # Uninstallation script
```
### Flatpak (Linux)
```
flatpak/
├── com.karmaa.termix.yml # Flatpak manifest (x64 & arm64)
├── com.karmaa.termix.desktop # Desktop entry file
├── com.karmaa.termix.metainfo.xml # AppStream metadata
├── flathub.json # Flathub configuration
├── prepare-flatpak.sh # Helper script
└── README.md # Detailed documentation
```
### Homebrew (macOS)
```
homebrew/
├── termix.rb # Homebrew Cask formula
└── README.md # Detailed documentation
```
### Documentation
```
PACKAGE_MANAGERS.md # Complete guide for all package managers
PACKAGE_SUBMISSION_SUMMARY.md # This file
```
### Modified Files
```
.github/workflows/electron-build.yml # Added 3 new submission jobs
```
## GitHub Actions Integration
### New Jobs Added to Workflow
1. **submit-to-chocolatey** (Lines 551-654)
- Platform: Windows
- Trigger: `artifact_destination == 'submit'`
- Actions:
- Downloads Windows x64 MSI
- Calculates SHA256 checksum
- Updates package manifest with version/checksum
- Packs Chocolatey package
- Automatically pushes to Chocolatey (if API key configured)
- Creates artifact for backup
2. **submit-to-flatpak** (Lines 656-844)
- Platform: Linux (Ubuntu)
- Trigger: `artifact_destination == 'submit'`
- Actions:
- Downloads x64 and arm64 AppImages
- Calculates SHA256 checksums for both architectures
- Generates PNG icons from SVG
- Updates manifest and metainfo with version/checksums/date
- Creates complete submission artifact
- Includes detailed submission instructions
3. **submit-to-homebrew** (Lines 846-1059)
- Platform: macOS
- Trigger: `artifact_destination == 'submit'`
- Actions:
- Downloads macOS universal DMG
- Calculates SHA256 checksum
- Updates Cask formula with version/checksum
- Verifies Ruby syntax
- Creates submission artifact
- Includes instructions for both official and custom tap
## Setup Required
### Chocolatey (Automated)
Add GitHub secret to enable automatic submission:
- **Secret name**: `CHOCOLATEY_API_KEY`
- **Get from**: https://community.chocolatey.org/account
- **Location**: Repository Settings → Secrets and variables → Actions
### Flatpak (Manual)
No secrets required. Process:
1. Run workflow with "submit" option
2. Download `flatpak-submission` artifact
3. Fork https://github.com/flathub/flathub
4. Copy files and create PR
### Homebrew (Manual)
No secrets required. Two options:
**Option 1: Official Homebrew**
1. Run workflow with "submit" option
2. Download `homebrew-submission` artifact
3. Fork https://github.com/Homebrew/homebrew-cask
4. Add to `Casks/t/termix.rb` and create PR
**Option 2: Custom Tap**
1. Create repository: `Termix-SSH/homebrew-termix`
2. Add `Casks/termix.rb` from artifact
3. Users install with: `brew tap termix-ssh/termix && brew install --cask termix`
## How to Use
### For Each Release:
1. **Prepare Release**
- Ensure version in `package.json` is updated
- Create GitHub release with tag format: `release-X.Y.Z-tag`
- Example: `release-1.8.0-tag`
2. **Run Build Workflow**
- Go to Actions → "Build Electron App"
- Click "Run workflow"
- Select options:
- **Platform**: `all` (or specific platform)
- **Artifact destination**: `submit`
3. **Automated Submissions**
- **Chocolatey**: Automatically pushed (if API key configured)
- Package appears on Chocolatey within hours
- Users can install with: `choco install termix`
4. **Manual Submissions**
- **Flatpak**: Download `flatpak-submission` artifact
- Follow instructions in `SUBMISSION_INSTRUCTIONS.md`
- Submit PR to flathub/flathub
- Review time: 1-5 days
- **Homebrew**: Download `homebrew-submission` artifact
- Follow instructions in `SUBMISSION_INSTRUCTIONS.md`
- Option 1: Submit PR to Homebrew/homebrew-cask
- Option 2: Push to custom tap
- Review time (official): 24-48 hours
## Version Management
All package managers automatically use the version from `package.json`:
- Current version: **1.8.0**
- Version format: Semantic versioning (X.Y.Z)
- All checksums calculated automatically
- Download URLs constructed automatically
## Important Notes
### Release Tag Format
The workflows expect GitHub release tags in this format:
```
release-{VERSION}-tag
```
Examples:
-`release-1.8.0-tag`
-`release-2.0.0-tag`
-`v1.8.0`
-`1.8.0`
If your tag format is different, update these lines in the workflows:
- **Chocolatey**: Line 597
- **Flatpak**: Lines 724-725
- **Homebrew**: Line 900
### Code Signing Requirements
All builds require proper code signing:
- **Windows MSI**: Already signed via electron-builder
- **Linux AppImage**: No signing required
- **macOS DMG**: Must be signed and notarized (already configured)
### File Naming Conventions
The workflows expect these file naming patterns:
- Windows: `termix_windows_x64_{version}_msi.msi`
- Linux x64: `termix_linux_x64_{version}_appimage.AppImage`
- Linux arm64: `termix_linux_arm64_{version}_appimage.AppImage`
- macOS: `termix_macos_universal_{version}_dmg.dmg`
These are already configured in `electron-builder.json`.
## Testing Locally
### Chocolatey
```powershell
cd chocolatey
choco pack termix.nuspec
choco install termix -s . -y
```
### Flatpak
```bash
cd flatpak
flatpak-builder --user --install --force-clean build-dir com.karmaa.termix.yml
flatpak run com.karmaa.termix
```
### Homebrew
```bash
cd homebrew
brew install --cask ./termix.rb
brew uninstall --cask termix
```
## User Installation Commands
Once approved on all platforms:
```bash
# Windows (Chocolatey)
choco install termix
# Linux (Flatpak)
flatpak install flathub com.karmaa.termix
# macOS (Homebrew - Official)
brew install --cask termix
# macOS (Homebrew - Custom Tap)
brew tap termix-ssh/termix
brew install --cask termix
```
## Update Strategy
### Chocolatey
- Updates pushed automatically when you run workflow with "submit"
- Users update with: `choco upgrade termix`
### Flatpak
- After initial approval, you get a repository: `flathub/com.karmaa.termix`
- For updates: commit new version/checksum to that repo
- Flathub auto-builds and publishes
- Users update with: `flatpak update`
### Homebrew (Official)
- Homebrew bot auto-updates within hours of new releases
- Detects new releases via GitHub releases
- Users update with: `brew upgrade --cask termix`
### Homebrew (Custom Tap)
- Manually update the cask file in your tap repo
- Users update with: `brew upgrade --cask termix`
## Resources
- [Chocolatey Documentation](https://docs.chocolatey.org/)
- [Flatpak Documentation](https://docs.flatpak.org/)
- [Flathub Submission](https://docs.flathub.org/docs/for-app-authors/submission)
- [Homebrew Cask Cookbook](https://docs.brew.sh/Cask-Cookbook)
- [AppStream Guidelines](https://www.freedesktop.org/software/appstream/docs/)
## Support
For issues:
- **Build/Workflow**: https://github.com/Termix-SSH/Termix/issues
- **Chocolatey**: https://community.chocolatey.org/packages/termix
- **Flatpak**: https://github.com/flathub/com.karmaa.termix/issues
- **Homebrew**: https://github.com/Homebrew/homebrew-cask/issues (or your custom tap)
---
**Next Steps:**
1. Add `CHOCOLATEY_API_KEY` to GitHub secrets
2. Run workflow with "submit" option for your next release
3. Download artifacts and follow submission instructions
4. Monitor submission PRs and respond to feedback

View File

@@ -0,0 +1,11 @@
[Desktop Entry]
Name=Termix
Comment=Web-based server management platform with SSH terminal, tunneling, and file editing
Exec=termix %U
Icon=com.karmaa.termix
Terminal=false
Type=Application
Categories=Development;Network;System;
Keywords=ssh;terminal;server;management;tunnel;
StartupWMClass=termix
StartupNotify=true

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
<id>com.karmaa.termix</id>
<name>Termix</name>
<summary>Web-based server management platform with SSH terminal, tunneling, and file editing</summary>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-3.0-or-later</project_license>
<developer_name>bugattiguy527</developer_name>
<description>
<p>
Termix is an open-source, forever-free, self-hosted all-in-one server management platform.
It provides a web-based solution for managing your servers and infrastructure through a single, intuitive interface.
</p>
<p>Features:</p>
<ul>
<li>SSH terminal access with full terminal emulation</li>
<li>SSH tunneling capabilities for secure port forwarding</li>
<li>Remote file management with editor support</li>
<li>Server monitoring and management tools</li>
<li>Self-hosted solution - keep your data private</li>
<li>Modern, intuitive web interface</li>
</ul>
</description>
<launchable type="desktop-id">com.karmaa.termix.desktop</launchable>
<screenshots>
<screenshot type="default">
<image>https://raw.githubusercontent.com/Termix-SSH/Termix/main/public/screenshots/terminal.png</image>
<caption>SSH Terminal Interface</caption>
</screenshot>
</screenshots>
<url type="homepage">https://github.com/Termix-SSH/Termix</url>
<url type="bugtracker">https://github.com/Termix-SSH/Support/issues</url>
<url type="help">https://docs.termix.site</url>
<url type="vcs-browser">https://github.com/Termix-SSH/Termix</url>
<content_rating type="oars-1.1">
<content_attribute id="social-info">moderate</content_attribute>
</content_rating>
<releases>
<release version="VERSION_PLACEHOLDER" date="DATE_PLACEHOLDER">
<description>
<p>Latest release of Termix</p>
</description>
<url>https://github.com/Termix-SSH/Termix/releases</url>
</release>
</releases>
<categories>
<category>Development</category>
<category>Network</category>
<category>System</category>
</categories>
<keywords>
<keyword>ssh</keyword>
<keyword>terminal</keyword>
<keyword>server</keyword>
<keyword>management</keyword>
<keyword>tunnel</keyword>
<keyword>file-manager</keyword>
</keywords>
<provides>
<binary>termix</binary>
</provides>
<requires>
<internet>always</internet>
</requires>
</component>

View File

@@ -0,0 +1,69 @@
app-id: com.karmaa.termix
runtime: org.freedesktop.Platform
runtime-version: '23.08'
sdk: org.freedesktop.Sdk
base: org.electronjs.Electron2.BaseApp
base-version: '23.08'
command: termix
separate-locales: false
finish-args:
- --socket=x11
- --socket=wayland
- --socket=pulseaudio
- --share=network
- --share=ipc
- --device=dri
- --filesystem=home
- --socket=ssh-auth
- --talk-name=org.freedesktop.Notifications
- --talk-name=org.freedesktop.secrets
modules:
- name: termix
buildsystem: simple
build-commands:
- chmod +x termix.AppImage
- ./termix.AppImage --appimage-extract
- install -Dm755 squashfs-root/termix /app/bin/termix
- cp -r squashfs-root/resources /app/bin/
- cp -r squashfs-root/locales /app/bin/ || true
- install -Dm644 com.karmaa.termix.desktop /app/share/applications/com.karmaa.termix.desktop
- install -Dm644 com.karmaa.termix.metainfo.xml /app/share/metainfo/com.karmaa.termix.metainfo.xml
- install -Dm644 com.karmaa.termix.svg /app/share/icons/hicolor/scalable/apps/com.karmaa.termix.svg
- install -Dm644 icon-256.png /app/share/icons/hicolor/256x256/apps/com.karmaa.termix.png || true
- install -Dm644 icon-128.png /app/share/icons/hicolor/128x128/apps/com.karmaa.termix.png || true
sources:
- type: file
url: https://github.com/Termix-SSH/Termix/releases/download/release-VERSION_PLACEHOLDER-tag/termix_linux_x64_VERSION_PLACEHOLDER_appimage.AppImage
sha256: CHECKSUM_X64_PLACEHOLDER
dest-filename: termix.AppImage
only-arches:
- x86_64
- type: file
url: https://github.com/Termix-SSH/Termix/releases/download/release-VERSION_PLACEHOLDER-tag/termix_linux_arm64_VERSION_PLACEHOLDER_appimage.AppImage
sha256: CHECKSUM_ARM64_PLACEHOLDER
dest-filename: termix.AppImage
only-arches:
- aarch64
- type: file
path: com.karmaa.termix.desktop
- type: file
path: com.karmaa.termix.metainfo.xml
- type: file
path: com.karmaa.termix.svg
- type: file
path: icon-256.png
- type: file
path: icon-128.png

5
flatpak/flathub.json Normal file
View File

@@ -0,0 +1,5 @@
{
"only-arches": ["x86_64", "aarch64"],
"skip-icons-check": false,
"skip-appstream-check": false
}

View File

@@ -0,0 +1,54 @@
#!/bin/bash
set -e
# This script prepares the Flatpak submission files
# It should be run from the repository root
VERSION="$1"
CHECKSUM="$2"
RELEASE_DATE="$3"
if [ -z "$VERSION" ] || [ -z "$CHECKSUM" ] || [ -z "$RELEASE_DATE" ]; then
echo "Usage: $0 <version> <checksum> <release-date>"
echo "Example: $0 1.8.0 abc123... 2025-10-26"
exit 1
fi
echo "Preparing Flatpak submission for version $VERSION"
# Copy icon files
cp public/icon.svg flatpak/com.karmaa.termix.svg
echo "✓ Copied SVG icon"
# Generate PNG icons if ImageMagick is available
if command -v convert &> /dev/null; then
convert public/icon.png -resize 256x256 flatpak/icon-256.png
convert public/icon.png -resize 128x128 flatpak/icon-128.png
echo "✓ Generated PNG icons"
else
# Fallback: just copy the original PNG
cp public/icon.png flatpak/icon-256.png
cp public/icon.png flatpak/icon-128.png
echo "⚠ ImageMagick not found, using original icon"
fi
# Update manifest with version and checksum
sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" flatpak/com.karmaa.termix.yml
sed -i "s/CHECKSUM_PLACEHOLDER/$CHECKSUM/g" flatpak/com.karmaa.termix.yml
echo "✓ Updated manifest with version $VERSION"
# Update metainfo with version and date
sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" flatpak/com.karmaa.termix.metainfo.xml
sed -i "s/DATE_PLACEHOLDER/$RELEASE_DATE/g" flatpak/com.karmaa.termix.metainfo.xml
echo "✓ Updated metainfo with version $VERSION and date $RELEASE_DATE"
echo ""
echo "✅ Flatpak submission files prepared!"
echo ""
echo "Next steps:"
echo "1. Review the files in the flatpak/ directory"
echo "2. Fork https://github.com/flathub/flathub"
echo "3. Create a new branch named 'com.karmaa.termix'"
echo "4. Copy all files from flatpak/ to the root of your fork"
echo "5. Commit and push to your fork"
echo "6. Open a PR to flathub/flathub"

154
homebrew/README.md Normal file
View File

@@ -0,0 +1,154 @@
# Homebrew Cask for Termix
This directory contains the Homebrew Cask formula for installing Termix on macOS.
## Files
- **termix.rb** - Homebrew Cask formula
## What is a Homebrew Cask?
Homebrew Casks are used to install GUI macOS applications. Unlike formulae (which are for command-line tools), casks handle:
- Downloading DMG/PKG installers
- Installing .app bundles to /Applications
- Managing application preferences and cache cleanup
## Submission Options
You have two options for distributing Termix via Homebrew:
### Option 1: Submit to Official Homebrew Cask (Recommended)
Submit to the official homebrew-cask repository for maximum visibility.
**Advantages:**
- Discoverable by all Homebrew users
- Built-in update checking
- Official Homebrew support
**Process:**
1. Download the `homebrew-submission` artifact from GitHub Actions (when using "submit" option)
2. Fork https://github.com/Homebrew/homebrew-cask
3. Create a new branch: `git checkout -b termix`
4. Add the cask file: `Casks/t/termix.rb` (note the subdirectory by first letter)
5. Test locally: `brew install --cask ./Casks/t/termix.rb`
6. Run audit: `brew audit --cask --online ./Casks/t/termix.rb`
7. Commit and push to your fork
8. Create a PR to Homebrew/homebrew-cask
**Requirements for acceptance:**
- App must be stable (not beta/alpha)
- Source code must be public
- No analytics/tracking without opt-in
- Pass all brew audit checks
### Option 2: Create Your Own Tap
Create a custom Homebrew tap for more control and faster updates.
**Advantages:**
- Full control over updates
- No approval process
- Can include beta/alpha releases
**Process:**
1. Create a new repository: `Termix-SSH/homebrew-termix`
2. Add the cask file to: `Casks/termix.rb`
3. Users install with: `brew install --cask termix-ssh/termix/termix`
## Installation (for users)
### From Official Homebrew Cask (after approval):
```bash
brew install --cask termix
```
### From Custom Tap:
```bash
# Add the tap
brew tap termix-ssh/termix
# Install the cask
brew install --cask termix
```
## Updating the Cask
When you release a new version:
### For Official Homebrew Cask:
1. Homebrew bot usually auto-updates within hours
2. Or manually submit a PR with the new version/checksum
### For Custom Tap:
1. Update the version and sha256 in termix.rb
2. Commit and push to your tap repository
3. Users run: `brew upgrade --cask termix`
## Testing Locally
Before submitting, test the cask:
```bash
# Install from local file
brew install --cask ./homebrew/termix.rb
# Verify it works
open /Applications/Termix.app
# Uninstall
brew uninstall --cask termix
# Run audit checks
brew audit --cask --online ./homebrew/termix.rb
# Style check
brew style ./homebrew/termix.rb
```
## Automated Submission Preparation
The GitHub Actions workflow automatically prepares the Homebrew submission when you select "submit":
1. Builds macOS universal DMG
2. Calculates SHA256 checksum
3. Updates the cask file with version and checksum
4. Creates a `homebrew-submission` artifact
Download the artifact and follow the submission instructions included.
## Cask File Structure
The cask file (`termix.rb`) includes:
- **version** - Automatically set from package.json
- **sha256** - Checksum of the universal DMG for security
- **url** - Download URL from GitHub releases
- **name** - Display name
- **desc** - Short description
- **homepage** - Project homepage
- **livecheck** - Automatic update detection
- **app** - The .app bundle to install
- **zap** - Files to remove on complete uninstall
## Requirements
- macOS 10.15 (Catalina) or later
- Homebrew 4.0.0 or later
- Universal DMG must be code-signed and notarized (already handled by your build process)
## Resources
- [Homebrew Cask Documentation](https://docs.brew.sh/Cask-Cookbook)
- [Cask Submission Guidelines](https://github.com/Homebrew/homebrew-cask/blob/master/CONTRIBUTING.md)
- [Homebrew Formula Cookbook](https://docs.brew.sh/Formula-Cookbook)

24
homebrew/termix.rb Normal file
View File

@@ -0,0 +1,24 @@
cask "termix" do
version "VERSION_PLACEHOLDER"
sha256 "CHECKSUM_PLACEHOLDER"
url "https://github.com/Termix-SSH/Termix/releases/download/release-#{version}-tag/termix_macos_universal_#{version}_dmg.dmg"
name "Termix"
desc "Web-based server management platform with SSH terminal, tunneling, and file editing"
homepage "https://github.com/Termix-SSH/Termix"
livecheck do
url :url
strategy :github_latest
end
app "Termix.app"
zap trash: [
"~/Library/Application Support/termix",
"~/Library/Caches/com.karmaa.termix",
"~/Library/Caches/com.karmaa.termix.ShipIt",
"~/Library/Preferences/com.karmaa.termix.plist",
"~/Library/Saved Application State/com.karmaa.termix.savedState",
]
end