Add multi-store publish workflow and update docs
Replaces the Chrome-only publish workflow with a new GitHub Actions workflow that automates publishing to both Chrome Web Store and Microsoft Edge Add-ons, and creates GitHub releases with multiple extension formats. Updates README with new installation instructions, store availability table, and details about automated publishing for maintainers.
This commit is contained in:
1 parent
4f5ef1440b
commit
90d44ddd8d
3 files changed
+269
-107
No files matched your search
@@ -0,0 +1,195 @@
|
||||
name: Publish Extension to Multiple Stores
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*" # Triggers on version tags like v1.0.0, v1.2.3, etc.
|
||||
|
||||
jobs:
|
||||
build-and-publish:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "18"
|
||||
|
||||
- name: Validate manifest.json
|
||||
run: |
|
||||
# Validate that manifest.json is valid JSON
|
||||
node -e "JSON.parse(require('fs').readFileSync('manifest.json', 'utf8'))"
|
||||
echo "✅ manifest.json is valid"
|
||||
|
||||
- name: Extract version from tag
|
||||
id: version
|
||||
run: |
|
||||
# Extract version from git tag (remove 'v' prefix if present)
|
||||
VERSION=${GITHUB_REF#refs/tags/}
|
||||
VERSION=${VERSION#v}
|
||||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||
echo "Extracted version: $VERSION"
|
||||
|
||||
- name: Update manifest version
|
||||
run: |
|
||||
# Update version in manifest.json to match the tag
|
||||
node -e "
|
||||
const fs = require('fs');
|
||||
const manifest = JSON.parse(fs.readFileSync('manifest.json', 'utf8'));
|
||||
manifest.version = '${{ steps.version.outputs.version }}';
|
||||
fs.writeFileSync('manifest.json', JSON.stringify(manifest, null, 2));
|
||||
console.log('Updated manifest.json version to:', manifest.version);
|
||||
"
|
||||
|
||||
- name: Update package.json version
|
||||
run: |
|
||||
# Update version in package.json to match the tag
|
||||
node -e "
|
||||
const fs = require('fs');
|
||||
const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
|
||||
pkg.version = '${{ steps.version.outputs.version }}';
|
||||
fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2));
|
||||
console.log('Updated package.json version to:', pkg.version);
|
||||
"
|
||||
|
||||
- name: Create extension packages
|
||||
run: |
|
||||
# Create Chrome extension zip
|
||||
zip -r chrome-extension.zip . \
|
||||
-x "*.git*" \
|
||||
-x "node_modules/*" \
|
||||
-x ".github/*" \
|
||||
-x "*.md" \
|
||||
-x "LICENSE" \
|
||||
-x "*.zip" \
|
||||
-x "*.crx"
|
||||
|
||||
# Create Edge extension zip (same as Chrome for MV3)
|
||||
cp chrome-extension.zip edge-extension.zip
|
||||
|
||||
echo "📦 Created extension packages"
|
||||
ls -la *.zip
|
||||
|
||||
- name: Create CRX file for GitHub release
|
||||
run: |
|
||||
# Install chrome-extension-packer
|
||||
npm install -g crx3
|
||||
|
||||
# Create private key for CRX signing (for distribution only)
|
||||
openssl genrsa -out key.pem 2048
|
||||
|
||||
# Create CRX file
|
||||
crx3 -o extension.crx -p key.pem ./ \
|
||||
--exclude="*.git*" \
|
||||
--exclude="node_modules/*" \
|
||||
--exclude=".github/*" \
|
||||
--exclude="*.md" \
|
||||
--exclude="LICENSE" \
|
||||
--exclude="*.zip" \
|
||||
--exclude="*.crx" \
|
||||
--exclude="*.pem"
|
||||
|
||||
echo "📦 Created extension.crx"
|
||||
ls -la extension.crx
|
||||
|
||||
- name: Publish to Chrome Web Store
|
||||
continue-on-error: true
|
||||
id: chrome-publish
|
||||
uses: mnao305/chrome-extension-upload@v5.0.0
|
||||
with:
|
||||
file-path: chrome-extension.zip
|
||||
extension-id: ${{ secrets.CHROME_EXTENSION_ID }}
|
||||
client-id: ${{ secrets.CHROME_CLIENT_ID }}
|
||||
client-secret: ${{ secrets.CHROME_CLIENT_SECRET }}
|
||||
refresh-token: ${{ secrets.CHROME_REFRESH_TOKEN }}
|
||||
publish: true # Set to false if you want to upload without publishing
|
||||
|
||||
- name: Publish to Microsoft Edge Add-ons
|
||||
continue-on-error: true
|
||||
id: edge-publish
|
||||
uses: wdzeng/edge-addon@v1
|
||||
with:
|
||||
product-id: ${{ secrets.EDGE_PRODUCT_ID }}
|
||||
zip-path: edge-extension.zip
|
||||
client-id: ${{ secrets.EDGE_CLIENT_ID }}
|
||||
client-secret: ${{ secrets.EDGE_CLIENT_SECRET }}
|
||||
access-token-url: ${{ secrets.EDGE_ACCESS_TOKEN_URL }}
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: |
|
||||
chrome-extension.zip
|
||||
edge-extension.zip
|
||||
extension.crx
|
||||
generate_release_notes: true
|
||||
body: |
|
||||
## Xget for Chrome v${{ steps.version.outputs.version }}
|
||||
|
||||
This release has been automatically published to multiple extension stores.
|
||||
|
||||
### 📥 Installation Options
|
||||
|
||||
**Chrome Web Store**
|
||||
- Install from [Chrome Web Store](https://chrome.google.com/webstore/detail/${{ secrets.CHROME_EXTENSION_ID }})
|
||||
|
||||
**Microsoft Edge Add-ons**
|
||||
- Install from Microsoft Edge Add-ons (check Partner Center for the link)
|
||||
|
||||
**Manual Installation**
|
||||
- Download `chrome-extension.zip` for Chrome/Chromium browsers
|
||||
- Download `edge-extension.zip` for Microsoft Edge
|
||||
- Download `extension.crx` for direct installation (requires developer mode)
|
||||
|
||||
### 🔧 Manual Installation Instructions
|
||||
|
||||
**Chrome/Edge (Developer Mode)**:
|
||||
1. Download the appropriate .zip file
|
||||
2. Open Chrome/Edge and go to `chrome://extensions/` or `edge://extensions/`
|
||||
3. Enable "Developer mode"
|
||||
4. Click "Load unpacked" and select the extracted folder
|
||||
|
||||
**CRX Installation**:
|
||||
1. Download `extension.crx`
|
||||
2. Open Chrome and go to `chrome://extensions/`
|
||||
3. Enable "Developer mode"
|
||||
4. Drag and drop the .crx file onto the extensions page
|
||||
|
||||
### Changes
|
||||
- See commit history for detailed changes
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Check publication results
|
||||
run: |
|
||||
echo "📊 Publication Results Summary:"
|
||||
echo "================================"
|
||||
|
||||
if [ "${{ steps.chrome-publish.outcome }}" = "success" ]; then
|
||||
echo "✅ Chrome Web Store: Successfully published"
|
||||
elif [ "${{ steps.chrome-publish.outcome }}" = "failure" ]; then
|
||||
echo "❌ Chrome Web Store: Publication failed"
|
||||
else
|
||||
echo "⚠️ Chrome Web Store: Skipped (missing secrets)"
|
||||
fi
|
||||
|
||||
if [ "${{ steps.edge-publish.outcome }}" = "success" ]; then
|
||||
echo "✅ Microsoft Edge Add-ons: Successfully published"
|
||||
elif [ "${{ steps.edge-publish.outcome }}" = "failure" ]; then
|
||||
echo "❌ Microsoft Edge Add-ons: Publication failed"
|
||||
else
|
||||
echo "⚠️ Microsoft Edge Add-ons: Skipped (missing secrets)"
|
||||
fi
|
||||
|
||||
echo "✅ GitHub Release: Created with extension files"
|
||||
echo "================================"
|
||||
|
||||
- name: Notify success
|
||||
run: |
|
||||
echo "🎉 Successfully published Xget for Chrome v${{ steps.version.outputs.version }} to multiple stores!"
|
||||
echo "🔗 Chrome Web Store: https://chrome.google.com/webstore/detail/${{ secrets.CHROME_EXTENSION_ID }}"
|
||||
echo "🔗 Microsoft Edge Add-ons: Check the releases page for manual installation files"
|
||||
echo "📦 GitHub Release: https://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}"
|
||||
@@ -1,104 +0,0 @@
|
||||
name: Publish to Chrome Web Store
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*" # Triggers on version tags like v1.0.0, v1.2.3, etc.
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "18"
|
||||
|
||||
- name: Validate manifest.json
|
||||
run: |
|
||||
# Validate that manifest.json is valid JSON
|
||||
node -e "JSON.parse(require('fs').readFileSync('manifest.json', 'utf8'))"
|
||||
echo "✅ manifest.json is valid"
|
||||
|
||||
- name: Extract version from tag
|
||||
id: version
|
||||
run: |
|
||||
# Extract version from git tag (remove 'v' prefix if present)
|
||||
VERSION=${GITHUB_REF#refs/tags/}
|
||||
VERSION=${VERSION#v}
|
||||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||
echo "Extracted version: $VERSION"
|
||||
|
||||
- name: Update manifest version
|
||||
run: |
|
||||
# Update version in manifest.json to match the tag
|
||||
node -e "
|
||||
const fs = require('fs');
|
||||
const manifest = JSON.parse(fs.readFileSync('manifest.json', 'utf8'));
|
||||
manifest.version = '${{ steps.version.outputs.version }}';
|
||||
fs.writeFileSync('manifest.json', JSON.stringify(manifest, null, 2));
|
||||
console.log('Updated manifest.json version to:', manifest.version);
|
||||
"
|
||||
|
||||
- name: Update package.json version
|
||||
run: |
|
||||
# Update version in package.json to match the tag
|
||||
node -e "
|
||||
const fs = require('fs');
|
||||
const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
|
||||
pkg.version = '${{ steps.version.outputs.version }}';
|
||||
fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2));
|
||||
console.log('Updated package.json version to:', pkg.version);
|
||||
"
|
||||
|
||||
- name: Create extension package
|
||||
run: |
|
||||
# Create a zip file with all extension files
|
||||
zip -r extension.zip . \
|
||||
-x "*.git*" \
|
||||
-x "node_modules/*" \
|
||||
-x ".github/*" \
|
||||
-x "*.md" \
|
||||
-x "LICENSE" \
|
||||
-x "*.zip"
|
||||
|
||||
echo "📦 Created extension.zip"
|
||||
ls -la extension.zip
|
||||
|
||||
- name: Publish to Chrome Web Store
|
||||
uses: mnao305/chrome-extension-upload@v5.0.0
|
||||
with:
|
||||
file-path: extension.zip
|
||||
extension-id: ${{ secrets.CHROME_EXTENSION_ID }}
|
||||
client-id: ${{ secrets.CHROME_CLIENT_ID }}
|
||||
client-secret: ${{ secrets.CHROME_CLIENT_SECRET }}
|
||||
refresh-token: ${{ secrets.CHROME_REFRESH_TOKEN }}
|
||||
publish: true # Set to false if you want to upload without publishing
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: extension.zip
|
||||
generate_release_notes: true
|
||||
body: |
|
||||
## Xget for Chrome v${{ steps.version.outputs.version }}
|
||||
|
||||
This release has been automatically published to the Chrome Web Store.
|
||||
|
||||
### Changes
|
||||
- See commit history for detailed changes
|
||||
|
||||
### Installation
|
||||
- Install from [Chrome Web Store](https://chrome.google.com/webstore/detail/${{ secrets.CHROME_EXTENSION_ID }})
|
||||
- Or download the extension.zip and load unpacked in Chrome Developer Mode
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Notify success
|
||||
run: |
|
||||
echo "🎉 Successfully published Xget for Chrome v${{ steps.version.outputs.version }} to Chrome Web Store!"
|
||||
echo "🔗 Extension URL: https://chrome.google.com/webstore/detail/${{ secrets.CHROME_EXTENSION_ID }}"
|
||||
@@ -13,11 +13,33 @@ A powerful Chrome extension that accelerates downloads from GitHub, GitLab, and
|
||||
|
||||
## 📦 Installation
|
||||
|
||||
### From Chrome Web Store
|
||||
### Store Availability
|
||||
|
||||
| Store | Status | Link |
|
||||
|-------|--------|------|
|
||||
| **Chrome Web Store** | ✅ Available | [](https://chromewebstore.google.com/detail/ajiejgobfcifcikbahpijopolfjoodgf) |
|
||||
| **Microsoft Edge Add-ons** | ✅ Available | Available on Microsoft Edge Add-ons |
|
||||
| **Manual Install** | ✅ Supported | Download from [GitHub Releases](https://github.com/xixu-me/Xget-for-Chrome/releases) |
|
||||
|
||||
### Quick Install
|
||||
|
||||
**Chrome Web Store**
|
||||
[](https://chromewebstore.google.com/detail/ajiejgobfcifcikbahpijopolfjoodgf)
|
||||
|
||||
### Manual Installation (Developer Mode)
|
||||
**Microsoft Edge Add-ons**
|
||||
Install directly from the Microsoft Edge Add-ons store for Edge browsers.
|
||||
|
||||
### Manual Installation Options
|
||||
|
||||
#### Option 1: Download from Releases
|
||||
|
||||
1. Go to the [GitHub Releases](https://github.com/xixu-me/Xget-for-Chrome/releases) page
|
||||
2. Download your preferred format:
|
||||
- `chrome-extension.zip` - For Chrome and Chromium browsers
|
||||
- `edge-extension.zip` - For Microsoft Edge
|
||||
- `extension.crx` - For direct installation (requires developer mode)
|
||||
|
||||
#### Option 2: Build from Source
|
||||
|
||||
1. **Download the Extension**
|
||||
|
||||
@@ -26,12 +48,61 @@ A powerful Chrome extension that accelerates downloads from GitHub, GitLab, and
|
||||
cd Xget-for-Chrome
|
||||
```
|
||||
|
||||
2. **Load in Chrome**
|
||||
2. **Build Extension Packages** (Optional)
|
||||
|
||||
```bash
|
||||
# Using PowerShell (Windows)
|
||||
.\build-extension.ps1 -Version "1.0.0"
|
||||
|
||||
# Using Bash (Linux/macOS)
|
||||
./build-extension.sh 1.0.0
|
||||
```
|
||||
|
||||
3. **Load in Browser**
|
||||
4. **Load in Browser**
|
||||
|
||||
**For Chrome/Chromium:**
|
||||
- Open Chrome and navigate to `chrome://extensions/`
|
||||
- Enable "Developer mode" (toggle in top-right corner)
|
||||
- Click "Load unpacked" and select the extension directory
|
||||
|
||||
**For Microsoft Edge:**
|
||||
- Open Edge and navigate to `edge://extensions/`
|
||||
- Enable "Developer mode" (toggle in top-right corner)
|
||||
- Click "Load unpacked" and select the extension directory
|
||||
|
||||
**For CRX files:**
|
||||
- Drag and drop the `.crx` file onto the extensions page
|
||||
|
||||
- The extension icon should appear in your browser toolbar
|
||||
|
||||
## 🚀 Automated Publishing
|
||||
|
||||
This project uses GitHub Actions to automatically publish to multiple platforms when a new version tag is pushed:
|
||||
|
||||
- **Chrome Web Store** - Automatic publishing
|
||||
- **Microsoft Edge Add-ons** - Automatic publishing
|
||||
- **GitHub Releases** - Creates release with multiple download formats
|
||||
|
||||
### For Maintainers
|
||||
|
||||
To release a new version:
|
||||
|
||||
```bash
|
||||
# Create and push a new version tag
|
||||
git tag v1.2.3
|
||||
git push origin v1.2.3
|
||||
```
|
||||
|
||||
The workflow will automatically:
|
||||
|
||||
1. Update `manifest.json` and `package.json` versions
|
||||
2. Create extension packages for all platforms
|
||||
3. Publish to Chrome Web Store and Edge Add-ons
|
||||
4. Create a GitHub release with downloadable files
|
||||
|
||||
See [`.github/workflows/README.md`](.github/workflows/README.md) for setup instructions.
|
||||
|
||||
## ⚙️ Setup
|
||||
|
||||
1. **Configure Xget Domain**
|
||||
|
||||
Reference in new issue
Block a user