Sync Extension from sentience-chrome #3
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 | |
| # Download individual files from release (reliable method - no zip) | |
| echo "📁 Downloading individual files from release..." | |
| curl -L -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)|\(.name)"' | \ | |
| while IFS='|' read -r url name; do | |
| if [ -n "$url" ] && [ "$url" != "null" ] && [ -n "$name" ]; then | |
| # Preserve directory structure from asset name | |
| # If name contains '/', create directories | |
| dir=$(dirname "$name") | |
| if [ "$dir" != "." ]; then | |
| mkdir -p "$dir" | |
| fi | |
| echo " Downloading $name..." | |
| curl -L -H "Authorization: token ${{ secrets.SENTIENCE_CHROME_TOKEN }}" "$url" -o "$name" | |
| fi | |
| done | |
| # Verify downloaded files | |
| 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 (handle both root and extension-package/ subdirectory) | |
| # Check root first, then extension-package/ subdirectory | |
| if [ -f "extension-temp/manifest.json" ]; then | |
| cp extension-temp/manifest.json sentience/extension/ | |
| elif [ -f "extension-temp/extension-package/manifest.json" ]; then | |
| cp extension-temp/extension-package/manifest.json sentience/extension/ | |
| else | |
| echo "⚠️ manifest.json not found" | |
| fi | |
| if [ -f "extension-temp/content.js" ]; then | |
| cp extension-temp/content.js sentience/extension/ | |
| elif [ -f "extension-temp/extension-package/content.js" ]; then | |
| cp extension-temp/extension-package/content.js sentience/extension/ | |
| else | |
| echo "⚠️ content.js not found" | |
| fi | |
| if [ -f "extension-temp/background.js" ]; then | |
| cp extension-temp/background.js sentience/extension/ | |
| elif [ -f "extension-temp/extension-package/background.js" ]; then | |
| cp extension-temp/extension-package/background.js sentience/extension/ | |
| else | |
| echo "⚠️ background.js not found" | |
| fi | |
| if [ -f "extension-temp/injected_api.js" ]; then | |
| cp extension-temp/injected_api.js sentience/extension/ | |
| elif [ -f "extension-temp/extension-package/injected_api.js" ]; then | |
| cp extension-temp/extension-package/injected_api.js sentience/extension/ | |
| else | |
| echo "⚠️ injected_api.js not found" | |
| fi | |
| # Copy WASM files (check both locations) | |
| if [ -f "extension-temp/pkg/sentience_core.js" ]; then | |
| cp extension-temp/pkg/sentience_core.js sentience/extension/pkg/ | |
| elif [ -f "extension-temp/extension-package/pkg/sentience_core.js" ]; then | |
| cp extension-temp/extension-package/pkg/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/extension-package/pkg/sentience_core_bg.wasm" ]; then | |
| cp extension-temp/extension-package/pkg/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/extension-package/pkg" ]; then | |
| cp extension-temp/extension-package/pkg/*.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 PR_TOKEN if available (for repos with org restrictions), otherwise use GITHUB_TOKEN | |
| # To use PAT: create secret named PR_TOKEN with a Personal Access Token that has 'repo' scope | |
| token: ${{ secrets.PR_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 | |