v0.90.17 #28
Workflow file for this run
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: Release to PyPI | |
| on: | |
| release: | |
| types: [published] | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version to release (e.g., 0.1.0)' | |
| required: true | |
| type: string | |
| jobs: | |
| build-and-publish: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install build dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install build twine | |
| - name: Extract version from tag or input | |
| id: version | |
| run: | | |
| if [ "${{ github.event_name }}" == "release" ]; then | |
| VERSION=${GITHUB_REF#refs/tags/v} | |
| VERSION=${VERSION#refs/tags/} | |
| else | |
| VERSION="${{ github.event.inputs.version }}" | |
| fi | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "Version: $VERSION" | |
| - name: Update version in pyproject.toml | |
| run: | | |
| VERSION="${{ steps.version.outputs.version }}" | |
| sed -i "s/^version = \".*\"/version = \"$VERSION\"/" pyproject.toml | |
| - name: Update version in __init__.py | |
| run: | | |
| VERSION="${{ steps.version.outputs.version }}" | |
| sed -i "s/^__version__ = \".*\"/__version__ = \"$VERSION\"/" sentience/__init__.py | |
| - name: Verify extension files are present | |
| run: | | |
| echo "🔍 Verifying extension files are included..." | |
| # Check required extension files exist | |
| REQUIRED_FILES=( | |
| "sentience/extension/manifest.json" | |
| "sentience/extension/content.js" | |
| "sentience/extension/background.js" | |
| "sentience/extension/injected_api.js" | |
| "sentience/extension/pkg/sentience_core.js" | |
| "sentience/extension/pkg/sentience_core_bg.wasm" | |
| ) | |
| MISSING_FILES=() | |
| for file in "${REQUIRED_FILES[@]}"; do | |
| if [ ! -f "$file" ]; then | |
| MISSING_FILES+=("$file") | |
| fi | |
| done | |
| if [ ${#MISSING_FILES[@]} -ne 0 ]; then | |
| echo "❌ Error: Missing required extension files:" | |
| printf ' - %s\n' "${MISSING_FILES[@]}" | |
| echo "" | |
| echo "Please ensure the extension is synced before releasing." | |
| echo "Run the sync-extension workflow or manually sync extension files." | |
| exit 1 | |
| fi | |
| # Verify findTextRect function exists in injected_api.js | |
| if ! grep -q "findTextRect:" sentience/extension/injected_api.js; then | |
| echo "❌ Error: findTextRect function not found in injected_api.js" | |
| echo "The extension may be out of date. Please sync the extension before releasing." | |
| exit 1 | |
| fi | |
| echo "✅ All extension files verified" | |
| echo "📦 Extension files that will be included:" | |
| find sentience/extension -type f | sort | |
| - name: Build package | |
| run: | | |
| python -m build | |
| - name: Check package | |
| run: | | |
| twine check dist/* | |
| - name: Verify extension files in built package | |
| run: | | |
| echo "🔍 Verifying extension files are included in the built package..." | |
| # Extract wheel to check contents | |
| WHEEL_FILE=$(ls dist/*.whl | head -1) | |
| WHEEL_PATH=$(realpath "$WHEEL_FILE") | |
| echo "Checking wheel: $WHEEL_PATH" | |
| # Create temp directory for extraction | |
| TEMP_DIR=$(mktemp -d) | |
| cd "$TEMP_DIR" | |
| # Extract wheel (it's a zip file) | |
| unzip -q "$WHEEL_PATH" | |
| # Check for required extension files in the wheel | |
| REQUIRED_IN_WHEEL=( | |
| "sentience/extension/manifest.json" | |
| "sentience/extension/injected_api.js" | |
| "sentience/extension/pkg/sentience_core.js" | |
| "sentience/extension/pkg/sentience_core_bg.wasm" | |
| ) | |
| MISSING_IN_WHEEL=() | |
| for file in "${REQUIRED_IN_WHEEL[@]}"; do | |
| if [ ! -f "$file" ]; then | |
| MISSING_IN_WHEEL+=("$file") | |
| fi | |
| done | |
| if [ ${#MISSING_IN_WHEEL[@]} -ne 0 ]; then | |
| echo "❌ Error: Extension files missing from built wheel:" | |
| printf ' - %s\n' "${MISSING_IN_WHEEL[@]}" | |
| echo "" | |
| echo "This indicates a packaging configuration issue." | |
| echo "Check MANIFEST.in and pyproject.toml package-data settings." | |
| exit 1 | |
| fi | |
| # Verify findTextRect is in the packaged injected_api.js | |
| if ! grep -q "findTextRect:" sentience/extension/injected_api.js; then | |
| echo "❌ Error: findTextRect not found in packaged injected_api.js" | |
| exit 1 | |
| fi | |
| echo "✅ All extension files verified in built package" | |
| echo "📦 Extension files found in wheel:" | |
| find sentience/extension -type f | sort | |
| # Cleanup | |
| rm -rf "$TEMP_DIR" | |
| - name: Publish to PyPI | |
| env: | |
| TWINE_USERNAME: __token__ | |
| TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} | |
| run: | | |
| twine upload dist/* | |
| - name: Create GitHub Release | |
| if: github.event_name == 'workflow_dispatch' | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: v${{ steps.version.outputs.version }} | |
| name: Release v${{ steps.version.outputs.version }} | |
| body: | | |
| Release v${{ steps.version.outputs.version }} of sentienceapi | |
| ## Installation | |
| ```bash | |
| pip install sentienceapi==${{ steps.version.outputs.version }} | |
| ``` | |
| draft: false | |
| prerelease: false | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |