diff --git a/.github/workflows/codeflash-optimize.yaml b/.github/workflows/codeflash-optimize.yaml index 907f37788..b176ad7a8 100644 --- a/.github/workflows/codeflash-optimize.yaml +++ b/.github/workflows/codeflash-optimize.yaml @@ -28,7 +28,7 @@ jobs: fetch-depth: 0 - name: 🐍 Set up Python 3.11 for CLI - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: python-version: 3.11.6 diff --git a/.github/workflows/e2e-async.yaml b/.github/workflows/e2e-async.yaml index e7d08091c..44dfe02ad 100644 --- a/.github/workflows/e2e-async.yaml +++ b/.github/workflows/e2e-async.yaml @@ -55,7 +55,7 @@ jobs: fi - name: Set up Python 3.11 for CLI - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: python-version: 3.11.6 diff --git a/.github/workflows/e2e-bubblesort-benchmark.yaml b/.github/workflows/e2e-bubblesort-benchmark.yaml index 0be8e2a68..d57b4f953 100644 --- a/.github/workflows/e2e-bubblesort-benchmark.yaml +++ b/.github/workflows/e2e-bubblesort-benchmark.yaml @@ -55,7 +55,7 @@ jobs: fi - name: Set up Python 3.11 for CLI - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: python-version: 3.11.6 diff --git a/.github/workflows/e2e-bubblesort-pytest-nogit.yaml b/.github/workflows/e2e-bubblesort-pytest-nogit.yaml index f30e4f14e..2b8fb7eda 100644 --- a/.github/workflows/e2e-bubblesort-pytest-nogit.yaml +++ b/.github/workflows/e2e-bubblesort-pytest-nogit.yaml @@ -54,7 +54,7 @@ jobs: fi - name: Set up Python 3.11 for CLI - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: python-version: 3.11.6 diff --git a/.github/workflows/e2e-bubblesort-unittest.yaml b/.github/workflows/e2e-bubblesort-unittest.yaml index c4177e706..0c3672efc 100644 --- a/.github/workflows/e2e-bubblesort-unittest.yaml +++ b/.github/workflows/e2e-bubblesort-unittest.yaml @@ -54,7 +54,7 @@ jobs: fi - name: Set up Python 3.11 for CLI - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: python-version: 3.11.6 diff --git a/.github/workflows/e2e-coverage-optimization.yaml b/.github/workflows/e2e-coverage-optimization.yaml index 29a821a33..8d08dda18 100644 --- a/.github/workflows/e2e-coverage-optimization.yaml +++ b/.github/workflows/e2e-coverage-optimization.yaml @@ -52,7 +52,7 @@ jobs: fi - name: Set up Python 3.11 for CLI - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: python-version: 3.11.6 diff --git a/.github/workflows/e2e-futurehouse-structure.yaml b/.github/workflows/e2e-futurehouse-structure.yaml index 71bf88046..50b3cd001 100644 --- a/.github/workflows/e2e-futurehouse-structure.yaml +++ b/.github/workflows/e2e-futurehouse-structure.yaml @@ -54,7 +54,7 @@ jobs: fi - name: Set up Python 3.11 for CLI - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: python-version: 3.11.6 diff --git a/.github/workflows/e2e-init-optimization.yaml b/.github/workflows/e2e-init-optimization.yaml index a74a9d31b..3f009bc5f 100644 --- a/.github/workflows/e2e-init-optimization.yaml +++ b/.github/workflows/e2e-init-optimization.yaml @@ -53,7 +53,7 @@ jobs: fi - name: Set up Python 3.11 for CLI - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: python-version: 3.11.6 diff --git a/.github/workflows/e2e-topological-sort.yaml b/.github/workflows/e2e-topological-sort.yaml index 7bfa74684..aca07b44f 100644 --- a/.github/workflows/e2e-topological-sort.yaml +++ b/.github/workflows/e2e-topological-sort.yaml @@ -79,7 +79,7 @@ jobs: fi - name: Set up Python 3.11 for CLI - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: python-version: 3.11.6 diff --git a/.github/workflows/e2e-tracer-replay.yaml b/.github/workflows/e2e-tracer-replay.yaml index c287538f4..31a8aba9e 100644 --- a/.github/workflows/e2e-tracer-replay.yaml +++ b/.github/workflows/e2e-tracer-replay.yaml @@ -54,7 +54,7 @@ jobs: - name: Set up Python 3.11 for CLI - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: python-version: 3.11.6 diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml index ddfb91c8f..d4e07c9d2 100644 --- a/.github/workflows/mypy.yml +++ b/.github/workflows/mypy.yml @@ -17,7 +17,7 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: version: "0.5.30" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 000000000..a77cd7a70 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,88 @@ +name: "Publish" + +on: + push: + branches: + - main + paths: + - 'codeflash/version.py' + +jobs: + publish: + runs-on: ubuntu-latest + environment: + name: pypi + permissions: + id-token: write + contents: write # Changed from 'read' to 'write' to allow tag creation + steps: + - name: Checkout + uses: actions/checkout@v5 + with: + fetch-depth: 0 # Fetch all history for proper versioning + + - name: Extract version from version.py + id: extract_version + run: | + VERSION=$(grep -oP '__version__ = "\K[^"]+' codeflash/version.py) + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "tag=v$VERSION" >> $GITHUB_OUTPUT + echo "Extracted version: $VERSION" + + - name: Check if tag already exists + id: check_tag + run: | + if git rev-parse "v${{ steps.extract_version.outputs.version }}" >/dev/null 2>&1; then + echo "exists=true" >> $GITHUB_OUTPUT + echo "Tag v${{ steps.extract_version.outputs.version }} already exists, skipping release" + else + echo "exists=false" >> $GITHUB_OUTPUT + echo "Tag v${{ steps.extract_version.outputs.version }} does not exist, proceeding with release" + fi + + - name: Create and push git tag + if: steps.check_tag.outputs.exists == 'false' + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git tag -a "${{ steps.extract_version.outputs.tag }}" -m "Release ${{ steps.extract_version.outputs.tag }}" + git push origin "${{ steps.extract_version.outputs.tag }}" + + - name: Install uv + if: steps.check_tag.outputs.exists == 'false' + uses: astral-sh/setup-uv@v6 + + - name: Build + if: steps.check_tag.outputs.exists == 'false' + run: uv build + + # Check that basic features work and we didn't miss to include crucial files + - name: Smoke test (wheel) + if: steps.check_tag.outputs.exists == 'false' + run: uv run --isolated --no-project --with dist/*.whl tests/smoke_test.py + + - name: Smoke test (source distribution) + if: steps.check_tag.outputs.exists == 'false' + run: uv run --isolated --no-project --with dist/*.tar.gz tests/smoke_test.py + + - name: Publish to PyPI + if: steps.check_tag.outputs.exists == 'false' + run: uv publish + + - name: Create GitHub Release + if: steps.check_tag.outputs.exists == 'false' + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ steps.extract_version.outputs.tag }} + name: Release ${{ steps.extract_version.outputs.tag }} + body: | + ## What's Changed + + Release ${{ steps.extract_version.outputs.version }} of codeflash. + + **Full Changelog**: https://github.com/${{ github.repository }}/commits/${{ steps.extract_version.outputs.tag }} + draft: false + prerelease: false + generate_release_notes: true + files: | + dist/* \ No newline at end of file diff --git a/.github/workflows/unit-tests.yaml b/.github/workflows/unit-tests.yaml index 38e0fe96a..dc98d8d0f 100644 --- a/.github/workflows/unit-tests.yaml +++ b/.github/workflows/unit-tests.yaml @@ -21,7 +21,7 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/windows-unit-tests.yml b/.github/workflows/windows-unit-tests.yml index 6b29703f6..18865d5e4 100644 --- a/.github/workflows/windows-unit-tests.yml +++ b/.github/workflows/windows-unit-tests.yml @@ -19,7 +19,7 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: python-version: "3.13"