Sync Extension from sentience-chrome #2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Sync Extension from sentience-chrome | |
| on: | |
| repository_dispatch: | |
| types: [extension-updated] | |
| workflow_dispatch: | |
| inputs: | |
| release_tag: | |
| description: 'Release tag from sentience-chrome (e.g., v1.0.0)' | |
| required: true | |
| type: string | |
| schedule: | |
| # Check for new releases daily at 2 AM UTC | |
| - cron: '0 2 * * *' | |
| jobs: | |
| sync-extension: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| steps: | |
| - name: Checkout sdk-python | |
| uses: actions/checkout@v4 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| fetch-depth: 0 # Fetch all history for proper branching | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Determine release tag | |
| id: release | |
| run: | | |
| if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then | |
| TAG="${{ github.event.inputs.release_tag }}" | |
| elif [ "${{ github.event_name }}" == "repository_dispatch" ]; then | |
| TAG="${{ github.event.client_payload.release_tag }}" | |
| else | |
| # Scheduled check - get latest release | |
| TAG=$(curl -s https://api.github.com/repos/${{ secrets.SENTIENCE_CHROME_REPO }}/releases/latest | jq -r '.tag_name // empty') | |
| fi | |
| if [ -z "$TAG" ] || [ "$TAG" == "null" ]; then | |
| echo "No release found, skipping" | |
| echo "skip=true" >> $GITHUB_OUTPUT | |
| exit 0 | |
| fi | |
| echo "tag=$TAG" >> $GITHUB_OUTPUT | |
| echo "Release tag: $TAG" | |
| - name: Download extension files | |
| if: steps.release.outputs.skip != 'true' | |
| run: | | |
| TAG="${{ steps.release.outputs.tag }}" | |
| REPO="${{ secrets.SENTIENCE_CHROME_REPO }}" | |
| # Download release assets | |
| mkdir -p extension-temp | |
| cd extension-temp | |
| # First, try to download the zip archive if available | |
| ZIP_URL=$(curl -s -H "Authorization: token ${{ secrets.SENTIENCE_CHROME_TOKEN }}" \ | |
| "https://api.github.com/repos/$REPO/releases/tags/$TAG" | \ | |
| jq -r '.assets[] | select(.name == "extension-package.zip") | .browser_download_url') | |
| if [ -n "$ZIP_URL" ] && [ "$ZIP_URL" != "null" ]; then | |
| echo "📦 Downloading extension-package.zip..." | |
| curl -L -H "Authorization: token ${{ secrets.SENTIENCE_CHROME_TOKEN }}" "$ZIP_URL" -o extension-package.zip | |
| unzip -q extension-package.zip -d . | |
| # Files should now be in extension-temp/extension-package/ or extension-temp/ | |
| if [ -d "extension-package" ]; then | |
| mv extension-package/* . 2>/dev/null || true | |
| rmdir extension-package 2>/dev/null || true | |
| fi | |
| else | |
| echo "📁 Downloading individual files from release..." | |
| # Download each file from release | |
| curl -s -H "Authorization: token ${{ secrets.SENTIENCE_CHROME_TOKEN }}" \ | |
| "https://api.github.com/repos/$REPO/releases/tags/$TAG" | \ | |
| jq -r '.assets[] | select(.name | endswith(".js") or endswith(".wasm") or endswith(".json") or endswith(".d.ts")) | .browser_download_url' | \ | |
| while read url; do | |
| if [ -n "$url" ] && [ "$url" != "null" ]; then | |
| filename=$(basename "$url") | |
| echo " Downloading $filename..." | |
| curl -L -H "Authorization: token ${{ secrets.SENTIENCE_CHROME_TOKEN }}" "$url" -o "$filename" | |
| fi | |
| done | |
| fi | |
| # Verify files were downloaded | |
| echo "📋 Downloaded files:" | |
| ls -la | |
| - name: Copy extension files | |
| if: steps.release.outputs.skip != 'true' | |
| run: | | |
| # Create extension directory structure | |
| mkdir -p sentience/extension/pkg | |
| # Copy extension files (check both root and pkg subdirectory) | |
| cp extension-temp/manifest.json sentience/extension/ 2>/dev/null || echo "⚠️ manifest.json not found in release" | |
| cp extension-temp/content.js sentience/extension/ 2>/dev/null || echo "⚠️ content.js not found in release" | |
| cp extension-temp/background.js sentience/extension/ 2>/dev/null || echo "⚠️ background.js not found in release" | |
| cp extension-temp/injected_api.js sentience/extension/ 2>/dev/null || echo "⚠️ injected_api.js not found in release" | |
| # Copy WASM files (check both root and pkg subdirectory) | |
| if [ -f "extension-temp/pkg/sentience_core.js" ]; then | |
| cp extension-temp/pkg/sentience_core.js sentience/extension/pkg/ | |
| elif [ -f "extension-temp/sentience_core.js" ]; then | |
| cp extension-temp/sentience_core.js sentience/extension/pkg/ | |
| else | |
| echo "⚠️ sentience_core.js not found" | |
| fi | |
| if [ -f "extension-temp/pkg/sentience_core_bg.wasm" ]; then | |
| cp extension-temp/pkg/sentience_core_bg.wasm sentience/extension/pkg/ | |
| elif [ -f "extension-temp/sentience_core_bg.wasm" ]; then | |
| cp extension-temp/sentience_core_bg.wasm sentience/extension/pkg/ | |
| else | |
| echo "⚠️ sentience_core_bg.wasm not found" | |
| fi | |
| # Copy TypeScript definitions | |
| if [ -d "extension-temp/pkg" ]; then | |
| cp extension-temp/pkg/*.d.ts sentience/extension/pkg/ 2>/dev/null || echo "⚠️ Type definitions not found" | |
| elif [ -d "extension-temp" ]; then | |
| cp extension-temp/*.d.ts sentience/extension/pkg/ 2>/dev/null || echo "⚠️ Type definitions not found" | |
| fi | |
| # Verify copied files | |
| echo "📋 Copied files:" | |
| ls -la sentience/extension/ | |
| ls -la sentience/extension/pkg/ 2>/dev/null || echo "⚠️ pkg directory not created" | |
| - name: Check for changes | |
| if: steps.release.outputs.skip != 'true' | |
| id: changes | |
| run: | | |
| git config --local user.email "action@github.com" | |
| git config --local user.name "GitHub Action" | |
| git add sentience/extension/ || true | |
| if git diff --staged --quiet; then | |
| echo "changed=false" >> $GITHUB_OUTPUT | |
| echo "No changes detected" | |
| else | |
| echo "changed=true" >> $GITHUB_OUTPUT | |
| echo "Changes detected" | |
| fi | |
| - name: Create Pull Request | |
| if: steps.release.outputs.skip != 'true' && steps.changes.outputs.changed == 'true' | |
| uses: peter-evans/create-pull-request@v5 | |
| with: | |
| # Use GITHUB_TOKEN (built-in) if repository allows PR creation, otherwise use PR_TOKEN (PAT) | |
| # To use PAT: create secret named PR_TOKEN with a Personal Access Token that has 'repo' scope | |
| token: ${{ secrets.PR_TOKEN || secrets.GITHUB_TOKEN }} | |
| commit-message: "chore: sync extension files from sentience-chrome ${{ steps.release.outputs.tag }}" | |
| title: "Sync Extension: ${{ steps.release.outputs.tag }}" | |
| body: | | |
| This PR syncs extension files from sentience-chrome release ${{ steps.release.outputs.tag }}. | |
| **Files updated:** | |
| - Extension manifest and scripts | |
| - WASM binary and bindings | |
| **Source:** [sentience-chrome release ${{ steps.release.outputs.tag }}](https://github.com/${{ secrets.SENTIENCE_CHROME_REPO }}/releases/tag/${{ steps.release.outputs.tag }}) | |
| branch: sync-extension-${{ steps.release.outputs.tag }} | |
| delete-branch: true | |
| labels: | | |
| automated | |
| extension-sync | |