{"id":16567394,"url":"https://github.com/badgerati/fudge","last_synced_at":"2025-03-21T11:33:10.910Z","repository":{"id":144187136,"uuid":"94368872","full_name":"Badgerati/Fudge","owner":"Badgerati","description":"Fudge is a PowerShell tool to help manage software packages via Chocolatey for specific development projects. Think NPM and Bower, but for Chocolatey","archived":false,"fork":false,"pushed_at":"2019-12-22T17:08:02.000Z","size":200,"stargazers_count":21,"open_issues_count":18,"forks_count":3,"subscribers_count":3,"default_branch":"develop","last_synced_at":"2025-03-18T01:02:24.158Z","etag":null,"topics":["automation","choco","chocofile","chocolatey","devops","install","json","pack","package-manager","powershell","provision","software","windows"],"latest_commit_sha":null,"homepage":null,"language":"PowerShell","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/Badgerati.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-06-14T20:07:09.000Z","updated_at":"2024-04-26T03:38:07.000Z","dependencies_parsed_at":"2023-04-21T17:19:30.576Z","dependency_job_id":null,"html_url":"https://github.com/Badgerati/Fudge","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Badgerati%2FFudge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Badgerati%2FFudge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Badgerati%2FFudge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Badgerati%2FFudge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Badgerati","download_url":"https://codeload.github.com/Badgerati/Fudge/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244791834,"owners_count":20511013,"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","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":["automation","choco","chocofile","chocolatey","devops","install","json","pack","package-manager","powershell","provision","software","windows"],"created_at":"2024-10-11T21:06:29.625Z","updated_at":"2025-03-21T11:33:09.980Z","avatar_url":"https://github.com/Badgerati.png","language":"PowerShell","readme":"# Fudge\n\n[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/Badgerati/Fudge/master/LICENSE.txt)\n[![Build status](https://ci.appveyor.com/api/projects/status/23t545fdqhash4tc/branch/develop?svg=true)](https://ci.appveyor.com/project/Badgerati/fudge/branch/develop)\n\n[![Chocolatey](https://img.shields.io/chocolatey/v/fudge.svg?colorB=a1301c)](https://chocolatey.org/packages/fudge)\n[![Chocolatey](https://img.shields.io/chocolatey/dt/fudge.svg?label=downloads\u0026colorB=a1301c)](https://chocolatey.org/packages/fudge)\n[![NuGet](https://img.shields.io/nuget/v/fudge.svg?colorB=1a1c58)](https://www.nuget.org/packages/fudge/)\n[![NuGet](https://img.shields.io/nuget/dt/fudge.svg?colorB=1a1c58)](https://www.nuget.org/packages/fudge/)\n\nFudge is a PowerShell tool to help manage software packages via [Chocolatey](https://chocolatey.org) for specific development projects. Think NPM and Bower, but for Chocolatey.\n\nIf you find any bugs, or have any feature requests, please raise them in the GitHub issues tab.\n\n* [Installing Fudge](#installing-fudge)\n* [Features](#features)\n* [Description](#description)\n* [Example Fudgefile](#example-fudgefile)\n* [Example Calls](#example-calls)\n* [Bugs and Feature Requests](#bugs-and-feature-requests)\n\n## Installing Fudge\n\nFudge can be installed via [Chocolatey](https://chocolatey.org/packages/fudge):\n\n```powershell\nchoco install fudge\n```\n\nor via [NuGet](https://www.nuget.org/packages/fudge/):\n\n```powershell\nInstall-Package fudge\n```\n\n## Features\n\n* Uses a Fudgefile to control required software\n* Allows you to version control required software to run websites, services and applications\n* Ability to run pre/post install/upgrade/downgrade/uninstall/pack scripts\n* Can separate out developer specific software which aren't needed for certain environments\n* You can reinstall all packages, or just in/un/reinstall all packages\n* Allows you to have multiple nuspecs, which you can then pack one or all of with Fudge\n* See details about packages in a Fudgefile - such as which ones are installed or need upgrading\n* Create empty template Fudgefiles, or create them from nuspec files or local packages\n* Prune the machine to remove packages not in a Fudgefile (except chocolatey/fudge obviously!)\n* Clean a machine of all packages installed (again, except chocolatey/fudge)\n\n## Description\n\nFudge is a PowerShell tool to help manage software packages via Chocolatey for specific development projects. Think NPM and Bower, but for Chocolatey.\n\nFudge uses a `Fudgefile` to control what software to install, upgrade, downgrade or uninstall. You can define specific versions of software or just use the latest version.\nFudge also allows you to separate out specific developer only software - which are only needed for developer/QA environments.\n\nYou can also define pre/post install/upgrade/downgrade/uninstall scripts that need to be run. For example, you could install `redis` and have a `post install` script which sets up REDIS locally.\n\nFudge can also run `choco pack` on your nuspec files; allowing you to have multiple nuspecs and then running `fudge pack website` for example, to pack your `website.nuspec`.\nJust running `fudge pack` will pack everything.\n\n## Example Fudgefile\n\nBelow is an example of what a `Fudgefile` looks like, with all components shown:\n\n```json\n{\n    \"scripts\": {\n        \"pre\": {\n            \"install\": \"\u003ccommand or file-path\u003e\",\n            \"upgrade\": \"\u003ccommand or file-path\u003e\",\n            \"downgrade\": \"\u003ccommand or file-path\u003e\",\n            \"uninstall\": \"\u003ccommand or file-path\u003e\",\n            \"pack\": \"\u003ccommand or file-path\u003e\"\n        },\n        \"post\": {\n            \"install\": \"\u003ccommand or file-path\u003e\",\n            \"upgrade\": \"\u003ccommand or file-path\u003e\",\n            \"downgrade\": \"\u003ccommand or file-path\u003e\",\n            \"uninstall\": \"\u003ccommand or file-path\u003e\",\n            \"pack\": \"\u003ccommand or file-path\u003e\"\n        }\n    },\n    \"source\": \"\u003ccustom sources || blank for chocolatey || use -s arg\u003e\",\n    \"packages\": [\n        { \"name\": \"curl\" },\n        {\n            \"name\": \"nodejs.install\",\n            \"version\": \"6.5.0\",\n            \"source\": \"\u003ccustom source for this package\u003e\",\n            \"params\": \"\u003cpackage parameters for installer\u003e\",\n            \"args\": \"\u003cother arguments you wish to pass\u003e\"\n        }\n    ],\n    \"devPackages\": [\n        { \"name\": \"git.install\" },\n        {\n            \"name\": \"vim\",\n            \"version\": \"7.4.1641\"\n        }\n    ],\n    \"pack\": {\n        \"website\": \"./nuspecs/website.nuspec\",\n        \"service\": \"./nuspecs/service.nuspec\"\n    }\n}\n```\n\nAnd that's it!\n\n### Sections Defined\n\n| Name | Description |\n| ---- | ----------- |\n| scripts | The `scripts` section is optional. Scripts can either be direct PowerShell command like `\"Write-Host 'hello, world!'\"`, or a path to a PowerShell script |\n| packages | These are the main packages that will be installed, upgraded, downgraded or uninstalled |\n| devPackages | These packages will only be touched if the `-dev` switch is specified on the CLI |\n| pack | This is a key-value map of paths to nuspecs files that can be packed via Chocolatey |\n\n## Example Calls\n\nA normal call to Fudge will look as follows, assuming there's a Fudgefile at the current path:\n\n```powershell\nfudge install                   # install one or all packages (one if a package_id is passed)\nfudge upgrade                   # upgrade one or all packages\nfudge downgrade                 # downgrade one or all packages\nfudge uninstall                 # uninstall one or all packages\nfudge reinstall                 # reinstall one or all packages (runs uninstall then install)\nfudge pack \u003cid\u003e                 # pack one or all nuspec files\nfudge list                      # list information about packages in the Fudgefile\nfudge search \u003cid\u003e               # search chocolatey for packages, but results are sorted\nfudge new \u003cpath|local\u003e          # create an empty Fudgefile, or a populated one from a nuspec/local\nfudge renew \u003cnuspec|local\u003e      # restores  fudgefile packages to nuspecs/local or empty\nfudge delete                    # deletes a Fudgefile, with option of uninstalling packages first\nfudge prune                     # uninstalls packages not in a Fudgefile (except choco/fudge)\nfudge clean                     # uninstalls all packages currently installed (except choco/fudge)\nfudge which \u003cid\u003e                # returns the path for a command (ie, 7z: C:\\...\\7z.exe)\nfudge rebuild                   # rebuilds the machine by running \"clean\" then \"install\"\nfudge add \u003cid\u003e                  # adds a new package to the Fudgefile\nfudge remove \u003cid\u003e               # removes a package from the Fudgefile\n```\n\n* To install developer only packages (also works with upgrade/downgrade/uninstall/reinstall):\n\n```powershell\nfudge install -dev              # this will install from packages and devPackages\nfudge install -devOnly          # this will only install from the devPackages\n```\n\n* To only install one of the packages in the Fudgefile (also works with upgrade/downgrade/uninstall/reinstall):\n\n```powershell\nfudge install 7zip\nfudge install 7zip -ad          # will adhoc install 7zip without checking Fudgefile\n```\n\n* To pack one or all of your nuspec files:\n\n```powershell\nfudge pack\nfudge pack website\n```\n\n* To list information about packages in the Fudgefile (such as are they installed, etc):\n\n```powershell\nfudge list\nfudge list checksum\nfudge list -dev\n```\n\n* To search chocolatey for packages. The results returned are sorted so what you're looking for will be at (or close to) the top\n\n```powershell\nfudge search checksum\nfudge search git -l 20          # -l limits the results displayed, default is 10 (0 is everything)\n```\n\n* To create a new empty Fudgefile, or one from a nuspec:\n\n```powershell\nfudge new                       # creates a new empty template Fudgefile at the current path\nfudge new \u003cnuspec_path\u003e         # creates a new template Fudgefile, with packages/pack populated\nfudge new -fp './custom'        # creates a new Fudgefile, but with a custom name\nfudge new \u003cnuspec_path\u003e -i      # create new template from a nuspec, then installs the packages\nfudge new local                 # creates a new Fudgefile using the packages currently installed\n```\n\n* To delete a Fudgefile:\n\n```powershell\nfudge delete                    # delete the default Fudgefile at the current path\nfudge delete -fp './custom'     # delete a custom Fudgefile\nfudge delete -u                 # delete the Fudgefile, but first uninstall the packages\n```\n\n* To prune a machine of unneeded packages:\n\n```powershell\nfudge prune                     # prunes the machine using the default Fudgefile\nfudge prune -fp './custum'      # prunes the machine using a custom Fudgefile\nfudge prune -d                  # pruning now also respects the devPackages\n```\n\n* To clean a machine of all packages:\n\n```powershell\nfudge clean                     # cleans the machine of all packages installed\n```\n\n* To find out where a command is running from on your machine:\n\n```powershell\nfudge which 7z                  # returns the path for the 7z command\n```\n\n* To rebuild a machine:\n\n```powershell\nfudge rebuild                   # rebuild the machine using the default Fudgefile\nfudge rebuild -fp './custum'    # rebuild the machine using a custom Fudgefile\nfudge rebuild -d                # rebuilding now also respects the devPackages\n```\n\n* To add a new package to a Fudgefile:\n\n```powershell\nfudge add curl                  # adds the curl package to the Fudgefile\nfudge add curl@7.57.0 -i        # adds curl v7.57.0 to the Fudgefile, and installs curl\nfudge add curl -d               # adds curl to the devPackages\n```\n\n* To remove a new package from a Fudgefile:\n\n```powershell\nfudge remove curl               # removes the curl package from the Fudgefile\nfudge remove curl -u            # removes curl from the Fudgefile, and uninstalls curl\nfudge remove curl -d            # removes curl from the devPackages\n```\n\n## Bugs and Feature Requests\n\nFor any bugs you may find or features you wish to request, please create an [issue](https://github.com/Badgerati/Fudge/issues \"Issues\") in GitHub.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbadgerati%2Ffudge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbadgerati%2Ffudge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbadgerati%2Ffudge/lists"}