├── .editorconfig ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug-report.yml │ ├── config.yml │ ├── hash-error.yml │ └── package-request.yml ├── pull_request_template.md └── workflows │ ├── ci.yml │ ├── excavator.yml │ ├── issue_comment.yml │ ├── issues.yml │ └── pull_request.yml ├── .gitignore ├── .markdownlint.json ├── .vscode ├── extensions.json └── settings.json ├── LICENSE ├── README.md ├── Scoop-Bucket.Tests.ps1 ├── bin ├── auto-pr.ps1 ├── checkhashes.ps1 ├── checkurls.ps1 ├── checkver.ps1 ├── formatjson.ps1 ├── missing-checkver.ps1 └── test.ps1 ├── bucket └── app-name.json.template ├── deprecated └── .gitkeep └── scripts └── .gitkeep /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig (is awesome): http://EditorConfig.org 2 | 3 | # * top-most EditorConfig file 4 | root = true 5 | 6 | # default style settings 7 | [*] 8 | charset = utf-8 9 | end_of_line = crlf 10 | indent_size = 4 11 | indent_style = space 12 | insert_final_newline = true 13 | trim_trailing_whitespace = true 14 | 15 | [*.{yml,yaml}] 16 | indent_size = 2 17 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Since Scoop is a Windows-only tool, we can safely use CRLF line endings for all text files. 2 | # If Git decides that the content is text, its line endings will be normalized to CRLF in the working tree on checkout. 3 | # In the Git index/repository the files will always be stored with LF line endings. This is fine. 4 | * text=auto eol=crlf 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.yml: -------------------------------------------------------------------------------- 1 | name: 🐛 Bug Report 2 | description: Open an issue about a bug that needs fixing. 3 | title: "[Bug]: " 4 | labels: ["bug"] 5 | body: 6 | - type: checkboxes 7 | attributes: 8 | label: Prerequisites 9 | options: 10 | - label: I have written a descriptive issue title. 11 | required: true 12 | - label: I have searched all issues/PRs to ensure it has not already been reported or fixed. 13 | required: true 14 | - label: I have verified that I am using the latest version of Scoop and corresponding bucket. 15 | required: true 16 | - type: input 17 | attributes: 18 | label: Package Name 19 | description: Name of package (install name) which has bug(s) 20 | placeholder: e.g. 7zip (not '7-Zip') 21 | validations: 22 | required: true 23 | - type: textarea 24 | attributes: 25 | label: Expected/Current Behaviour 26 | description: A clear and concise description of what you expected to happen and what actually happen. 27 | placeholder: I am experiencing a problem with X. I think Y should be happening but Z is actually happening. 28 | validations: 29 | required: true 30 | - type: textarea 31 | attributes: 32 | label: Steps to Reproduce 33 | description: List of steps, sample code or failing test that reproduces the behavior. 34 | render: console 35 | placeholder: | 36 | PS> scoop install tests/meson 37 | Installing 'meson' (0.61.1) [64bit] 38 | Loading meson-0.61.1-64.msi from cache. 39 | Checking hash of meson-0.61.1-64.msi ... ok. 40 | Extracting meson-0.61.1-64.msi ... done. 41 | Running installer script... 42 | Linking D:\Scoop\apps\meson\current => D:\Scoop\apps\meson\0.61.1 43 | Creating shim for 'meson'. 44 | Can't shim 'meson.exe': File doesn't exist. 45 | validations: 46 | required: true 47 | - type: textarea 48 | attributes: 49 | label: Possible Solution 50 | description: Do you have some suggestions on a fix for the bug? 51 | placeholder: I am experiencing a problem with X. I think Y should be happening but Z is actually happening. 52 | validations: 53 | required: true 54 | - type: textarea 55 | attributes: 56 | label: Scoop and Buckets Version 57 | description: Paste verbatim output from `scoop --version` below. 58 | render: console 59 | placeholder: | 60 | PS> scoop --version 61 | Current Scoop version: 62 | c60df9cd (HEAD -> develop, origin/develop) docs(changelog): Prepare for version 0.3.1 (#5248) 63 | 64 | 'extras' bucket: 65 | ea314b213 (HEAD -> master, origin/master, origin/HEAD) lazygit: Update to version 0.36.0 66 | 67 | 'main' bucket: 68 | c6e688d4d (HEAD -> master, origin/master, origin/HEAD) x265: Update to version 3.5+68-40e37bc 69 | validations: 70 | required: true 71 | - type: textarea 72 | attributes: 73 | label: Scoop Config 74 | description: Paste verbatim output from `scoop config` below. 75 | render: console 76 | placeholder: | 77 | PS> scoop config 78 | 79 | last_update : 2022/11/14 22:05:50 80 | scoop_repo : https://github.com/ScoopInstaller/Scoop 81 | scoop_branch : develop 82 | use_lessmsi : True 83 | aria2-enabled : True 84 | aria2-warning-enabled : False 85 | validations: 86 | required: true 87 | - type: textarea 88 | attributes: 89 | label: PowerShell Version 90 | description: Paste verbatim output from `$PSVersionTable` below. 91 | render: console 92 | placeholder: | 93 | PS> $PSVersionTable 94 | 95 | Name Value 96 | ---- ----- 97 | PSVersion 7.3.0 98 | PSEdition Core 99 | GitCommitId 7.3.0 100 | OS Microsoft Windows 10.0.25236 101 | Platform Win32NT 102 | PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…} 103 | PSRemotingProtocolVersion 2.3 104 | SerializationVersion 1.1.0.1 105 | WSManStackVersion 3.0 106 | validations: 107 | required: true 108 | - type: textarea 109 | attributes: 110 | label: Additional Softwares 111 | description: List any additional software that you are using and may be related to this bug. 112 | validations: 113 | required: false 114 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: Scoop Community Support 4 | url: https://github.com/ScoopInstaller/Scoop/discussions 5 | about: Please ask Scoop related questions here. 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/hash-error.yml: -------------------------------------------------------------------------------- 1 | name: 🔢 Hash Error 2 | description: Open an issue about a package's hash is incorrect. 3 | labels: ["bug"] 4 | body: 5 | - type: checkboxes 6 | attributes: 7 | label: Prerequisites 8 | options: 9 | - label: I have used the predefined issue title. (e.g. "xxx@xxx: hash check failed") 10 | required: true 11 | - label: I have verified that I am using the latest version of Scoop and corresponding bucket. 12 | required: true 13 | - type: input 14 | attributes: 15 | label: Package Name and Version 16 | description: Name and version of package (install name) which has incorrect hash. 17 | placeholder: e.g. 7zip@21.00 (not '7-Zip') 18 | validations: 19 | required: true 20 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/package-request.yml: -------------------------------------------------------------------------------- 1 | name: 📦 Package Request 2 | description: Open an issue about a missing package. 3 | title: "[Request]: " 4 | labels: ["package-request"] 5 | body: 6 | - type: checkboxes 7 | attributes: 8 | label: Prerequisites 9 | options: 10 | - label: I have searched all issues/PRs to ensure it has not already been reported or fixed. 11 | required: true 12 | - type: checkboxes 13 | attributes: 14 | label: Criteria 15 | description: For a package to be acceptable in this bucket, it should be 16 | options: 17 | - label: Criteria 1 18 | required: true 19 | - label: Criteria 2 20 | required: true 21 | - label: Criteria 3 22 | required: true 23 | - type: input 24 | attributes: 25 | label: Name 26 | description: Name of the package 27 | validations: 28 | required: true 29 | - type: input 30 | attributes: 31 | label: Description 32 | description: Clear and concise details of what it is 33 | validations: 34 | required: true 35 | - type: input 36 | attributes: 37 | label: Homepage 38 | description: URI of the package's homepage 39 | validations: 40 | required: true 41 | - type: input 42 | attributes: 43 | label: Download Link(s) 44 | description: URI(s) of the package's download(s) 45 | validations: 46 | required: true 47 | - type: textarea 48 | attributes: 49 | label: Some Indication of Popularity/Repute 50 | description: GitHub stars/software reviews etc. 51 | validations: 52 | required: true 53 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | Closes #XXXX 12 | 13 | Relates to #XXXX 14 | 15 | - [ ] I have read the [Contributing Guide](https://github.com/ScoopInstaller/.github/blob/main/.github/CONTRIBUTING.md). 16 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Tests 2 | 3 | on: 4 | push: 5 | branches: 6 | - 'main' 7 | - 'master' 8 | pull_request: 9 | workflow_dispatch: 10 | 11 | jobs: 12 | test_powershell: 13 | name: WindowsPowerShell 14 | runs-on: windows-latest 15 | steps: 16 | - name: Checkout Bucket 17 | uses: actions/checkout@main 18 | with: 19 | fetch-depth: 2 20 | path: my_bucket 21 | - name: Checkout Scoop 22 | uses: actions/checkout@main 23 | with: 24 | repository: ScoopInstaller/Scoop 25 | path: scoop_core 26 | - name: Init Test Suite 27 | uses: potatoqualitee/psmodulecache@v5.1 28 | with: 29 | modules-to-cache: BuildHelpers 30 | shell: powershell 31 | - name: Test Bucket 32 | shell: powershell 33 | run: | 34 | $env:SCOOP_HOME="$(Convert-Path '.\scoop_core')" 35 | .\my_bucket\bin\test.ps1 36 | test_pwsh: 37 | name: PowerShell 38 | runs-on: windows-latest 39 | steps: 40 | - name: Checkout Bucket 41 | uses: actions/checkout@main 42 | with: 43 | fetch-depth: 2 44 | path: my_bucket 45 | - name: Checkout Scoop 46 | uses: actions/checkout@main 47 | with: 48 | repository: ScoopInstaller/Scoop 49 | path: scoop_core 50 | - name: Init Test Suite 51 | uses: potatoqualitee/psmodulecache@v5.1 52 | with: 53 | modules-to-cache: BuildHelpers 54 | shell: pwsh 55 | - name: Test Bucket 56 | shell: pwsh 57 | run: | 58 | $env:SCOOP_HOME="$(Convert-Path '.\scoop_core')" 59 | .\my_bucket\bin\test.ps1 60 | -------------------------------------------------------------------------------- /.github/workflows/excavator.yml: -------------------------------------------------------------------------------- 1 | on: 2 | workflow_dispatch: 3 | schedule: 4 | # run every 4 hours 5 | - cron: '20 */4 * * *' 6 | name: Excavator 7 | jobs: 8 | excavate: 9 | name: Excavate 10 | runs-on: windows-latest 11 | steps: 12 | - uses: actions/checkout@main 13 | - name: Excavate 14 | uses: ScoopInstaller/GithubActions@main 15 | env: 16 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 17 | SKIP_UPDATED: 1 18 | -------------------------------------------------------------------------------- /.github/workflows/issue_comment.yml: -------------------------------------------------------------------------------- 1 | on: 2 | issue_comment: 3 | types: [created] 4 | name: Commented Pull Request 5 | jobs: 6 | pullRequestHandler: 7 | name: PullRequestHandler 8 | runs-on: windows-latest 9 | steps: 10 | - uses: actions/checkout@main 11 | - name: PullRequestHandler 12 | uses: ScoopInstaller/GithubActions@main 13 | if: startsWith(github.event.comment.body, '/verify') 14 | env: 15 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 16 | -------------------------------------------------------------------------------- /.github/workflows/issues.yml: -------------------------------------------------------------------------------- 1 | on: 2 | issues: 3 | types: [opened, labeled] 4 | name: Issues 5 | jobs: 6 | issueHandler: 7 | name: IssueHandler 8 | runs-on: windows-latest 9 | steps: 10 | - uses: actions/checkout@main 11 | - name: IssueHandler 12 | uses: ScoopInstaller/GithubActions@main 13 | if: github.event.action == 'opened' || (github.event.action == 'labeled' && contains(github.event.issue.labels.*.name, 'verify')) 14 | env: 15 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 16 | -------------------------------------------------------------------------------- /.github/workflows/pull_request.yml: -------------------------------------------------------------------------------- 1 | on: 2 | pull_request_target: 3 | types: [opened] 4 | name: Pull Requests 5 | jobs: 6 | pullRequestHandler: 7 | name: PullRequestHandler 8 | runs-on: windows-latest 9 | steps: 10 | - uses: actions/checkout@main 11 | - name: PullRequestHandler 12 | uses: ScoopInstaller/GithubActions@main 13 | env: 14 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.sublime-workspace 2 | *~ 3 | ._* 4 | page.html 5 | checkver-*.html 6 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "MD013": false, 3 | "MD024": { 4 | "siblings_only": true 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "EditorConfig.EditorConfig", 4 | "ms-vscode.PowerShell" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Configure PSScriptAnalyzer settings 2 | { 3 | "[powershell]": { 4 | "editor.formatOnSave": true 5 | }, 6 | "powershell.scriptAnalysis.settingsPath": "PSScriptAnalyzerSettings.psd1", 7 | "powershell.codeFormatting.preset": "OTBS", 8 | "powershell.codeFormatting.alignPropertyValuePairs": true, 9 | "powershell.codeFormatting.ignoreOneLineBlock": true, 10 | "json.schemas": [ 11 | { 12 | "url": "https://raw.githubusercontent.com/ScoopInstaller/Scoop/master/schema.json", 13 | "fileMatch": [ 14 | "bucket/**/*.json" 15 | ] 16 | } 17 | ], 18 | "files.exclude": { 19 | "**/.git": true, 20 | "**/.svn": true, 21 | "**/.hg": true, 22 | "**/CVS": true, 23 | "**/.DS_Store": true, 24 | "**/tmp": true 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Scoop Bucket Template 2 | 3 | 4 | 5 | 6 | Template bucket for [Scoop](https://scoop.sh), the Windows command-line installer. 7 | 8 | ## How do I use this template? 9 | 10 | 1. Generate your own copy of this repository with the "Use this template" 11 | button. 12 | 2. Allow all GitHub Actions: 13 | - Navigate to `Settings` - `Actions` - `General` - `Actions permissions`. 14 | - Select `Allow all actions and reusable workflows`. 15 | - Then `Save`. 16 | 3. Allow writing to the repository from within GitHub Actions: 17 | - Navigate to `Settings` - `Actions` - `General` - `Workflow permissions`. 18 | - Select `Read and write permissions`. 19 | - Then `Save`. 20 | 4. Document the bucket in `README.md`. 21 | 5. Replace the placeholder repository string in `bin/auto-pr.ps1`. 22 | 6. Create new manifests by copying `bucket/app-name.json.template` to 23 | `bucket/.json`. 24 | 7. Commit and push changes. 25 | 8. If you'd like your bucket to be indexed on `https://scoop.sh`, add the 26 | topic `scoop-bucket` to your repository. 27 | 28 | ## How do I install these manifests? 29 | 30 | After manifests have been committed and pushed, run the following: 31 | 32 | ```pwsh 33 | scoop bucket add https://github.com// 34 | scoop install / 35 | ``` 36 | 37 | ## How do I contribute new manifests? 38 | 39 | To make a new manifest contribution, please read the [Contributing 40 | Guide](https://github.com/ScoopInstaller/.github/blob/main/.github/CONTRIBUTING.md) 41 | and [App Manifests](https://github.com/ScoopInstaller/Scoop/wiki/App-Manifests) 42 | wiki page. 43 | -------------------------------------------------------------------------------- /Scoop-Bucket.Tests.ps1: -------------------------------------------------------------------------------- 1 | if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Resolve-Path (scoop prefix scoop) } 2 | . "$env:SCOOP_HOME\test\Import-Bucket-Tests.ps1" 3 | -------------------------------------------------------------------------------- /bin/auto-pr.ps1: -------------------------------------------------------------------------------- 1 | param( 2 | # overwrite upstream param 3 | [String]$upstream = "/:main" 4 | ) 5 | 6 | if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Convert-Path (scoop prefix scoop) } 7 | $autopr = "$env:SCOOP_HOME/bin/auto-pr.ps1" 8 | $dir = "$PSScriptRoot/../bucket" # checks the parent dir 9 | & $autopr -Dir $dir -Upstream $Upstream @Args 10 | -------------------------------------------------------------------------------- /bin/checkhashes.ps1: -------------------------------------------------------------------------------- 1 | if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Convert-Path (scoop prefix scoop) } 2 | $checkhashes = "$env:SCOOP_HOME/bin/checkhashes.ps1" 3 | $dir = "$PSScriptRoot/../bucket" # checks the parent dir 4 | & $checkhashes -Dir $dir @Args 5 | -------------------------------------------------------------------------------- /bin/checkurls.ps1: -------------------------------------------------------------------------------- 1 | if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Convert-Path (scoop prefix scoop) } 2 | $checkurls = "$env:SCOOP_HOME/bin/checkurls.ps1" 3 | $dir = "$PSScriptRoot/../bucket" # checks the parent dir 4 | & $checkurls -Dir $dir @Args 5 | -------------------------------------------------------------------------------- /bin/checkver.ps1: -------------------------------------------------------------------------------- 1 | if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Convert-Path (scoop prefix scoop) } 2 | $checkver = "$env:SCOOP_HOME/bin/checkver.ps1" 3 | $dir = "$PSScriptRoot/../bucket" # checks the parent dir 4 | & $checkver -Dir $dir @Args 5 | -------------------------------------------------------------------------------- /bin/formatjson.ps1: -------------------------------------------------------------------------------- 1 | if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Convert-Path (scoop prefix scoop) } 2 | $formatjson = "$env:SCOOP_HOME/bin/formatjson.ps1" 3 | $path = "$PSScriptRoot/../bucket" # checks the parent dir 4 | & $formatjson -Dir $path @Args 5 | -------------------------------------------------------------------------------- /bin/missing-checkver.ps1: -------------------------------------------------------------------------------- 1 | if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Convert-Path (scoop prefix scoop) } 2 | $missing_checkver = "$env:SCOOP_HOME/bin/missing-checkver.ps1" 3 | $dir = "$PSScriptRoot/../bucket" # checks the parent dir 4 | & $missing_checkver -Dir $dir @Args 5 | -------------------------------------------------------------------------------- /bin/test.ps1: -------------------------------------------------------------------------------- 1 | #Requires -Version 5.1 2 | #Requires -Modules @{ ModuleName = 'BuildHelpers'; ModuleVersion = '2.0.1' } 3 | #Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.2.0' } 4 | 5 | $pesterConfig = New-PesterConfiguration -Hashtable @{ 6 | Run = @{ 7 | Path = "$PSScriptRoot/.." 8 | PassThru = $true 9 | } 10 | Output = @{ 11 | Verbosity = 'Detailed' 12 | } 13 | } 14 | $result = Invoke-Pester -Configuration $pesterConfig 15 | exit $result.FailedCount 16 | -------------------------------------------------------------------------------- /bucket/app-name.json.template: -------------------------------------------------------------------------------- 1 | { 2 | "##": "This file is a template. Fill the blanks and add or remove fields as necessary.", 3 | "version": "", 4 | "description": "", 5 | "homepage": "", 6 | "license": "", 7 | "notes": "", 8 | "architecture": { 9 | "64bit": { 10 | "url": "", 11 | "hash": "" 12 | }, 13 | "32bit": { 14 | "url": "", 15 | "hash": "" 16 | }, 17 | "arm64": { 18 | "url": "", 19 | "hash": "" 20 | } 21 | }, 22 | "pre_install": "", 23 | "installer": { 24 | "script": "" 25 | }, 26 | "post_install": [ 27 | "", 28 | "" 29 | ], 30 | "uninstaller": { 31 | "script": "" 32 | }, 33 | "bin": "", 34 | "env_add_path": [ 35 | "", 36 | "" 37 | ], 38 | "persist": [ 39 | "", 40 | "" 41 | ], 42 | "checkver": { 43 | "url": "", 44 | "regex": "" 45 | }, 46 | "autoupdate": { 47 | "architecture": { 48 | "64bit": { 49 | "url": "" 50 | }, 51 | "32bit": { 52 | "url": "" 53 | }, 54 | "arm64": { 55 | "url": "" 56 | } 57 | }, 58 | "hash": { 59 | "url": "", 60 | "regex": "" 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /deprecated/.gitkeep: -------------------------------------------------------------------------------- 1 | # This directory stores all the deprecated JSON manifests, which are not meant to be installed. 2 | # Delete this '.gitkeep' file once this directory has any files. 3 | -------------------------------------------------------------------------------- /scripts/.gitkeep: -------------------------------------------------------------------------------- 1 | # This directory stores helper files like shell scripts, registry entries etc. for installable applications. 2 | # Delete this '.gitkeep' file once this directory has any files. 3 | --------------------------------------------------------------------------------