Merge pull request #4554 from fukc-gihtub/shift_case_rule #266
This file contains hidden or 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: Build | |
| env: | |
| include_paths: | | |
| charsets/ | |
| docs/ | |
| extra/ | |
| layouts/ | |
| masks/ | |
| modules/ | |
| OpenCL/ | |
| rules/ | |
| example* | |
| hashcat* | |
| libhashcat* | |
| on: | |
| push: | |
| branches: | |
| - master | |
| tags: | |
| - v* | |
| paths: | |
| - 'OpenCL/**.h' | |
| - 'OpenCL/**.cl' | |
| - 'include/**.h' | |
| - 'src/**.c' | |
| - 'src/**.mk' | |
| - 'tools/**' | |
| - '**/Makefile' | |
| - '.github/workflows/build.yml' | |
| pull_request: | |
| branches: | |
| - master | |
| paths: | |
| - 'OpenCL/**.h' | |
| - 'OpenCL/**.cl' | |
| - 'include/**.h' | |
| - 'src/**.c' | |
| - 'src/**.mk' | |
| - 'tools/**' | |
| - '**/Makefile' | |
| - '.github/workflows/build.yml' | |
| jobs: | |
| build: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest, freebsd, openbsd, netbsd, dragonflybsd] | |
| shared: [0, 1] | |
| include: | |
| - os: ubuntu-latest | |
| os_name: Linux | |
| os_name_lowercase: linux | |
| - os: macos-latest | |
| os_name: macOS | |
| os_name_lowercase: macos | |
| - os: windows-latest | |
| os_name: Windows | |
| os_name_lowercase: windows | |
| - os: freebsd | |
| os_name: FreeBSD | |
| os_name_lowercase: freebsd | |
| - os: openbsd | |
| os_name: OpenBSD | |
| os_name_lowercase: openbsd | |
| - os: netbsd | |
| os_name: NetBSD | |
| os_name_lowercase: netbsd | |
| - os: dragonflybsd | |
| os_name: DragonflyBSD | |
| os_name_lowercase: dragonflybsd | |
| name: Build ${{ matrix.os_name }} (${{ matrix.shared == 0 && 'Static' || 'Shared' }}) | |
| runs-on: ${{ (matrix.os == 'freebsd' || matrix.os == 'openbsd' || matrix.os == 'netbsd' || matrix.os == 'dragonflybsd') && 'ubuntu-latest' || matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref || github.ref }} | |
| repository: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name || github.repository }} | |
| - name: Install dependencies (Windows only) | |
| if: matrix.os_name_lowercase == 'windows' | |
| uses: msys2/setup-msys2@v2 | |
| with: | |
| msystem: MINGW64 | |
| update: true | |
| install: | | |
| gcc | |
| git | |
| libiconv-devel | |
| make | |
| mingw-w64-x86_64-clang | |
| mingw-w64-x86_64-lld | |
| mingw-w64-x86_64-llvm | |
| mingw-w64-x86_64-rustup | |
| mingw-w64-x86_64-toolchain | |
| python3 | |
| - name: Setup Rustup (Windows only) | |
| if: matrix.os_name_lowercase == 'windows' | |
| shell: msys2 {0} | |
| env: | |
| PATH: /mingw64/bin:$PATH | |
| run: | | |
| rustup default stable | |
| rustup target add x86_64-pc-windows-gnu | |
| - name: Build (Windows) | |
| if: matrix.os_name_lowercase == 'windows' | |
| shell: msys2 {0} | |
| env: | |
| SHARED: ${{ matrix.shared }} | |
| PATH: /mingw64/bin:$PATH | |
| WIN_PYTHON: "" | |
| run: | | |
| make ENABLE_LTO=0 CC=clang CXX=clang++ | |
| - name: Build (Linux/macOS) | |
| if: matrix.os_name_lowercase == 'linux' || matrix.os_name_lowercase == 'macos' | |
| env: | |
| SHARED: ${{ matrix.shared }} | |
| TERM: xterm | |
| run: | | |
| make ENABLE_LTO=0 CC=clang CXX=clang++ | |
| - name: Build (FreeBSD) | |
| if: matrix.os_name_lowercase == 'freebsd' | |
| uses: vmactions/freebsd-vm@v1 | |
| with: | |
| usesh: true | |
| envs: SHARED | |
| prepare: | | |
| pkg update | |
| pkg install -y git gcc gmake gsed python3 rust llvm | |
| run: | | |
| gmake ENABLE_LTO=0 CC=clang CXX=clang++ | |
| - name: Build (OpenBSD) | |
| if: matrix.os_name_lowercase == 'openbsd' | |
| uses: vmactions/openbsd-vm@v1 | |
| with: | |
| usesh: true | |
| envs: SHARED | |
| prepare: | | |
| pkg_add git gcc%11 gmake gsed llvm%19 | |
| run: | | |
| export TERM=xterm | |
| gmake ENABLE_LTO=0 CC=clang CXX=clang++ | |
| - name: Build (NetBSD) | |
| if: matrix.os_name_lowercase == 'netbsd' | |
| uses: vmactions/netbsd-vm@v1 | |
| with: | |
| usesh: true | |
| envs: SHARED | |
| prepare: | | |
| export PATH="/usr/sbin:$PATH" | |
| pkg_add git gcc14 gmake gsed python313 llvm libiconv clang | |
| run: | | |
| export PATH="/usr/pkg/gcc14/bin:$PATH" | |
| export TERM=xterm | |
| gmake ENABLE_LTO=0 CC=clang CXX=clang++ | |
| - name: Build (DragonflyBSD) | |
| if: matrix.os_name_lowercase == 'dragonflybsd' | |
| uses: vmactions/dragonflybsd-vm@v1 | |
| with: | |
| usesh: true | |
| envs: SHARED | |
| prepare: | | |
| pkg update | |
| pkg install -y git gcc gmake gsed python3 llvm | |
| run: | | |
| export TERM=xterm | |
| gmake ENABLE_LTO=0 CC=clang CXX=clang++ | |
| - name: Generate documentation | |
| if: matrix.os_name_lowercase == 'linux' && matrix.shared == 0 | |
| env: | |
| SHARED: ${{ matrix.shared }} | |
| TERM: xterm | |
| run: | | |
| cd .github/workflows/ | |
| bash -v ./generate_docs.sh || true # make sure return code of generate docs is always successful (we don't want a build to break because of it..) | |
| - name: Commit changes to docs | |
| if: matrix.os_name_lowercase == 'linux' && matrix.shared == 0 | |
| env: | |
| SHARED: ${{ matrix.shared }} | |
| run: | | |
| # https://github.com/actions/checkout?tab=readme-ov-file#push-a-commit-using-the-built-in-token | |
| git config user.name "github-actions[bot]" | |
| git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
| git add docs/hashcat-help.md | |
| git add docs/hashcat-example-hashes.md | |
| if ! git diff --staged --quiet; then | |
| if [ "$GITHUB_EVENT_NAME" = "push" ]; then | |
| if [ "$GITHUB_REF_NAME" = "master" ]; then | |
| git commit -m "Automatically updated docs/hashcat-help.md or docs/hashcat-example-hashes.md (by Github Action)" | |
| git push | |
| else | |
| echo "Not on master branch (currently: $GITHUB_REF_NAME): skipping commit because otherwise we may be in detached head" | |
| fi | |
| else | |
| echo "docs/hashcat-help.md or docs/hashcat-example-hashes.md are not up-to-date:" | |
| echo "..." | |
| git diff --staged | cat | |
| echo "..." | |
| echo "this will be updated automatically when merged into master" | |
| fi | |
| else | |
| echo "No need to update docs/hashcat-help.md or docs/hashcat-example-hashes.md" | |
| fi | |
| - name: Generate artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: hashcat-${{ matrix.os_name_lowercase }}-${{ matrix.shared == 0 && 'static' || 'shared' }} | |
| path: ${{ env.include_paths }} | |
| build_binaries: | |
| name: Build binaries (Linux and Windows) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref || github.ref }} | |
| repository: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name || github.repository }} | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| wget ca-certificates zstd tar git make pkg-config llvm cmake g++-mingw-w64-x86-64 gcc-mingw-w64-x86-64 libc++-dev libc++abi-dev lld pkg-config python3 | |
| mkdir ~/src && cd ~/src | |
| mkdir /opt/win-iconv-64 | |
| git clone --depth 1 --branch v0.0.10 https://github.com/win-iconv/win-iconv.git && cd win-iconv | |
| cmake \ | |
| -D WIN_ICONV_BUILD_EXECUTABLE=OFF \ | |
| -D CMAKE_INSTALL_PREFIX=/opt/win-iconv-64 \ | |
| -D CMAKE_C_COMPILER=$(which x86_64-w64-mingw32-gcc) \ | |
| -D CMAKE_CXX_COMPILER=$(which x86_64-w64-mingw32-g++) \ | |
| -D CMAKE_SYSTEM_NAME=Windows \ | |
| -D CMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY \ | |
| -D CMAKE_C_STANDARD_LIBRARIES="-static-libgcc" \ | |
| -D CMAKE_CXX_STANDARD_LIBRARIES="-static-libgcc -static-libstdc++" . | |
| make install | |
| cd ~/src | |
| mkdir /opt/win-python && cd /opt/win-python | |
| wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.11-1-any.pkg.tar.zst | |
| unzstd mingw-w64-x86_64-python-3.12.11-1-any.pkg.tar.zst | |
| tar -xf mingw-w64-x86_64-python-3.12.11-1-any.pkg.tar | |
| cd ~/src | |
| curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable | |
| export PATH="$HOME/.cargo/bin:${PATH}" | |
| rustup target add x86_64-pc-windows-gnu | |
| - name: Build binaries | |
| env: | |
| TERM: xterm | |
| run: | | |
| make binaries \ | |
| CC=clang CC_LINUX=clang CC_WIN=clang CXX=clang++ \ | |
| CXX_LINUX=clang++ CXX_WIN=clang++ \ | |
| AR=llvm-ar AR_LINUX=llvm-ar AR_WIN=llvm-ar | |
| - name: Generate artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: hashcat-${{ matrix.os_name_lowercase }}-cross | |
| path: ${{ env.include_paths }} |