| name: ci |
|
|
| on: |
| push: |
| branches: [main] |
| pull_request: |
| branches: [main] |
|
|
| jobs: |
| lint-type-test: |
| runs-on: ubuntu-24.04 |
| steps: |
| - uses: actions/checkout@v4 |
|
|
| - name: Install uv |
| uses: astral-sh/setup-uv@v3 |
| with: |
| version: "0.8.18" |
|
|
| - name: Set up Python 3.12 |
| run: uv python install 3.12 |
|
|
| - name: Sync workspace (base + ml + data for the runtime checks) |
| run: uv sync --frozen --extra ml --extra data |
|
|
| - name: Ruff (package + tests) |
| run: uv run ruff check mindxtrain/ tests/ |
|
|
| - name: Mypy (strict-checked paths only) |
| run: uv run mypy mindxtrain/config mindxtrain/provenance |
|
|
| - name: Pytest |
| run: uv run pytest -q |
|
|
| build-container: |
| |
| |
| runs-on: ubuntu-24.04 |
| needs: lint-type-test |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' |
| steps: |
| - uses: actions/checkout@v4 |
| - name: Build container (no push) |
| run: docker build -f Containerfile -t mindxtrain:ci . |
|
|
| publish-container: |
| |
| runs-on: ubuntu-24.04 |
| needs: lint-type-test |
| if: startsWith(github.ref, 'refs/tags/v') |
| permissions: |
| contents: read |
| packages: write |
| steps: |
| - uses: actions/checkout@v4 |
| - name: Log in to GHCR |
| uses: docker/login-action@v3 |
| with: |
| registry: ghcr.io |
| username: ${{ github.actor }} |
| password: ${{ secrets.GITHUB_TOKEN }} |
| - name: Build + push (tag) |
| run: | |
| TAG="${GITHUB_REF##*/}" |
| IMAGE="ghcr.io/${GITHUB_REPOSITORY_OWNER,,}/mindxtrain" |
| docker build -f Containerfile -t "$IMAGE:$TAG" -t "$IMAGE:latest" . |
| docker push "$IMAGE:$TAG" |
| docker push "$IMAGE:latest" |
| |