From a30d8341399a2334adfecf95e5f4cadd8517f112 Mon Sep 17 00:00:00 2001
From: Sam Therapy <87501267+SamTherapy@users.noreply.github.com>
Date: Tue, 7 Mar 2023 17:35:49 +0000
Subject: [PATCH] Initial commit

---
 .editorconfig                              |  16 +++
 .gitattributes                             |   4 +
 .github/ISSUE_TEMPLATE/bug-report.yml      | 113 +++++++++++++++++++++
 .github/ISSUE_TEMPLATE/config.yml          |   5 +
 .github/ISSUE_TEMPLATE/hash-error.yml      |  19 ++++
 .github/ISSUE_TEMPLATE/package-request.yml |  52 ++++++++++
 .github/pull_request_template.md           |  15 +++
 .github/workflows/ci.yml                   |  59 +++++++++++
 .github/workflows/excavator.yml            |  17 ++++
 .github/workflows/issue_comment.yml        |  15 +++
 .github/workflows/issues.yml               |  15 +++
 .github/workflows/pull_request.yml         |  14 +++
 .gitignore                                 |   5 +
 .markdownlint.json                         |   6 ++
 .vscode/extensions.json                    |   6 ++
 .vscode/settings.json                      |  26 +++++
 LICENSE                                    |  24 +++++
 README.md                                  |  23 +++++
 Scoop-Bucket.Tests.ps1                     |   2 +
 bin/auto-pr.ps1                            |   9 ++
 bin/checkhashes.ps1                        |   4 +
 bin/checkurls.ps1                          |   4 +
 bin/checkver.ps1                           |   4 +
 bin/formatjson.ps1                         |   4 +
 bin/missing-checkver.ps1                   |   4 +
 bin/test.ps1                               |  15 +++
 bucket/app-name.json.template              |  63 ++++++++++++
 deprecated/.gitkeep                        |   2 +
 scripts/.gitkeep                           |   2 +
 29 files changed, 547 insertions(+)
 create mode 100644 .editorconfig
 create mode 100644 .gitattributes
 create mode 100644 .github/ISSUE_TEMPLATE/bug-report.yml
 create mode 100644 .github/ISSUE_TEMPLATE/config.yml
 create mode 100644 .github/ISSUE_TEMPLATE/hash-error.yml
 create mode 100644 .github/ISSUE_TEMPLATE/package-request.yml
 create mode 100644 .github/pull_request_template.md
 create mode 100644 .github/workflows/ci.yml
 create mode 100644 .github/workflows/excavator.yml
 create mode 100644 .github/workflows/issue_comment.yml
 create mode 100644 .github/workflows/issues.yml
 create mode 100644 .github/workflows/pull_request.yml
 create mode 100644 .gitignore
 create mode 100644 .markdownlint.json
 create mode 100644 .vscode/extensions.json
 create mode 100644 .vscode/settings.json
 create mode 100644 LICENSE
 create mode 100644 README.md
 create mode 100644 Scoop-Bucket.Tests.ps1
 create mode 100644 bin/auto-pr.ps1
 create mode 100644 bin/checkhashes.ps1
 create mode 100644 bin/checkurls.ps1
 create mode 100644 bin/checkver.ps1
 create mode 100644 bin/formatjson.ps1
 create mode 100644 bin/missing-checkver.ps1
 create mode 100644 bin/test.ps1
 create mode 100644 bucket/app-name.json.template
 create mode 100644 deprecated/.gitkeep
 create mode 100644 scripts/.gitkeep

diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..09a7419
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,16 @@
+# EditorConfig (is awesome): http://EditorConfig.org
+
+# * top-most EditorConfig file
+root = true
+
+# default style settings
+[*]
+charset = utf-8
+end_of_line = crlf
+indent_size = 4
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.{yml,yaml}]
+indent_size = 2
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..662a152
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,4 @@
+# Since Scoop is a Windows-only tool, we can safely use CRLF line endings for all text files.
+# If Git decides that the content is text, its line endings will be normalized to CRLF in the working tree on checkout.
+# In the Git index/repository the files will always be stored with LF line endings. This is fine.
+* text=auto eol=crlf
diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml
new file mode 100644
index 0000000..9f313b0
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -0,0 +1,113 @@
+name: 🐛 Bug Report
+description: Open an issue about a bug that needs fixing.
+title: "[Bug]: "
+labels: ["bug"]
+body:
+- type: checkboxes
+  attributes:
+    label: Prerequisites
+    options:
+    - label: I have written a descriptive issue title.
+      required: true
+    - label: I have searched all issues/PRs to ensure it has not already been reported or fixed.
+      required: true
+    - label: I have verified that I am using the latest version of Scoop and corresponding bucket.
+      required: true
+- type: input
+  attributes:
+    label: Package Name
+    description: Name of package (install name) which has bug(s)
+    placeholder: e.g. 7zip (not '7-Zip')
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Expected/Current Behaviour
+    description: A clear and concise description of what you expected to happen and what actually happen.
+    placeholder: I am experiencing a problem with X. I think Y should be happening but Z is actually happening.
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Steps to Reproduce
+    description: List of steps, sample code or failing test that reproduces the behavior.
+    render: console
+    placeholder: |
+      PS> scoop install tests/meson
+      Installing 'meson' (0.61.1) [64bit]
+      Loading meson-0.61.1-64.msi from cache.
+      Checking hash of meson-0.61.1-64.msi ... ok.
+      Extracting meson-0.61.1-64.msi ... done.
+      Running installer script...
+      Linking D:\Scoop\apps\meson\current => D:\Scoop\apps\meson\0.61.1
+      Creating shim for 'meson'.
+      Can't shim 'meson.exe': File doesn't exist.
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Possible Solution
+    description: Do you have some suggestions on a fix for the bug?
+    placeholder: I am experiencing a problem with X. I think Y should be happening but Z is actually happening.
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Scoop and Buckets Version
+    description: Paste verbatim output from `scoop --version` below.
+    render: console
+    placeholder: |
+      PS> scoop --version
+      Current Scoop version:
+      c60df9cd (HEAD -> develop, origin/develop) docs(changelog): Prepare for version 0.3.1 (#5248)
+
+      'extras' bucket:
+      ea314b213 (HEAD -> master, origin/master, origin/HEAD) lazygit: Update to version 0.36.0
+
+      'main' bucket:
+      c6e688d4d (HEAD -> master, origin/master, origin/HEAD) x265: Update to version 3.5+68-40e37bc
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Scoop Config
+    description: Paste verbatim output from `scoop config` below.
+    render: console
+    placeholder: |
+      PS> scoop config
+
+      last_update            : 2022/11/14 22:05:50
+      scoop_repo             : https://github.com/ScoopInstaller/Scoop
+      scoop_branch           : develop
+      use_lessmsi            : True
+      aria2-enabled          : True
+      aria2-warning-enabled  : False
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: PowerShell Version
+    description: Paste verbatim output from `$PSVersionTable` below.
+    render: console
+    placeholder: |
+      PS> $PSVersionTable
+
+      Name                           Value
+      ----                           -----
+      PSVersion                      7.3.0
+      PSEdition                      Core
+      GitCommitId                    7.3.0
+      OS                             Microsoft Windows 10.0.25236
+      Platform                       Win32NT
+      PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
+      PSRemotingProtocolVersion      2.3
+      SerializationVersion           1.1.0.1
+      WSManStackVersion              3.0
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Additional Softwares
+    description: List any additional software that you are using and may be related to this bug.
+  validations:
+    required: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..c8358cd
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: true
+contact_links:
+  - name: Scoop Community Support
+    url: https://github.com/ScoopInstaller/Scoop/discussions
+    about: Please ask Scoop related questions here.
diff --git a/.github/ISSUE_TEMPLATE/hash-error.yml b/.github/ISSUE_TEMPLATE/hash-error.yml
new file mode 100644
index 0000000..0214fd8
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/hash-error.yml
@@ -0,0 +1,19 @@
+name: 🔢 Hash Error
+description: Open an issue about a package's hash is incorrect.
+labels: ["bug"]
+body:
+- type: checkboxes
+  attributes:
+    label: Prerequisites
+    options:
+    - label: I have used the predefined issue title. (e.g. "xxx@xxx&#58; hash check failed")
+      required: true
+    - label: I have verified that I am using the latest version of Scoop and corresponding bucket.
+      required: true
+- type: input
+  attributes:
+    label: Package Name and Version
+    description: Name and version of package (install name) which has incorrect hash.
+    placeholder: e.g. 7zip@21.00 (not '7-Zip')
+  validations:
+    required: true
diff --git a/.github/ISSUE_TEMPLATE/package-request.yml b/.github/ISSUE_TEMPLATE/package-request.yml
new file mode 100644
index 0000000..c86901e
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/package-request.yml
@@ -0,0 +1,52 @@
+name: 📦 Package Request
+description: Open an issue about a missing package.
+title: "[Request]: "
+labels: ["package-request"]
+body:
+- type: checkboxes
+  attributes:
+    label: Prerequisites
+    options:
+    - label: I have searched all issues/PRs to ensure it has not already been reported or fixed.
+      required: true
+- type: checkboxes
+  attributes:
+    label: Criteria
+    description: For a package to be acceptable in this bucket, it should be
+    options:
+    - label: Criteria 1
+      required: true
+    - label: Criteria 2
+      required: true
+    - label: Criteria 3
+      required: true
+- type: input
+  attributes:
+    label: Name
+    description: Name of the package
+  validations:
+    required: true
+- type: input
+  attributes:
+    label: Description
+    description: Clear and concise details of what it is
+  validations:
+    required: true
+- type: input
+  attributes:
+    label: Homepage
+    description: URI of the package's homepage
+  validations:
+    required: true
+- type: input
+  attributes:
+    label: Download Link(s)
+    description: URI(s) of the package's download(s)
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Some Indication of Popularity/Repute
+    description: GitHub stars/software reviews etc.
+  validations:
+    required: true
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 0000000..f7dd672
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,15 @@
+<!-- Provide a general summary of your changes in the title above -->
+
+<!--
+  By opening this PR you confirm that you have searched for similar issues/PRs here already.
+  Failing to do so will most likely result in closing of this PR without any explanation.
+  It is also mandatory to open a relevant issue (either Package Request or Bug Report) for
+  discussion with the maintainers, before creating any new PR.
+  Read the contributing guide first to save both your and our time.
+-->
+
+Closes #XXXX
+<!-- or -->
+Relates to #XXXX
+
+- [ ] I have read the [Contributing Guide](https://github.com/ScoopInstaller/.github/blob/main/.github/CONTRIBUTING.md).
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..bc34823
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,59 @@
+name: Tests
+
+on:
+  push:
+    branches:
+      - 'main'
+      - 'master'
+  pull_request:
+  workflow_dispatch:
+
+jobs:
+  test_powershell:
+    name: WindowsPowerShell
+    runs-on: windows-latest
+    steps:
+      - name: Checkout Bucket
+        uses: actions/checkout@main
+        with:
+          fetch-depth: 2
+          path: my_bucket
+      - name: Checkout Scoop
+        uses: actions/checkout@main
+        with:
+          repository: ScoopInstaller/Scoop
+          path: scoop_core
+      - name: Init Test Suite
+        uses: potatoqualitee/psmodulecache@v5.1
+        with:
+          modules-to-cache: BuildHelpers
+          shell: powershell
+      - name: Test Bucket
+        shell: powershell
+        run: |
+          $env:SCOOP_HOME="$(Convert-Path '.\scoop_core')"
+          .\my_bucket\bin\test.ps1
+  test_pwsh:
+    name: PowerShell
+    runs-on: windows-latest
+    steps:
+      - name: Checkout Bucket
+        uses: actions/checkout@main
+        with:
+          fetch-depth: 2
+          path: my_bucket
+      - name: Checkout Scoop
+        uses: actions/checkout@main
+        with:
+          repository: ScoopInstaller/Scoop
+          path: scoop_core
+      - name: Init Test Suite
+        uses: potatoqualitee/psmodulecache@v5.1
+        with:
+          modules-to-cache: BuildHelpers
+          shell: pwsh
+      - name: Test Bucket
+        shell: pwsh
+        run: |
+          $env:SCOOP_HOME="$(Convert-Path '.\scoop_core')"
+          .\my_bucket\bin\test.ps1
diff --git a/.github/workflows/excavator.yml b/.github/workflows/excavator.yml
new file mode 100644
index 0000000..e5279eb
--- /dev/null
+++ b/.github/workflows/excavator.yml
@@ -0,0 +1,17 @@
+on:
+  workflow_dispatch:
+  schedule:
+    # run every 4 hours
+    - cron: '20 */4 * * *'
+name: Excavator
+jobs:
+  excavate:
+    name: Excavate
+    runs-on: windows-latest
+    steps:
+      - uses: actions/checkout@main
+      - name: Excavate
+        uses: ScoopInstaller/GithubActions@main
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          SKIP_UPDATED: 1
diff --git a/.github/workflows/issue_comment.yml b/.github/workflows/issue_comment.yml
new file mode 100644
index 0000000..24b9018
--- /dev/null
+++ b/.github/workflows/issue_comment.yml
@@ -0,0 +1,15 @@
+on:
+  issue_comment:
+    types: [created]
+name: Commented Pull Request
+jobs:
+  pullRequestHandler:
+    name: PullRequestHandler
+    runs-on: windows-latest
+    steps:
+      - uses: actions/checkout@main
+      - name: PullRequestHandler
+        uses: ScoopInstaller/GithubActions@main
+        if: startsWith(github.event.comment.body, '/verify')
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml
new file mode 100644
index 0000000..0c8b859
--- /dev/null
+++ b/.github/workflows/issues.yml
@@ -0,0 +1,15 @@
+on:
+  issues:
+    types: [opened, labeled]
+name: Issues
+jobs:
+  issueHandler:
+    name: IssueHandler
+    runs-on: windows-latest
+    steps:
+      - uses: actions/checkout@main
+      - name: IssueHandler
+        uses: ScoopInstaller/GithubActions@main
+        if: github.event.action == 'opened' || (github.event.action == 'labeled' && contains(github.event.issue.labels.*.name, 'verify'))
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
new file mode 100644
index 0000000..a726acb
--- /dev/null
+++ b/.github/workflows/pull_request.yml
@@ -0,0 +1,14 @@
+on:
+  pull_request:
+    types: [opened]
+name: Pull Requests
+jobs:
+  pullRequestHandler:
+    name: PullRequestHandler
+    runs-on: windows-latest
+    steps:
+      - uses: actions/checkout@main
+      - name: PullRequestHandler
+        uses: ScoopInstaller/GithubActions@main
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c221b4a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+*.sublime-workspace
+*~
+._*
+page.html
+checkver-*.html
diff --git a/.markdownlint.json b/.markdownlint.json
new file mode 100644
index 0000000..ef592cf
--- /dev/null
+++ b/.markdownlint.json
@@ -0,0 +1,6 @@
+{
+  "MD013": false,
+  "MD024": {
+    "siblings_only": true
+  }
+}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..a9056e4
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,6 @@
+{
+    "recommendations": [
+        "EditorConfig.EditorConfig",
+        "ms-vscode.PowerShell"
+    ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..cbcd227
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,26 @@
+// Configure PSScriptAnalyzer settings
+{
+    "[powershell]": {
+        "editor.formatOnSave": true
+    },
+    "powershell.scriptAnalysis.settingsPath": "PSScriptAnalyzerSettings.psd1",
+    "powershell.codeFormatting.preset": "OTBS",
+    "powershell.codeFormatting.alignPropertyValuePairs": true,
+    "powershell.codeFormatting.ignoreOneLineBlock": true,
+    "json.schemas": [
+        {
+            "url": "https://raw.githubusercontent.com/ScoopInstaller/Scoop/master/schema.json",
+            "fileMatch": [
+                "bucket/*.json"
+            ]
+        }
+    ],
+    "files.exclude": {
+        "**/.git": true,
+        "**/.svn": true,
+        "**/.hg": true,
+        "**/CVS": true,
+        "**/.DS_Store": true,
+        "**/tmp": true
+    }
+}
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..fdddb29
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <https://unlicense.org>
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..9d53217
--- /dev/null
+++ b/README.md
@@ -0,0 +1,23 @@
+# Scoop Bucket Template
+
+<!-- Uncomment the following line after replacing placeholders -->
+<!-- [![Tests](https://github.com/<username>/<bucketname>/actions/workflows/ci.yml/badge.svg)](https://github.com/<username>/<bucketname>/actions/workflows/ci.yml) [![Excavator](https://github.com/<username>/<bucketname>/actions/workflows/excavator.yml/badge.svg)](https://github.com/<username>/<bucketname>/actions/workflows/excavator.yml) -->
+
+Template bucket for [Scoop](https://scoop.sh), the Windows command-line installer.
+
+How do I install these manifests?
+---------------------------------
+
+To add this bucket, run `scoop bucket add <bucketname> https://github.com/<username>/<bucketname>`. To install, do `scoop install <manifest>`.
+
+How do I contribute new manifests?
+----------------------------------
+
+To make a new manifest contribution, please read the [Contributing Guide](https://github.com/ScoopInstaller/.github/blob/main/.github/CONTRIBUTING.md).
+
+----
+
+#### To use this template
+
+- Modify the Readme.md and the bin/auto-pr.ps1 files accordingly.
+- Enable GitHub Actions for this repository.
diff --git a/Scoop-Bucket.Tests.ps1 b/Scoop-Bucket.Tests.ps1
new file mode 100644
index 0000000..5e620e8
--- /dev/null
+++ b/Scoop-Bucket.Tests.ps1
@@ -0,0 +1,2 @@
+if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Resolve-Path (scoop prefix scoop) }
+. "$env:SCOOP_HOME\test\Import-Bucket-Tests.ps1"
diff --git a/bin/auto-pr.ps1 b/bin/auto-pr.ps1
new file mode 100644
index 0000000..3a91818
--- /dev/null
+++ b/bin/auto-pr.ps1
@@ -0,0 +1,9 @@
+param(
+    # overwrite upstream param
+    [String]$upstream = "<username>/<bucketname>:main"
+)
+
+if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Convert-Path (scoop prefix scoop) }
+$autopr = "$env:SCOOP_HOME/bin/auto-pr.ps1"
+$dir = "$PSScriptRoot/../bucket" # checks the parent dir
+& $autopr -Dir $dir -Upstream $Upstream @Args
diff --git a/bin/checkhashes.ps1 b/bin/checkhashes.ps1
new file mode 100644
index 0000000..6e7e052
--- /dev/null
+++ b/bin/checkhashes.ps1
@@ -0,0 +1,4 @@
+if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Convert-Path (scoop prefix scoop) }
+$checkhashes = "$env:SCOOP_HOME/bin/checkhashes.ps1"
+$dir = "$PSScriptRoot/../bucket" # checks the parent dir
+& $checkhashes -Dir $dir @Args
diff --git a/bin/checkurls.ps1 b/bin/checkurls.ps1
new file mode 100644
index 0000000..4895d54
--- /dev/null
+++ b/bin/checkurls.ps1
@@ -0,0 +1,4 @@
+if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Convert-Path (scoop prefix scoop) }
+$checkurls = "$env:SCOOP_HOME/bin/checkurls.ps1"
+$dir = "$PSScriptRoot/../bucket" # checks the parent dir
+& $checkurls -Dir $dir @Args
diff --git a/bin/checkver.ps1 b/bin/checkver.ps1
new file mode 100644
index 0000000..9bce8b4
--- /dev/null
+++ b/bin/checkver.ps1
@@ -0,0 +1,4 @@
+if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Convert-Path (scoop prefix scoop) }
+$checkver = "$env:SCOOP_HOME/bin/checkver.ps1"
+$dir = "$PSScriptRoot/../bucket" # checks the parent dir
+& $checkver -Dir $dir @Args
diff --git a/bin/formatjson.ps1 b/bin/formatjson.ps1
new file mode 100644
index 0000000..2766bbc
--- /dev/null
+++ b/bin/formatjson.ps1
@@ -0,0 +1,4 @@
+if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Convert-Path (scoop prefix scoop) }
+$formatjson = "$env:SCOOP_HOME/bin/formatjson.ps1"
+$path = "$PSScriptRoot/../bucket" # checks the parent dir
+& $formatjson -Dir $path @Args
diff --git a/bin/missing-checkver.ps1 b/bin/missing-checkver.ps1
new file mode 100644
index 0000000..e375704
--- /dev/null
+++ b/bin/missing-checkver.ps1
@@ -0,0 +1,4 @@
+if (!$env:SCOOP_HOME) { $env:SCOOP_HOME = Convert-Path (scoop prefix scoop) }
+$missing_checkver = "$env:SCOOP_HOME/bin/missing-checkver.ps1"
+$dir = "$PSScriptRoot/../bucket" # checks the parent dir
+& $missing_checkver -Dir $dir @Args
diff --git a/bin/test.ps1 b/bin/test.ps1
new file mode 100644
index 0000000..5c64841
--- /dev/null
+++ b/bin/test.ps1
@@ -0,0 +1,15 @@
+#Requires -Version 5.1
+#Requires -Modules @{ ModuleName = 'BuildHelpers'; ModuleVersion = '2.0.1' }
+#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.2.0' }
+
+$pesterConfig = New-PesterConfiguration -Hashtable @{
+    Run    = @{
+        Path     = "$PSScriptRoot/.."
+        PassThru = $true
+    }
+    Output = @{
+        Verbosity = 'Detailed'
+    }
+}
+$result = Invoke-Pester -Configuration $pesterConfig
+exit $result.FailedCount
diff --git a/bucket/app-name.json.template b/bucket/app-name.json.template
new file mode 100644
index 0000000..e3bbbd2
--- /dev/null
+++ b/bucket/app-name.json.template
@@ -0,0 +1,63 @@
+{
+    "##": "This file is a template. Fill the blanks and add or remove fields as necessary.",
+    "version": "",
+    "description": "",
+    "homepage": "",
+    "license": "",
+    "notes": "",
+    "architecture": {
+        "64bit": {
+            "url": "",
+            "hash": ""
+        },
+        "32bit": {
+            "url": "",
+            "hash": ""
+        },
+        "arm64": {
+            "url": "",
+            "hash": ""
+        }
+    },
+    "pre_install": "",
+    "installer": {
+        "script": ""
+    },
+    "post_install": [
+        "",
+        ""
+    ],
+    "uninstaller": {
+        "script": ""
+    },
+    "bin": "",
+    "env_add_path": [
+        "",
+        ""
+    ],
+    "persist": [
+        "",
+        ""
+    ],
+    "checkver": {
+        "url": "",
+        "regex": ""
+    },
+    "autoupdate": {
+        "architecture": {
+            "64bit": {
+                "url": ""
+            },
+            "32bit": {
+                "url": ""
+            },
+            "arm64": {
+                "url": ""
+            }
+        },
+        "hash": {
+            "url": "",
+            "regex": ""
+        }
+    }
+}
diff --git a/deprecated/.gitkeep b/deprecated/.gitkeep
new file mode 100644
index 0000000..0a1c7c4
--- /dev/null
+++ b/deprecated/.gitkeep
@@ -0,0 +1,2 @@
+# This directory stores all the deprecated JSON manifests, which are not meant to be installed.
+# Delete this '.gitkeep' file once this directory has any files.
diff --git a/scripts/.gitkeep b/scripts/.gitkeep
new file mode 100644
index 0000000..2f6a3f6
--- /dev/null
+++ b/scripts/.gitkeep
@@ -0,0 +1,2 @@
+# This directory stores helper files like shell scripts, registry entries etc. for installable applications.
+# Delete this '.gitkeep' file once this directory has any files.
