Skip to content

Conversation

@N6REJ
Copy link
Contributor

@N6REJ N6REJ commented Nov 15, 2025

PR Type

Enhancement, Documentation


Description

  • Migrated build system from Ant to pure Gradle

  • Added comprehensive Gradle documentation suite

  • Implemented modules-untouched integration for automatic binary downloads

  • Removed legacy Ant build.xml configuration


Diagram Walkthrough

flowchart LR
  A["Ant build.xml"] -->|replaced| B["Gradle build system"]
  B --> C["build.gradle"]
  B --> D["gradle.properties"]
  B --> E["build.properties"]
  C --> F["Helper Functions"]
  C --> G["Task API"]
  F --> H["modules-untouched Integration"]
  G --> I["release Task"]
  G --> J["releaseAll Task"]
  I --> K["Archive Generation"]
  K --> L["Hash Files"]
  M["Documentation"] --> N[".gradle-docs/"]
  N --> O["README.md"]
  N --> P["TASKS.md"]
  N --> Q["CONFIGURATION.md"]
  N --> R["API.md"]
Loading

File Walkthrough

Relevant files
Documentation
API.md
API reference documentation for build system                         

.gradle-docs/API.md

  • Comprehensive API reference for build script functions and extension
    points
  • Documents helper functions like findPerlDirectory(),
    find7ZipExecutable(), downloadFromModulesUntouched()
  • Includes properties API, task API, file operations, exec API, and
    logger API
  • Provides practical examples for custom task creation and version
    processing
+668/-0 
CONFIGURATION.md
Configuration guide and reference documentation                   

.gradle-docs/CONFIGURATION.md

  • Complete configuration guide for build properties and Gradle settings
  • Documents all configuration files: build.properties,
    gradle.properties, settings.gradle
  • Details environment variables like BEARSAMPP_BUILD_PATH and 7Z_HOME
  • Includes directory structure, version configuration, and best
    practices
+725/-0 
INDEX.md
Documentation index and quick reference                                   

.gradle-docs/INDEX.md

  • Documentation index and quick reference guide
  • Provides navigation between all documentation files
  • Lists essential commands, files, and directories
  • Includes support and troubleshooting links
+110/-0 
README.md
Main Gradle build documentation                                                   

.gradle-docs/README.md

  • Main Gradle build documentation with overview and quick start
  • Describes build process flow and modules-untouched integration
  • Details directory structure and packaging architecture
  • Includes troubleshooting guide for common issues
+469/-0 
TASKS.md
Gradle tasks reference and usage guide                                     

.gradle-docs/TASKS.md

  • Complete reference for all Gradle tasks with usage examples
  • Documents core tasks: release, releaseAll, clean
  • Documents verification tasks: verify, validateProperties
  • Documents information tasks: info, listVersions, listReleases,
    checkModulesUntouched
+655/-0 
README.md
Updated README with Gradle build information                         

README.md

  • Updated main README with Gradle build system information
  • Added quick start commands and prerequisites table
  • Added available tasks table with descriptions
  • Added links to comprehensive Gradle documentation in .gradle-docs/
+59/-2   
Enhancement
build.xml
Removed legacy Ant build configuration                                     

build.xml

  • Removed legacy Ant build configuration file
  • Replaced by pure Gradle build system
+0/-35   
Configuration changes
gradle.properties
Gradle properties configuration file                                         

gradle.properties

  • New Gradle-specific configuration file
  • Enables Gradle daemon, parallel execution, and build caching
  • Configures JVM settings with 2GB heap and metaspace limits
  • Sets console output and warning modes for better visibility
+19/-0   

@N6REJ N6REJ added the enhancement ✨ Improve program label Nov 15, 2025
@qodo-code-review
Copy link

qodo-code-review bot commented Nov 15, 2025

PR Compliance Guide 🔍

(Compliance updated until commit fde204a)

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🟢
Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status:
No audit logs: The new documentation describes tasks and helper functions but does not demonstrate
logging of critical security-relevant actions (downloads, extractions, releases) with user
identity and outcomes, making audit coverage unclear.

Referred Code
println "Downloaded: ${archive}"

Throws: RuntimeException if download fails


downloadAndExtractPerl(String version)

Download and extract Perl binaries, returning the directory containing perl.exe.

Parameters:

  • version (String): Perl version to download and extract

Returns: File - Directory containing perl.exe

Description:

  • Downloads archive from modules-untouched
  • Extracts to bearsampp-build/tmp/extract/perl/{version}/
  • Searches for perl.exe in extracted files
  • Returns directory containing perl.exe

... (clipped 10 lines)


</details>

> Learn more about managing compliance <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#configuration-options'>generic rules</a> or creating your own <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#custom-compliance'>custom rules</a>
</details></td></tr>
<tr><td><details>
<summary><strong>Generic: Robust Error Handling and Edge Case Management</strong></summary><br>

**Objective:** Ensure comprehensive error handling that provides meaningful context and graceful <br>degradation<br>

**Status:** <br><a href='https://github.com/Bearsampp/module-perl/pull/9/files#diff-2882908f3aeed61d657698338c698f94281febf60dc07c94656ccf5370f92497R507-R548'><strong>Error handling docs</strong></a>: Examples show generic RuntimeException throws and minimal catch/log messaging without <br>explicit edge-case validation details for inputs (e.g., versions, URLs), leaving <br>robustness uncertain in the actual implementation.<br>
<details open><summary>Referred Code</summary>

```markdown

### Throwing Exceptions

Use RuntimeException for build failures:

**Example**:
```groovy
tasks.register('validateVersion') {
    doLast {
        def version = project.findProperty('bundleVersion')
        if (!version) {
            throw new RuntimeException('bundleVersion property is required')
        }

        def versionDir = file("bin/perl${version}")
        if (!versionDir.exists()) {
            throw new RuntimeException("Version directory not found: ${versionDir}")
        }
    }
}

... (clipped 21 lines)


</details>

> Learn more about managing compliance <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#configuration-options'>generic rules</a> or creating your own <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#custom-compliance'>custom rules</a>
</details></td></tr>
<tr><td><details>
<summary><strong>Generic: Security-First Input Validation and Data Handling</strong></summary><br>

**Objective:** Ensure all data inputs are validated, sanitized, and handled securely to prevent <br>vulnerabilities<br>

**Status:** <br><a href='https://github.com/Bearsampp/module-perl/pull/9/files#diff-2882908f3aeed61d657698338c698f94281febf60dc07c94656ccf5370f92497R112-R166'><strong>URL/input validation</strong></a>: Documentation shows downloading from external URLs and executing external tools without <br>explicit input validation or sanitization steps for version strings and paths, so security <br>controls cannot be confirmed from the diff.<br>
<details open><summary>Referred Code</summary>

```markdown

### `downloadFromModulesUntouched(String version)`

Download Perl binaries from modules-untouched repository.

**Parameters**:
- `version` (String): Perl version to download (e.g., "5.40.0")

**Returns**: File - Downloaded archive file

**Description**:
- Fetches perl.properties to get download URL
- Falls back to standard URL pattern if not found
- Downloads to `bearsampp-build/tmp/downloads/perl/`
- Uses cached file if already downloaded

**URL Pattern** (fallback):

https://github.com/Bearsampp/modules-untouched/releases/download/perl-{version}/perl-{version}-win64.7z




 ... (clipped 34 lines)

Learn more about managing compliance generic rules or creating your own custom rules

Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

Previous compliance checks

Compliance check up to commit cdca3e5
Security Compliance
Untrusted tool execution

Description: Relying on the external 7-Zip executable from PATH or an unconstrained 7Z_HOME introduces
supply-chain/path-hijack risk where a malicious 7z binary could be executed during builds,
potentially compromising the build output and developer machine.
README.md [20-21]

Referred Code
- 7-Zip installed and available in PATH or via `7Z_HOME` when using `bundle.format=7z`
Insecure build path override

Description: Allowing override of the build output path via environment variable BEARSAMPP_BUILD_PATH
without guidance on secure, controlled locations can cause builds to write artifacts and
temporary files to unintended or shared paths, risking tampering or data leakage.
README.md [31-34]

Referred Code
- You can override with:
  - `build.path` in `build.properties`, or
  - Environment variable `BEARSAMPP_BUILD_PATH`
Sensitive information exposure

Description: Enabling JVM heap dumps on OOM (HeapDumpOnOutOfMemoryError) can write memory dumps
containing sensitive data to disk without specifying a secure directory or access
controls, risking sensitive information exposure on developer machines or CI agents.
gradle.properties [9-9]

Referred Code
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🟢
Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status:
No runtime logs: The PR only adds build documentation and Gradle properties without any application code
that could implement or affect audit logging of critical actions.

Referred Code
## Build (Gradle)

The build system has been modernized to align with the Bruno module and now writes artifacts to the shared bearsampp-build directory instead of the local project build/ folder.
Additionally, Gradle's own temporary `build/` directory is relocated to the shared tmp area so nothing is written under the module folder during builds.

Prerequisites:
- Java 8+
- Gradle (wrapper or system Gradle)
- 7-Zip installed and available in PATH or via `7Z_HOME` when using `bundle.format=7z`

Build properties are defined in `build.properties`:
- `bundle.name` (e.g., `perl`)
- `bundle.release` (e.g., `2025.4.26`)
- `bundle.type` (e.g., `tools`)
- `bundle.format` (`7z` or `zip`)
- Optional: `build.path` to override the default build root

Build output location:
- Default root: `<repo-root>/../bearsampp-build`
- You can override with:
  - `build.path` in `build.properties`, or


 ... (clipped 21 lines)

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status:
No error paths: The changes are configuration and documentation only, providing no new code paths where
runtime errors or edge cases are handled or mishandled.

Referred Code
# Gradle Build Properties for Bearsampp Module Perl

# Gradle daemon configuration
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true

# JVM settings for Gradle
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError

# Configure console output
org.gradle.console=auto
org.gradle.warning.mode=all

# Build performance
org.gradle.configureondemand=false

# Gradle version compatibility
# This project is compatible with Gradle 7.0+

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status:
No user errors: The PR introduces no user-facing error handling changes; only documentation and Gradle
settings are added, so secure error messaging cannot be assessed from this diff.

Referred Code
## Build (Gradle)

The build system has been modernized to align with the Bruno module and now writes artifacts to the shared bearsampp-build directory instead of the local project build/ folder.
Additionally, Gradle's own temporary `build/` directory is relocated to the shared tmp area so nothing is written under the module folder during builds.

Prerequisites:
- Java 8+
- Gradle (wrapper or system Gradle)
- 7-Zip installed and available in PATH or via `7Z_HOME` when using `bundle.format=7z`

Build properties are defined in `build.properties`:
- `bundle.name` (e.g., `perl`)
- `bundle.release` (e.g., `2025.4.26`)
- `bundle.type` (e.g., `tools`)
- `bundle.format` (`7z` or `zip`)
- Optional: `build.path` to override the default build root

Build output location:
- Default root: `<repo-root>/../bearsampp-build`
- You can override with:
  - `build.path` in `build.properties`, or


 ... (clipped 21 lines)

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status:
No logging changes: No application logging code is introduced; the diff does not reveal whether sensitive data
might be logged elsewhere or whether structured logging is used.

Referred Code
# Gradle Build Properties for Bearsampp Module Perl

# Gradle daemon configuration
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true

# JVM settings for Gradle
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError

# Configure console output
org.gradle.console=auto
org.gradle.warning.mode=all

# Build performance
org.gradle.configureondemand=false

# Gradle version compatibility
# This project is compatible with Gradle 7.0+

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status:
No input handling: The PR contains build docs and Gradle configuration only, with no new input processing or
data handling code to assess for validation or secure handling.

Referred Code
## Build (Gradle)

The build system has been modernized to align with the Bruno module and now writes artifacts to the shared bearsampp-build directory instead of the local project build/ folder.
Additionally, Gradle's own temporary `build/` directory is relocated to the shared tmp area so nothing is written under the module folder during builds.

Prerequisites:
- Java 8+
- Gradle (wrapper or system Gradle)
- 7-Zip installed and available in PATH or via `7Z_HOME` when using `bundle.format=7z`

Build properties are defined in `build.properties`:
- `bundle.name` (e.g., `perl`)
- `bundle.release` (e.g., `2025.4.26`)
- `bundle.type` (e.g., `tools`)
- `bundle.format` (`7z` or `zip`)
- Optional: `build.path` to override the default build root

Build output location:
- Default root: `<repo-root>/../bearsampp-build`
- You can override with:
  - `build.path` in `build.properties`, or


 ... (clipped 21 lines)

Learn more about managing compliance generic rules or creating your own custom rules

@qodo-code-review
Copy link

qodo-code-review bot commented Nov 15, 2025

PR Code Suggestions ✨

Latest suggestions up to fde204a

CategorySuggestion                                                                                                                                    Impact
General
Relax JAVA_HOME requirement wording

Update the documentation to state that JAVA_HOME is "Recommended" rather than
"Required". This is because Gradle can find Java if it's available on the
system's PATH, even without JAVA_HOME being set.

.gradle-docs/CONFIGURATION.md [303-309]

 ### `JAVA_HOME`
 
 **Description**: Path to Java installation directory
 
 **Type**: String (directory path)
 
-**Required**: Yes (usually set by Java installer)
+**Required**: Recommended (required if Java isn't available on PATH)
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly points out that JAVA_HOME is not always strictly required if the java executable is in the system's PATH. Changing the wording from "Required: Yes" to "Recommended" makes the documentation more accurate for a wider range of development environments.

Low
Fix inconsistent Gradle version requirement

Align the Gradle version requirement in the documentation. The file states
Gradle 8.0+ is needed, while gradle.properties mentions compatibility with 7.0+.

.gradle-docs/README.md [44-45]

 | **Java**          | 8+            | Required for Gradle execution            |
-| **Gradle**        | 8.0+          | Build automation tool                    |
+| **Gradle**        | 7.0+          | Build automation tool                    |
  • Apply / Chat
Suggestion importance[1-10]: 5

__

Why: The suggestion correctly identifies an inconsistency in the required Gradle version between .gradle-docs/README.md (8.0+) and gradle.properties (7.0+), which could confuse users. Aligning the documentation improves its accuracy and reliability.

Low
Align minimum Gradle version in README

Align the minimum Gradle version requirement in the README.md. The file states
Gradle 8.0+ is needed, while gradle.properties mentions compatibility with 7.0+.

README.md [41-42]

 | **Java**          | 8+            | Required for Gradle execution            |
-| **Gradle**        | 8.0+          | Build automation tool                    |
+| **Gradle**        | 7.0+          | Build automation tool                    |
  • Apply / Chat
Suggestion importance[1-10]: 5

__

Why: The suggestion correctly identifies an inconsistency in the required Gradle version between the root README.md (8.0+) and gradle.properties (7.0+). Aligning the documentation improves its accuracy and prevents user confusion.

Low
  • More

Previous suggestions

Suggestions up to commit 363514e
CategorySuggestion                                                                                                                                    Impact
General
Align CLI property naming

Correct the Gradle command-line property from -PbundleVersion to
-Pbundle.version to match the naming convention used in build.properties.

README.md [52]

-- Build a specific version: `gradle release -PbundleVersion=5.40.0`
+- Build a specific version: `gradle release -Pbundle.version=5.40.0` (property name aligns with `build.properties` keys)
Suggestion importance[1-10]: 8

__

Why: The suggestion corrects a likely error in the example command by aligning the property name bundleVersion with the bundle.version convention used elsewhere, preventing a non-functional command.

Medium
Specify minimum Gradle version

Specify the minimum required Gradle version (7.0+) in the README.md and add a
command for users to verify their local version.

README.md [22]

-- Gradle (system Gradle only; do not use Gradle wrapper in this repository)
+- Gradle (system Gradle only; do not use Gradle wrapper in this repository) — minimum version: 7.0+
+- Verify your Gradle version: `gradle --version` (ensure Gradle >= 7.0)
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly identifies that the README.md is missing the minimum required Gradle version, which is specified as 7.0+ in gradle.properties, improving documentation clarity and preventing potential build failures.

Low
Clarify cross-platform 7-Zip requirements

Clarify the 7-Zip executable name for different operating systems (e.g., 7z.exe
for Windows, 7z for macOS/Linux) in the README.md.

README.md [23]

-- 7-Zip installed and available in PATH or via `7Z_HOME` when using `bundle.format=7z`
+- 7-Zip installed and available in PATH (Windows: `7z.exe`, macOS/Linux: `7z`) or specify its location via `7Z_HOME` (path to directory containing the executable) when using `bundle.format=7z`.
Suggestion importance[1-10]: 5

__

Why: This is a good documentation improvement that clarifies the 7-Zip executable name for different operating systems, which helps prevent setup issues for non-Windows users.

Low
Suggestions up to commit cdca3e5
CategorySuggestion                                                                                                                                    Impact
High-level
PR is missing core build scripts

The suggestion points out that the PR is fundamentally incomplete because it
lacks the core Gradle build scripts (build.gradle, settings.gradle) required to
implement the documented build system.

Examples:

README.md [41-48]
Common tasks:
- List tasks: `gradle tasks`
- Show build info: `gradle info`
- Verify environment: `gradle verify`
- List available versions from `bin/` and `bin/archived/`: `gradle listVersions`
- Build a specific version: `gradle release -PbundleVersion=5.40.0`
- Build all available versions in `bin*/`: `gradle releaseAll`
- Clean Gradle project artifacts: `gradle clean`

Solution Walkthrough:

Before:

// PR only contains documentation and configuration files.
// File: README.md
// ...
// Common tasks:
// - List tasks: `gradle tasks`
// - Build a specific version: `gradle release -PbundleVersion=5.40.0`
// ...

// File: gradle.properties
// org.gradle.daemon=true
// ...

// Missing: build.gradle, settings.gradle, etc.

After:

// The PR should include the actual build scripts.
// File: build.gradle (conceptual)

// Load properties from build.properties

task verify {
  // Implementation for environment verification
}

task release {
  // Implementation for building a release artifact
}

task releaseAll {
  // Implementation for building all versions
}
Suggestion importance[1-10]: 10

__

Why: The suggestion correctly identifies a critical flaw: the core Gradle build scripts are missing, making the PR incomplete and the described functionality non-existent.

High
General
Correct misleading build performance comment

Correct the misleading comment for org.gradle.configureondemand=false to
accurately reflect that it disables a performance feature for stability, rather
than enabling one.

gradle.properties [15-16]

-# Build performance
+# Disable configure-on-demand for build stability, as it's an incubating feature.
+# This is the default, but we set it explicitly to ensure consistent behavior.
 org.gradle.configureondemand=false
Suggestion importance[1-10]: 4

__

Why: The suggestion correctly identifies that the comment # Build performance is misleading for org.gradle.configureondemand=false, as this setting disables a performance feature, and the proposed change improves clarity.

Low

@qodo-code-review
Copy link

qodo-code-review bot commented Nov 16, 2025

PR Reviewer Guide 🔍

(Review updated until commit fde204a)

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
🧪 No relevant tests
🔒 Security concerns

Weak hash algorithms:
The docs promote generating MD5 and SHA-1 hashes in addition to SHA-256/512. While not a direct vulnerability, it can encourage reliance on deprecated hashes. Prefer SHA-256/512 and mark MD5/SHA-1 as legacy/optional.

⚡ Recommended focus areas for review

Accuracy

Several code examples invoke tasks and helper functions (e.g., calling another task’s actions directly, use of Ant zip) that may not reflect the actual implemented Gradle tasks or available APIs in this repo. Validate that every referenced task/helper exists and that demonstrated patterns are recommended for Gradle 7/8.

tasks.register('customRelease') {
    group = 'build'
    description = 'Custom release with additional processing'

    doLast {
        def version = project.findProperty('bundleVersion')

        // Use helper functions
        def perlDir = findPerlDirectory(file("bin/perl${version}"))

        // Custom processing
        println "Custom processing for ${version}"

        // Call standard release logic
        tasks.getByName('release').actions.each { it.execute(tasks.getByName('release')) }
    }
}

</details>

<details><summary><a href='https://github.com/Bearsampp/module-perl/pull/9/files#diff-964df91d9863f52c526c4793242b7b3fa5087dd9a6eb692d6c947080c719f921R41-R47'><strong>Version Requirements</strong></a>

Prerequisites state Java 8+ and Gradle 8.x+, while gradle.properties comments say “Gradle 7.0+”. Ensure a single, correct minimum version is documented to prevent user confusion.
</summary>

```markdown

| Requirement       | Version       | Purpose                                  |
|-------------------|---------------|------------------------------------------|
| **Java**          | 8+            | Required for Gradle execution            |
| **Gradle**        | 8.0+          | Build automation tool                    |
| **7-Zip**         | Latest        | Archive compression (when using 7z format) |

Security/Integrity

Documentation recommends generating MD5 and SHA-1 alongside SHA-256/512. Consider discouraging weak hashes and focusing on SHA-256/512 to avoid implying MD5/SHA-1 are sufficient for integrity/security checks.

- Generates MD5, SHA-1, SHA-256, and SHA-512 hashes
- Creates sidecar files with `.md5`, `.sha1`, `.sha256`, `.sha512` extensions
- Hash file format: `{hash} {filename}\n`

**Generated Files**:
- `{file}.md5`
- `{file}.sha1`
- `{file}.sha256`
- `{file}.sha512`

**Example**:
```groovy
def archive = file("bearsampp-perl-5.40.0-2025.4.26.7z")
generateHashFiles(archive)
// Creates:
//   bearsampp-perl-5.40.0-2025.4.26.7z.md5
//   bearsampp-perl-5.40.0-2025.4.26.7z.sha1
//   bearsampp-perl-5.40.0-2025.4.26.7z.sha256
//   bearsampp-perl-5.40.0-2025.4.26.7z.sha512

Throws: RuntimeException if file not found


</details>

</td></tr>
</table>

@jwaisner jwaisner merged commit a631ac8 into main Nov 19, 2025
1 check passed
@jwaisner jwaisner deleted the gradle-convert branch November 19, 2025 03:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement ✨ Improve program

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants