name: Test Release Pipeline on: push: tags: - 'test-v*' jobs: test-release: 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.12' - name: Extract version from tag id: get_version run: | TAG_VERSION=${GITHUB_REF#refs/tags/test-v} echo "VERSION=$TAG_VERSION" >> $GITHUB_OUTPUT echo "Testing with version: $TAG_VERSION" - name: Install package dependencies run: | pip install -e . - name: Check version consistency run: | TAG_VERSION=${{ steps.get_version.outputs.VERSION }} PACKAGE_VERSION=$(python -c "from crawl4ai.__version__ import __version__; print(__version__)") echo "Tag version: $TAG_VERSION" echo "Package version: $PACKAGE_VERSION" if [ "$TAG_VERSION" != "$PACKAGE_VERSION" ]; then echo "โŒ Version mismatch! Tag: $TAG_VERSION, Package: $PACKAGE_VERSION" echo "Please update crawl4ai/__version__.py to match the tag version" exit 1 fi echo "โœ… Version check passed: $TAG_VERSION" - name: Install build dependencies run: | python -m pip install --upgrade pip pip install build twine - name: Build package run: python -m build - name: Check package run: twine check dist/* - name: Upload to Test PyPI env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.TEST_PYPI_TOKEN }} run: | echo "๐Ÿ“ฆ Uploading to Test PyPI..." twine upload --repository testpypi dist/* || { if [ $? -eq 1 ]; then echo "โš ๏ธ Upload failed - likely version already exists on Test PyPI" echo "Continuing anyway for test purposes..." else exit 1 fi } echo "โœ… Test PyPI step complete" - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} - name: Build and push Docker test images uses: docker/build-push-action@v5 with: context: . push: true tags: | unclecode/crawl4ai:test-${{ steps.get_version.outputs.VERSION }} unclecode/crawl4ai:test-latest platforms: linux/amd64,linux/arm64 cache-from: type=gha cache-to: type=gha,mode=max - name: Summary run: | echo "## ๐ŸŽ‰ Test Release Complete!" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### ๐Ÿ“ฆ Test PyPI Package" >> $GITHUB_STEP_SUMMARY echo "- Version: ${{ steps.get_version.outputs.VERSION }}" >> $GITHUB_STEP_SUMMARY echo "- URL: https://test.pypi.org/project/crawl4ai/" >> $GITHUB_STEP_SUMMARY echo "- Install: \`pip install -i https://test.pypi.org/simple/ crawl4ai==${{ steps.get_version.outputs.VERSION }}\`" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### ๐Ÿณ Docker Test Images" >> $GITHUB_STEP_SUMMARY echo "- \`unclecode/crawl4ai:test-${{ steps.get_version.outputs.VERSION }}\`" >> $GITHUB_STEP_SUMMARY echo "- \`unclecode/crawl4ai:test-latest\`" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### ๐Ÿงน Cleanup Commands" >> $GITHUB_STEP_SUMMARY echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY echo "# Remove test tag" >> $GITHUB_STEP_SUMMARY echo "git tag -d test-v${{ steps.get_version.outputs.VERSION }}" >> $GITHUB_STEP_SUMMARY echo "git push origin :test-v${{ steps.get_version.outputs.VERSION }}" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "# Remove Docker test images" >> $GITHUB_STEP_SUMMARY echo "docker rmi unclecode/crawl4ai:test-${{ steps.get_version.outputs.VERSION }}" >> $GITHUB_STEP_SUMMARY echo "docker rmi unclecode/crawl4ai:test-latest" >> $GITHUB_STEP_SUMMARY echo "\`\`\`" >> $GITHUB_STEP_SUMMARY