Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: Refactor workflows so that they are usable by forks #981

Merged
merged 9 commits into from
Jan 9, 2025
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/.github/ @thomass-dev @rouk1 @augustebaum
rouk1 marked this conversation as resolved.
Show resolved Hide resolved
3 changes: 1 addition & 2 deletions .github/actions/sphinx/deploy/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ inputs:
required: false
default: scaleway
BUCKET:
required: false
default: prod-probabl-skore
required: true
SOURCE:
required: true
DESTINATION:
Expand Down
38 changes: 38 additions & 0 deletions .github/actions/workflow-run/context/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: acquire-pr-context
description: |
Acquire the PR number and the PR commit HEAD sha, after a "workflow_run" event.

The "workflow_run" context differs from the "pull_request" context and doesn't contain
PR basic information. This action intends to provide some missing information in the
"workflow_run" context, without having to explicitly record them in the workflow that
triggered the "workflow_run" event.
Comment on lines +3 to +8
Copy link
Contributor

@rouk1 rouk1 Jan 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment should express the difference between "workflow_run" and other execution context.


outputs:
pr-number:
description: "The PR number"
value: ${{ steps.acquire-pr-context.outputs.number }}
pr-head-sha:
description: "The PR commit HEAD sha"
value: ${{ steps.acquire-pr-context.outputs.head-sha }}

runs:
using: composite
steps:
- id: acquire-pr-context
shell: bash
run: |-
gh pr view \
--repo "${REPOSITORY}" "${BRANCH}" \
--json 'number,headRefOid' \
--jq '"number=\(.number)\nhead-sha=\(.headRefOid)"' \
\
>> "${GITHUB_OUTPUT}"
env:
GH_TOKEN: ${{ github.token }}
REPOSITORY: ${{ github.repository }}
BRANCH: |-
${{
(github.event.workflow_run.head_repository.fork == true)
&& format('{0}:{1}', github.event.workflow_run.head_repository.owner.login, github.event.workflow_run.head_branch)
|| github.event.workflow_run.head_branch
}}
115 changes: 72 additions & 43 deletions .github/workflows/skore.yml → .github/workflows/backend.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,49 @@
name: Reusable skore workflow

on: [workflow_call]
name: backend

on:
pull_request:
paths:
- 'skore/src/**'
- 'skore/tests/**'
- 'skore/pyproject.toml'
- 'skore/requirements*.txt'
- '.github/workflows/backend.yml'
push:
branches:
- main

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

defaults:
run:
shell: "bash"

jobs:
test-skore:
backend-lint:
runs-on: "ubuntu-latest"
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip

- name: Install dependencies
run: python -m pip install --upgrade pip pre-commit

- name: Lint
working-directory: skore/
run: pre-commit run --all-files ruff

backend-test:
strategy:
fail-fast: false
matrix:
Expand All @@ -21,14 +57,20 @@ jobs:
- os: "ubuntu-latest"
python: "3.12"
scikit-learn: "1.5"
- os: "ubuntu-latest"
python: "3.12"
scikit-learn: "1.6"
coverage: true
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Checkout code
uses: actions/checkout@v4

- uses: actions/setup-python@v5
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
cache: "pip"
cache: pip

- name: Restore python-venv
uses: actions/cache/restore@v4
Expand Down Expand Up @@ -75,46 +117,33 @@ jobs:
path: 'skore/venv'
key: ${{ steps.cache-python-venv.outputs.cache-primary-key }}

- name: Lint and test
timeout-minutes: 10
working-directory: "skore/"
run: |
# Lint
pre-commit run --all-files ruff

# Build
python -m build
- name: Build
working-directory: skore/
run: python -m build

- name: Install
working-directory: skore/
run: |
# Install `skore` without its dependencies, which are present in the venv
wheel=(dist/*.whl); python -m pip install --force-reinstall --no-deps "${wheel}"

# Test
python -m pytest --no-cov src/ tests/ -n auto
- name: Test without coverage
if: ${{ ! matrix.coverage }}
timeout-minutes: 10
working-directory: skore/
run: python -m pytest -n auto src/ tests/ --no-cov

coverage-skore:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.12
cache: "pip"
- name: pytest coverage
working-directory: "skore/"
- name: Test with coverage
if: ${{ matrix.coverage }}
timeout-minutes: 10
working-directory: skore/
run: |
# Install dependencies
python -m pip install --upgrade pip
python -m pip install --upgrade pre-commit
python -m pip install --upgrade build
python -m pip install -e .[test]

# run coverage
python -m pytest -n auto --junitxml=coverage.xml --cov=skore src/ tests/ | tee pytest-coverage.txt
- name: Pytest coverage comment
if: ${{ ! github.event.pull_request.head.repo.fork }}
uses: MishaKav/pytest-coverage-comment@main
mkdir coverage
python -m pytest -n auto src/ tests/ --junitxml=coverage/coverage.xml --cov-config=pyproject.toml --cov | tee coverage/coverage.txt

- name: Upload coverage reports
if: ${{ matrix.coverage && (github.event_name == 'pull_request') }}
uses: actions/upload-artifact@v4
with:
pytest-coverage-path: ./skore/pytest-coverage.txt
junitxml-path: ./skore/coverage.xml
title: pytest coverage report
name: backend-coverage
path: skore/coverage/
69 changes: 0 additions & 69 deletions .github/workflows/ci.yml

This file was deleted.

89 changes: 89 additions & 0 deletions .github/workflows/frontend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: frontend

on:
pull_request:
paths:
- 'skore-ui/**'
- '.github/workflows/frontend.yml'
push:
branches:
- main

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

defaults:
run:
shell: "bash"

jobs:
frontend-lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: skore-ui/package-lock.json

- name: Lint
working-directory: skore-ui/
run: |
npm install
npm run type-check
npm run lint
npm run format
npm run style-lint

frontend-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: skore-ui/package-lock.json

- name: Test with coverage
working-directory: skore-ui/
run: |
npm install
npm run test:unit:coverage

- name: Upload coverage reports
if: ${{ github.event_name == 'pull_request' }}
uses: actions/upload-artifact@v4
with:
name: frontend-coverage
path: skore-ui/coverage/

frontend-build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: skore-ui/package-lock.json

- name: Build
working-directory: skore-ui/
run: |
npm install
npm run build
Loading
Loading