diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 3d4c72b0c6..20313c01ff 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,44 +1,25 @@ -## Description - - + -- Summarize the change and which issue is fixed. -- Include relevant motivation and context. -- Add visuals when possible, e.g. before/after screenshots with full code snippets. ---> +## Description + Fixes #{issue} -## How Has This Been Tested? - - ## AI Disclosure + - - +- Tool & Model: +- Usage: -- [ ] This PR contains AI-generated content. - - [ ] I have tested all AI-generated content in my PR. - - [ ] I take responsibility for all AI-generated content in my PR. +- [ ] I have tested all AI-generated content in my PR. +- [ ] I take responsibility for all AI-generated content in my PR. - - -Tools and Models: {e.g., Cursor + Sonnet 4.6, Claude Code + Opus 4.6, Antigravity + Gemini Flash 3, ChatGPT, etc.} ## Checklist - - [ ] Pull request title follows the conventional format -- [ ] Tests added and is passing +- [ ] Tests added and are passing - [ ] Added documentation - - diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 9ffb516bf9..d3c99ace21 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -49,7 +49,7 @@ jobs: install: false - name: conda build run: pixi run -e build build-conda - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: always() with: name: artifacts-conda @@ -62,7 +62,7 @@ jobs: needs: [conda_build, waiting_room] if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') steps: - - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: artifacts-conda path: dist/ @@ -91,7 +91,7 @@ jobs: install: false - name: Build package run: pixi run -e build build-pip - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: always() with: name: artifacts-pip @@ -106,10 +106,10 @@ jobs: runs-on: "ubuntu-latest" needs: [pip_build] steps: - - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: ${{ env.PYTHON_VERSION }} - - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: artifacts-pip path: dist/ @@ -126,12 +126,12 @@ jobs: permissions: id-token: write steps: - - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: artifacts-pip path: dist/ - name: Publish to PyPI - uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1 + uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1.14 announce: name: Announce GitHub @@ -143,10 +143,10 @@ jobs: env: TAG: ${{ github.ref_name }} steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: pattern: artifacts-* path: artifacts/ diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 6b26b53186..0ae72dafb3 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -46,7 +46,7 @@ jobs: environments: docs - name: Build documentation run: pixi run -e docs docs-build - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: always() with: name: docs @@ -63,7 +63,7 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} steps: - - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: docs path: builtdocs/ diff --git a/.github/workflows/lock.yaml b/.github/workflows/lock.yaml index ff89b87633..935813912a 100644 --- a/.github/workflows/lock.yaml +++ b/.github/workflows/lock.yaml @@ -16,7 +16,7 @@ jobs: action: runs-on: ubuntu-latest steps: - - uses: dessant/lock-threads@7266a7ce5c1df01b1c6db85bf8cd86c737dadbe7 # v6 + - uses: dessant/lock-threads@7266a7ce5c1df01b1c6db85bf8cd86c737dadbe7 # v6.0.0 with: issue-inactive-days: "100" pr-inactive-days: "100" diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 049b6ef020..56115a2610 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -56,12 +56,12 @@ jobs: matrix: ${{ env.MATRIX }} matrix_option: ${{ env.MATRIX_OPTION }} steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 if: github.event_name != 'pull_request' with: persist-credentials: false - name: Check for code changes - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4 + uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 id: filter with: filters: | @@ -146,7 +146,7 @@ jobs: - name: Test Examples run: | pixi run -e "${ENV}" test-example - - uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6 + - uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 with: token: ${{ secrets.CODECOV_TOKEN }} @@ -175,13 +175,13 @@ jobs: echo "[run]\nconcurrency = greenlet" > .uicoveragerc FAIL="--screenshot only-on-failure --full-page-screenshot --output ui_screenshots --tracing retain-on-failure" pixi run -e "${ENV}" test-ui $COV --cov-config=.uicoveragerc $FAIL - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: always() with: name: ui_screenshots_${{ runner.os }} path: ./ui_screenshots if-no-files-found: ignore - - uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6 + - uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 with: token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/zizmor.yaml b/.github/workflows/zizmor.yaml index 18a4ebe01c..cc5ea39a04 100644 --- a/.github/workflows/zizmor.yaml +++ b/.github/workflows/zizmor.yaml @@ -24,6 +24,6 @@ jobs: with: persist-credentials: false - name: Run zizmor - uses: zizmorcore/zizmor-action@b1d7e1fb5de872772f31590499237e7cce841e8e # v0.5.3 + uses: zizmorcore/zizmor-action@b572f7b1a1c2d41efaab43d504f68d215c3cd727 # v0.5.4 # with: # persona: auditor diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9d106181a8..4b186d4fbb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -38,7 +38,7 @@ repos: rev: fb4fd26ea947350ec231580772317ec7261c8e21 # frozen: v3.8.3 hooks: - id: prettier - exclude: conda.recipe/meta.yaml + exclude: conda.recipe/meta.yaml|pull_request_template.md types_or: - markdown - yaml diff --git a/scripts/check_latest_packages.py b/scripts/check_latest_packages.py index 11ac093a31..c9ad8b19cd 100644 --- a/scripts/check_latest_packages.py +++ b/scripts/check_latest_packages.py @@ -4,11 +4,13 @@ import os import re import sys +from datetime import datetime, timezone from importlib.metadata import version from subprocess import DEVNULL, check_output PYTHON_VERSION = sys.version_info[:2] PLATFORM = {"linux": "linux-64", "darwin": "osx-arm64", "win32": "win-64"}[sys.platform] +TODAY = datetime.now(tz=timezone.utc).date() if sys.stdout.isatty() or os.environ.get("GITHUB_ACTIONS"): GREEN, RED, RESET = "\033[92m", "\033[91m", "\033[0m" @@ -45,11 +47,21 @@ def get_data(package): return [*raw.get("noarch", ()), *raw.get(PLATFORM, ())] +def released_today(item) -> bool: + ts = item.get("timestamp") + if ts is None: + return False + released = datetime.fromtimestamp(ts / 1000, tz=timezone.utc).date() + return released == TODAY + + def main(*packages): all_latest = True for package in sorted(packages): data = get_data(package) - versions = {item["version"] for item in data if python_check(item)} + versions = { + item["version"] for item in data if python_check(item) and not released_today(item) + } latest = max(versions, key=convert_int) current = version(package) is_latest = convert_int(current) >= convert_int(latest)