name: Build and Release Chrome Extension
on:
push:
branches: [ master ]
paths:
- 'app/chrome-extension/**'
- 'app/native-server/**'
- 'packages/**'
tags:
- 'v*'
workflow_dispatch:
permissions:
contents: write
jobs:
build-extension:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install pnpm
uses: pnpm/action-setup@v2
with:
version: 8
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Build shared packages
run: pnpm --filter mcp-chrome-shared build
- name: Build Chrome extension
run: pnpm --filter chrome-mcp-server build
env:
CHROME_EXTENSION_KEY: ${{ secrets.CHROME_EXTENSION_KEY }}
- name: Build Native server
run: pnpm --filter mcp-chrome-bridger build
- name: Create zip package
run: |
cd app/chrome-extension
pnpm run zip
env:
CHROME_EXTENSION_KEY: ${{ secrets.CHROME_EXTENSION_KEY }}
- name: Upload Chrome extension artifact
uses: actions/upload-artifact@v4
with:
name: chrome-extension-${{ github.sha }}
path: app/chrome-extension/.output/*.zip
retention-days: 30
- name: Upload Native server artifact
uses: actions/upload-artifact@v4
with:
name: native-server-${{ github.sha }}
path: app/native-server/dist/
retention-days: 30
# Create GitHub Release when a tag is pushed
- name: Get version from tag
if: startsWith(github.ref, 'refs/tags/v')
id: get_version
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
- name: Rename zip with version
if: startsWith(github.ref, 'refs/tags/v')
run: |
cd app/chrome-extension/.output
for f in *.zip; do
mv "$f" "mcp-chrome-extension-${{ steps.get_version.outputs.VERSION }}.zip"
done
- name: Create Release
if: startsWith(github.ref, 'refs/tags/v')
uses: softprops/action-gh-release@v1
with:
name: "${{ steps.get_version.outputs.VERSION }}"
draft: false
prerelease: false
generate_release_notes: true
files: |
app/chrome-extension/.output/*.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}