diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6d2876dae..60f169ecc 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -30,60 +30,60 @@ jobs: shell: bash steps: - - name: checkout repository - uses: actions/checkout@v2 + - name: checkout repository + uses: actions/checkout@v2 - - name: install all build dependencies except libtorrent from Ubuntu repos - run: | - sudo apt update - sudo apt install \ - build-essential cmake git ninja-build pkg-config \ - libssl-dev libgeoip-dev zlib1g-dev \ - libboost-dev libboost-chrono-dev libboost-random-dev libboost-system-dev - # sudo apt install libqt5svg5-dev qtbase5-dev qttools5-dev # the Qt version in the standard repositories is too old... + - name: install all build dependencies except libtorrent from Ubuntu repos + run: | + sudo apt update + sudo apt install \ + build-essential cmake git ninja-build pkg-config \ + libssl-dev libgeoip-dev zlib1g-dev \ + libboost-dev libboost-chrono-dev libboost-random-dev libboost-system-dev + # sudo apt install libqt5svg5-dev qtbase5-dev qttools5-dev # the Qt version in the standard repositories is too old... - # this will be installed under /opt/qt515. CMake will still find it automatically without additional hints - # to speed up the process, only the required components are installed rather than the full qt515-meta-full metapackage - - name: install Qt 5.15.2 from an external PPA - run: | - sudo add-apt-repository ppa:beineri/opt-qt-5.15.2-focal - sudo apt install qt515base qt515svg qt515tools + # this will be installed under /opt/qt515. CMake will still find it automatically without additional hints + # to speed up the process, only the required components are installed rather than the full qt515-meta-full metapackage + - name: install Qt 5.15.2 from an external PPA + run: | + sudo add-apt-repository ppa:beineri/opt-qt-5.15.2-focal + sudo apt install qt515base qt515svg qt515tools - - name: install libtorrent from source - run: | - git clone https://github.com/arvidn/libtorrent && cd libtorrent - git checkout ${{ env.LIBTORRENT_VERSION_TAG }} - cmake -B cmake-build-dir -G "Ninja" \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -Ddeprecated-functions=OFF \ - --graphviz=cmake-build-dir/target_graph.dot - cmake --build cmake-build-dir - sudo cmake --install cmake-build-dir --prefix /usr/local + - name: install libtorrent from source + run: | + git clone https://github.com/arvidn/libtorrent && cd libtorrent + git checkout ${{ env.LIBTORRENT_VERSION_TAG }} + cmake -B cmake-build-dir -G "Ninja" \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -Ddeprecated-functions=OFF \ + --graphviz=cmake-build-dir/target_graph.dot + cmake --build cmake-build-dir + sudo cmake --install cmake-build-dir --prefix /usr/local - - name: build qBittorrent - run: | - cmake -B build -G "Ninja" \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -D${{ matrix.qbt_gui }} \ - -DVERBOSE_CONFIGURE=ON \ - --graphviz=build/target_graph.dot - cmake --build build + - name: build qBittorrent + run: | + cmake -B build -G "Ninja" \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -D${{ matrix.qbt_gui }} \ + -DVERBOSE_CONFIGURE=ON \ + --graphviz=build/target_graph.dot + cmake --build build - - name: install qBittorrent - run: sudo cmake --install build --prefix /usr/local + - name: install qBittorrent + run: sudo cmake --install build --prefix /usr/local - - name: upload artifact as zip - uses: actions/upload-artifact@v2 - with: - name: qBittorrent-CI_${{ matrix.os }}-x64_${{ matrix.qbt_gui }} - path: | - build/compile_commands.json - build/install_manifest.txt - build/target_graph.dot - build/qbittorrent - build/qbittorrent-nox - libtorrent/cmake-build-dir/compile_commands.json - libtorrent/cmake-build-dir/target_graph.dot + - name: upload artifact as zip + uses: actions/upload-artifact@v2 + with: + name: qBittorrent-CI_${{ matrix.os }}-x64_${{ matrix.qbt_gui }} + path: | + build/compile_commands.json + build/install_manifest.txt + build/target_graph.dot + build/qbittorrent + build/qbittorrent-nox + libtorrent/cmake-build-dir/compile_commands.json + libtorrent/cmake-build-dir/target_graph.dot ci_windows: name: Windows + vcpkg @@ -95,76 +95,76 @@ jobs: shell: pwsh steps: - - name: checkout repository - uses: actions/checkout@v2 + - name: checkout repository + uses: actions/checkout@v2 - # - ninja is needed for building qBittorrent (because it's preferable, not a hard requirement) - - name: install additional required packages with chocolatey - run: | - choco install ninja + # - ninja is needed for building qBittorrent (because it's preferable, not a hard requirement) + - name: install additional required packages with chocolatey + run: | + choco install ninja - - name: setup vcpkg (cached, if possible) - uses: lukka/run-vcpkg@v7 - with: - vcpkgDirectory: ${{ env.VCPKG_DEST_WIN }} - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} - setupOnly: true + - name: setup vcpkg (cached, if possible) + uses: lukka/run-vcpkg@v7 + with: + vcpkgDirectory: ${{ env.VCPKG_DEST_WIN }} + vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} + setupOnly: true - # Tell vcpkg to only build Release variants of the dependencies - - name: configure vcpkg triplet overlay for release builds only - run: | - New-Item -Path ${{ github.workspace }} -Name "triplets_overlay" -ItemType Directory - Copy-Item ${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-windows-static.cmake ` - ${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake - Add-Content ${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake ` - -Value "set(VCPKG_BUILD_TYPE release)" + # Tell vcpkg to only build Release variants of the dependencies + - name: configure vcpkg triplet overlay for release builds only + run: | + New-Item -Path ${{ github.workspace }} -Name "triplets_overlay" -ItemType Directory + Copy-Item ${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-windows-static.cmake ` + ${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake + Add-Content ${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake ` + -Value "set(VCPKG_BUILD_TYPE release)" - # clear buildtrees after each package installation to reduce disk space requirements - - name: install dependencies via vcpkg - run: | - $packages = ` - "boost-circular-buffer:x64-windows-static-release", - "libtorrent:x64-windows-static-release", - "qt5-base:x64-windows-static-release", - "qt5-svg:x64-windows-static-release", - "qt5-tools:x64-windows-static-release", - "qt5-winextras:x64-windows-static-release" - ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe upgrade ` - --overlay-triplets=${{ github.workspace }}/triplets_overlay ` - --no-dry-run - foreach($package in $packages) - { - ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe install $package ` - --overlay-triplets=${{ github.workspace }}/triplets_overlay ` - --clean-after-build - } + # clear buildtrees after each package installation to reduce disk space requirements + - name: install dependencies via vcpkg + run: | + $packages = ` + "boost-circular-buffer:x64-windows-static-release", + "libtorrent:x64-windows-static-release", + "qt5-base:x64-windows-static-release", + "qt5-svg:x64-windows-static-release", + "qt5-tools:x64-windows-static-release", + "qt5-winextras:x64-windows-static-release" + ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe upgrade ` + --overlay-triplets=${{ github.workspace }}/triplets_overlay ` + --no-dry-run + foreach($package in $packages) + { + ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe install $package ` + --overlay-triplets=${{ github.workspace }}/triplets_overlay ` + --clean-after-build + } - # NOTE: this is necessary to correctly find and use cl.exe with the Ninja generator for now - - name: setup devcmd - uses: ilammy/msvc-dev-cmd@v1 + # NOTE: this is necessary to correctly find and use cl.exe with the Ninja generator for now + - name: setup devcmd + uses: ilammy/msvc-dev-cmd@v1 - - name: build qBittorrent - shell: cmd - run: | - cmake -B build -G "Ninja" ^ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo ^ - -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_DEST_WIN }}\scripts\buildsystems\vcpkg.cmake ^ - -DVCPKG_TARGET_TRIPLET=x64-windows-static-release ^ - -DVERBOSE_CONFIGURE=ON ^ - -DMSVC_RUNTIME_DYNAMIC=OFF ^ - --graphviz=build\target_graph.dot - cmake --build build + - name: build qBittorrent + shell: cmd + run: | + cmake -B build -G "Ninja" ^ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo ^ + -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_DEST_WIN }}\scripts\buildsystems\vcpkg.cmake ^ + -DVCPKG_TARGET_TRIPLET=x64-windows-static-release ^ + -DVERBOSE_CONFIGURE=ON ^ + -DMSVC_RUNTIME_DYNAMIC=OFF ^ + --graphviz=build\target_graph.dot + cmake --build build - - name: upload artifact as zip - uses: actions/upload-artifact@v2 - with: - name: qBittorrent-CI_Windows-x64 - path: | - build/compile_commands.json - build/target_graph.dot - build/qbittorrent.exe - build/qbittorrent.pdb - dist/windows/qt.conf + - name: upload artifact as zip + uses: actions/upload-artifact@v2 + with: + name: qBittorrent-CI_Windows-x64 + path: | + build/compile_commands.json + build/target_graph.dot + build/qbittorrent.exe + build/qbittorrent.pdb + dist/windows/qt.conf ci_macos: name: macOS + vcpkg @@ -181,74 +181,74 @@ jobs: shell: pwsh steps: - - name: checkout repository - uses: actions/checkout@v2 + - name: checkout repository + uses: actions/checkout@v2 - # - ninja is needed for building qBittorrent (because it's preferable, not a hard requirement) - # - automake is needed for the installation the vcpkg installation of fontconfig, a dependency of qt5-base - - name: install additional required packages with homebrew - shell: bash - run: | - brew install automake ninja + # - ninja is needed for building qBittorrent (because it's preferable, not a hard requirement) + # - automake is needed for the installation the vcpkg installation of fontconfig, a dependency of qt5-base + - name: install additional required packages with homebrew + shell: bash + run: | + brew install automake ninja - - name: setup vcpkg (cached, if possible) - uses: lukka/run-vcpkg@v7 - with: - vcpkgDirectory: ${{ env.VCPKG_DEST_MACOS }} - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} - setupOnly: true + - name: setup vcpkg (cached, if possible) + uses: lukka/run-vcpkg@v7 + with: + vcpkgDirectory: ${{ env.VCPKG_DEST_MACOS }} + vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} + setupOnly: true - - name: configure vcpkg triplet overlay for release builds only - run: | - New-Item -Path ${{ github.workspace }} -Name "triplets_overlay" -ItemType Directory - Copy-Item ${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-osx.cmake ` - ${{ github.workspace }}/triplets_overlay/x64-osx-release.cmake - Add-Content ${{ github.workspace }}/triplets_overlay/x64-osx-release.cmake ` - -Value "set(VCPKG_BUILD_TYPE release)","set(VCPKG_OSX_DEPLOYMENT_TARGET 10.15)" + - name: configure vcpkg triplet overlay for release builds only + run: | + New-Item -Path ${{ github.workspace }} -Name "triplets_overlay" -ItemType Directory + Copy-Item ${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-osx.cmake ` + ${{ github.workspace }}/triplets_overlay/x64-osx-release.cmake + Add-Content ${{ github.workspace }}/triplets_overlay/x64-osx-release.cmake ` + -Value "set(VCPKG_BUILD_TYPE release)","set(VCPKG_OSX_DEPLOYMENT_TARGET 10.15)" - # NOTE: Avoids a libtorrent ABI issue. See https://github.com/arvidn/libtorrent/issues/4965 - - name: force AppleClang to compile libtorrent with the same C++ standard as qBittorrent - run: | - (Get-Content -path ${{ env.RUNVCPKG_VCPKG_ROOT }}/ports/libtorrent/portfile.cmake).Replace( ` - '${FEATURE_OPTIONS}', '${FEATURE_OPTIONS} -DCMAKE_CXX_STANDARD=17') ` - | Set-Content -Path ${{ env.RUNVCPKG_VCPKG_ROOT }}/ports/libtorrent/portfile.cmake + # NOTE: Avoids a libtorrent ABI issue. See https://github.com/arvidn/libtorrent/issues/4965 + - name: force AppleClang to compile libtorrent with the same C++ standard as qBittorrent + run: | + (Get-Content -path ${{ env.RUNVCPKG_VCPKG_ROOT }}/ports/libtorrent/portfile.cmake).Replace( ` + '${FEATURE_OPTIONS}', '${FEATURE_OPTIONS} -DCMAKE_CXX_STANDARD=17') ` + | Set-Content -Path ${{ env.RUNVCPKG_VCPKG_ROOT }}/ports/libtorrent/portfile.cmake - - name: install dependencies via vcpkg - run: | - $packages = ` - "boost-circular-buffer:x64-osx-release", - "libtorrent:x64-osx-release", - "qt5-base:x64-osx-release", - "qt5-svg:x64-osx-release", - "qt5-tools:x64-osx-release", - "qt5-macextras:x64-osx-release" - ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg upgrade ` - --overlay-triplets=${{ github.workspace }}/triplets_overlay ` - --no-dry-run - foreach($package in $packages) - { - ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg install $package ` - --overlay-triplets=${{ github.workspace }}/triplets_overlay ` - --clean-after-build - } + - name: install dependencies via vcpkg + run: | + $packages = ` + "boost-circular-buffer:x64-osx-release", + "libtorrent:x64-osx-release", + "qt5-base:x64-osx-release", + "qt5-svg:x64-osx-release", + "qt5-tools:x64-osx-release", + "qt5-macextras:x64-osx-release" + ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg upgrade ` + --overlay-triplets=${{ github.workspace }}/triplets_overlay ` + --no-dry-run + foreach($package in $packages) + { + ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg install $package ` + --overlay-triplets=${{ github.workspace }}/triplets_overlay ` + --clean-after-build + } - - name: build qBittorrent - shell: bash - run: | - cmake -B build -G "Ninja" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_DEST_MACOS }}/scripts/buildsystems/vcpkg.cmake \ - -DVCPKG_TARGET_TRIPLET=x64-osx-release \ - -D${{ matrix.qbt_gui }} \ - -DVERBOSE_CONFIGURE=ON \ - --graphviz=build/target_graph.dot - cmake --build build + - name: build qBittorrent + shell: bash + run: | + cmake -B build -G "Ninja" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_DEST_MACOS }}/scripts/buildsystems/vcpkg.cmake \ + -DVCPKG_TARGET_TRIPLET=x64-osx-release \ + -D${{ matrix.qbt_gui }} \ + -DVERBOSE_CONFIGURE=ON \ + --graphviz=build/target_graph.dot + cmake --build build - - name: upload artifact as zip - uses: actions/upload-artifact@v2 - with: - name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }} - path: | - build/compile_commands.json - build/target_graph.dot - build/qbittorrent.app - build/qbittorrent-nox.app + - name: upload artifact as zip + uses: actions/upload-artifact@v2 + with: + name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }} + path: | + build/compile_commands.json + build/target_graph.dot + build/qbittorrent.app + build/qbittorrent-nox.app diff --git a/.github/workflows/coverity-scan.yml b/.github/workflows/coverity-scan.yml index c74985645..cff4668d0 100644 --- a/.github/workflows/coverity-scan.yml +++ b/.github/workflows/coverity-scan.yml @@ -1,78 +1,75 @@ name: Coverity Scan + on: schedule: - cron: '0 0 1 * *' # Monthly (1st day of month at midnight) - workflow_dispatch: # Mainly for testing. Don't forget the Coverity usage limits. env: LIBTORRENT_VERSION_TAG: v1.2.14 jobs: - coverity_scan: name: Scan - runs-on: ubuntu-20.04 - steps: - - name: checkout repository - uses: actions/checkout@v2 + - name: checkout repository + uses: actions/checkout@v2 - - name: install all build dependencies except libtorrent from Ubuntu repos - run: | - sudo apt update - sudo apt install \ - build-essential cmake git ninja-build pkg-config \ - libssl-dev zlib1g-dev libboost-dev libboost-system-dev - # sudo apt install libqt5svg5-dev qtbase5-dev qttools5-dev # the Qt version in the standard repositories is too old... + - name: install all build dependencies except libtorrent from Ubuntu repos + run: | + sudo apt update + sudo apt install \ + build-essential cmake git ninja-build pkg-config \ + libssl-dev zlib1g-dev libboost-dev libboost-system-dev + # sudo apt install libqt5svg5-dev qtbase5-dev qttools5-dev # the Qt version in the standard repositories is too old... - # this will be installed under /opt/qt515. CMake will still find it automatically without additional hints - # to speed up the process, only the required components are installed rather than the full qt515-meta-full metapackage - - name: install Qt 5.15.2 from an external PPA - run: | - sudo add-apt-repository ppa:beineri/opt-qt-5.15.2-focal - sudo apt install qt515base qt515svg qt515tools + # this will be installed under /opt/qt515. CMake will still find it automatically without additional hints + # to speed up the process, only the required components are installed rather than the full qt515-meta-full metapackage + - name: install Qt 5.15.2 from an external PPA + run: | + sudo add-apt-repository ppa:beineri/opt-qt-5.15.2-focal + sudo apt install qt515base qt515svg qt515tools - - name: install libtorrent from source - run: | - git clone https://github.com/arvidn/libtorrent && cd libtorrent - git checkout ${{ env.LIBTORRENT_VERSION_TAG }} - cmake -B cmake-build-dir -G "Ninja" \ - -DCMAKE_BUILD_TYPE=Release \ - -Ddeprecated-functions=OFF - cmake --build cmake-build-dir - sudo cmake --install cmake-build-dir --prefix /usr/local + - name: install libtorrent from source + run: | + git clone https://github.com/arvidn/libtorrent && cd libtorrent + git checkout ${{ env.LIBTORRENT_VERSION_TAG }} + cmake -B cmake-build-dir -G "Ninja" \ + -DCMAKE_BUILD_TYPE=Release \ + -Ddeprecated-functions=OFF + cmake --build cmake-build-dir + sudo cmake --install cmake-build-dir --prefix /usr/local - - name: Download Coverity Build Tool - run: | - wget -q https://scan.coverity.com/download/linux64 --post-data "token=$TOKEN&project=qbittorrent%2FqBittorrent" -O coverity_tool.tgz - mkdir coverity_tool - tar xzf coverity_tool.tgz --strip 1 -C coverity_tool - env: - TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} + - name: Download Coverity Build Tool + run: | + wget -q https://scan.coverity.com/download/linux64 --post-data "token=$TOKEN&project=qbittorrent%2FqBittorrent" -O coverity_tool.tgz + mkdir coverity_tool + tar xzf coverity_tool.tgz --strip 1 -C coverity_tool + env: + TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} - - name: Configure qBittorrent - run: | - cmake -B build -G "Ninja" \ - -DCMAKE_BUILD_TYPE=Release \ - -DGUI=ON \ - -DVERBOSE_CONFIGURE=ON + - name: Configure qBittorrent + run: | + cmake -B build -G "Ninja" \ + -DCMAKE_BUILD_TYPE=Release \ + -DGUI=ON \ + -DVERBOSE_CONFIGURE=ON - - name: Build with cov-build - run: | - export PATH=`pwd`/coverity_tool/bin:$PATH - cov-build --dir cov-int cmake --build build + - name: Build with cov-build + run: | + export PATH=`pwd`/coverity_tool/bin:$PATH + cov-build --dir cov-int cmake --build build - - name: Submit the result to Coverity Scan - run: | - tar caf qbittorrent.xz cov-int - curl \ - --form token=$TOKEN \ - --form email=sledgehammer999@qbittorrent.org \ - --form file=@qbittorrent.tgz \ - --form version="`git rev-parse --short HEAD`" \ - --form description="master" \ - https://scan.coverity.com/builds?project=qbittorrent%2FqBittorrent - env: - TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} + - name: Submit the result to Coverity Scan + run: | + tar caf qbittorrent.xz cov-int + curl \ + --form token=$TOKEN \ + --form email=sledgehammer999@qbittorrent.org \ + --form file=@qbittorrent.tgz \ + --form version="`git rev-parse --short HEAD`" \ + --form description="master" \ + https://scan.coverity.com/builds?project=qbittorrent%2FqBittorrent + env: + TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} diff --git a/.github/workflows/file_health.yaml b/.github/workflows/file_health.yaml index 25778e3de..b6e882a75 100644 --- a/.github/workflows/file_health.yaml +++ b/.github/workflows/file_health.yaml @@ -5,18 +5,16 @@ on: [pull_request, push] jobs: check_file_health: name: Check file health - runs-on: ubuntu-20.04 - steps: - - name: checkout repository - uses: actions/checkout@v2 + - name: checkout repository + uses: actions/checkout@v2 - - name: install zsh - run: | - sudo apt update - sudo apt install zsh + - name: install zsh + run: | + sudo apt update + sudo apt install zsh - - name: run check file health script - run: | - ./.github/workflows/file_health.sh + - name: run check file health script + run: | + ./.github/workflows/file_health.sh diff --git a/.github/workflows/webui_ci.yaml b/.github/workflows/webui_ci.yaml index b922ff831..dd6610001 100644 --- a/.github/workflows/webui_ci.yaml +++ b/.github/workflows/webui_ci.yaml @@ -11,21 +11,21 @@ jobs: working-directory: src/webui/www steps: - - name: checkout repository - uses: actions/checkout@v2 + - name: checkout repository + uses: actions/checkout@v2 - - name: setup nodejs - uses: actions/setup-node@v2 - with: - node-version: '14' + - name: setup nodejs + uses: actions/setup-node@v2 + with: + node-version: '14' - - name: install tools - run: npm install + - name: install tools + run: npm install - - name: lint code - run: npm run lint + - name: lint code + run: npm run lint - - name: format code - run: | - npm run format - git diff --exit-code + - name: format code + run: | + npm run format + git diff --exit-code