Skip to content

ci(github): update workflows #10388

ci(github): update workflows

ci(github): update workflows #10388

Workflow file for this run

name: main
# If a workflow is skipped due to path filtering, branch filtering or a commit message,
# then checks associated with that workflow will remain in a "Pending" state.
# A pull request that requires those checks to be successful will be blocked from merging.
#
# So we use conditions to control job execution (`if: ...`) instead of `pull_request` event parameters.
# A job that is skipped will report its status as "Success".
# It will not prevent a pull request from merging, even if it is a required check.
on: [pull_request]
jobs:
################################################################
## Back-end
################################################################
detect-backend-changes:
runs-on: ubuntu-20.04
outputs:
has-changes: ${{ steps.detect-changes.outputs.has-changes }}
steps:
- name: Checkout GitHub repo
uses: actions/checkout@v4
with:
fetch-depth: 0 # Ensure full history is fetched
- name: Check if backend files have changed
id: detect-changes
run: |
git fetch origin ${{ github.event.pull_request.base.ref }} --depth=1
if git diff --name-only origin/${{ github.event.pull_request.base.ref }}...HEAD | grep -Eq '^antarest/|^tests/|^resources/|^requirements.*\.txt$'; then
echo "Backend files have changed"
echo "has-changes=true" >> $GITHUB_OUTPUT
else
echo "No backend files have changed"
echo "has-changes=false" >> $GITHUB_OUTPUT
fi
python-lint:
needs: detect-backend-changes
if: ${{ needs.detect-backend-changes.outputs.has-changes == 'true' }}
runs-on: ubuntu-20.04
steps:
- name: Checkout GitHub repo (+ download lfs dependencies)
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.11
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements-dev.txt
- uses: isort/[email protected]
with:
sort-paths: antarest, tests
requirementsFiles: "requirements-dev.txt"
- name: Check with black
uses: psf/black@stable
with:
# Version of Black should match the versions set in `requirements-dev.txt`
version: "~=23.7.0"
options: --check --diff
- name: Check Typing (mypy)
#continue-on-error: true
run: |
mypy --install-types --non-interactive
python-test:
needs: detect-backend-changes
if: ${{ needs.detect-backend-changes.outputs.has-changes == 'true' }}
runs-on: ${{ matrix.os }}
strategy:
max-parallel: 9
matrix:
os: [windows-latest, ubuntu-20.04]
steps:
- name: Checkout GitHub repo (+ download lfs dependencies)
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.11
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements-dev.txt
- name: Test with pytest
run: |
pytest --cov antarest --cov-report xml -n auto --dist=worksteal
- name: Archive code coverage results
if: matrix.os == 'ubuntu-20.04'
uses: actions/upload-artifact@v4
with:
name: python-code-coverage-report
path: coverage.xml
python-tests:
needs: [detect-backend-changes, python-test]
if: ${{ needs.detect-backend-changes.outputs.has-changes == 'true' && always() }}
runs-on: ubuntu-20.04
steps:
- name: Results of Python tests by OS
run: exit 1
# See https://stackoverflow.com/a/67532120/4907315
if: >-
${{
contains(needs.*.result, 'failure')
|| contains(needs.*.result, 'cancelled') }}
################################################################
## Front-end
################################################################
detect-frontend-changes:
runs-on: ubuntu-20.04
outputs:
has-changes: ${{ steps.detect-changes.outputs.has-changes }}
steps:
- name: Checkout GitHub repo
uses: actions/checkout@v4
with:
fetch-depth: 0 # Ensure full history is fetched
- name: Check if front-end files have changed
id: detect-changes
run: |
git fetch origin ${{ github.event.pull_request.base.ref }} --depth=1
if git diff --name-only origin/${{ github.event.pull_request.base.ref }}...HEAD | grep -q '^webapp/'; then
echo "Front-end files have changed"
echo "has-changes=true" >> $GITHUB_OUTPUT
else
echo "No front-end files in have changed"
echo "has-changes=false" >> $GITHUB_OUTPUT
fi
npm-setup:
needs: detect-frontend-changes
if: ${{ needs.detect-frontend-changes.outputs.has-changes == 'true' }}
runs-on: ubuntu-20.04
steps:
- name: Checkout GitHub repo
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 18.16.1
- name: Cache node modules
uses: actions/cache@v4
with:
path: webapp/node_modules
key: ${{ runner.os }}-webapp-node-modules-${{ hashFiles('webapp/package-lock.json') }}
restore-keys: |
${{ runner.os }}-webapp-node-modules-
${{ runner.os }}-
save-always: true
- name: Install dependencies
run: npm install
working-directory: webapp
npm-lint:
needs: npm-setup
runs-on: ubuntu-20.04
steps:
- name: Checkout GitHub repo
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 18.16.1
- name: Restore node modules
uses: actions/cache@v4
with:
path: webapp/node_modules
key: ${{ runner.os }}-webapp-node-modules-${{ hashFiles('webapp/package-lock.json') }}
save-always: true
- name: Lint
run: npm run lint
working-directory: webapp
npm-test:
needs: npm-setup
runs-on: ubuntu-20.04
steps:
- name: Checkout GitHub repo
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 18.16.1
- name: Restore node modules
uses: actions/cache@v4
with:
path: webapp/node_modules
key: ${{ runner.os }}-webapp-node-modules-${{ hashFiles('webapp/package-lock.json') }}
save-always: true
- name: Test
run: npm run test
working-directory: webapp
npm-build:
needs: npm-setup
runs-on: ubuntu-20.04
steps:
- name: Checkout GitHub repo
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 18.16.1
- name: Restore node modules
uses: actions/cache@v4
with:
path: webapp/node_modules
key: ${{ runner.os }}-webapp-node-modules-${{ hashFiles('webapp/package-lock.json') }}
save-always: true
- name: Build
run: npm run build
working-directory: webapp
env:
NODE_OPTIONS: --max-old-space-size=8192
DISABLE_ESLINT_PLUGIN: true
################################################################
## SonarCloud
################################################################
sonarcloud:
if: ${{ always() }}
needs: [python-test, npm-test]
runs-on: ubuntu-20.04
steps:
- name: Checkout GitHub repo
uses: actions/checkout@v4
- name: Download python coverage report
uses: actions/download-artifact@v4
with:
name: python-code-coverage-report
# Config in `sonar-project.properties` file
- name: SonarCloud Scan
uses: sonarsource/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}