Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
69a911d
Optimize CI pipeline with artifact sharing and enhanced caching
ianhi Sep 10, 2025
bdb5c06
Extract linting into separate workflow and improve Python testing
ianhi Sep 10, 2025
69a795d
Implement multi-architecture CI coordinator with shared builds
ianhi Sep 10, 2025
1f07706
Add CI Infrastructure documentation and reorganize Contributing section
ianhi Sep 10, 2025
348ed82
Implement dual-workflow security model for CI secrets
ianhi Sep 11, 2025
84088f9
Fix actionlint version to use specific v1.7.7 tag
ianhi Sep 11, 2025
de5e3aa
Simplify CI to single coordinator approach
ianhi Sep 11, 2025
92d3f95
Clean up workflow names and remove implementation comments
ianhi Sep 11, 2025
5aa9ab0
Drastically simplify CI to avoid GitHub throttling
ianhi Sep 11, 2025
b72c213
Fix artifact naming conflicts and simplify to 3 essential builds
ianhi Sep 11, 2025
020c944
Consolidate and streamline CI workflows to eliminate resource competi…
ianhi Sep 11, 2025
ad89b6a
Optimize CI execution flow and improve maintainability
ianhi Sep 11, 2025
f9eb2ca
Optimize CI pipeline with caching and reduced Docker delays
ianhi Sep 11, 2025
864f9ca
Fix Swatinem/rust-cache misses with explicit cache keys
ianhi Sep 11, 2025
f9392dc
Fix overly specific Swatinem/rust-cache keys by using shared-key
ianhi Sep 11, 2025
3c778f6
Move Docker setup to run in parallel with builds instead of blocking …
ianhi Sep 11, 2025
3d07d49
Fix Python tests never running due to concurrency group conflicts
ianhi Sep 11, 2025
b8ae968
Fix Windows builds by using cross-platform archive commands
ianhi Sep 11, 2025
7fa05e2
URGENT: Fix Ubuntu Python tests not running due to Docker port conflicts
ianhi Sep 11, 2025
4d46b1f
Sequence Ubuntu Python tests after Rust tests to fix scheduling confl…
ianhi Sep 11, 2025
f98eda7
Remove unnecessary concurrency groups and restore parallel execution
ianhi Sep 11, 2025
809103b
Add debug steps to investigate artifact extraction failure
ianhi Sep 11, 2025
e5aac74
Fix artifact download path to avoid repository file conflicts
ianhi Sep 11, 2025
dec4d42
Replace complex artifact sharing with simple Swatinem/rust-cache appr…
ianhi Sep 11, 2025
fd4ccf3
Remove artifact download/extraction from all remaining workflows
ianhi Sep 11, 2025
9c9b0ec
Integrate uv for fast Python dependency management and caching
ianhi Sep 11, 2025
e1890e7
Remove redundant setup-python step - uv handles Python installation
ianhi Sep 11, 2025
b4bb7e2
Optimize UV configuration and simplify Rust cache keys
ianhi Sep 11, 2025
cbba4b5
Optimize UV configuration and simplify Rust cache keys
ianhi Sep 11, 2025
d197d43
Streamline safe tests to focus only on Docker-requiring tests
ianhi Sep 11, 2025
2f2a0c3
Unify rust-cache configuration with shared-key strategy
ianhi Sep 11, 2025
72f01f4
Implement artifact-based Python wheel sharing for faster CI
ianhi Sep 11, 2025
4e97d71
Switch to uv sync for Python builds instead of artifact sharing
ianhi Sep 11, 2025
401d146
Implement sccache and matrix-based CI optimization
ianhi Sep 11, 2025
ccb41ae
Fix Docker services conditionally for Linux-only platforms
ianhi Sep 11, 2025
8a04330
Restore working minio configuration and optimize Python setup
ianhi Sep 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions .github/workflows/ci-coordinator.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: CI Coordinator

on:
push:
branches:
- main
pull_request:
types: [opened, reopened, synchronize, labeled]
workflow_dispatch:
schedule:
# Three times a day for integration tests
- cron: '33 3,10,15 * * *'

permissions:
contents: read

env:
RUST_CHANNEL: '1.89.0'

jobs:
# Matrix-based Rust builds and tests
rust_tests:
name: Rust Tests (${{ matrix.platform.name }})
strategy:
matrix:
platform:
- name: Ubuntu
target: x86_64
runner: ubuntu-latest
include_docker: true
- name: macOS ARM
target: aarch64
runner: macos-14
include_docker: false
- name: Windows
target: x86_64
runner: windows-latest
include_docker: false
uses: ./.github/workflows/rust-testing-safe.yaml
with:
target: ${{ matrix.platform.target }}
runner: ${{ matrix.platform.runner }}
include_docker_tests: ${{ matrix.platform.include_docker }}
rust_channel: '1.89.0'

# Matrix-based Python tests with sccache
python_tests:
name: Python Tests (${{ matrix.platform.name }})
strategy:
matrix:
platform:
- name: Ubuntu
target: x86_64
runner: ubuntu-latest
- name: macOS ARM
target: aarch64
runner: macos-14
- name: Windows
target: x86_64
runner: windows-latest
uses: ./.github/workflows/python-testing.yaml
with:
rust_channel: '1.89.0'
target: ${{ matrix.platform.target }}
runner: ${{ matrix.platform.runner }}

# Integration tests with cloud credentials
test_integration:
name: Test Integration
if: ${{
github.event_name == 'schedule'
|| github.event_name == 'workflow_dispatch'
|| (github.event_name == 'push' && github.ref == 'refs/heads/main')
|| (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'test-with-secrets'))
}}
uses: ./.github/workflows/rust-testing-integration.yaml
secrets: inherit
with:
rust_channel: '1.89.0'
target: x86_64
runner: ubuntu-latest

# Code quality checks (build wheels with sccache, run in parallel)
linting:
name: Code Quality
uses: ./.github/workflows/linting.yaml

# Dependency checks (runs independently)
dependency_check:
name: Dependency Check
uses: ./.github/workflows/dependency-check.yaml
with:
rust_channel: '1.89.0'
target: x86_64
runner: ubuntu-latest
25 changes: 0 additions & 25 deletions .github/workflows/codespell.yml

This file was deleted.

82 changes: 82 additions & 0 deletions .github/workflows/dependency-check.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Dependency Check

on:
workflow_call:
inputs:
rust_channel:
description: 'Rust channel to use'
required: false
type: string
default: '1.89.0'
target:
description: 'Build target architecture (x86_64, aarch64)'
required: false
type: string
default: 'x86_64'
runner:
description: 'GitHub runner to use'
required: false
type: string
default: 'ubuntu-latest'

env:
CARGO_INCREMENTAL: 0
CARGO_NET_RETRY: 10
CI: 1
RUST_BACKTRACE: short
RUSTFLAGS: "-D warnings -W unreachable-pub -W bare-trait-objects"
RUSTUP_MAX_RETRIES: 10
RUST_CHANNEL: ${{ inputs.rust_channel }}
CARGO_DENY_VERSION: '0.18.4'

jobs:
check_dependencies:
name: Check Dependencies
runs-on: ${{ inputs.runner }}
steps:
- name: Checkout repository
uses: actions/checkout@v5

# Rust artifacts available via Swatinem/rust-cache (no manual download needed)

- name: Install Just
run: sudo snap install --edge --classic just

# Cache rustup toolchain installation
- name: Cache rustup toolchain
uses: actions/cache@v4
with:
path: |
~/.rustup/toolchains
~/.rustup/update-hashes
~/.rustup/settings.toml
key: rustup-${{ runner.os }}-${{ inputs.rust_channel }}
restore-keys: |
rustup-${{ runner.os }}-

- name: Install Rust toolchain
run: |
rustup update --no-self-update ${{ inputs.rust_channel }}
rustup component add --toolchain ${{ inputs.rust_channel }} rustfmt rust-src clippy
rustup default ${{ inputs.rust_channel }}

- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
with:
shared-key: rust-${{ inputs.rust_channel }}
cache-all-crates: true
cache-on-failure: true

- name: Cache cargo-deny
uses: actions/cache@v4
id: cargo_deny_cache
with:
path: ~/.cargo/bin/cargo-deny
key: cargo-deny-${{ env.CARGO_DENY_VERSION }}-${{ runner.os }}

- name: Install cargo-deny
if: steps.cargo_deny_cache.outputs.cache-hit != 'true'
run: cargo install --locked cargo-deny --version ${{ env.CARGO_DENY_VERSION }}

- name: Run dependency checks
run: just check-deps
113 changes: 113 additions & 0 deletions .github/workflows/linting.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: Linting & Code Quality

on:
workflow_call:
workflow_dispatch:

permissions:
contents: read

env:
RUST_CHANNEL: '1.89.0'

jobs:
lint:
name: Code Quality
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5

# Install system dependencies
- name: Install Just
run: sudo snap install --edge --classic just

# Cache rustup toolchain installation
- name: Cache rustup toolchain
uses: actions/cache@v4
with:
path: |
~/.rustup/toolchains
~/.rustup/update-hashes
~/.rustup/settings.toml
key: rustup-${{ runner.os }}-${{ env.RUST_CHANNEL }}
restore-keys: |
rustup-${{ runner.os }}-

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true

- name: Install Rust toolchain
run: |
rustup update --no-self-update ${{ env.RUST_CHANNEL }}
rustup component add --toolchain ${{ env.RUST_CHANNEL }} rustfmt rust-src clippy
rustup default ${{ env.RUST_CHANNEL }}

# Cache dependencies
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
with:
shared-key: rust-${{ env.RUST_CHANNEL }}
cache-all-crates: true
cache-on-failure: true

- name: Cache additional tools
uses: actions/cache@v4
with:
path: |
~/.cache/pre-commit
~/.cache/codespell
~/.cache/actionlint
key: tools-lint-${{ runner.os }}-${{ hashFiles('**/.pre-commit-config.yaml', '**/.codespellrc') }}
restore-keys: |
tools-lint-${{ runner.os }}-

# Rust linting
- name: Run Rust linting and formatting checks
working-directory: ./icechunk
run: just pre-commit-python

# Python setup and linting
- name: Build Python wheel with sccache
uses: PyO3/maturin-action@v1
with:
working-directory: icechunk-python
target: x86_64
args: --release --out dist --find-interpreter
sccache: true

- name: Setup Python linting environment
working-directory: ./icechunk-python
run: |
uv sync --extra test --find-links dist
uv add pre-commit

- name: Run Python pre-commit linting
working-directory: ./icechunk-python
run: |
SKIP=just-rust uv run pre-commit run --all-files

- name: Run mypy type checking
working-directory: ./icechunk-python
run: |
uv run mypy python

# Spell checking
- name: Annotate locations with typos
uses: codespell-project/codespell-problem-matcher@v1.2.0

- name: Run codespell
uses: codespell-project/actions-codespell@v2

# GitHub Actions linting
- name: Run actionlint
uses: rhysd/actionlint@v1.7.7
with:
fail-on-error: true
Loading
Loading