{"id":26201769,"url":"https://github.com/mini2dx/gradle-butler-plugin","last_synced_at":"2025-09-04T00:36:53.914Z","repository":{"id":144611685,"uuid":"58873410","full_name":"mini2Dx/gradle-butler-plugin","owner":"mini2Dx","description":"A gradle plugin for the itch.io butler command line tool","archived":false,"fork":false,"pushed_at":"2022-11-30T20:43:33.000Z","size":180,"stargazers_count":14,"open_issues_count":3,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-22T06:50:39.119Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Groovy","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mini2Dx.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-05-15T16:57:03.000Z","updated_at":"2024-11-21T18:18:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"8feb429b-a4d3-44e4-b63e-474007d43ddf","html_url":"https://github.com/mini2Dx/gradle-butler-plugin","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/mini2Dx/gradle-butler-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mini2Dx%2Fgradle-butler-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mini2Dx%2Fgradle-butler-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mini2Dx%2Fgradle-butler-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mini2Dx%2Fgradle-butler-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mini2Dx","download_url":"https://codeload.github.com/mini2Dx/gradle-butler-plugin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mini2Dx%2Fgradle-butler-plugin/sbom","scorecard":{"id":648266,"data":{"date":"2025-08-11","repo":{"name":"github.com/mini2Dx/gradle-butler-plugin","commit":"42da883d7b429779814385d9f82c8c923e0721f2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/gradle.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":2,"reason":"Found 6/24 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/mini2Dx/gradle-butler-plugin/gradle.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/mini2Dx/gradle-butler-plugin/gradle.yml/master?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 12 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T12:45:20.160Z","repository_id":144611685,"created_at":"2025-08-21T12:45:20.160Z","updated_at":"2025-08-21T12:45:20.160Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273534075,"owners_count":25122635,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-03T02:00:09.631Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-12T03:23:39.700Z","updated_at":"2025-09-04T00:36:53.905Z","avatar_url":"https://github.com/mini2Dx.png","language":"Groovy","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gradle-butler-plugin\n![Continuous Integration](https://github.com/mini2Dx/gradle-butler-plugin/workflows/Continuous%20Integration/badge.svg)\n\nA gradle plugin for automatically installing, updating and running the [itch.io butler command line tool](https://docs.itch.ovh/butler/master/) as part of your build.\n\n\n## How to use\n\nAdd the following buildscript configuration to the top of your `build.gradle`\n\n```gradle\nbuildscript {\n    repositories {\n        mavenLocal()\n        jcenter()\n        mavenCentral()\n    }\n    dependencies {\n        classpath group: 'org.mini2Dx', name: 'butler', version: '2.1.0'\n    }\n}\n```\n\nThen add the plugin configuration to your project.\n\n```gradle\nproject(\":projectName\") {\n   apply plugin: \"org.mini2Dx.butler\"\n\n   ........\n\n   butler {\n      user = \"your-itchio-user\"\n      game = \"your-itchio-game\"\n   }\n}\n```\n\nThen configure tasks with the channels you want to push:\n\n```gradle\nproject(\":projectName\") {\n\n    ........\n\n    task butlerPush(type: org.mini2Dx.butler.task.PushTask) {\n        binDirectory = \"/path/to/game/bin/directory\"\n        channel = \"example\"\n    }\n}\n```\n\nThe plugin will add the following tasks to your project.\n\n| Task  | Description |\n| ------------- | ------------- |\n| butlerUpdate  | Updates butler to latest stable version or installs it if it is not present. All other tasks depend on this task so you do not need to call it explicitly. |\n| butlerLogin  | Calls ```butler login``` |\n| butlerLogout  | Calls ```butler logout``` |\n\nAs well as providing a task template with `org.mini2Dx.butler.task.PushTask` which can be used to create tasks which [push builds](https://docs.itch.ovh/butler/master/pushing.html) using butler.\n\nYou can configure multiple push tasks, only the binDirectory and channel have to be provided for each.\n\n| Push Task Property  | Description |\n| ------------- | ------------- |\n| binDirectory  | (**required**) The directory containing your game's build, which will be pushed by butler |\n| channel  | (**required**) The [channel](https://docs.itch.ovh/butler/master/pushing.html#channel-names) to release your build to |\n\n## Advanced Configuration\n\nThere are several optional configuration parameters available.\n\n| Option  | Type | Default | Description |\n| ------------- | ------------- | ------------- | ------------- |\n| user  | String | _blank_ | (**required**) Your itch.io username |\n| game  | String | _blank_ | (**required**) The itch.io game id |\n| updateButler  | boolean | true | Set to false to disable butler updates |\n| userVersion  | String | null | Set this if you want to override itch.io's version number |\n| allChannelsPostfix  | String | null | Set this to append the given string to every channel name |\n| butlerInstallDirectory  | String | null | Set if you want to override the automatic Butler install directory |\n\nThe following example shows all options in use.\n\n```gradle\nproject(\":projectName\") {\n   apply plugin: \"org.mini2Dx.butler\"\n\n   ........\n\n   butler {\n      user = \"your-itchio-user\"\n      game = \"your-itchio-game\"\n      updateButler = true\n      allChannelsPostfix = \"-beta\"\n      userVersion = project.version\n      butlerInstallDirectory = \"C:\\\\path\\to\\butler\\directory\"\n   }\n}\n```\n\n## Depending on your project build task\nYou will most likely want your `pushTask` to depend on the gradle task that builds your game binaries. This will ensure the project is automatically build when calling the task.\nThis example uses the `build` task, but it might be different for your project configuration.\n\n```gradle\ntask butlerPush(type: org.mini2Dx.butler.task.PushTask) {\n    dependsOn build\n    binDirectory = \"C:\\\\path\\to\\game\\bin\\directory\"\n    channel = \"windows\"\n}\n```\n## Using the butler plugin in a separate gradle script\n\nIf your project uses multiple gradle script files (e.g. LibGDX) then you will be required to add the following block of code in multiple places:\n\n\n```gradle\nbuildscript {\n    repositories {\n        mavenLocal()\n        jcenter()\n        mavenCentral()\n    }\n    dependencies {\n        classpath group: 'org.mini2Dx', name: 'butler', version: '2.1.0'\n    }\n}\n```\n\nFirst it should be added to the highest level build.gradle file as described above. But it must also be added at the beginning of any other gradle scripts in which you want to declare `org.mini2Dx.butler.task.PushTask`'s in order for gradle to recognize the class name. \n\n## Upgrading from version 1.1.3 or earlier\n\nIf you've used the plugin before and are upgrading from 1.1.3 or an earlier version, these steps will help you port your gradle code:\n\n**1. convert any pre-defined channels (windows/osx/linux/anyOs) you used into tasks**\n  * the binDirectory stays the same\n  * the channel name now always needs to be specified explicitly\n  * butlerInstallDirectory is now a property of the \"butler\" config directly\n\nAs an example:\n```gradle\nbutler {\n    ...\n    windows {\n        butlerInstallDirectory = \"C:\\\\path\\to\\butler\\directory\"\n        binDirectory = \"C:\\\\path\\to\\game\\bin\\directory\"\n    }\n}\n```\nThis would need to be changed to the following (note `butlerPushWindows` is an arbitrary name, you can call your task however you like):\n```gradle\nbutler {\n    ...\n    butlerInstallDirectory = \"C:\\\\path\\to\\butler\\directory\"\n}\n\ntask butlerPushWindows(type: org.mini2Dx.butler.task.PushTask) {\n    binDirectory = \"C:\\\\path\\to\\game\\bin\\directory\"\n    channel = \"windows\"\n}\n```\n\n**2. If you want to have just a single task to push multiple channels, you can have a task that depends on the other tasks.**\n\nE.g.\n```gradle\ntask butlerPush() {\n    dependsOn butlerPushWindows, butlerPushOsx, butlerPushLinux, butlerPushAnyOs\n}\n```\n\nGiven those tasks exist, the gradle task \"butlerPush\" will execute them all.\n\n**3. If you've previously made use of the \"alphaChannel\" or \"betaChannel\" property, you can now set the \"allChannelsPostfix\" property to \"-alpha\" or \"-beta\" to achieve the same effect.**\n```gradle\nbutler {\n    ...\n    allChannelsPostfix = \"-alpha\"\n}\n```\n\n**4. If you need to configure a different `butlerInstallDirectory` on different machines, you can use a separate script file that you can keep outside of version control.**\nE.g. like so:\n\n**localproperties.gradle**\n```gradle\next {\n    BUTLER_INSTALL_DIR = '/path/to/butler'\n}\n```\n\n**build.gradle**\n```gradle\napply from: 'localproperties.gradle'\n\n...\n\nbutler {\n    ...\n    butlerInstallDir = BUTLER_INSTALL_DIR\n}\n```\n\n## License\n\nThe code is released under the [MIT License](https://github.com/mini2Dx/gradle-butler-plugin/blob/master/LICENSE).\n\n## Contributing\n\nPull requests are welcome :) Any issues found please add them to the [Issue Tracker](https://github.com/mini2Dx/gradle-butler-plugin/issues).\n\nGradle wrapper is included in the code. The following tools were used for development:\n* Gradle 5.6.4\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmini2dx%2Fgradle-butler-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmini2dx%2Fgradle-butler-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmini2dx%2Fgradle-butler-plugin/lists"}