Skip to content

MegaLinter

MegaLinter #54

Workflow file for this run

---
# MegaLinter GitHub Action configuration file
# More info at https://megalinter.io
name: MegaLinter
permissions:
checks: write
pull-requests: write
contents: write
on: # yamllint disable-line rule:truthy
# Trigger mega-linter at every push. Action will also be visible from Pull Requests to main
push: # Comment this line to trigger action only on pull-requests (not recommended if you don't pay for GH Actions)
pull_request:
branches: [master, main]
env: # Comment env block if you do not want to apply fixes
# Apply linter fixes configuration
APPLY_FIXES: all # When active, APPLY_FIXES must also be defined as environment variable (in github/workflows/mega-linter.yml or other CI tool)
APPLY_FIXES_EVENT: pull_request # Decide which event triggers application of fixes in a commit or a PR (pull_request, push, all)
APPLY_FIXES_MODE: commit # If APPLY_FIXES is used, defines if the fixes are directly committed (commit) or posted in a PR (pull_request)
concurrency:
group: ${{ github.ref }}-${{ github.workflow }}
cancel-in-progress: true
jobs:
build:
name: MegaLinter
runs-on: ubuntu-latest
permissions:
checks: write
pull-requests: write
contents: write
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Cache wheel directory
id: cache-wheels
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/alpine-wheels
key: ${{ runner.os }}-alpine-wheels-${{ hashFiles('requirements-dev.txt') }}
restore-keys: |
${{ runner.os }}-alpine-wheels-
- name: Set up Alpine Linux
if: steps.cache-wheels.outputs.cache-hit != 'true'
uses: jirutka/setup-alpine@v1
with:
packages: >
build-base
python3-dev
py3-pip
gfortran
fftw-dev
git
openblas-dev
cmake
- name: Upgrade pip and install requirements for building
if: steps.cache-wheels.outputs.cache-hit != 'true'
run: |
python -m pip install --upgrade pip
python -m pip install meson-python meson ninja wheel build
shell: alpine.sh {0}
- name: Remove version settings
if: steps.cache-wheels.outputs.cache-hit != 'true'
run: |
sed 's/==.*//' requirements-dev.txt > requirements-dev_no_version.txt
shell: alpine.sh {0}
- name: Run CMake to find LAPACK
if: steps.cache-wheels.outputs.cache-hit != 'true'
run: |
echo "find_package(LAPACK)" > CMakeLists.txt
echo "if(LAPACK_FOUND)" >> CMakeLists.txt
echo ' message("LAPACK found")' >> CMakeLists.txt
echo ' message("LAPACK include dirs: ${LAPACK_INCLUDE_DIRS}")' >> CMakeLists.txt
echo ' message("LAPACK libraries: ${LAPACK_LIBRARIES}")' >> CMakeLists.txt
echo "else()" >> CMakeLists.txt
echo ' message(FATAL_ERROR "LAPACK not found")' >> CMakeLists.txt
echo "endif()" >> CMakeLists.txt
cmake .
shell: alpine.sh {0}
- name: Run pkg-config to find LAPACK
if: steps.cache-wheels.outputs.cache-hit != 'true'
run: |
pkg-config --libs --cflags lapack || true
shell: alpine.sh {0}
- name: Build wheels
if: steps.cache-wheels.outputs.cache-hit != 'true'
run: |
for package in $(cat requirements-dev_no_version.txt); do
echo "Processing $package"
# Check if wheel already exists for package
if [ $(find ./alpine-wheels -name "${package}*.whl" | wc -l) -gt 0 ]; then
echo "Wheel for $package already exists, skipping"
continue
fi
if [ "$package" == "pyshtools" ]; then
echo "Building wheel for $package"
git clone https://github.com/FlorianPfaff/SHTOOLS.git
cd SHTOOLS
git checkout meson
python -m build
cd ..
mv SHTOOLS/dist/*.whl ./alpine-wheels/
rm -rf SHTOOLS
rm -rf CMakeFiles
elif ! pip download --only-binary=:all: --no-deps "$package" -d ./alpine-wheels > /dev/null 2>&1; then
echo "No compatible wheel for $package found, building..."
pip wheel --wheel-dir=./alpine-wheels "$package"
else
echo "Compatible wheel for $package downloaded"
fi
done
shell: alpine.sh {0}
- name: List available wheels
run: ls -l ./alpine-wheels
# MegaLinter
- name: MegaLinter
id: ml
# You can override MegaLinter flavor used to have faster performances
# More info at https://megalinter.io/flavors/
uses: oxsecurity/megalinter/flavors/[email protected]
env:
# All available variables are described in documentation
# https://megalinter.io/configuration/
VALIDATE_ALL_CODEBASE: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} # Validates all source when push on main, else just the git diff with main. Override with true if you always want to lint all sources
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# ADD YOUR CUSTOM ENV VARIABLES HERE OR DEFINE THEM IN A FILE .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY
# DISABLE: COPYPASTE,SPELL # Uncomment to disable copy-paste and spell checks
#with:
# args: -v ${{ github.workspace }}/cache-directory:/cache-directory
#- name: List cache-directory contents
# if: ${{ success() }} || ${{ failure() }}
# run: ls -la ${{ github.workspace }}/cache-directory
# Upload MegaLinter artifacts
- name: Archive production artifacts
if: ${{ success() }} || ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: MegaLinter reports
path: |
megalinter-reports
mega-linter.log
# Create pull request if applicable (for now works only on PR from same repository, not from forks)
- name: Create Pull Request with applied fixes
id: cpr
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository)
uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
commit-message: "[MegaLinter] Apply linters automatic fixes"
title: "[MegaLinter] Apply linters automatic fixes"
labels: bot
- name: Create PR output
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository)
run: |
echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
# Push new commit if applicable (for now works only on PR from same repository, not from forks)
- name: Prepare commit
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/main' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository)
run: sudo chown -Rc $UID .git/
- name: Commit and push applied linter fixes
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/main' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository)
uses: stefanzweifel/git-auto-commit-action@v4
with:
branch: ${{ github.event.pull_request.head.ref || github.head_ref || github.ref }}
commit_message: "[MegaLinter] Apply linters fixes"
commit_user_name: megalinter-bot
commit_user_email: [email protected]