diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 50d6b86d..adbb3c54 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,12 @@ on: pull_request: branches: [main, master] +# Read by every `uv` invocation below. UV_LOCKED fails the run if uv.lock is +# out of date with pyproject.toml; UV_PYTHON is overridden by the matrix jobs. +env: + UV_LOCKED: "1" + UV_PYTHON: "3.12" + jobs: build: runs-on: ubuntu-latest @@ -13,26 +19,19 @@ jobs: matrix: python-version: ["3.10", "3.11", "3.12", "3.13"] + env: + UV_PYTHON: ${{ matrix.python-version }} + steps: - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install build - pip install -e . + - uses: astral-sh/setup-uv@v7 - name: Check package builds - run: python -m build + run: uv build - name: Verify CLI entry point - run: | - python -c "from sqlit.cli import main; print('CLI import OK')" + run: uv run --no-dev python -c "from sqlit.cli import main; print('CLI import OK')" nix-flake: runs-on: ubuntu-latest @@ -51,23 +50,17 @@ jobs: matrix: python-version: ["3.10", "3.12"] + env: + UV_PYTHON: ${{ matrix.python-version }} + steps: - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev + - uses: astral-sh/setup-uv@v7 - name: Run unit tests run: | - uv run pytest tests/ -v --timeout=60 \ + uv run pytest tests/ --timeout=60 \ --ignore=tests/test_sqlite.py \ --ignore=tests/test_mssql.py \ --ignore=tests/test_postgresql.py \ @@ -87,22 +80,16 @@ jobs: matrix: python-version: ["3.10", "3.12"] + env: + UV_PYTHON: ${{ matrix.python-version }} + steps: - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev + - uses: astral-sh/setup-uv@v7 - name: Run SQLite integration tests - run: uv run pytest tests/test_sqlite.py -v --timeout=60 + run: uv run pytest tests/test_sqlite.py --timeout=60 test-mssql: runs-on: ubuntu-latest @@ -127,16 +114,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev --extra mssql + - uses: astral-sh/setup-uv@v7 - name: Wait for SQL Server to be ready run: | @@ -155,7 +133,7 @@ jobs: MSSQL_PORT: 1433 MSSQL_USER: sa MSSQL_PASSWORD: TestPassword123! - run: uv run pytest tests/test_mssql.py -v --timeout=120 + run: uv run --extra mssql pytest tests/test_mssql.py --timeout=120 test-postgresql: runs-on: ubuntu-latest @@ -180,16 +158,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev --extra postgres + - uses: astral-sh/setup-uv@v7 - name: Run PostgreSQL integration tests env: @@ -198,7 +167,7 @@ jobs: POSTGRES_USER: testuser POSTGRES_PASSWORD: TestPassword123! POSTGRES_DATABASE: test_sqlit - run: uv run pytest tests/test_postgresql.py -v --timeout=120 + run: uv run --extra postgres pytest tests/test_postgresql.py --timeout=120 test-mysql: runs-on: ubuntu-latest @@ -224,16 +193,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev --extra mysql + - uses: astral-sh/setup-uv@v7 - name: Run MySQL integration tests env: @@ -242,7 +202,7 @@ jobs: MYSQL_USER: root MYSQL_PASSWORD: TestPassword123! MYSQL_DATABASE: test_sqlit - run: uv run pytest tests/test_mysql.py -v --timeout=120 + run: uv run --extra mysql pytest tests/test_mysql.py --timeout=120 test-oracle: runs-on: ubuntu-latest @@ -267,16 +227,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev --extra oracle + - uses: astral-sh/setup-uv@v7 - name: Run Oracle integration tests env: @@ -285,7 +236,7 @@ jobs: ORACLE_USER: testuser ORACLE_PASSWORD: TestPassword123! ORACLE_SERVICE: FREEPDB1 - run: uv run pytest tests/test_oracle.py -v --timeout=120 + run: uv run --extra oracle pytest tests/test_oracle.py --timeout=120 test-mariadb: runs-on: ubuntu-latest @@ -311,22 +262,13 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" + - uses: astral-sh/setup-uv@v7 - name: Install MariaDB Connector/C run: | sudo apt-get update sudo apt-get install -y libmariadb-dev - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev --extra mariadb - - name: Run MariaDB integration tests env: MARIADB_HOST: 127.0.0.1 @@ -334,7 +276,7 @@ jobs: MARIADB_USER: root MARIADB_PASSWORD: TestPassword123! MARIADB_DATABASE: test_sqlit - run: uv run pytest tests/test_mariadb.py -v --timeout=120 + run: uv run --extra mariadb pytest tests/test_mariadb.py --timeout=120 test-duckdb: runs-on: ubuntu-latest @@ -342,22 +284,16 @@ jobs: matrix: python-version: ["3.10", "3.12"] + env: + UV_PYTHON: ${{ matrix.python-version }} + steps: - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev --extra duckdb + - uses: astral-sh/setup-uv@v7 - name: Run DuckDB integration tests - run: uv run pytest tests/test_duckdb.py -v --timeout=60 + run: uv run --extra duckdb pytest tests/test_duckdb.py --timeout=60 test-cockroachdb: runs-on: ubuntu-latest @@ -366,16 +302,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev --extra cockroachdb + - uses: astral-sh/setup-uv@v7 - name: Start CockroachDB run: | @@ -398,7 +325,7 @@ jobs: COCKROACHDB_USER: root COCKROACHDB_PASSWORD: "" COCKROACHDB_DATABASE: test_sqlit - run: uv run pytest tests/test_cockroachdb.py -v --timeout=120 + run: uv run --extra cockroachdb pytest tests/test_cockroachdb.py --timeout=120 test-firebird: runs-on: ubuntu-latest @@ -417,16 +344,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev --extra firebird + - uses: astral-sh/setup-uv@v7 - name: Run Firebird integration tests env: @@ -435,7 +353,7 @@ jobs: FIREBIRD_USER: testuser FIREBIRD_PASSWORD: TestPassword123! FIREBIRD_DATABASE: /var/lib/firebird/data/test_sqlit.fdb - run: uv run pytest tests/test_firebird.py -v --timeout=120 + run: uv run --extra firebird pytest tests/test_firebird.py --timeout=120 test-clickhouse: runs-on: ubuntu-latest @@ -444,16 +362,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev --extra clickhouse + - uses: astral-sh/setup-uv@v7 - name: Start ClickHouse run: | @@ -478,7 +387,7 @@ jobs: CLICKHOUSE_USER: default CLICKHOUSE_PASSWORD: testpass CLICKHOUSE_DATABASE: test_sqlit - run: uv run pytest tests/test_clickhouse.py -v --timeout=120 + run: uv run --extra clickhouse pytest tests/test_clickhouse.py --timeout=120 test-ssh: runs-on: ubuntu-latest @@ -487,16 +396,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev --extra ssh --extra postgres + - uses: astral-sh/setup-uv@v7 - name: Create Docker network run: docker network create ssh-test-net @@ -553,14 +453,7 @@ jobs: POSTGRES_USER: testuser POSTGRES_PASSWORD: TestPassword123! POSTGRES_DATABASE: test_sqlit - run: uv run pytest tests/test_ssh.py -v --timeout=120 - - - name: Cleanup - if: always() - run: | - docker stop sshserver postgres || true - docker rm sshserver postgres || true - docker network rm ssh-test-net || true + run: uv run --extra ssh --extra postgres pytest tests/test_ssh.py --timeout=120 test-turso: runs-on: ubuntu-latest @@ -569,16 +462,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: Install dependencies - run: uv sync --group test --no-dev --extra turso + - uses: astral-sh/setup-uv@v7 - name: Start Turso (libsql-server) run: | @@ -598,10 +482,5 @@ jobs: - name: Run Turso integration tests env: TURSO_URL: http://localhost:8080 - run: uv run pytest tests/test_turso.py -v --timeout=120 + run: uv run --extra turso pytest tests/test_turso.py --timeout=120 - - name: Cleanup - if: always() - run: | - docker stop turso || true - docker rm turso || true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3cc1bfd5..b15c269a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -51,16 +51,12 @@ jobs: with: ref: ${{ env.RELEASE_TAG }} - - name: Set up Python - uses: actions/setup-python@v5 + - uses: astral-sh/setup-uv@v5 with: python-version: "3.12" - - name: Install build tools - run: python -m pip install --upgrade build - - name: Build package - run: python -m build + run: uv build - name: Upload dist artifacts uses: actions/upload-artifact@v4