ci(github): update workflows #10388
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} |